第5章S7-300PLC指令系统及编程(2)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
执行表5-19 的指令,就是在将累加器l 中的实数转换为32 位整数。 但化整的规则不相同,同一实数,执行不同转换指令,所得结果有 些区别。RND 指令中将实数转换为最接近的整数是指:实数的小 数部分执行小于5 舍,大于5 入,等于5 则选择偶数结果。如100.5 化整为100 ,而101 .5 化整为102 。如表5-20所示。
二、数据转换指令 数据转换指令是将累加器1中的数据进行数据类型转换,转换的结 果仍放在累加器1 中。在STEP7 中,可以实现BCD 码与整数、整数 与双整数(长整数)、双整数与实数间的转换,还可以实现整数的 反码、整数的补码、实数求反等数据转换操作。 下面先回顾一下数据格式,然后再介绍数据转换指令的使用方法。 (一)数据格式 PLC 中常用到的数据格式如下: 1.十进制数(BCD 码数)格式 十进制数的每一位用4 个二进制位表示,因为最大的数是9,所 以需要4 位才能表示(1001)。从0到9 的BCD 码数与二进制数表示 是相同的。 2.整数(INT )、双整数(DINT )格式
下面举例说明其用法。 例如,整数求补,其程序和转换过程如图5-68所示。
又例如,实数求反,如图5-69所示
整数的二进制求反,实际上是对原整数用FFFF ( H )FFFFFFFF (H) 进行“异或”操作,因此每一位都变为其相反的值。从STL指令看出, 求反、求补操作均在累加器中进行。
ห้องสมุดไป่ตู้
三、数据比较指令 在编程时有时需要对两个量进行比较。比较指令只能在两个同类 型数据间进行。被比较的两个数可以是:I— 两个整数(16 位定点 数);D—两个双整数(32 位定点数); R—两个实数(32 位的 IEEE 格式浮点数)。若比较的结果为“真”,则令RLO=1 ,否则 RLO =0 。 比较类型有等于、不等于等6 种,用比较符表示。3种数据的6 种 比较如表5-22 所示。它实际上是STL比较指令的格式。在比较指令 的梯形图方块的上部也采用了表5-22 所列出的符号,同一符号在两 种语言格式(STL,LAD )中均使用,对读者记忆更为方便。下面 举例说明比较指令的用法。
7.装入时间值或计数值 装入定时器当前剩余时间指令有直接装载和BCD 装载两种。如: L T10 //将定时器T10中当前剩余时间以二进制数格式装人累加器1
LC T10
的低字中(不带时基) //将定时器Tl0当前剩余时向以BCD 码格式装人累加器l 低字 中(带时基)
装入计数器当前计数值指令也有直接装载和BCD 装载两种。如: L C10 //将计数器C10 中二进制格式的计数值直接装入累加器1的低
以字节方式存取,MW100 表示存取MBl00 、MW101 组成的字,
MD100表示存取MBl00~ MB103 组成的双字。下面是直接寻址的程 序实例:
3.存储器间接寻址 在存储器间接寻址指令中,给出一个作为地址指针的存储器,该 存储器的内容是操作数所在存储单元的地址。使用存储器间接寻址 可以改变操作数的地址,在循环程序中经常使用存储器间接寻址。 地址指针可以是字或双字。当定时器(T )、计数器(C)、数据块 (OB)、功能块(FB)和功能(FC)的编号范围小于65535 时,使用字指针 就够了。 其它地址要使用双字指针,如果要用双字格式的指针访问一个字、 字节或双字存储器,必须保证指针的位编号为0,例如P#Q20.0 。双字 指针的格式如图5-54所示。位0~2 为被寻址地址中位的编号(0 ~7 ) , 位3 ~ 18 为被寻址的字节的编号(0 ~ 65535 )。只有双字MD、LD、 DBD 和DID 能作地址指针。
下面举一个使用的例子,如图5-65 所示。图中绘出了梯形图方块 及对应语句表程序。
(三)双整数和实数间的转换 用户程序中有时需要整数相除,相除的结果可能小于0 ,由于这些 值只能用实数表示,所以需要转换到实数。此外,其他实数运算和 比较也会用到实数转换,实数是32 位数,一般整数要转换为实数时, 须先将整数转换为双整数后再进行。 1.双整数(32 位)转换为实数(32 位) 梯形图方块指令(DI _ R )和语句表指令(DTR )均列于表5-18 中最后一条。 2.实数(32 位)转换为双整数(32 位) 为简化介绍,用图5-66 统一表示转换方块,方块中上部字符如表 5-19所示。
四、算术运算指令 现代PLC实际上是一台工业控制计算机,一般都有很强的运算能 力。对S7-300PLC,算术运算指令有两大类,即基本算术运算指令 (四则运算指令)和扩展算术运算指令(数学函数指令)。 1. 基本算术运算指令 基本算术运算指令可完成 整数、双整数和实数(32位浮 点数)的加、减、乘、除和双 整数除法取余等运算。 S7-300PLC的基本算术运算指令有相同的格式,其梯形图方块 指令如图5-71所示。现对其用法作如下说明: (1)方框上部×××_×为运算符号(如表5-27所示),它表明进 行的是哪种算术运算。 (2)如果在允许输入端EN的RLO=1,就执行运算。如果运算没有 出现错误,则允许输出端ENO=1;如果运算结果超出了数据类型的 表示范围或有错误,允许输出端ENO=0。ENO连接的其它功能梯 形图部分将不能继续执行。
例如,两个整数进行大于等于比较,其程序如图5-70所示。
由上例看出,方块比较指令在逻辑串中,可等效于一个常开触点。 如果比较结果为“真”,则该常开触点闭合(意味着电流可流过), 否则触点断开。由于比较指令的使用与触点类似,可以与其它触点 串联或并联,因此比较指令不能放在逻辑串的最后。 梯形图方块指令的输入和输出均为BOOL 数,可以取自I、Q 、 M 、D 、L 。被比较数IN1和IN2的数据类型与指令类型有关,且只 能在二个同类型数据间比较。
§5-3 数据处理与算术运算指令
S7-300PLC可以按字节(B)、字(W)、双字(DW)访问 存储器。数据处理与算术运算指令包括数据装入与传送指令、数据 类型转换指令、比较指令、算术运算指令、移位指令、累加器操作 指令和地址寄存器的加指令。 一、数据装入与传送指令 应用装入(L, Load)指令和传送(T,Transfer)指令可以在输入 或输出与存储器之间,或存储器与存储器之间交换数据。 数据交换的方法一般是通过累加器进行的,即装入指令(L)和传 送指令(T)必须通过累加器进行数据交换。S7-300PLC有两个32 位的累加器,即累加器1和累加器2。L指令将源数据装入累加器1 (累加器1原有数据移入累加器2,累加器2原有数据被覆盖)。然 后T指令将累加器1中的内容写入目的存储区,累加器的内容保持 不变。装入指令和传送指令如表5-14所示。
L C C 10
字中 //将计数器C10 中二进制格式的计数值以BCD 码格式装入累 加器1低字中
8.梯形图方块传送指令(MOVE指令) 图5-57、图5-58 分别为传送方块及其使用示例。图中输入位I0.0 闭合,则执行传送操作,将存储字MW20 的内容传送至数据字 DBW10 ,输出Q4.0 为l ;若输入位I0.0 断开,则不执行传送操作, 输出Q4.0 为0。
整数或双整数的二进制数格式分为16 位整数和32 位整数(又称 长整数或双整数);正数和负数。在二进制格式中,整数的负数形 式用正数的二进制补码表示。二进制补码利用正数取反加1得到。
3.实数(REAL)格式。STEP7中的实数是按照IEEE标准表示的, 例如+0.75(定点数)或+7.5E-1(浮点数)。 在存储器中,实数占用两个字(32位),即存放实数(浮点数) 需要一个双字(32位),最高的31位是符号位,0表示正数,1表示负 数。可以表示的数的范围是1.175495×10-38 ~3.402823×1038。 (二)BCD 数和整数间的转换 BCD 数可转换为整数、双整数,反之亦可。为了需要,还可将整 数转换成双整数。指令表示格式示例如表5-18 所示。 对表5-18 执行的说明: (1)在执行BCD 码转换为整数或双整数指令时,如果BCD 数是无 效数(如其中一位值在A ~F 即10~15 范围内),将得不到正确的转 换结果,并导致系统出现“BCDF”错误。在这种情况下,程序的正 常运行顺序被终止。 (2)在执行整数转换为BCD 数时,由于3位BCD 数所能表示的范 围(-999 ~+999)小于16 位整数的数值范围(-32 768 ~+32 767), 如果整数超出了BCD 码所能表示的范围,便得不到正确的转换结 果,称为溢出。此时ENO 输出为0 。 (3)在编程时,因为运算或比较等原因,需将整数转换成双整数, 可用表5-18 中第5 条指令。
装入指令和传送指令有三种寻址方式:立即寻址、直接寻址和间 接寻址。 1.立即寻址的装入与传送指令 操作数是指令操作或运算的对象,寻址方式是指令取得操作数的 方式,操作数可以直接给出或间接给出。立即寻址的操作数直接在 指令中,下面是使用立即寻址的例子。
2. 直接寻址的装入与传送指令 直接寻址在指令中直接给出存储器或寄存器的区域、长度和位 置,例如用MW200 指定位存储区中的字,地址为200;MBl00表示
5.读取或传送状态字指令 指令格式如下: L STW //将状态字装入累加器1中,即将状态字中的1、4、5、6、7、
8位装入累加器1低字中的相应位中,但不能装入状态字的 (0位)、STA(2位)和OR(3位)三个状态字位,而累 加器1的9~31位则清零。该指令的执行与状态位无关,而 且对状态字没有任何影响。
下面是存储器间接寻址的例子:
4.寄存器间接寻址 S7中有两个地址寄存器AR1和AR2。通过它们可以对各存储区的 存储器内容作寄存器间接寻址。地址寄存器的内容加上偏移量形成 地址指针,后者指向数值所在的存储单元。 地址寄存器存储的双字地址指针格如图5-55所示 。其中第0~2 位 (xxx )为被寻址地址中位的编号(0 ~7 ) ,第3 ~18 位(bbbb bbbb bbbb bbbb )为被寻址地址的字节的编号(0~ 65535)。第24 ~ 26 位(r r r)为被寻址地址的区域标识号,第31 位x = 0为区域内的间 接寻址,第31 位x = l为区域间的间接寻址。
数据转换指令简单应用:要求将一个16 位整数转换成实数(32 位)。先要将16 位整数转换成32 位整数,然后再从32 位整数转换 到32 位实数。此实数便可用于带有实数的运算程序,转换程序如图 5-67 所示。
(四)求反、求补指令 对整数、双整数的二进制数求反码,即逐位将0变为l , l 变为0 。 对整数、双整数求补码,即逐位取反后再加1。实数的求反则只是 将符号位取反,求补只对整数或双整数才有意义。 求反、求补梯形图方块指令的图形与图5-66相同,求反、求补梯 形图方块指令中上部字符表示法和STL指令如表5-21所示。
下面是区域间间接寻址的例子:
P#M6.0对应的二进制数2#1000 0011 0000 0000 0000 0000 0011 0000。因为地址指针P#M6.0 中己经包含有区域信息,使用间 接寻址的指令TW[ AR1 , P#50]中没有必要再用地址标识符M。 寄存器间接寻址的区域标识位如表5-15所示。
第一种地址指针格式包括被寻址数值所在存储单元地址的字节 编号和位编号,存储区的类型在指令中给出,例如L DBB[AR1,P#6.0]。 这种指针格式适用于在某一存储区内寻址,即区内寄存器间接寻址。 第24 ~26 位(r r r)应为0。 第二种地址指针格式的第24~26 位还包含了说明数值所在存储 区的存储区域标识符的编号r r r ,用这几位可实现跨区寻址,这种 指针格式用于区域间寄存器间接寻址。 如果要用寄存器指针访问一个字节、字或双字,必须保证指针 中的位地址编号为0。 指针常数P#5.0 对应的二进制数为2 # 0000 0000 0000 0000 0000 0000 0010 1000。下面是区内间接寻址的例子:
T STW
//将累加器1中的0~8位传送到状态字的相应位。
6.地址寄存器内容的装入和传送指令 S7-300PLC有两个地址寄存器,即AR1和AR2。对于地址寄存 器可以不经过累加器1而直接将操作数装入和传送,或直接交换两 个地址寄存器的内容。指令示例如表5-16、表5-17所示。 使用CAR指令可以交换地址寄存器AR1 和地址寄存器AB2的内 容,指令不需要指定操作数。指令的执行与状态位无关,而且对状 态字没有任何影响。