登录
首页 PLC论坛 施耐德电气PLC
回帖 发帖
正文

主题:施耐德编程软件somachine中浮点转换求指点迷津

点击:5853 回复:8

楼主
是这样的:
图1:程序主体
图2:modbus IO scanner中显示的读取到的仪表的数据
图3:ST语言中赋值转换
施耐德编程软件somachine中,我通过modbus IO scanner读取一个仪表显示的温度值。IO scanner中读取时是以双字的形式来定义的,譬如图1中IW6和IW7两个字就是对应仪表的第二个通道的温度,但温度值是以单精度浮点数来实现的,IW6表示通道2测量值的高2字节,IW7表示低2字节。
现在IW6值是16840,IW7是0,直接将IW6对应的十进制16840通过另外的软件交换高低位后转换得到的温度是25.000000,与仪表显示一致。PS: 16840转换为16进制为:000041C8, 将其前后四位调换为41C80000转换为浮点数后就是25.000000了。
现在问题是:虽然上面高低位交换的只是IW6的前后四位,但我程序无论是将IW6对应的IB12和IB13对调或者将IW6和IW7对调,再将双字DWORD转换为real,却始终显示不了正确的值,图中我对调的是IW6和IW7。
总感觉是我的思路出问题了,试了编程手册中的好多指令,搞不定。
有哪位高手能指点下或者有相似的程序给我参照下啊,感激不尽!
附件 1.jpg
附件 2.jpg
附件 3.jpg
最后修改:2018/11/15 17:21:30
18-11-14 12:36
施耐德的PLC少见,之前用过TWIDO,后来装那个Somachine的软件失败后就一直弃用
18-11-14 12:53

引用 gk_0 在 2018/11/14 12:53:05 发言【内容省略】

表情,坛友们好像用的是少,我被这个问题已经折磨了两天时间了,头大,百度上也搜了,网上没找到合适的解决方案哎。
18-11-14 12:56
因为你得到通讯得到的值是IEEE754浮点数,你需要根据算法来编写程序转换。
算法如下:
附件 image.jpg
根据算法,在富士的PLC中我得到了正确的结果。
附件 image.jpg
在大多数PLC中,DWORD_TO_REAL仅仅代表将双字整型转换为浮点数,例如25转换为2.5E01而已,并不是将16进制浮点数转为10进制浮点数,这一点请知晓。
HAVE FUN!
18-11-14 14:50
谢谢! 我的思路看来根本就是错的,我在多找点资料,了解下浮点数的具体定义结合编程手册再看看。
18-11-14 15:50
这是三菱的,手册上写的是二进制浮点,可能问题就出在这里了。
附件 2018-11-15_100043.jpg
附件 2018-11-15_100140.jpg
18-11-15 10:07
somachine中我好像还没有找到对应的功能块,手册中也没见说明,咨询客服还没成功过。如果不借助相应指令的话,不知道ST语言是否可以实现?网上也找了好多,也看了三菱的浮点转换的视频,可如果对应到somachine又无语了,因为三菱的我还不会,更莫说完全看懂了,指令和somachine也不一样。
最后修改:2018/11/15 10:29:49
18-11-15 10:28

引用 yutianhe95 在 2018/11/15 10:28:39 发言【内容省略】

根据上面Fuji_Fa提供的咨询你可以自行编写一个转换功能块。
附件 snap3.jpg
你也可以添加下面的库来实现这个功能:
附件:
[本地下载]
这个问题将不再讨论了。
Good Luck~
18-11-15 14:26
非常感谢C版!表情
18-11-16 08:05

工控新闻

更多新闻资讯