您现在的位置是:首页 > PLC技术 > PLC技术

S7-300/400系列PLC赋值指令

来源:艾特贸易2018-01-24

简介LAD编程语言MOVE(赋值)指令将输入端IN指定地址中的值或者常数赋值到输出端OUT指定的地址中。MOVE最多可以赋值4Byte的变量,用户定义的数据类型(例如数组或者结构)必须使用系统功


  LAD编程语言MOVE(赋值)指令将输入端IN指定地址中的值或者常数赋值到输出端OUT指定的地址中。MOVE最多可以赋值4Byte的变量,用户定义的数据类型(例如数组或者结构)必须使用系统功能“BLKMOVE”(SFC 20)进行赋值。在STL编程语言中,使用装载和传递指令实现相同功能,装载功能实现将一个最大4Byte的常数、变量或者地址寄存器传送到累加器;传递功能实现将累加器中的值传送到变量。除此之外,装载和传递指令中还包含对地址寄存器操作的指令。

CPU内部寄存器中有两个地址寄存器,分别以AR1、AR2表示,每个地址寄存器占有32位地址空间。地址寄存器存储区域内部和区域交叉地址指针,用于地址的间接寻址、地址寄存器及指针的使用,在地址指针章节中将详细介绍。赋值指令如表2-33所示。

2-33    赋值指令

 表2-33 赋值指令

    从指令表中可以看到,使用LAD编程语言只有赋值指令,使用STL编程语言指令分为装载和传递指令,其中包含地址寄存器的处理指令。

    1.LAD赋值指令

赋值指令是数值的传递,所有指令的输入、输出端的数据类型没有限制。例如输入端是一个字节,输出端可以是一个字节、字、双字,也可以是一个整数、双整数,数值的类型可以自动转换(已经定义的数据类型不能转换)。赋值指令的使用如图2-16所示。

 图2-16赋值指令

