讨论

abb IF指令里能不能直接判断DI信号?

jiew81
jiew81
2026/04/03 08:17

另外顺带问一下,如果IF不能直接判断IO,那常规做法是把DI读到一个num变量里再判断?还是直接用WAIT等到信号来了再继续往下走?这俩在实际项目里哪个用得多一点。

13 4

全部回复 (4)

zbh1979
zbh1979#1

IF里能直接判断DI的,标准写法就是IF DI_10=1 THEN,后面跟你要执行的指令就行,不用绕一圈读到num再判断,多此一举。不过注意一下DI_10这种带下划线的写法是旧版本RAPID的习惯,现在新版本比如RobotWare 6以上的,定义IO的时候系统会自动生成名字,你直接在示教器flexPendant的IO列表里看实际叫什么就行,别死记DI_10。

2026/04/03 12:38
2801209588
2801209588#2

提醒一下你DI刷新周期的问题,IF判断IO是一次性扫描当时的瞬时状态,如果信号是那种脉冲很短的,比如PLC只给50ms的允许信号,你IF判断的时候可能刚好错过。这种情况老老实实用WAIT指令等,或者把信号做个自锁,别图省事直接IF,真到了现场调试的时候这种坑会坑死人。

2026/04/05 16:11
凯姐
凯姐#3

我们厂里类似的小项目都是直接IF判断DI,没出过问题,简单直接。但有个前提是你的安全相关信号别走IF走WAIT,安全回路老老实实用专门的SafeMove或者硬接线急停,别图省事,安全的东西省不得。

2026/04/07 23:36
jun99
jun99#4

你那个搬运案子PLC给的是常闭信号还是常开?常闭的话IF里写=0,别拿过来直接判断=1,到时候调试反了头都大。

2026/04/08 11:31