PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 60224|回复: 0

[西门子] 手把手教你西门子 S7-200SMARTPLC数据转换指令

[复制链接]
发表于 2024-8-9 09:11:09 | 显示全部楼层 |阅读模式
转换指令是对操作数的类型进行转换,并输出到指定的目标地址中去。西门子 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 七段显示译码程序



线下实训学习:

电气工程师~线下班火爆招生中( 湖南 株洲 校区)

电气工程师~线下班火爆招生中(广东深圳)

线上利用业余时间学习:

线上电气工程师特训营介绍



参加活动领取学习资料









参加方式

第一步:转发公众号文章,

第二步:添加老师微信

第三步:把自己分享朋友圈的截图发老师微信,即可领取学习资料

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-10 20:32 , Processed in 0.044810 second(s), 28 queries .

快速回复 返回顶部 返回列表