登录
首页 工控软件 亚控WellinTech
回帖 发帖
正文

主题:组态王如何读取一个寄存器中的四组数据,,

点击:10491 回复:11

组态王如何读取一个寄存器中的四组数据,如果用swapf寄存器,如果是0x0002寄存器,请问怎么设置
19-02-16 14:48
请问你问的是组态王的modbus协议吗?还是别的?
是读取寄存器以后的排序问题吗?
19-02-16 16:24
modbus协议,一个寄存器有四个数据,怎么读这个寄存器
19-02-18 17:04
那就单独读取就行,比如读取40001,40002等等,用short.还是你非要一次读取long再强行分开?
19-02-22 21:09
40002这个寄存器如果有 四个数据怎么读
19-02-26 10:17
单独读取不了吧?   共用一个寄存器
19-02-26 10:36
是这样的,如果你定义一个数据点假设叫a,io整形,地址40002,数据类型用的是short的话,它就是一个16位的,只占一个寄存器40002,有2个字节(一个字16位,等于2个8位的字节).
是long这些类型的话,那么它就是32位的,包括了40002和40003.总共32位有4个8个位的字节,4个字节的排列由swap决定.
你可以一次读取long,那就是2个寄存器,然后想办法拆出来(编程或者运算?).
最好还是设置为short(ushort),一个一个读,不用拆了.
你现在说4个数,应该是4个字节,要用程序或者运算拆出来.
拆低8位,直接与就是 &255.拆高8位,右移8位再与或者除以256再与.(>>8)&255或/256.
高低位位置取决于swap.
-------------------------------------
请引用或@,以最快看到你的问题,便于及时回复.
19-02-26 16:31
好的 不过一个数等于两个字节,,你说的挺好,就是如果40003的话,,怎么用swap,寄存器已经选用40003,还怎么选到swap
19-02-27 09:35
不是选到swap,是写值到swap决定字节的排序.
swap你只要刚开始写一次就行.
给你举个浮点的说明一下(这个是swapf决定).
浮点用32位就是2个字4个字节组成.有的设备高字在前有的低字在前.
比如浮点数:3.14计算机转换存储是32位C3F5 4840,ieee大多数是4048 F5C3.反序了.
这时候你通讯定义数据点地址40002,类型浮点,那它就占用了40002和40003,也许40002=4048,40003=F5C3,也许40002内容=C3F5,40003内容=4840.组态王用swapf来调整对应各种情况的设备.
最后修改:2019/2/27 10:26:21
19-02-27 10:22
是通过写命令swap写入单片机,然后再读取单片机的寄存器,返回的数据是按照swap的排序?
19-02-27 16:20

上一页下一页

工控新闻

更多新闻资讯