转换指令是对操作数的类型进行转换,并输出到指定的目标地址中去。西门子 S7-200SMARTPLC的转换指令包括数据类型转换、数据的编码和译码、ASCII码转换等指令。
数据类型转换指令
在S7-200SMARTPLC中的数据类型主要有字节型、整数型、双整数型和实数型,使用了 BCD码、ASCII码、十进制数和十六进制数。不同功能的指令对操作数类型要求不同,因此,许多指令执行前需对操作数进行类型的转换。
数据类型转换主要有 BCD码与整数之间的转换、字节与整数之间的转换、整数与双字整数之间的转换和双字整数与实数的转换等。
(1)BCD码与整数之间的转换
在一些数字系统,如计算机和数字式仪器中,如数码开关设置数据,往往采用二进制码表示十进制数。通常,把用一组四位二进制码来表示一位十进制数的编码方法称为 BCD码。
4位二进制码共有16种组合,可从中选取10种组合来表示0~9这10个数,根据不同的选取方法,可以编制出多种 BCD码,其中8421BCD码最为常用。十进制数与8421BCD码的对应关系如表5-10所示。如:十进制数1234化成8421BCD码为0001001000110100。
表5-10 十进制数与8421BCD码对应表
BCD码与整数之间的转换是对无符号操作数进行的,其转换指令如表5-11所示。输入IN 和输出 OUT 的类型为字。
使用 BCDI指令可将IN 端输入的 BCD 码转换成整数,产生结果送入 OUT 指定的变量中。IN 输入的 BCD码范围为0~9999。
使用IBCD指令可将IN 端输入的整数转换成 BCD 码,产生结果送入 OUT 指定的变量中。IN 输入的整数范围为0~9999。
表5-11 BCD码与整数之间的转换指令
若为无效BCD码时,特殊标志位SM1.6被置1。输入IN 和输出 OUT 操作数地址最好相同,若不相同时,需使用指令:
MOV IN,OUT
BCDI OUT
例5-6 使用BCD码与整数之间的转换指令,将 VW100中的BCD码转换成整数,并存放到 AC0中;将 VW200中的整数转换成BCD码,并存放到 AC1中。其程序如表5-12所示。假设 VW100中 的 BCD 为 1001001000110101,执 行 BCDI指 令 后,转 换 的 整 数 为 9235;假 设VW200中的整数为5421,执行IBCD指令后,转换的BCD码为0101010000100001。
表5-12 BCD码与整数之间的转换指令程序
(2)字节与整数之间的转换
字节与整数之间的转换是对无符号操作数进行的,其转换指令如表5-13所示。
表5-13 字节与整数之间的转换指令
使用 BTI指令可将IN 端输入的字节型数据转换成整数型数据,产生结果送入 OUT 指定的单元中。使用ITB指令可将IN 端输入的整数型数据转换成字节型数据,产生结果送入OUT 指定的变量中。被转换的值应为有效的整数,否则溢出位SM1.1被置1。
(3)整数与双字整数之间的转换
整数与双字整数之间的转换指令如表5-14所示。
表5-14 整数与双字整数之间的转换指令
ITD指令是将输入IN 的整数型数据转换成双整数型数据,产生的结果送入 OUT 指定存储单元,输入为整数型数据,输出为双整数型数据,要进行符号扩展。
DTI指令是将输入IN 的双整数型数据转换成整数型数据,产生的结果置入 OUT 指定存储单元,输入为双整数型数据,输出为整数型数据。被转换的输入IN 值应为有效双整数,否则SM1.1被置1。
(4)双字整数与实数的转换
双字整数与实数的转换指令如表5-15所示。
表5-15 双字整数与实数的转换指令
DTR指令是将输入IN 的双字整数型数据转换为实数型数据,产生的结果送入 OUT 指定的存储单元,IN 输入的为有符号的32位双字整数型数据。
四舍五入和舍去小数指令都是实数转换为双字整数的取整指令。执行 ROUND 指令时,实数的小数部分四舍五入;执行 TRUNC 指令时,实数的小数部分舍去。若输入的实数值太大,无法用双字整数表示时,SM1.1被置1。
例5-7 用实数运算求直径为32mm 的圆面积,将结果转换为整数。
分析:圆的面积=圆半径的平方×π,圆半径的平方可使用 EXP (2×LN (32/2)),编写的 PLC程序如表5-16所示。
例5-8 1英寸等于2.54cm,假设英尺数由数码开关通过IW0输入 (BCD 码),则长度由英寸转换成厘米,且厘米数由 QW0用 BCD码输出时,其程序编写如表5-17所示。
表5-16 求圆面积的程序
表5-17 英寸与厘米的转换程序
ASCII 字符数组转换指令
ASCII码 (AmericanStandardCodeforInformationInterchange)为美国标准信息交换码,在计算机系统中使用最广泛。西门子S7-200SMARTPLC的 ASCII字符数组转换指令包括整数转换为 ASCII码指令、双整数转换为 ASCII码指令、实数转换为 ASCII码指令、十六进制整数与 ASCII码相互转换指令,指令如表5-18所示。
表5-18 ASCII字符数组转换指令
(1)整数转换为 ASCII码指令ITA
整数转换为 ASCII码指令ITA (IntegertoASCII)把输入端IN 的有符号整数转换成ASCII字符串,其转换结果存入以 OUT 为起始字节地址的8个连续字节的缓冲区中,FMT指定小数点右侧的转换精度和小数点是使用逗号还是点号。整数转 ASCII码指令的格式操作数如图5-2所示,输出缓冲区的大小始终是8个字节,nnn表示输出缓冲区中小数点右侧的数字位数,nnn的有效范围为0~5,若 nnn=0,指定小数右侧的位数为0,转换时数值没有小数点;若nnn>5时,输出缓冲区会被空格键的 ASCII码填充,此时无法输出。C指定整数和小数点的分隔符,当 C=1时,分隔符为 “,”;当 C=0时,分隔符为 “.”,FMT的高4位必须为0。
在图5-2中给出了一个数值的例子,其格式为使用点号 (C=0),小数点右侧有3位小
图5-2 整数转 ASCII码指令的 FMT操作数
数 (nnn=011),输出缓冲区格式符合以下规则:
① 正数值写入输出缓冲区没有符号位;
② 负数值写入输出缓冲区时以负号 (-)开头;
③ 小数点左侧开头的0 (除去靠近小数点的那个之外)被隐藏;
④ 数值在输出缓冲区 OUT 中是右对齐的。
例5-9 整数转 ASCII码指令的使用。将 VW10中的整数转换为从 VB100开始的8个ASCII码字符,使用 16#0B 的 格 式,用 逗 号 作 小 数 点,保 留 3 位 小 数,程 序 如 表 5-19所示。
表5-19 整数转 ASCII码指令程序
(2)双整数转换为 ASCII码指令 DTA
双整数转换为 ASCII码指令 DTA (Double Integer to ASCII )把输入端IN的有符号双字整数转换成 ASCII字符串,其转换结果存入以 OUT 为起始字节地址的12个连续字节的缓冲区中。除输入IN 为双整数、输出为12字节外,其它方面与整数转 ASCII码指令相同。双整数转换为 ASCII码指令的格式操作数如图5-3所示。
图5-3 双整数转 ASCII码指令的 FMT操作数
(3)实数转换为 ASCII码指令 RTA
实数转换为 ASCII码指令 RTA (RealtoASCII)是将输入端IN 的实数转换成 ASCII字符串,其转换结果存入以 OUT 为起始字节地址的3~15个连续字节的缓冲区中。实数转换为 ASCII码指令的格式操作数如图5-4所示。
西门子S7-200SMARTPLC的实数格式最多支持7位小数,若显示7位以上的小数会
图5-4 实数转 ASCII码指令的 FMT操作数
产生一个四舍五入的错误。图5-4中,SSSS表示输出缓冲区 OUT 的大小,它的范围为3~15个字节。输出缓冲区的大小应大于输入实数小数点右边的位数,如实数-3.89546,小数点右边有5位,SSS应大于5,至少为6。与整数转 ASCII码指令相比,实数转 ASCII码的输出缓冲区的格式还具有以下规则:
① 小数点右侧的数值按照指定的小数点右侧的数字位数被四舍五入;
②输出缓冲区的大小应至少比小数点右侧的数字位多3个字节。
例5-10 实数转ASCII码指令的使用。将VD10中的实数转换成从VB100开始的10个ASCII码字符,使用16#A3的格式,用点号作小数点,后面跟3位小数,程序如表5-20所示。
表5-20 实数转 ASCII码指令程序
(4)十六进制整数与 ASCII码相互转换指令
ASCII码30~39和41~46与十六进制数为0~9和 A~F相对应,使用 HTA 指令可将十六进制整数转换为 ASCII码字符串;使用 ATH 指令可将 ASCII码字符串转换为相应的十六进制整数。
ATH 指令将一个长度为 LEN 从IN 开始的 ASCII码字符串转换成从 OUT 开始的十六进制整数;HTA 指令将从输入字节IN 开始的长度为 LEN 的十六进制整数转换成从 OUT开始的 ASCII码字符串。ASCII码和十六进制数的有效范围为0~255。
例5-11 ASCII码转换成十六进制整数指令的使用。将 VB100~VB102中存放的3个ASCII码34、42、38转换成十六进制数。程序及运行结果如表5-21所示。表中 “x”为半字节,表示 VB11的低4位值未改变。
表5-21 ASCII码转换成十六进制整数指令程序
编码与译码指令
编码指令 ENCO (Encode)是将输入的字型数据IN 中为1的最低有效位的位数写入输出字节 OUT 的最低4位,即用半字节对一个字型数据16位中的 “1”位有效位进行编码。它的输入IN 为字型数据,输出 OUT 为字节型数据,其指令如表5-22所示。
表5-22 编码指令
译码指令 DECO (Decode)是 将 输 入 的 字 节 型 数 据IN 的 低 4 位 表 示 的 位 号 输 出 到OUT 所指定的单元对应位置1,而其它位清0。即对半字节的编码进行译码,以选择一个字型数据16位中的 “1”位。它的输入IN 为字节型数据,输出 OUT 为字型数据,其指令如表5-23所示。
表5-23 译码指令
例5-12 编码和译码指令的举例,其程序如表5-24所示。若I0.1常开触点为 OFF 而I0.0触点为 ON,执行 ENCO 指令进行编码操作后,VB100中的值为0;执行 DECO 指令进行译码操作后,VW10中的值也为16#00。若I0.1常开触点为 ON,I0.0触点也为 ON时,执行 ENCO 指令进行编码操作后,VB100中的值为3;执行 DECO 指令进行译码操作后,VW10中的值为16#0008,即二进制数0000000000001000。
表5-24 编码和译码指令程序
七段显示译码指令
S7-200SMARTPLC七段显示译码指令SEG (Segment)是根据输入字节IN 低4位定的十六进制 数 (16#0~16#F) 产 生 点 亮 七 段 显 示 器 各 段 的代码,并 送 到 输 出 字节OUT。七段显示器的abcdefg (D0~D6)段分别对应于输出字节的第0~6位,若输出字节的某位为1时,其对应的段显示;输出字节的某位为0时,其对应的段不亮。字符显示与各段的关系如表5-25所示。例如要显示数字 “2”时,D0、D1、D3、D4、D6为1,其余为0。
表5-25 字符显示与各段关系
七段显示译码指令如表5-26所示。
表5-26 七段显示译码指令
例5-13 若PLC的I0.0外接按钮SB0,QB0外接1位LED共阴极数码管,要求每按1次按钮时,共阴极数码管显示的数字加1,其显示数字为0~9。
分析:可以使用 C0增计数器对按钮次数进行统计,再将 C0中的整数转换为相应 BCD码后送入 MB0,最后将 MB0中的数值转换为相应的段码即可。编写的程序如表5-27所示。
表5-27 七段显示译码程序
线下实训学习:
电气工程师~线下班火爆招生中( 湖南 株洲 校区)
电气工程师~线下班火爆招生中(广东深圳)
线上利用业余时间学习:
线上电气工程师特训营介绍
参加活动领取学习资料
参加方式
第一步:转发公众号文章,
第二步:添加老师微信
第三步:把自己分享朋友圈的截图发老师微信,即可领取学习资料 |