2-16赋值指令

    在图2-14所示的程序中,程序段1将常数123传送到变量MW200中,将MB10中的数值传送到变量MB20中。程序段2将变量MB30中的数值传送到变量MW32中,字节传送到字中,数值不会溢出,如果将变量MD40传送到变量MB44中,则传送的数值大于255,出现溢出(实际将MB43传送到变量MB44,如果MD40的值为DW#16#1234,指令执行后MB44的值为B#16#34),运算出现错误,编程时应注意。

    2.STL装载、传送指令

    STL的赋值指令分为装载和传送指令,指令介绍如下。

    (1)L(装载)指令与T(传送)指令

    L指令将数值传送给累加器1,T指令将累加器1中的数值传送到变量,指令使用的示例程序如下:

    LIB    10    //将IB10装载到累加器1中

    TQB    1    //将累加器1中的值(IB10)传送到QB1

    LMB  120    //将MB120装载到累加器1中

    TDBB  100    //将累加器1中的值(MB120)传送到DBB100

    LDIW  6    //将DIW16装载到累加器1中

    TDIW  80    //将累加器1中的值(DIW16)传送到DIW80

    LLD  252    //将临时变量LD 252装载到累加器1中

    TMD  40    //将累加器1中的值(LD 252)传送到MD40

    LP#1 8.7    //将指针P#18.7装载到累加器1中

    TMD  80    //将累加器1中的值(指针为P#18.7)传送到MD80

    装载指令L与传送指令T配合使用,装载指令也可以将累加器1中的值堆栈到累加器2中,例如:

    LMB    10    //将MB10装载到累加器1中

    LMB    11    //将MB11装载到累加器1中,MB10自动进入累加器2

    TDBB 100    //将累加器1中的值(MB11)传送到DBB100

    传送指令T只能将累加器1中的值传送到变量中。

    (2) LSTW与T STW指令

    L STW指令装载状态字到累加器1中,但是不能将S7-300 CPU的/FC、STA、OR状态位装载到累加器;T STW指令将累加器1中的值传送到状态字中。指令使用的示例程序如下:

    LSTW    //将当前的状态字装载到累加器1中

    TMW  40    //将累加器1中的值(状态字)传送到MW140进行分析判断

    L2#111111111  //将2#111111111装载到累加器1中

TSTW    //将状态字中所有状态位置1

    L STW指令与T STW指令可以在程序中对状态字进行监控,但在实际的编程应用中很少使用。

    (3) LAR1与TAR1指令

    LAR1指令将累加器1中的值装载到地址寄存器1中,TAR1指令将地址寄存器1中的值传送到累加器1中,指令使用的示例程序如下:

    LP#120.0    //将指针P# 120.0装载到累加器1中

    LAR1    //将累加器1中的值(指针P# 120.0)装载到地址寄存器1

    TAR1    //将地址寄存器1中地址(指针P# 120.0)传送到累加器1中

    TMD    80  //将累加器1中的值(指针P# 120.0)传送MD80

    上面的示例程序实现对地址寄存器1的读写操作,程序实际将指针P#120.0传送到变量MD80中。

    (4) LAR2与TAR2指令

    LAR2、TAR2指令与指令LAR1、TARI使用方式相同,实现对地址寄存器2的读写操作。

    (5) LAR1<D>与TAR1<D>指令

    LAR1相比,LAR1<D>指令直接将地址指针装载到地址寄存器1中,同样,TAR1<D>直接将地址寄存器1中的地址指针传送到变量中。指令中的<D>表示寄存器地址指针的双整数变量或指针常数。指令使用的示例程序如下:

    LAR1DBD  24    //将数据块变量DBD24存储的地址指针直接装载到地址寄存器

    AR1中

    LAR1 LD  100    //将区域变量LD100存储的地址指针直接装载到地址寄存器AR1中

    LAR1 MD  40    //将变量MD40存储的地址指针直接装载到地址寄存器AR1中

    LAR1   P#M 100.0    //将地址指针常数P#Ml00.0直接装载到地址寄存器AR1中

    TAR1 DBD  20    //将地址寄存器AR1中的值,直接传送到变量DBD20中

    TAR1 DID  30    //将地址寄存器AR1中的值,直接传送到变量DID30中

    TAR1 LD  180    //将地址寄存器AR1中的值,直接传送到变量LD180中

    TAR1 MD  24    //将地址寄存器AR1中的值,直接传送到变量MD24中

    (6) LAR2<D>与TAR2<D>指令

    LAR2<D>、TAR2<D>指令与指令LAR1<D>、TAR1<D>使用方式相同,实现对地址寄存器2的直接读写操作。

    (7) LARIAR2与TAR AR2指令

    LAR1 AR2指令将地址寄存器AR2中的值,直接装载到地址寄存器AR1中;TAR1AR2指令将地址寄存器AR1中的值,直接传送到地址寄存器AR2中,指令使用的示例程

序如下:

    LAR1  P#10.0    //将地址寄存器P#10.0,直接装载到地址寄存器AR1中

    TAR1 AR2    //将地址寄存器AR1中的值,直接装载到地址寄存器AR1中

    LAR1 AR2    //将地址寄存器AR2存储的地址直接装载到地址寄存器AR1中

TAR1l MD  100    //将地址寄存器AR1中的值直接传送到变量MD100中

    A    IMD 100]    //如果I10.0为1,Q1.1输出为1

    =    Q1.1

    (8) CAR指令

    CAR指令将地址寄存器1与地址寄存器2中存储的地址指针相互交换,指令使用的示例程序如下:

    LAR1  P#10.0    //降低至指针常数P#10.0直接装载到地址寄存器AR1中

    LAR2 P#11.0    //将地址指针常数P#11.0直接装载到地址寄存器AR2中

    CAR    //AR1与AR2地址指针交换,AR1中装载地址指针P#11.0,AR2

    中装在地址指针P#IO.O

    TAR1 MD  100  //将地址寄存器AR1中的值直接传送到变量MD100中,MD100中

    存储地址指针P#ll.0

    CAR    //AR1与AR2地址指针交换,AR1中装载地址指针P#10.0,AR2

    中装载地址指针P#11.0

    TAR1 MD  104  //将地址寄存器AR1中的值直接传送到变量MD104中,MD104中

    存储地址指针P#10.0

    A    M [MD 100]  //如果M11.0为1,M10.0输出为1

    =    M [MD 104]

(作者稿费要求:需要高清无水印文章的读者3元每篇,请联系客服,谢谢!在线客服:艾特贸易网客服为您服务