发表于:2020/5/28 9:42:16
#10楼
你可能把几个概念混在一起了。除了我前面说的问题,还有几个问题要注意:
以MW0为例:
MW0 对应40001,这个没有疑问,MW0是16位一个寄存器,也没有异议。
把MW0显示成十进制数,没有疑义,比如他的值是2, mw0中肯定存的是0b0000000000000010(二进制)
但是: 在PLC软件中把MW0在PLC软件中显示成浮点数,这就要看软件的习惯了,以前Unity是把MW0和MW1连起来算一个浮点数, 你修改mw0的值,mw1会变(浮点的低字节),现在so machine咋样,你可以试一下。按说,显示浮点数应该是mf0, 你把mf0改成2.0,会看到mw0和mw1中的十六进制数,就是浮点数2.0的“源码表示”,具体值就是0h“mw0”连接“mw1”的四个字节。
组态王肯定是吧40001中的1减一,就是零,装换成Modbus中的寄存器位置就是0000,去读取保持寄存器0000和0001,然后,按他的习惯转换成浮点数显示。
所以,你应该这么试:
以十进制数格式在PLC中观察:
%mw0: ?? 十进制显示
%mw1: ?? 十进制显示
%mw2: ?? 十进制显示
%mw3: ?? 十进制显示
%mw0: ?? 浮点数显示
%mw1: ?? 浮点数显示
%mw2: ?? 浮点数显示
%mw3: ?? 浮点数显示
然后下组态王中定义浮点数 AF:40001
从组态王中写AF=12.34
看PLC中哪个能对应,都不能对应,就调整字节顺序再试,肯定能对上。
以MW0为例:
MW0 对应40001,这个没有疑问,MW0是16位一个寄存器,也没有异议。
把MW0显示成十进制数,没有疑义,比如他的值是2, mw0中肯定存的是0b0000000000000010(二进制)
但是: 在PLC软件中把MW0在PLC软件中显示成浮点数,这就要看软件的习惯了,以前Unity是把MW0和MW1连起来算一个浮点数, 你修改mw0的值,mw1会变(浮点的低字节),现在so machine咋样,你可以试一下。按说,显示浮点数应该是mf0, 你把mf0改成2.0,会看到mw0和mw1中的十六进制数,就是浮点数2.0的“源码表示”,具体值就是0h“mw0”连接“mw1”的四个字节。
组态王肯定是吧40001中的1减一,就是零,装换成Modbus中的寄存器位置就是0000,去读取保持寄存器0000和0001,然后,按他的习惯转换成浮点数显示。
所以,你应该这么试:
以十进制数格式在PLC中观察:
%mw0: ?? 十进制显示
%mw1: ?? 十进制显示
%mw2: ?? 十进制显示
%mw3: ?? 十进制显示
%mw0: ?? 浮点数显示
%mw1: ?? 浮点数显示
%mw2: ?? 浮点数显示
%mw3: ?? 浮点数显示
然后下组态王中定义浮点数 AF:40001
从组态王中写AF=12.34
看PLC中哪个能对应,都不能对应,就调整字节顺序再试,肯定能对上。