STL语句表程序怎么样写?
次程序乃一是用STL写的FB,但是程序的开始有一些不明白为什么要这么写,希望各位仁兄能够帮忙解答,pSrc 类型Any 地址0.0,t_ar1 类型 DWord 地址10.0,这两个变量都是TEMP,
Network1
TAR1 #t_ar1
Network2
LAR1 P##pSrc
L W#16#1002
T LW [AR1,P#0.0]
L 4
T LW [AR1,P#2.0]
L 510
T LW [AR1,P#4.0]
L 6
ITD
SLD 3
T LD [AR1,P#6.0]
L B#16#84
T LB [AR1,P#6.0]
Network3
CALL "BLKMOV"
SRCBLK :=#pSrc
RET_VAL:=LW220
DSTBLK :=LD100
Network4
L L#200304
T LD 104
Network5
L LD 100
L LD 104
==D
JC rigt
BEU
2个回复
-
plc电工爱好者
前面是 关于ANY指针的定义,后面是关于ANY指针的使用
TAR1 #t_ar1 //保存地址寄存器1原来的值
Network2
LAR1 P##pSrc //将输入参数的地址指针取进地址寄存器AR1
L W#16#1002
T LW [AR1,P#0.0] //将16进制1002存到临时L数据区,地址为输入变量pSrc开始的地址,第0个字节固定为16#10,第1字节16#02表明复制长度单位"字"
L 4
T LW [AR1,P#2.0] //第2个字节是复制单位的个数 ,这里是4表示复制4字长度,到ANY指针
L 510
T LW [AR1,P#4.0]//将DB号15(510的高8位)放入第4字节.第5字节没有意义
L 6
ITD
SLD 3
T LD [AR1,P#6.0] //将6乘以8后放入输入变量pSrc的地址+6.0个偏移地址后的双字中L B#16#84
T LB [AR1,P#6.0]//48和 B#16#84进行或运算后放入输入变量pSrc的地址+6.0个偏移地址后的字节中 ,表明复制位置从数据区(16#84)第6字开始//ANY指针结构定义完成
Network3
CALL "BLKMOV" //调用块移动系统功能
SRCBLK :=#pSrc //输入地址做移动的源地址
RET_VAL:=LW220
DSTBLK :=LD100 //LD100存放的是移动到的目的地址
Network4
L L#200304
T LD 104
Network5
L LD 100
L LD 104
==D 判定复制过来的LD100是否等于L#200304,,,等于就跳到RIGHT执行,否则就结速.
JC rigt
BEU我的个人理解,西门子的高级培训资料有关于ANY指针的介绍和运用
哪个作移3位的目的是因为定义这个字节要求需要用到偏移地址6.0(也就是二进制的6左移3位,偏移地址是双整数不能是实数.这个小数点后面也只能是0-7,与实数的小数部分可不一样呢)
至于L#200304是否日期,这部分程序看不出,估计相当于密码之类设置.2年前 我来评论 -
plc学习
寄存器间接寻址,
明白寄存器间接寻址就很简单了.网上课堂有间接寻址的内容.
TAR1 #t_ar1 //保存地址寄存器1原来的值
Network2
LAR1 P##pSrc //将输入参数的地址指针取进地址寄存器1
L W#16#1002
T LW [AR1,P#0.0] //将16进制1002存到临时L数据区,地址为输入变量pSrc开始的地址,长度1个字
L 4
T LW [AR1,P#2.0] //将4放入L区相临下一字中
L 510
T LW [AR1,P#4.0]//将510放入L区相临下一字中
L 6
ITD
SLD 3
T LD [AR1,P#6.0] //将6乘以8后放入输入变量pSrc的地址+6.0个偏移地址后的双字中L B#16#84
T LB [AR1,P#6.0]//48和 B#16#84进行或运算后放入输入变量pSrc的地址+6.0个偏移地址后的字节中Network3
CALL "BLKMOV" //调用块移动系统功能
SRCBLK :=#pSrc //输入地址做移动的源地址
RET_VAL:=LW220
DSTBLK :=LD100 //LD100存放的是移动到的目的地址
Network4
L L#200304
T LD 104
Network5
L LD 100
L LD 104
==D
JC rigt
BEU2年前 我来评论