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