大家好,小弟最近在学STL所以问题有点多- -
今天看到公司机组上程序中有一个FC,完整的我抄下来:
IN1--POINTER类型,INO--word类型,TEMP2--WORD类型
L P##IN1 //IN1=DB515.DBW0, 515=203(H)
LAR1
L W#16#0
L W [AR1,P#0.0] //W=byte0+byte1=存储号即515=203(H)
==I
JZ M001
T #TEMP2 //T赋值。为什么是W[AR1,P#0.0]赋给TEMP2,不是16#0?因为W[]排在下面就是下面的要赋值给T后面的?
OPN DB [#TEMP2] //打开DB块
M001: NOP 0
L D [AR1,P#2.0] //D,即byte2--byte5,实际起始地址,DBW0
LAR1
L W [AR1,P#0.0] //DBW0>DBW2么
L W [AR1,P#2.0]
>I
JCN M002
L 1 //大于的话,执行这段。问:究竟是哪个+1,DBW0还是DBW2,和上面的赋值问题一样
+I
T W [AR1,P#2.0] //执行过+1后,将值赋值给DBW2
L 1 //哪个+1,DBW2么?
+I
SLD 4 //还是一样,哪个左移4位或者说乘以16呢
TAR1 //将AR1地址中的值给ACCU1,但此时ACCU1中的是啥?
+D //哪个和哪个相加?
LAR1 //相加的和 送入AR1地址寄存器中
L #IN0 //INO=MW1400
T W [AR1,P#0.0] //这个值送给AR1中BYTE0和BYTE1,就是DB几的意思?这里有何作用
SET
JU M003
M002: CLR
M003: SAVE
这个功能块的主要作用是:
10MOVE给DB515.DBW0,然后出来DBW4~DBW22逐个相加除10,还有些别的运算,不提了。
主要是对开卷机 激光测卷径的值进行“滤波”
实在看不懂的,可留下邮箱,小弟会将程序发过去的- -谢谢
小弟的疑问写在备注中了,主要是对哪个赋值哪个,哪个和哪个相加比较混淆,求前辈们指点哦,谢谢!
最佳答案
L W#16#0 把W#16#0给ACCU1
L W [AR1,P#0.0] 把W [AR1,P#0.0] 里的数据给ACCU1,上面的W#16#0转存在
==I ACCU2里了
JZ M001
T #TEMP2 T指令就是把ACCU1的数据传给后面的变量,所以是把W [AR1,P#0.0] 里的数据传给了#TEMP2
手册里对L、T的讲解你要再仔细的看看。
下面的都是这样的用法,你在分析分析。
我的结果是:DBW2加1;1+1;2左移4位;AR1中的值是地址指针DBX0.0,DBX0.0和2左移4位的结果相加---就是DBX4.0了,这里相当于有了一个地址计算;把DBX4.0传送给AR1。
参见:关于S7-300和S7-400指针寻址的说明与例程
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=F0215
提问者对于答案的评价:
谢谢
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc237203.html