故事作者:万泉河

最近创作

看看TA的故事

【万泉河】SMART 200转换LREAL长浮点型数据

已锁定

万泉河

  • 帖子

    10817
  • 精华

    132
  • 被关注

    901

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

【万泉河】SMART 200转换LREAL长浮点型数据

1999

8

2021-10-24 16:44:47

【万泉河】SMART 200转换LREAL长浮点型数据

 

我有写过文章,讲浮点数累加,当累加数太大之后, 会产生溢出的问题。后来终极的解决方案不是自己做函数,而是当CPU支持64位的长浮点数LREAL数据之后,自然就迎刃而解了。

 

技术的进步秒杀你曾经一切辛辛苦苦的努力。

 

这个技能不光PLC需要, 反而更需要的是各种流量仪表。水流量表,电度表等等。对这些仪表来说,累加是基本功能,所以他们只需要把底层芯片升级到支持64位,也是瞬间解决了大问题。

 

然而技术的进步总不能完全同步的。

 

前段时间,就有遇到网友咨询,SMART 200跟流量计通讯,读来了LREAL类型的数据不能识别,该怎么处理。

 

即,现场的仪表很容易就升级了,然而,控制系统使用的PLC却并不能做到同步升级。 总要遇到这样的速度不匹配的状况。

 

如果PLC是S7-1200/1500, 那很简单, 直接用LREAL数据来识别运算即可。

 

而SMART 200所能识别的数据最多只有32位,根本没有可能。

 

所以唯一的办法是自己动手做个转换函数,转换为32位的REAL数据。

 

这个转换过程, 就类似于把一个DINT转换为INT一样, 前提都是数值表达区间没有过限,同时与64位数据相比, 还会损失一部分表达精度。 但通常,这些都不重要。 重要的是能识别。这才是最主要的, 有时候也是最要命的。

 

所以,专门做了个函数。

 

函数的使用和接口都很简单。 收来的2个DWORD依次放到2个输入管脚,输出部分即可得到答案。

 

然而,测试和验证却是不太容易。

 

我现在可以告诉你,比如一个数值 -123.44 , 对应的2个DWORD分别是:

16#C05E_DC6A

16#7EF9_DB23

 

那你仍然不会满意, 你会需要更多的数值多次验证。

 

那么我们如何可以知道一个LREAL数值, 拆到2个DWORD之后的数值是多少呢?不知道就无从测试啊!

 

这里教给大家一个简便的方法。 这种方法在实际调试中非常有用,特别是各种通讯数据处理时。 然而恐怕大部分同行不知道。或者说没想到过。

 

准备一个S7-1200的PLC。

变量表中定义一个LREAL的变量,指向比如M10.0, 然后再定义2个DWORD, 分别指向MD10和MD14。

 

 

然后在线后添加这3个变量的监控:

 

在修改值中随意修改数值,即在下方监视值中看到了对应的十六进制的值。

 

事实上我做这个程序的测试,就是同时开着S7-1200和SMART200,对照执行实现的。

 

如果开PLCSIM, 也完全可以。 我在S7-300的时候,类似的调试都是直接使用PLCSIM的。甚至,STEP7中都不需要定义什么变量,直接监控绝对地址的变量值即可。 有正在运行的PLC, 随便找一块未用的数据区进行这种数值的转换,都可以。

 

把得到的数值在SMART 200的监控表中监控,就得到了正确的转换值:

 

 

 


【万泉河】SMART 200转换LREAL长浮点型数据 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3233条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。