通讯诊断程序问题2

通讯诊断程序如下:
            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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月24日 下午7:01
下一篇 2017年6月24日 下午7:01

相关推荐