- 施耐德电气那标志性的橙色,不仅融入品牌 LOGO,也是工程师在 DCS 机柜间常见之色。当这抹橙色出现在 Modicon PLC 标签上,背后承载着自 1968 年传承至今的一整套编程指令体系。从早期的 19 条梯形图指令,发展到 2025 年支持多核实时运行的 300 多条指令,它们如同乐高积木,经一代代工程师之手,构建起炼油塔、空客总装线、冬奥造雪机等设备的控制核心。接下来,通过 30 个问题,带你快速解锁施耐德 PLC 指令的奥秘。
(Modicon M580 / M340 / Quantum 通用,固件≥ SV4.40)
1. 逻辑类指令
-
问:LD 和 LDNC 有何区别?
-
答:LD 用于获取常开触点状态,而 LDNC 则用于获取常闭触点状态。LDNC 在母线起始位置对信号取反后再装入累加器。
-
问:AND 与 ANDN 该如何使用?
-
答:AND 用于串联常开触点,ANDN 用于串联常闭触点。这两条指令每次仅对 1 位进行操作,并会影响 CCVO 状态位。
-
问:OR 和 ORN 的作用呢?
-
答:OR 用于并联常开触点,ORN 用于并联常闭触点。编译后,它们生成同一字节内的位或运算。
-
问:梯形图中若要实现 “异或” 功能怎么办?
-
答:可调用 XOR 指令,该指令支持 1 位、8 位、16 位、32 位等不同宽度的数据运算,运算结果会放回累加器。
2. 输出与置位复位指令
-
问:ST 指令能否直接写入物理输出?
-
答:可以,但必须先将其映射到 % Q * 内存区域,写入后会立即刷新到输出模块。
-
问:STN 指令会使线圈 “置反” 吗?
-
答:是的,STN 指令会将累加器中的结果取反后再写入,相当于实现 “常闭线圈” 功能。
-
问:置位 - 复位指令中,哪个更具优势?
-
答:S 指令用于置位,R 指令用于复位,两者均可带有条件。若同一地址存在多处 S/R 指令,后扫描到的指令生效。
3. 控制类指令
-
问:DRUM 指令的功能是什么?
-
答:DRUM 指令是步序控制器,一次最多可设置 32 步,每步能够定义 16 个输出掩码,可实现自动顺序启动或停止。
-
问:FOR 循环如何编写?
-
答:编写格式为 FOR i := 1 TO 10 BY 2 DO … END_FOR; 其中,i 可以是 INT 或 DINT 类型,步长可以省略,默认值为 1。
-
问:WHILE 和 REPEAT 有什么区别?
-
答:WHILE 是先判断条件后执行循环体,REPEAT 则是先执行循环体后判断条件,两者都支持通过布尔表达式退出循环。
-
问:JMP 指令能否跨 POU 跳转?
-
答:不能,JMP 指令仅能在本任务段内进行跳转。若要跨 POU 跳转,需使用 CAL/RET 指令。
-
问:CAL 调用功能块时可携带多少个参数?
-
答:理论上可携带 255 个参数,但实际受堆栈 32 KB 限制,建议携带参数数量小于 32 个。
-
问:RET 指令是否必须编写?
-
答:在 FB(功能块)内部,RET 指令可缺省,最后一句默认 RET。而在 FC(功能)中,则需要显式编写 RET 指令并返回值。
4. 定时器与计数器指令
-
问:TON 与 TOF 的最小时基是多少?
-
答:最小时基为 1 ms。但当扫描周期小于 1 ms 时,仍会以 1 ms 向上取整。
-
问:TP 脉冲定时器能否自动复位?
-
答:不能,必须由外部使 IN = 0 才能重新触发,其输出脉宽等于设定值。
-
问:CTU 的计数上限是多少?
-
答:CTU 的计数上限为 UINT 65535,达到上限后,当前计数值 CV 保持不变,QU 置 1,需通过 R 端进行复位。
-
问:CTD 向下计数能否达到负数?
-
答:不会,CTD 减到 0 后停止计数,此时 QD 置 1。LOAD 端可重载初始值。
5. 通信与数据处理指令
-
问:ADDM 指令的用途是什么?
-
答:ADDM 指令用于将 IP: 端口字符串转换为内部 ADDM 结构,以供 READ_VAR / WRITE_VAR 调用。
-
问:READ_VAR 一次最多能读取多少字?
-
答:一次最多可读取 125 个寄存器(2000 位),若超过该数量则需分包循环读取。
-
问:WRITE_VAR 支持 03 功能码吗?
-
答:WRITE_VAR 仅支持 06/16 功能码。若设备仅支持 03 功能码,需改用 DATA_EXCH 自建 PDU。
-
问:DATA_EXCH 指令有什么优点?
-
答:DATA_EXCH 指令可发送任意功能码,支持 raw PDU,但需要手动计算 CRC/HEAD。
-
问:INT_TO_REAL 会进行四舍五入吗?
-
答:不会,INT_TO_REAL 只是直接补零扩展。若要进行舍入操作,需先使用 INT_TO_DINT,再使用 DINT_TO_REAL。
-
问:SHL 与 ROL 有何差别?
-
答:SHL 操作时,空位补 0;ROL 则是循环移位,最低位等于最高位移出的值。
-
问:FIFO 指令的容量是多少?
-
答:FIFO 指令最大容量为 4096 字,深度可设置。当发生溢出时,状态位 FIFO_O = 1。
6. 其他指令
-
问:SBO 与 SHO 有什么区别?
-
答:SBO 用于置位输出,SHO 用于输出短脉冲。SHO 输出会自动断开,脉冲宽度为 1 个扫描周期。
-
问:BLINK 指令占用系统资源吗?
-
答:每个 BLINK 实例占用 8 字节系统资源,最小周期为 1 ms。由于高频使用会占用较多资源,建议使用频率小于 1 kHz。
-
问:PIDFF 与 PID 有何差别?
-
答:PIDFF 带有前馈通道,Kff 值可设置,适用于大滞后且存在可测扰动的系统。
-
问:IL 语言现在还能使用吗?
-
答:虽然 IEC 61131 - 3 标准保留了 IL 语言,但施耐德官方推荐转换为 ST/FBD 语言,且不再为 IL 语言追加新特性。
-
问:安全 CPU 的指令有什么差别?
-
答:安全 CPU 与普通指令集完全兼容,但对于安全 I/O,仅能使用 SF_前缀的功能块,且需要 XLS 授权。
-
问:在哪里可以下载最新的指令表?
-
答:可在官网搜索文档号 33003137.13(M580)/ 35010829.10(Quantum),PDF 文档会随固件同步更新。


