STL语句表程序怎么样写?

西门子plc 发布于 1年前 分类:S7-300/400

次程序乃一是用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电工爱好者
    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是否日期,这部分程序看不出,估计相当于密码之类设置.

  • plc学习
    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
    BEU