发表于:2018/11/14 12:36:38
#0楼
是这样的:
图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:程序主体
图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。
总感觉是我的思路出问题了,试了编程手册中的好多指令,搞不定。
有哪位高手能指点下或者有相似的程序给我参照下啊,感激不尽!
[此贴子已经被jint于2018/11/15 17:21:30编辑过]