通讯诊断程序如下:
SET
SAVE
= L 8.1(问题:在变量表中没有任何temp的地址是8.1,为什么?)
L #dp_adress(注:接FB125的SLAVE_ADR,即故障站点地址)
L #dp_error (注:接被检测站点地址)
== I
A #work(注:接PLC系统状态点M0.1)
JCN A7d0
SET
= #fault
A7d0: CLR (问题:前面是在RLO=0时(JCNA7d0)才跳转到A7d0的,为什么还要 CLR?)
A #reset(问题:“与”的结果是什么?)
JCN A7d1
CLR
= #fault
A7d1: CLR(问题:前面是在RLO=0时(JCNA7d1)才跳转到A7d1的,为什么还要CLR?)
A L 8.1(问题:这个L8.1在程序里起了什么作用?)
SAVE(问题:在实时监控看到RLO=1,为什么?)
BE
最佳答案
SET
SAVE
= L 8.1(问题:在变量表中没有任何temp的地址是8.1,为什么?)
//L 8.1是程序块接口区的变量,不是变量表中的变量!不一定是temp型变量,也可能是IN/OUT/IN_OUT型,看一下该程序块的接口区变量即可。
L #dp_adress(注:接FB125的SLAVE_ADR,即故障站点地址)
L #dp_error (注:接被检测站点地址)
== I
A #work(注:接PLC系统状态点M0.1)
JCN A7d0
SET
= #fault
A7d0: CLR (问题:前面是在RLO=0时(JCNA7d0)才跳转到A7d0的,为什么还要 CLR?)
//跳转过来执行时不用CLR可以,但是如果不跳转呢?直接执行
// SET
// = #fault
//这时就需要CLR指令了
A #reset(问题:“与”的结果是什么?)//由#reset决定是否为1
JCN A7d1
CLR
= #fault
A7d1: CLR(问题:前面是在RLO=0时(JCNA7d1)才跳转到A7d1的,为什么还要CLR?)//该CLR可以不要,用CLR是确保下面的指令与上述程序的逻辑RLO无关系。
A L 8.1(问题:这个L8.1在程序里起了什么作用?//保存程序块调用前的逻辑,以在程序块结束时输出,说明程序块正常调用,类似程序块的EN/EN0能量流)
SAVE(问题:在实时监控看到RLO=1,为什么?//L 8.1保存的是开头的SET值,将1 保存到RLO,所以你监控是1)
BE
提问者对于答案的评价:
与实时监控完全一致。谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc180494.html