Skip to content

四、中断 ​

中断让 PLC 在扫描周期之外立即响应事件,不受扫描周期(通常几毫秒)的延迟影响。需要抓窄脉冲、做固定周期采样、或者在脉冲输出结束的瞬间做动作时,用中断。

中断服务程序写在 FEND 之后,以 IRET 结束,并且要用 EI 打开中断。上电时中断默认处于禁止状态。

LD   M8000
EI                  ; 允许中断
...主程序...
FEND

I001                ; X000 上升沿中断入口
LD   M8000
SET  M100
IRET
END

中断类型一览 ​

类型指针数量说明
输入中断I000/I001 … I500/I5016 点对应 X000~X005,末位 1=上升沿、0=下降沿
定时中断I601~I699 / I701~I799 / I801~I8993 路后两位就是周期毫秒数,1~99ms
高速计数中断I010、I020、I030、I040、I050、I0606 路高速计数器计到设定值时触发

定时中断周期就是指针的后两位

I605 = 每 5ms 执行一次,I720 = 每 20ms 执行一次。三路定时中断可以同时用,周期各自独立。

输入中断只有 X000~X005

比 X005 更高的输入点没有中断能力,只能靠扫描读取。要抓的信号必须接到 X000~X005 上。

中断禁止标志 ​

每个中断都有一个对应的 M 标志用来单独屏蔽。标志为 ON 时禁止该中断(注意是反逻辑):

标志屏蔽的中断
M8050I00□(X000)
M8051I10□(X001)
M8052I20□(X002)
M8053I30□(X003)
M8054I40□(X004)
M8055I50□(X005)
M8056I6□□ 定时中断 0
M8057I7□□ 定时中断 1
M8058I8□□ 定时中断 2
M8059I010~I060 全部高速计数中断

EI / DI 是总开关,M805x 是各路的分开关,两者都要满足才会响应。

脉冲输出完成怎么判断 ​

PLSY / PLSR / DRVI / DRVA 这类脉冲输出指令,把设定脉冲数发完时置位 M8029(指令完成标志)。在主程序里检测 M8029 即可衔接下一段动作:

梯形图:与下方指令表同一段程序

LD   M8029
SET  M200          ; 本段定位完成

I502~I506 不支持

I502~I506 这五个「脉冲输出完成中断」指针位本机不支持,写了中断服务程序也不会被执行。请改用 M8029 判断脉冲输出是否完成,不要依赖这组中断。

中断服务程序里的注意事项 ​

  • 中断程序要短。中断执行期间扫描是停住的,中断里做大量运算或通讯会拖长扫描周期,严重时触发看门狗(D8000,默认 200ms)
  • 中断服务程序不能写在 STL 步进区内(STL 区里禁止使用 I 指针、SRET、IRET)
  • 同一个中断指针只能定义一次
  • 定时中断周期填 1(即 I601)意味着每毫秒进一次中断,梯形图稍长即会占满 CPU。除非确有必要,周期建议 ≥5ms
  • 中断响应期间会置位「正在执行中断」标志,中断不会互相嵌套,后来的中断请求会排到下一次处理

STM32 版定时中断最小 10ms

早期 STM32 版的定时中断底层是 10ms 时基,周期只能填 10~99。ESP32 版换成了 1ms 时基,1~99 都有效。老程序从 STM32 移到 ESP32 上不用改;反过来把 I605 这类写法拿到 STM32 版上要注意。

实用例程 ​

梯形图:与下方指令表同一段程序

LD M8002
ORP X0
ORF X0
OR M114
ZRST D41 D47
ZRST M100 M107
ZRST S0 S100
LD X6
OR X7
AND X0
AND M60
ANDD= K8S0 K0
ANDD= K8S31 K0
SET S0
STL S0
LD S0
SET S20
STL S20
LD S20
SET M100
OUT T11 K150
LD T11
MPS
AND M51
OUT S21
MPP
ANI M51
OUT S22
RET
END

把上面的地址、主题、引脚替换成你项目里的即可。

不支持脉冲捕捉 ​

三菱 FX 有一组 M8170~M8177 脉冲捕捉标志(比扫描周期还窄的脉冲会被硬件锁存到 M 里)。本机不支持这组标志,写了也不会起作用。要抓窄脉冲请用上面的输入中断,或者用高速计数器。


LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研