0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

autozhineng 来源:PLC与自控设备 2023-06-01 10:18 次阅读

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

36f9e3aa-ffb1-11ed-90ce-dac502259ad0.jpg

问题配图结合图片看了你的问题,其实你的问题就是你接收的到的32位数据是450F9000,而且你知道这个数据其实是单精度浮点数,转换为10进制的结果是2297,你想知道在西门子200PLC中如何实现这个转换工程?来说一下解题思路吧:1:你不知道西门子200PLC中如何实现这个转换,可能的原因是你对16#450F9000如何转换为2297可能也有点不理解?2:你不知道西门子200PLC中应该用什么样的指令来实现这个转换工程!16#450F9000如何转换为2297?来先看一下计算器中的转换吧:

370bbef4-ffb1-11ed-90ce-dac502259ad0.jpg

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

371b972a-ffb1-11ed-90ce-dac502259ad0.jpg

这个图片就是我计算的过程PLC程序中如何将16进制的450F9000转换为十进制数?其实西门子PLC中的ROUND指令就是用来取整的将浮点数转换为整数的,西门子300和200PLC中都有这个指令,所以我都测试了一下!先看一下西门子300PLC执行的结果:

372c10a0-ffb1-11ed-90ce-dac502259ad0.jpg

STEP7项目中做的程序监控图这个图片是我在step7项目中建立的一个300CPU项目的简单程序,可以看到我把16#450F9000这串数据认为是双正式,通过DI_R指令转换的结果存储到MD10中得到的实数值是1.15865e+009,这是一个双整数转实数的指令,但是如题目所说开始的16#450F9000它本身就是浮点数格式,因此这里视为双整数是不对的!而我又用round指令,将16#450F9000这个数据转换为整数,可以看到MD20的结果就是2297,这个结果才是对的。这里就是已经认定16#450F9000这串数据代表的是32位实数,因此结果正确!再看一下西门子200PLC中的执行结果:

373d011c-ffb1-11ed-90ce-dac502259ad0.jpg

西门子200程序模拟运行截图这个图片是我在西门子200的非官方模拟器中做的测试程序,可以看到和西门子300PLC的程序是很相似的,指令都是一样的DI_R双整数转实数,和ROUND取整指令!也可以看到他们执行的结果都是一样的,最重要的是通过round指令就可以实现将32位浮点数16#450F9000转换为整数2297,也就是10进制的2297!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    5008

    文章

    13146

    浏览量

    461957
  • 西门子
    +关注

    关注

    93

    文章

    3007

    浏览量

    115611
  • MODBUS
    +关注

    关注

    28

    文章

    1759

    浏览量

    76820
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80830
  • 浮点数
    +关注

    关注

    0

    文章

    60

    浏览量

    15864

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

文章出处:【微信号:PLC与自控设备,微信公众号:PLC与自控设备】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问怎么将IEEE 754(32位十六进制)转换为十进制浮点数

    亲爱的先生,我需要知道把IEEE 754(32位十六进制)转换成pic24小数浮点数的方法。例如,如果我要将下面的十六进制数据转换为浮点数a
    发表于 09-04 06:54

    代码行如何来测试一个浮点数是否是一个整数

    我用下面的代码行来测试一个浮点数是否是一个整数……我理解一个浮点数有一个有限的分辨率,并且这些值不会精确地落在整个数字上,但是误差很小,因此比较起来非常小。这是最好的方法,还是有更好的功能?或者,我
    发表于 05-15 10:42

    浮点数整数解析

    的成员的大小决定,也就是说浮点数或者整数都无所谓了,都一样,他会自动转换,那我把浮点数或者更进一步负数,存为char,传过去过后,以同样的联合体来解析即可。原作者:骁骑校尉
    发表于 11-01 11:40

    浮点数的运算怎么转换整数运算?

    浮点数的运算怎么转换整数运算
    发表于 10-12 06:31

    modbus 如何读取浮点数

    本文为大家介绍modbus读取浮点数的两个程序设计。
    发表于 02-08 10:03 1.4w次阅读

    浮点数在内存中的存储

    浮点数在内存中的存储和整数不同,因为整数都可以转换为一一对应的二进制数据。而浮点数的存储是由符号
    的头像 发表于 09-20 10:52 4026次阅读
    <b class='flag-5'>浮点数</b>在内存中的存储

    python整数浮点数分解

    2.3 python整数浮点数 Python 支持的数字类型有三种:整数浮点数和复数。 1. 整数(Int) 通常被称为整型,是正或负
    的头像 发表于 02-18 09:09 1838次阅读

    深度剖析PLC编程中的浮点数

    PLC 必须处理三种主要类型的值:布尔值、整数浮点数。这些最后的浮点值会给程序员和技术人员带来最大的困惑。
    的头像 发表于 04-29 16:20 1.8w次阅读
    深度剖析<b class='flag-5'>PLC</b>编程中的<b class='flag-5'>浮点数</b>

    西门子PLC的基本数据类型及其使用

    PLC在处理模拟量时,其输入和输出大多是整数,用浮点数来处理这些数据时要进行整数浮点数之间的相
    的头像 发表于 02-17 10:08 2.4w次阅读

    什么是浮点数

    Python数据类型第一种:字符串(str)。 Python数据类型第二种:整数(int)。 Python数据类型第三种:浮点数
    的头像 发表于 02-23 14:58 4489次阅读

    解析python整数浮点数不同进制整数

    python数字包括整数浮点数、复数、有理分数等,整数还可以用不同进制表示。
    的头像 发表于 03-10 10:01 1030次阅读

    西门子PLC 64位浮点数转32位浮点数程序分享

    西门子S7-200测试通过,程序网上而来,献给有需要的各位!
    的头像 发表于 03-29 09:39 2490次阅读

    西门子S7-1200PLC数据处理指令:浮点数整数指令

    定义:该指令将输入 IN 的值解释为浮点数,并转换为一个 DINT 数据类型的整数。如果输入值恰好是在一个偶数和一个奇数之间,则选择偶数。指令结果被发送到输出 OUT,可供查询。
    的头像 发表于 04-04 09:45 7189次阅读

    西门子PLC浮点数程序案例分享

    64位浮点数保存于VB0开始的存储区中,转换得出的32位浮点数保存于VD100中。
    发表于 10-27 17:07 3195次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>PLC</b><b class='flag-5'>浮点数</b>程序案例分享

    modbus浮点数怎么读取

    Modbus是一种通信协议,常用于工业自动化系统中的设备之间的通信。它支持多种数据类型,包括整数浮点数、字符串等。浮点数在工业领域中广泛应用,因此了解如何
    的头像 发表于 12-28 14:38 5805次阅读