转换指令是将一种数据格式转换成另外一种格式进行存储。例如,要让一个整型数据和双整型数据进行算术运算,一般要将整型数据转换成双整型数据。
STEP7的转换指令见表4-27。
表4-27 转换指令
1.BCD转换成整数(BTI)
(1)BCD码的格式
BCD码是比较有用的,3位格式如图4-59所示,二进制的0~3位是个位,4~7位是十位,8~11位是百位,11~15位是符号位。7位格式如图4-60所示,二进制的0~3位是个位,4~7位是十位,8~11位是百位,11~15位是千位,16~19位是万位,20~23位是十万位,24~27位是百万位,28~31位是符号位。
图4-59 3位BCD码的格式
图4-60 7位BCD码的格式
(2)BCD转换成整数指令(BTI)
BCD转换成整数指令是将IN指定的内容以BCD码二~十进制格式读出,并将其转换为整数格式,输出到OUT端。如果IN端指定的内容超出BCD码的范围(例如4位二进制数出现1010~1111的几种组合),则执行指令时将会发生错误,使CPU进入STOP方式。BCD转换成整数指令和参数见表4-28。
表4-28 BCD转换成整数指令和参数
用一个例子来说明BCD转换成整数指令,梯形图和指令表如图4-61所示。当I0.0闭合时,激活BCD转换成整数指令,IN中的BCD数用16进制表示为16#22(就是十进制的22),转换完成后OUT端的MW0中的整数的十六进制是16#16。
图4-61 BCD转换成整数指令示例
2.整数转换成BCD(ITB)
整数转换成BCD指令是将IN端指定的内容以整数的格式读入,然后将其转换为BCD码格式输出到OUT端。如果IN端的整数大于999,PLC不停机,仍然正常运行。由于字的BCD码最大只能表示C#999(最高4位为符号位)。若IN端的内容大于999,CPU将IN端的内容直接送到OUT端输出,不经过I_BCD的转换。这时OUT输出的内容可能超出BCD码的范围。另外OUT端的内容若为BCD码,也有可能是超过999的整数转换出来的,例如整数2457通过I_BCD指令以后,OUT的值为C#999。因此在使用I_BCD指令时应该保证整数小于等于999。此外,如果IN端的整数为负整数时。转换出的BCD码最高4位为“1”。整数转换成BCD指令和参数见表4-29。
表4-29 整数转换成BCD指令和参数
用一个例子来说明整数转换成BCD指令,梯形图和指令表如图4-62所示。当I0.0闭合时,激活整数转换成BCD指令,IN中的整数存储在MW0中,(假设用16进制表示为16#16),转换完成后OUT端的MW2中的BCD数是22。
图4-62 整数转换成BCD指令示例
3.整数转换成双整数(ITD)
整数转换成双整数指令是将IN端指定的内容以整数的格式读入,然后将其转换为双整数码格式输出到OUT端。整数转换成双整数指令和参数见表4-30。
表4-30 整数转换成双整数指令和参数
用一个例子来说明整数转换成双整数指令,梯形图和指令表如图4-63所示。当I0.0闭合时,激活整数转换成双整数指令,IN中的整数存储在MW0中,(假设用16进制表示为16#0016),转换完成后OUT端的MD4中的双整数是16#0000 0016。
图4-63 整数转换成双整数指令示例
4.双整数转换成实数(DTR)
双整数转换成实数指令是将IN端指定的内容以双整数的格式读入,然后将其转换为实数码格式输出到OUT端。实数格式在后续算术计算中是很常用的,如3.14就是实数形式。双整数转换成实数指令和参数见表4-31。
表4-31 双整数转换成实数指令和参数
用一个例子来说明双整数转换成实数指令,梯形图和指令表如图4-64所示。当I0.0闭合时,激活双整数转换成实数指令,IN中的双整数存储在MD0中,(假设用10进制表示为16),转换完成后OUT端的MD4中的实数是16。一个实数要用4个字节存储。(www.zuozong.com)
图4-64 双整数转换成实数指令示例
【例4-10】请设计梯形图程序,将整数16#22转化成实数,并保存在MD10中。
【解】
STEP7中没有将整数直接转化成实数的指令,但可以通过数次转换将整数转换成实数,先将整数转换成双整数,再将双整数转换成实数。梯形图如图4-65所示。
图4-65 梯形图
5.实数四舍五入为双整数(ROUND)
ROUND指令是将实数进行四舍五入取整后转换成双整数的格式。实数四舍五入为双整数指令和参数见表4-32。
表4-32 实数四舍五入为双整数指令和参数
用一个例子来说明实数四舍五入为双整数指令,梯形图和指令表如图4-66所示。当I0.0闭合时,激活实数四舍五入指令,IN中的实数存储在MD0中,假设这个实数为3.14,进行四舍五入运算后OUT端的MD4中的双整数是3,假设这个实数为3.88,进行四舍五入运算后OUT端的MD4中的双整数是4。
图4-66 实数四舍五入为双整数指令示例
6.截取实数长整数部分(TRUNC)
截取实数长整数部分(TRUNC)指令是将实数舍弃小数部分,并将其转换为双整数格式。截取实数长整数部分(TRUNC)指令和参数见表4-33。
表4-33 截取实数长整数部分(TRUNC)指令和参数
用一个例子来说明截取实数长整数部分(TRUNC)指令,梯形图和指令表如图4-67所示。当I0.0闭合时,激活截取实数长整数部分指令,IN中的实数存储在MD0中,假设这个实数为3.14,舍弃实数的小数部分后,OUT端的MD4中的双整数是3,假设这个实数为3.88,舍弃实数的小数部分后OUT端的MD4中的双整数是3。
图4-67 截取实数长整数部分(TRUNC)指令示例
【关键点】TRUNC和ROUND指令是有区别的,前者是将实数的小数部分舍弃,而后者是四舍五入。
7.向上取整(CEIL)
向上取整(CEIL)指令是将实数向上取整,结果为大于指定实数的最小双整数。向上取整(CEIL)指令和参数见表4-34。
表4-34 向上取整(CEIL)指令和参数
用一个例子来说明向上取整(CEIL)指令,梯形图和指令表如图4-68所示。当I0.0闭合时,激活向上取整指令,IN中的实数存储在MD0中,假设这个实数为3.14,向上取整后,OUT端的MD4中的双整数是4,假设这个实数为3.88,向上取整后OUT端的MD4中的双整数是4。
图4-68 向上取整(CEIL)指令示例
8.向下取整(FLOOR)
向下取整(FLOOR)指令是将实数向下取整,结果为小于指定实数的最大双整数。向下取整(FLOOR)指令和参数见表4-35。
表4-35 向下取整(FLOOR)指令和参数
用一个例子来说明向下取整(FLOOR)指令,梯形图和指令表如图4-69所示。当I0.0闭合时,激活向下取整指令,IN中的实数存储在MD0中,假设这个实数为3.14,向下取整后,OUT端的MD4中的双整数是3,假设这个实数为-3.14,向下取整后OUT端的MD4中的双整数是-4。
图4-69 向下取整(FLOOR)指令示例
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。