恭喜,你发布的帖子
发布于 2016-10-18 09:30:13
3楼
原理:SFC51可以读取期望的从站状态,即你硬件组态里组态了多少从站。然后读取当前CPU能正常通讯到的从站,然后以比较就可以知道哪些从站CPU识别不到但是硬件组态里是有的。
A #REQ_EXPTECED
JCN a0b0
L W#16#92 //按F1查看SZL_ID = 92 hex时代表的意思,代表你组态了多少从站,期望值
T #SZL_ID
a0b0: NOP 0
A #REQ_CURRENT
JCN a1b0
L W#16#292 //按F1查看SZL_ID = 292 hex时代表的意思,代表CPU识别了多少从站,当前值
T #SZL_ID
a1b0: NOP 0
A #REQ
JCN a0b1
CALL "RDSYSST"
REQ :=#REQ
SZL_ID :=#SZL_ID
INDEX :=#MASTER_ID
RET_VAL :=#SFC51_RET
BUSY :=#BUSY
SZL_HEADER:=#SZL_HEADER
DR :=#SZL_DR
a0b1: NOP 0
A(
L #SZL_ID
L W#16#92
==I
)
AN #BUSY
JCN a0b2
L #SZL_DR[1]
T #DP_SLAVE_EXPECTED[1] //返回的期望值,1~32号从站
L #SZL_DR[2]
T #DP_SLAVE_EXPECTED[2] //返回的期望值,33~64号从站
L #SZL_DR[3]
T #DP_SLAVE_EXPECTED[3]
L #SZL_DR[4]
T #DP_SLAVE_EXPECTED[4]
a0b2: NOP 0
A(
L #SZL_ID
L W#16#292
==I
)
AN #BUSY
JCN a0b3
L #SZL_DR[1]
T #DP_SLAVE_CURRENT[1] //返回的当前值1~32号
L #SZL_DR[2]
T #DP_SLAVE_CURRENT[2]
L #SZL_DR[3]
T #DP_SLAVE_CURRENT[3]
L #SZL_DR[4]
T #DP_SLAVE_CURRENT[4]
a0b3: NOP 0
L L#0
T #DP_SLAVE_FAULT[1] // 有故障的从站号1~32,先清零
T #DP_SLAVE_FAULT[2]
T #DP_SLAVE_FAULT[3]
T #DP_SLAVE_FAULT[4]
L #DP_SLAVE_EXPECTED[1] //组态的从站比较当前CPU识别的从站
L #DP_SLAVE_CURRENT[1]
XOD
L #DP_SLAVE_FAULT[1] //得到当前有故障的从站
OD
L #DP_SLAVE1_32_DEACTIVE //这个从站虽然有故障,但是操作员是否激活监视该从站
INVD
AD
T #DP_SLAVE_FAULT[1] // 如果激活了。HMI将显示该从站故障
T #FAULT_SLAVE1_32
请填写推广理由:
分享
只看
楼主