设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
西门子PLC读取的仪表数据(浮点数)如何转换为整数 ...
返回列表
发新帖
[西门子]
西门子PLC读取的仪表数据(浮点数)如何转换为整数
[复制链接]
155
|
0
|
2024-12-3 09:31:57
|
显示全部楼层
|
阅读模式
看到一个网友的问题,西门子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!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
工控帮
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』