第37课 · 让程序插个队:中断 EI/DI/IRET

信捷指令讲堂 · 6 段 · 共 3:50 · 正文 1183 字 · 完全免费

一个几毫秒的脉冲,扫描一圈就过去了,程序根本来不及看见。中断就是让重要的事插队——这节课讲怎么给程序开这个"插队通道"。

完整课程 · 智慧屏 + 数字人讲师加载较慢?先看下面的图文
正在加载数字人讲师 …
首次打开约需 30~60 秒(3D 模型较大,只在电脑上加载)
加载期间可以先往下看图文讲解
这台设备暂时跑不了完整课程需要支持 WebGL 的浏览器(多数电脑浏览器都支持)
下面是同一节课的图文讲解 + 音频,内容完全一样

📱 手机上看不到完整课程(数字人讲师需要电脑浏览器的 3D 支持)。下面是这节课的图文讲解 + 音频,内容完全一样,手机上也能完整学完。想体验完整课程,用电脑打开这一页即可。
仍然在手机上试试完整课程

1/6

让程序插个队

0:39

让程序插个队

  • 为什么要中断窄脉冲,扫描一圈就过去了
  • 怎么理解主程序停手,去执行一小段
  • 两大类外部中断 与 定时中断
  • ★ 写在哪FEND 之后,IRET 结束
让程序插个队:中断 EI/DI/IRET · 让程序插个队 梯形图 按一下 X2,它就插队执行

按一下 X2,它就插队执行

前面所有程序都是从前往后、一圈一圈扫描的。可有些事等不起:八毫秒的窄脉冲,扫描一圈就过去了。中断就是让程序插队——事情来了,主程序马上停手,转去执行一小段专门的程序,执行完再回来,不受扫描周期限制。中断分两类:由输入端子触发的叫外部中断,按固定时间自己触发的叫定时中断。中断程序写在主程序结束之后:末尾写 FEND,后面跟中断标号,处理完用 IRET 结束。画面里按下 X2,程序就把 D0 加一。

2/6

哪个端子对哪个标号

0:42

哪个端子对哪个标号

  • 一张表X2 到 X13 各一个标号
  • ★ 上升下降各一个X2 上升 I0000、下降 I0001
  • 记法端子号减二,再乘一百
  • 禁止某一路SM050 起,每路加一
让程序插个队:中断 EI/DI/IRET · 哪个端子对哪个标号 梯形图 三个端子,三个标号

三个端子,三个标号

标号怎么定?手册给了一张表:X2 到 X7、X10 到 X13,每个端子对应一个标号。上升沿和下降沿各占一个:X2 的上升沿是 I 零零零零,下降沿是 I 零零零一。X3 是 I 零一零零,往后每一路加一百,一直到 X13 的 I 零九零零。记法是端子号减二,再乘一百。不想让某一路进来,就接通它的禁止继电器,X2 那一路是 SM050,往后每路加一。三个端子各按一下,三个计数器各加一。

3/6

不用按钮,它自己来

0:35

不用按钮,它自己来

  • 不用外部信号按时间自己触发
  • 二十路I40 开头到 I59 开头
  • ★ 后两位写时间I4010 就是每 10ms
  • 两个注意一路上只用一个时间
让程序插个队:中断 EI/DI/IRET · 不用按钮,它自己来 梯形图 不用按钮,每十毫秒自己来

不用按钮,每十毫秒自己来

第二类中断按时间自己触发,叫定时中断。标号从 I 四零开头到 I 五九开头,二十路。后两位是时间,单位毫秒,写一到九十九,比如 I 四零一零,就是第一路、每十毫秒一次。它同样写在 FEND 之后,用 IRET 结束。要注意:同一个定时中断只能用一个时间,写了 I 四零一零,就不能再写 I 四零五零;时基能切到一百微秒,但只有 I 五九那一路支持。不用按任何按钮,读数条每隔十毫秒自己加一。

4/6

不想让它进来怎么办

0:38

不想让它进来怎么办

  • 为什么要禁正算着账,不想被岔开
  • ★ 禁止继电器定时 SM070 起,外部 SM050 起
  • DI 到 EI这一段所有中断都不响应
  • 最常用的办法什么都不写
让程序插个队:中断 EI/DI/IRET · 不想让它进来怎么办 梯形图 合上 M0,它就不来了

合上 M0,它就不来了

不是所有时候都欢迎中断。正在算一笔要紧的账,就不想被岔开。办法有三条。第一条是禁止继电器:每一路都配了一个。定时中断从 SM070 起,一路一个;外部中断从 SM050 起。要把哪一路关掉,就把对应那个继电器接通。第二条是 DI 和 EI 两条指令:DI 到 EI 之间这一段,所有中断都不响应。第三条最常用,就是什么都不写:可编程控制器平时就呈允许中断状态。画面里 M0 一合上,倒数就停住了。

5/6

八毫秒的窄脉冲

0:39

八毫秒的窄脉冲

  • 问题的根子8ms 脉冲碰上 10ms 滤波
  • 手册的解法把计数放进中断里
  • 数满就置位数满三十,置 M0
  • 一轮结束要复位X1 一响,全复位
让程序插个队:中断 EI/DI/IRET · 八毫秒的窄脉冲 梯形图 数到三十,机械手动作

数到三十,机械手动作

手册有个包装线的例子:每检测到三十个产品,机械手动作一次。麻烦在于传送带跑得快,传感器每次只导通八毫秒,而输入点的默认滤波时间是十毫秒,用普通计数器,大部分脉冲会被滤掉。手册的解法是把计数放进外部中断里:X2 一有上升沿立刻计数,不受扫描周期影响。数满三十,把标志位 M0 置位,主程序看到 M0 就让机械手动作。包完了,X1 一响,把输出和标志一起复位,等下一批。画面里数到三十个,机械手就动作。

6/6

碰到一个点,换一次速度

0:37

碰到一个点,换一次速度

  • 难题三段速度不同,换速点不固定
  • 三只接近开关接到 X2、X3、X4
  • 中断里改频率HD0 一改,速度就变
  • 到终点急停复位启动位,脉冲停
让程序插个队:中断 EI/DI/IRET · 碰到一个点,换一次速度 梯形图 碰到 A 点,自动换速度

碰到 A 点,自动换速度

再看手册一个例子:工作台走三段工位,每段速度不一样,换速的位置还会变。办法是在三个位置各装一个接近开关,接到 X2、X3、X4,正好是外部中断端子。脉冲用 PLSF 发,频率放在 HD0 里。一开始 HD0 装一万赫兹,往 A 点走;碰到 A 点的 X2,中断立刻把 HD0 改成三万;碰到 B 点的 X3,改成两万;碰到 C 点的 X4,复位启动位,脉冲停止。画面里碰到 A 点,频率换成三万。

想亲手试一下?

这门课的电路,已经给你摆好了。不用装软件,点开就能按按钮、看线圈亮。