关于STL程序求解!!!

L     #IN2
      T     #IN
A7d1: TAR2  LD     2
      UC    "TIME_TCK"
            P#L 6.0
      LAR2  LD     2
      L     LD     6
      T     #IN3
想问为什么要用TAR2和LAR2,还有UC "TIME_TCK"这个是调取系统时间?求详解!!!

      L     #IN4
      L     T#0MS
      =     L      0.2
      <D    
      O     L      0.2
      JCN   A7d5
想问这段里面的= L  0.2是把那个结果赋值给 L 0.2了?其中<D是比较IN4和T#0MS的大小吗?

求STL教程!!!!

非常感谢!!!非常非常感谢!!!

最佳答案

1、想问为什么要用TAR2和LAR2,还有UC "TIME_TCK"这个是调取系统时间?
、首先要清楚在CALL FB时,为了方便背景数据块参数的寻址,系统自动使用AR2寄存器,AR2寄存器指向背景数据块的首地址P#DBX0.0,如果改变了这个寄存器的值,你再访问背景数据块参数时将不会得到正确的数值.所以,在FB里使用AR2寄存器要小心,对这两个寄存器改变后不要再使用背景数据块参数,当要使用背景数据块参数时要先恢复这两个寄存器的值
确切的说,FB里的变量在调用时将根据AR2的值当作偏移量与背景数据块是一一对应。
、使用UC调用时不能分配一个数据块·,FB的输入输出参数的附值很自由,可以在程序的任何地方书写,没有条条框框的限制,而CALL就不同了,他给出了书写参数的位置。、FB的数据参数传递是通过数据块来传递的,UC和CALL的区别还有,UC可以通过AR2修改FB参数与背景数据块的对应关系。而CALL指令是不行的。通过改变AR2的值使得对应关系产生偏移。
、总之,在执行"TIME_TCK"程序中系统用到了AR2。所以,在你的程序中应用了TAR2和LAR2指令,先将AR2保存,在调用"TIME_TCK"程序后再恢复。
2、问这段里面的= L  0.2是把那个结果赋值给 L 0.2了?其中<D是比较IN4和T#0MS的大小吗?
程序应该为:
      L     #IN4
      L     T#0MS
       <D  //#IN4与T#0MS进行双字长数据的比较
     =     L      0.2 //如果#IN4小于T#0MS,则 L      0.2置位
      O     L      0.2
      JCN   A7d5

提问者对于答案的评价:
谢谢,解释很清楚!除了STL编程手册外,自学STL编程有没有好的资料推荐?

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc196857.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年8月24日
下一篇 2017年8月24日

相关推荐