分析两个stl程序
郑志武
发布于2012-12-17 17:29
56
0
标签:
请参照图片程序,给出详细解释
图片说明: 1,timer&analog 2,analog
佳答案
network1
set//置位rlo(逻辑运算结果位)
=#ok//赋值给ok,ok=true
clr//清除rlo
an#present//取present变量的状态,并取反,此时rlo的状态和present取反后的状态一致;
jcfend//若rlo为true,则跳转到fend处,没猜错的话fend在本fc(或fb)的结尾处;
l#ch_1//装载ch_1的值(到accu1)
tlw6//传递(accu1的值)到lw6,lw6是本地堆栈区的第3个字,即lb6和lb7两个字节;
lb#16#0//装载字节型的16进制常数0;
t#byte_00//传递给byte_00
l#paw//装载paw的值;
t#paw_addr//传递给paw_addr
a#beckhoff//取beckhoff变量的状态,此时rlo的状态和beckhoff变量的状态一致;
jcbkf//若rlo的值为true则跳转到bkf处;bkf应是本fc(或fb)的另一个network;
network2:writesiemenspr
l#paw_addr//装载paw_addr变量的值(到accu1中);
itd//将accu1的值转换成双整数;
ll#8//装载长整型实数8(到accu1中,accu1里面的数据被装载到accu2中),
*d//将accu2中的数据和accu1中的数据相乘,结果放在accu1中;
lar1//将accu1中的内容装载到ar1中(ar1是地址寄存器1),此时ar1的值是paw_addr*8之后的结果,根据这个程序的功能,*8相当于左移3位;
llw6//装载本地堆栈区第3个字的内容到accu1,结合前面的赋值,lw6保存了ch_1变量中的值;
tpqw[ar1,p#0.0]//将accu1的值传递到pqw(输出过程通道)ar1+p#0.0偏移后的地方,ar1如上所述,+p#0.0是在ar1现有地址内容的基础上加0个字节和0个位,即不偏移,至于为什么这样用后面给你解释;
l0//装载常数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字以上了,给你图片吧!