5.1.4 PLC转换指令
转换指令是对操作数的类型进行转换,并输出到指定目标地址中去。转换指令包括数据的类型转换、数据的编码和译码指令以及字符串类型转换指令。
不同功能的指令对操作数要求不同。类型转换指令可将固定的一个数据用到不同类型要求的指令中,包括字节与字整数之间的转换,整数与双整数的转换,双字整数与实数之间的转换,BCD码与整数之间的转换等。
1. 字节与字整数之间的转换
字节型数据与字整数之间转换的指令格式见表5-7所示。
表5-7 字节型数据与字整数之间转换指令
LAD
|
|
|
STL
|
BTI IN,OUT
|
ITB IN,OUT
|
操作数及数据类型
|
IN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量, 数据类型:字节
OUT:VW, IW, QW, MW, SW, SMW, LW, T, C, AC,数据类型:整数
|
IN:VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常量,数据类型:整数
OUT:VB, IB, QB, MB, SB, SMB, LB, AC, 数据类型:字节
|
功能及
说明
|
BTI指令将字节数值(IN)转换成整数值,并将结果置入OUT指定的存储单元。因为字节不带符号,所以无符号扩展
|
ITB指令将字整数(IN)转换成字节,并将结果置入OUT指定的存储单元。输入的字整数0至255被转换。超出部分导致溢出,SM1.1=1。输出不受影响
|
ENO=0的错误条件
|
0006 间接地址
SM4.3 运行时间
|
0006 间接地址
SM1.1 溢出或非法数值
SM4.3 运行时间
|
2. 字整数与双字整数之间的转换
字整数与双字整数之间的转换格式、功能及说明,如表5-8所示。
3. 双整数与实数之间的转换
双整数与实数之间的转换的转换格式、功能及说明,如表5-9所示。
表5-8 字整数与双字整数之间的转换指令
LAD
|
|
|
STL
|
ITD IN,OUT
|
DTI IN,OUT
|
操作数及数据类型
|
IN:VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常量, 数据类型:整数
OUT:VD, ID, QD, MD, SD, SMD, LD, AC,数据类型:双整数
|
IN:VD, ID, QD, MD, SD, SMD, LD, HC, AC,常量,数据类型:双整数
OUT:VW, IW, QW, MW, SW, SMW, LW, T, C, AC, 数据类型:整数
|
功能及
说明
|
ITD指令将整数值(IN)转换成双整数值,并将结果置入OUT指定的存储单元。符号被扩展
|
DTI指令将双整数值(IN)转换成整数值,并将结果置入OUT指定的存储单元。如果转换的数值过大,则无法在输出中表示,产生溢出SM1.1=1,输出不受影响
|
ENO=0的错误条件
|
0006 间接地址
SM4.3 运行时间
|
0006 间接地址
SM1.1 溢出或非法数值
SM4.3 运行时间
|
表5-9 双字整数与实数之间的转换指令
LAD
|
|
|
|
STL
|
DTR IN,OUT
|
ROUND IN,OUT
|
TRUNC IN,OUT
|
操作数及数据类型
|
IN:VD, ID, QD, MD, SD, SMD, LD, HC, AC, 常量
数据类型:双整数
OUT:VD, ID, QD, MD, SD, SMD, LD, AC
数据类型:实数
|
IN:VD, ID, QD, MD, SD, SMD, LD, AC, 常量
数据类型:实数
OUT:VD, ID, QD, MD, SD, SMD, LD, AC
数据类型:双整数
|
IN:VD, ID, QD, MD, SD, SMD, LD, AC, 常量
数据类型:实数
OUT:VD, ID, QD, MD, SD, SMD, LD, AC
数据类型:双整数
|
功能及
说明
|
DTR指令将32位带符号整数IN转换成32位实数,并将结果置入OUT指定的存储单元
|
ROUND指令按小数部分四舍五入的原则,将实数(IN)转换成双整数值,并将结果置入OUT指定的存储单元
|
TRUNC(截位取整)指令按将小数部分直接舍去的原则,将32位实数(IN)转换成32位双整数,并将结果置入OUT指定存储单元
|
ENO=0的错误条件
|
0006 间接地址
SM4.3 运行时间
|
0006 间接地址
SM1.1 溢出或非法数值
SM4.3 运行时间
|
0006 间接地址
SM1.1 溢出或非法数值
SM4.3 运行时间
|
值得注意的是:不论是四舍五入取整,还是截位取整,如果转换的实数数值过大,无法在输出中表示,则产生溢出,即影响溢出标志位,使SM1.1=1,输出不受影响。
4. BCD码与整数的转换
BCD码与整数之间的转换的指令格式、功能及说明,如表5-10所示。
表5-10 BCD码与整数之间的转换的指令
LAD
|
|
|
STL
|
BCDI OUT
|
IBCD OUT
|
操作数及数据类型
|
IN :VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常量
OUT:VW, IW, QW, MW, SW, SMW, LW, T, C, AC
IN/OUT数据类型:字
|
功能及
说明
|
BCD-I指令将二进制编码的十进制数IN转换成整数,并将结果送入OUT指定的存储单元。IN的有效范围是BCD码 0至9999
|
I-BCD指令将输入整数IN转换成二进制编码的十进制数,并将结果送入OUT指定的存储单元。IN的有效范围是0至9999
|
ENO=0的错误条件
|
0006 间接地址,SM1.6 无效BCD数值,SM4.3 运行时间
|
注意:(1)数据长度为字的BCD格式的有效范围为:0~9999(十进制),0000~9999(十六进制)0000 0000 0000 0000~1001 1001 1001 1001(BCD码)。
(2)指令影响特殊标志位SM1.6(无效BCD)。
(3)在表5-10的LAD和STL指令中,IN和OUT的操作数地址相同。若IN和OUT操作数地址不是同一个存储器,对应的语句表指令为: MOV IN OUT
BCDI OUT
5. 译码和编码指令
译码和编码指令的格式和功能如表5-11所示。
表5-11 译码和编码指令的格式和功能
LAD
|
|
|
STL
|
DECO IN,OUT
|
ENCO IN,OUT
|
操作数及数据类型
|
IN:VB, IB, QB, MB, SMB, LB, SB, AC, 常量。数据类型:字节
OUT:VW, IW, QW, MW, SMW, LW, SW, AQW, T, C, AC。数据类型:字
|
IN:VW, IW, QW, MW, SMW, LW, SW, AIW, T, C, AC, 常量。数据类型: 字
OUT:VB, IB, QB, MB, SMB, LB, SB, AC。数据类型:字节
|
功能及
说明
|
译码指令根据输入字节(IN)的低4位表示的输出字的位号,将输出字的相对应的位,置位为1,输出字的其他位均置位为0
|
编码指令将输入字(IN)最低有效位(其值为1)的位号写入输出字节(OUT)的低4位中
|
ENO=0的错误条件
|
0006 间接地址, SM4.3 运行时间
|
【例5-8】译码编码指令应用举例。如图5-11所示。
若(AC2)=2,执行译码指令,则将输出字VW40的第二位置1,VW40中的二进制数为2#0000 0000 0000 0100;若(AC3)=2#0000 0000 0000 0100,执行编码指令,则输出字节VB50中的错误码为2。
6. 七段显示译码指令
图5-12 与七段显示码对应的代码
七段显示器的abcdefg段分别对应于字节的第0位~第6位,字节的某位为1时,其对应的段亮;输出字节的某位为0时,其对应的段暗。将字节的第7位补0,则构成与七段显示器相对应的8位编码,称为七段显示码。数字0~9、字母A~F与七段显示码的对应如图5-12所示。
七段译码指令SEG将输入字节16#0~F转换成七段显示码。指令格如表5-12所示。
表5-12七段显示译码指令
LAD
|
STL
|
功能及操作数
|
|
SEG IN,OUT
|
功能:将输入字节(IN)的低四位确定的16进制数(16#0~F),产生相应的七段显示码,送入输出字节OUT
IN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量。
OUT:VB, IB, QB, MB, SMB, LB, AC。IN/OUT的数据类型:字节
|
使ENO = 0的错误条件:0006 间接地址,SM4.3 运行时间。
【例5-9】编写显示数字0的七段显示码的程序。程序实现如图5-13所示。
LD I0.1
SEG 0, AC1
图5-13 例5-9题图
程序运行结果为AC1中的值为16#3F(2#0011 1111)。
7. ASCII码与十六进制数之间的转换指令
ASCII码与十六进制数之间的转换指令指令格式和功能如表5-13所示。
表5-13 ASCII码与十六进制数之间转换指令的格式和功能
LAD
|
|
|
STL
|
ATH IN,OUT,LEN
|
HTA IN,OUT,LEN
|
操作数及数据类型
|
IN/ OUT: VB, IB, QB, MB, SB, SMB, LB。数据类型:字节
LEN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量。数据类型:字节。最大值为255
|
功能及
说明
|
ASCII至HEX(ATH)指令将从IN开始的长度为LEN 的ASCII字符转换成十六进制数,放入从OUT开始的存储单元
|
HEX至ASCII (HTA)指令将从输入字节(IN)开始的长度为LEN的十六进制数转换成ASCII字符,放入从OUT开始的存储单元
|
ENO=0的错误条件
|
0006 间接地址, SM4.3 运行时间 ,0091 操作数范围超界
SM1.7 非法ASCII数值(仅限ATH)
|
注意:合法的ASCII码对应的十六进制数包括30H到39H,41H到46H。如果在ATH指令的输入中包含非法的ASCII码,则终止转换操作,特殊内部标志位SM1.7置位为1。
【例5-10】将VB10~VB12中存放的3个ASCII码33、45、41,转换成十六进制数。
梯形图和语句表程序如图5-14所示。
LD I1.0
ATH VB10, VB20, 3
图5-14 例5-10题图
程序运行结果如下:
可见将VB10~VB12中存放的3个ASCII码33、45、41,转换成十六进制数3E和Ax ,放在VB20和VB21中,“x”表示VB21的“半字节”即低四位的值未改变。
|