1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 西门子PLC读取的仪表数据(浮点数)如何转换为整数

西门子PLC读取的仪表数据(浮点数)如何转换为整数

时间:2020-09-14 01:13:25

相关推荐

西门子PLC读取的仪表数据(浮点数)如何转换为整数

看到一个网友的问题,西门子200PLC采用MODBUS RTU协议采集多功能仪表的数据,接收的数据均是32位的单精度浮点数,我怎么在PLC程序里面实现单精度浮点数与十进制之间的转换?

且问题的配图如下:

问题配图

结合图片看了你的问题,其实你的问题就是你接收的到的32位数据是450F9000,而且你知道这个数据其实是单精度浮点数,转换为10进制的结果是2297,你想知道在西门子200PLC中如何实现这个转换工程?

来说一下解题思路吧:

1:你不知道西门子200PLC中如何实现这个转换,可能的原因是你对16#450F9000如何转换为2297可能也有点不理解?

2:你不知道西门子200PLC中应该用什么样的指令来实现这个转换工程!

16#450F9000如何转换为2297?

来先看一下计算器中的转换吧:

在计算器中先研究一下数据

这是我电脑win10系统中的计算器切换到程序员模式,可以看到16进制的450F 9000转换为十进制数是1158647808,和你的2297是不一样的!--但是我在BIN就是二进制这里画了红线,我想说的是你如果对西门子PLC中32位浮点数的数据格式有清楚的理解的话,你根据这段二进制值就可以推算出这个实数的值是多少,因为我(控制研究控)在之前的问答和文章中有说过这个知识点,所以这里我就不再多说了!---但是我自己计算了一下结果就是2297!

这个图片就是我计算的过程

PLC程序中如何将16进制的450F9000转换为十进制数?

其实西门子PLC中的ROUND指令就是用来取整的将浮点数转换为整数的,西门子300和200PLC中都有这个指令,所以我都测试了一下!

先看一下西门子300PLC执行的结果:

STEP7项目中做的程序监控图

这个图片是我在step7项目中建立的一个300CPU项目的简单程序,可以看到我把16#450F9000这串数据认为是双正式,通过DI_R指令转换的结果存储到MD10中得到的实数值是1.15865e+009,这是一个双整数转实数的指令,但是如题目所说开始的16#450F9000它本身就是浮点数格式,因此这里视为双整数是不对的!

而我又用round指令,将16#450F9000这个数据转换为整数,可以看到MD20的结果就是2297,这个结果才是对的。这里就是已经认定16#450F9000这串数据代表的是32位实数,因此结果正确!

再看一下西门子200PLC中的执行结果:

西门子200程序模拟运行截图

这个图片是我在西门子200的非官方模拟器中做的测试程序,可以看到和西门子300PLC的程序是很相似的,指令都是一样的DI_R双整数转实数,和ROUND取整指令!

也可以看到他们执行的结果都是一样的,最重要的是通过round指令就可以实现将32位浮点数16#450F9000转换为整数2297,也就是10进制的2297!

所以说这个问题应该是很简单的,就一个round指令就可以实现浮点数取整的功能,其实这个在模拟量转换中经常用到的,应该说是一个常见指令,做工控的朋友都应该了解!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。