请参照图片程序,给出详细解释,谢谢
图片说明:
最佳答案
NETWORK1
SET //置位RLO(逻辑运算结果位)
= #OK //赋值给ok,OK=true
CLR //清除RLO
AN #PRESENT //取PRESENT变量的状态,并取反,此时RLO的状态和PRESENT取反后的状态一致;
JC FEND //若RLO为true,则跳转到FEND处,没猜错的话FEND在本FC(或FB)的结尾处;
L #CH_1 //装载CH_1的值(到ACCU1)
T LW6 //传递(ACCU1的值)到LW6,LW6是本地堆栈区的第3个字,即LB6和LB7两个字节;
L B#16#0 //装载字节型的16进制常数0;
T #BYTE_00 //传递给BYTE_00
L #PAW //装载PAW的值;
T #PAW_ADDR //传递给PAW_ADDR
A #BECKHOFF //取BECKHOFF变量的状态,此时RLO的状态和BECKHOFF变量的状态一致;
JC BKF //若RLO的值为TRUE则跳转到BKF处;BKF应是本FC(或FB)的另一个network;
Network 2:Write Siemens PR
L #PAW_ADDR //装载PAW_ADDR变量的值(到ACCU1中);
ITD //将ACCU1的值转换成双整数;
L L#8 //装载长整型实数8(到ACCU1中,ACCU1里面的数据被装载到ACCU2中),
*D //将ACCU2中的数据和ACCU1中的数据相乘,结果放在ACCU1中;
LAR1 //将ACCU1中的内容装载到AR1中(AR1是地址寄存器1),此时AR1的值是PAW_ADDR*8之后的结果,根据这个程序的功能,*8相当于左移3位;
L LW 6 //装载本地堆栈区第3个字的内容到ACCU1,结合前面的赋值,LW6保存了CH_1变量中的值;
T PQW[AR1,P#0.0]//将ACCU1的值传递到PQW(输出过程通道)AR1+P#0.0偏移后的地方,AR1如上所述,+P#0.0是在AR1现有地址内容的基础上加0个字节和0个位,即不偏移,至于为什么这样用后面给你解释;
L 0 //装载常数0;
T #ERROR //传递给变量ERROR;
SET //置位RLO;
= #OK //赋值给OK;
这应该是写某一外围设备的程序吧?PAW应该是该外围设备的地址。
不知道你什么地方比较难懂,我就根据自己学习过程中比较困难的地方给你说吧。
JC:条件跳转指令,当RLO结果为TRUE(也可以说是为1)时,程序跳转到制定的地方,本程序中是跳转到FEND处,从跳转指令到跳转目的地之间的程序在该扫描周期内不再执行。
AR1:地址寄存器AR1,是一个32位的存储空间,它的每几个位的组合是有不同意义的,不想ACCU1那样代表一些数值,比如说AR1的最后三位代表的是位地址信息,一个字节有8个位,位0-位7,那么用3个二进制位就可以搞定了,000-111。
晕1000字以上了,给你图片吧!
图片说明:
提问者对于答案的评价:
专业
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc244699.html