转换指令是指对操作数的类型进行转换,包括数据的类型转换、码的类型转换以及数据 和码之间的类型转换。
4.5.1 数据类型转换
数据类型主要包括字节、整数、双整数、实数,现在的可编程序控制器对 BCD 码十进 制数据和ASCII 字符型数据的处理能力也大大增强。不同性质的指令对操作数的类型要求不 同,类型转换指令可将固定的一个数值用到不同类型要求的指令,而不必对数据进行针对类 型的重新装载。
1.字节与整数
(1)字节到整数。
BTI,字节转换为整数指令。使能输入有效时,将字节输入数 据IN 转换成整数类型,并将结果送到 OUT 输出。字节型是无符号 的,所以没有符号扩展。
使能流输出 ENO 断开的出错条件:SM4.3(运行时间)、0006
(间接寻址)。
指令格式: BTI IN, OUT
例: BTI VB0, AC0
(2)整数到字节。
ITB,整数转换为字节指令。使能输入有效时,将整数输入数 据IN 转换成字节类型,并将结果送到 OUT 输出。输入数据超出字 节范围(0~255)则产生溢出。
转换指令影响的特殊存储器位:SM1.1(溢出)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间接寻 址)。
指令格式: ITB IN, OUT
例: ITB AC0, VB10 2.整数与双整数
(1)双整数到整数。
DTI,双整数转换为整数指令。使能输入有效时,将双整数输 入数据 IN 转换成整数类型,并将结果送到 OUT 输出。输入数据超 出整数范围则产生溢出。
转换指令影响的特殊存储器位:SM1.1(溢出)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间接寻 址)。
指令格式: DTI IN, OUT
例: DTI AC0, VW20
124 可编程序控制器应用教程(第二版)
(2)整数到双整数。
ITD,整数转换为双整数指令。使能输入有效时,将整数输入 数据 IN 转换成双整数类型(符号进行扩展),并将结果送到 OUT 输出。
使能流输出 ENO 断开的出错条件:SM4.3(运行时间)、0006
(间接寻址)。
指令格式: ITD IN, OUT
例: ITD VW0, AC0 3.双整数与实数
(1)实数到双整数。
ROUND 和 TRUNC,实数转换为双整数指令。使能输入有效时,将实型输入数据 IN 转 换成双整数类型,并将结果送到OUT 输出。两条指令的区别是:前者小数部分 4 舍 5 入,
而后者小数部分直接舍去。
转换指令影响的特殊存储器位:SM1.1(溢出)。
使能流输出 ENO 断开的出错条件:SM1.1(溢出)、SM4.3(运行时间)、0006(间接寻 址)。
指令格式: ROUND IN, OUT TRUNC IN, OUT
例: ROUND VD0, AC0
(2)双整数到实数。
DTR,双整数转换为实数指令。使能输入有效时,将双整数输入数据 IN 转换成实型,
并将结果送到OUT 输出。
使能流输出 ENO 断开的出错条件:SM4.3(运行时间)、0006
(间接寻址)。
指令格式: DTR IN, OUT
例: DTR AC0, VD100 4.整数与 BCD 码
(1)BCD 码到整数。
BCDI,BCD 码转换为整数指令。使能输入有效时,将 BCD 码 输入数据 IN 转换成整数类型,并将结果送到 OUT 输出。输入数据 IN 的范围为 0~9999。
指令格式: BCDI OUT 例: BCDI AC0
(2)整数到 BCD 码
IBCD,整数转换为 BCD 码指令。使能输入有效时,将整数输入数据 IN 转换成 BCD 码
类型,并将结果送到OUT 输出。输入数据 IN 的范围为 0~9999。
指令格式: IBCD OUT 例: IBCD AC0 5.程序实例
功能:模拟量控制程序中的数据类型转换。将模拟量输入端采样值由整数转换为双整 数,然后由双整数转换为实数,再除以一个比例因子得到PLC 可以处理范围内的值。
本程序如图4.27 所示。
4.5.2 编码和译码 1.编码
ENCO,编码指令。使能输入有效时,将字型输入数据 IN 的最低有效位(值为 1 的 位)的位号输出到OUT 所指定的字节单元的低 4 位。即用半个字节来对一个字型数据 16 位 中的1 位有效位进行编码。
使能流输出ENO 断开的出错条件:SM4.3(运行时间)、0006(间接寻址)。
指令格式: ENCO IN, OUT
例: ENCO AC0, VB0
LD SM0.0 //使能输入 ITD AIW2, AC0 //
//整数转换为双整数 //
DTR AC0, AC0 //
//双整数转换为实数 //
/R 32768.0, AC0 //
//实数除法指令 // AC0/32768=VD100
MOVR AC0, VD200 //
//实数传送指令
图4.27 数据类型转换程序例 以本指令为例,指令执行情况如表4.26 所示。
126 可编程序控制器应用教程(第二版)
表 4.26 编码指令执行结果
时间 单元地址 单元内容 说明
AC0 00000000 01000000 要编码的为AC0 中的第 6 位(始于 0 位)
执行前
VB0 xxxxxxxx 任意值 AC0 00000000 01000000 数据未变 执行后
VB0 00000110 将位号6 写入 VB0 的低 4 位 2.译码
DECO,译码指令。使能输入有效时,将字节型输入数据 IN 的低 4 位所表示的位号对 OUT 所指定的字单元的对应位置 1,其他位置 0。即对半个字节的编码进行译码来选择一个 字型数据16 位中的 1 位。
使能流输出ENO 断开的出错条件:SM4.3(运行时间)、0006(间接寻址)。
指令格式: DECO IN, OUT
例: DECO VB0, AC0 本指令执行情况如表4.27 所示。
表 4.27 译码指令执行结果
执行情况 单元地址 单元内容 说明
VB0 00001000 要编码的位的位号为8,存于 VB0 的低 4 位 执行前 AC0 xxxxxxxxxxxxxxxx 任意值
VB0 00001000 数据未变
执行后 AC0 00000001 00000000 将位号8 对应的第 8 位置 1,其他位为 0
4.5.3 七段码
SEG,七段码指令。使能输入有效时,将字节型输入数据 IN 的低 4 位有效数字产生相 应的七段码,并将其输出到OUT 所指定的字节单元。
该指令在数码显示时直接应用,非常方便。
使能流输出ENO 断开的出错条件:SM4.3(运行时间)、0006(间接寻址)
指令格式: SEG IN, OUT
例: SEG VB10, AC0 4.5.4 字符串转换
字符串转换是将标准字符编码 ASCII 码字符串与 16 进制值、整数、双整数及实数之间 进行的转换。
可进行转换的ASCII 码为 0~9 及 A~F 的编码。
1.指令种类
(1)ASCII 码转换为十六进制指令。
(2)十六进制转换为 ASCII 码指令。
(3)整数转换为 ASCII 码指令。
(4)双整数转换为 ASCII 码指令。
使能流输出 ENO 断开的出错条件:SM4.3(运行时间)、0006
(间接寻址)、0091(操作数超界)。