品牌
经销商厂商性质
上海市所在地
秦皇西门子SMART200系列代理商 秦皇西门子SMART200系列代理商
浔之漫 智控技术有限公司 上海诗慕自动化设备有限公司
本公司销售西门子自动化产品,*,质量保证,价格优势
西门子PLC,西门子触摸屏,西门子数控系统,西门子软启动,西门子以太网
西门子电机,西门子变频器,西门子直流调速器,西门子电线电缆
我公司大量现货供应,价格优势,*,德国*
西门子S7-300/400比较指令
比较指令用于比较累加器1与累加器2中的数据大小(见表3-7),被比较的两个数的数据类型应该相同,数据类型可以是整数、双整数或浮点数(即实数)。如果比较的条件满足,则RLO为1,否则为0。状态字的CC0和CC1位用来表示两个数的大于、小于和等于关系。
比较指令影响状态字,用指令测试状态字的有关位,可以得到更多的信息。
整数比较指令用来比较两个整数字的大小,指令助记符中用I表示整数。
双整数比较指令用来比较两个双字的大小,指令助记符中用D表示双整数。
浮点数比较指令用来比较两个浮点数的大小,指令助记符中用R表示浮点数。
表3-7 比较指令
语句表 | 梯形图 | 描述 |
?I | CMP?I | 比较累加器2和累加器1低字中的整数是否==,<>,>,<,>=,<=,如果条件满足,RLO=1 |
?D | CMP?D | 比较累加器2和累加器1中的双整数是否==,<>,>,<,>=,<=,如果条件满足,RLO=1 |
?R | CMP?R | 比较累加器2和累加器1中的浮点数是否==,<>,>,<,>=,<=,如果条件满足, RLO=1 |
表3-7中的“?”可以取==、<>、>、<、>=和<=。
下面是比较两个浮点数的例子:
L MD 4 //MD4中的浮点数装入累加器1
L 2. 345E+02 //累加器1的值装入累加器2,浮点数常数装入累加器1
>R //比较累加器1和累加器2的值
= Q 4.2 //如果MD4>234.5,则Q4.2为1
梯形图的方框比较指令用来比较两个同类型的数,与语句表的比较指令类似,可以比较整数(I)、双整数(D)和浮点数(R)。在使能输入信号为1时,比较IN1和IN2输入的两个操作数。方框比较指令在梯形图中相当于一个常开触点,可以与其他触点串联和并联。如果被比较的两个数满足指令的大于、等于、小于等条件,比较结果为“真”,等效触点闭合,指令框才有可能有能流流过。如果图3-54中I0.6的常开触点闭合,且MW2<=MW4,Q4.1被置位为1。
图3-54 比较指令
梯形图中比较指令框的输入和输出均为BOOL变量,可以取I、Q、M、L和D;被比较数IN1和IN2的数据长度与指令有关,可以取整数、双整数和浮点数。数据类型为I、Q、M、L、D或常数。
1)使用SFC 20“BLKMOV”(块移动),可将源存储区的内容复制到目标存储区。源区域与目标区域不能交叉。下面是使用SFC 20传送20个字节的例子。
CALL "BLKMOV” //调用SFC 20
SRCBLK :=P#M 54.0 BYTE 20 //源存储器区
RET_VAL:=MW10 //执行SFC 20出错时的错误代码
DSTBLK :=P#DB2.DBX0.0 BYTE 20//目标存储器区
2)使用SFC 21“FILL”,可以将源数据区的数据填充到目标数据区。假设MB20和MB21的值为7和5,执行下面的例程后DB2的DBB30~DBB34的值分别为7、5、7、5和7。源区域与目标区域不能交叉。
CALL "FILL" //调用SFC 21
BVAL :=P#M 20.0 BYTE 2 //源存储器区
RET_VAL:=MW12 //执行SFC 21出错时的错误代码
BLK :=P#DB2.DBX30.0 BYTE 5 //目标存储器区
3) SFC 81“UBLKMOV”(不间断的块移动)与SFC 20的功能和使用方法基本上相同,SFC 81的复制操作不会被其他操作系统的任务打断。
梯形图的传送指令(见图3-53)只有一条MOVE指令,它直接将源数据传送到目的地址,不需经过累加器中转。输入变量和输出变量可以是8位、16位或32位的基本数据类型。同一条指令的输入变量和输出变量的数据类型可以不相同,例如可以将MB0中的数据传送到MW2。如果将MW4的数据传送到MB6时,MW4中的数据超过255,只是将MW4的低位字节(MB5)中的数据传送到MB6,应避免出现这种情况。
被寻址地址中位的编号(0~7),第3~18位为被寻址地址的字节的编号。第24~ 26位(rrr)为被寻址地址的区域标识号(见表3-6),第31位x为0则为区域内的间接寻址,为1则为区域间的间接寻址。
表3-6 区域间寄存器间接寻址的区域标识号
区域标识符 | 存储区 | 二进制数rrr |
I | 过程映像输入 | 001 |
Q | 过程映像输出 | 010 |
M | 位存储区 | 011 |
DB | 共享数据块 | 100 |
DI | 背景数据块 | 101 |
L | 局部数据(L堆栈) | 110 |
V | 上一级赋值的局部数据 | 111 |
如果要用寄存器指针访问一个字节、字或双字,必须保证指针的位地址编号为0。
*种地址指针格式包括被寻址数值所在的存储单元地址的字节编号和位编号,存储区的类型在指令中给出。这种指针格式适用于在某一存储区内寻址。第24~26位(rrr)和第31位应为0。下面是区域内间接寻址的例子:
L P#5.0 //将间接寻址的指针装入累加器1
L AR1 //将累加器l的内容送到地址寄存器1
A M[ AR1,P#2.3] //AR1中的P#5.0加偏移量P#2.3,对M7.3进行操作
= Q[ AR1,P#0.2] //逻辑运算的结果送Q5.2
L DBW[AR1,P#18.0] //将DBW23装入累加器1
指针常数#P5.0对应的二进制数为2#0000 0000 0000 0000 0000 0000 0010 1000。
第二种地址指针格式的第24~26位还包含了说明数值所在存储区的存储区域标识符的编号rrr,这种指针格式用于区域间寄存器间接寻址。下面是区域间间接寻址的例子:
L P#M6.0 //将存储器位M6.0的双字地址装入累加器1
LAR1 //将累加器1的内容送到地址寄存器1
L W[ AR1,P#50.0] //将存储器字MW56的内容传送到累加器l
P#M6.0对应的二进制数为2#1000 0011 0000 0000 0000 0000 0011 0000。因为地址指针P#M6.0已经包含有区域信息,使用间接寻址的指令“L W[AR1,P#50]”时没有必要再使用地址标识符M。