微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Modbus TCP小尾数字节交换

如何解决Modbus TCP小尾数字节交换

我正在使用FluentModbus,也尝试过EasyModbus,以便与Delta SE cpu通信,只要我读写单个寄存器,我就可以正常通信,问题是我需要转换为Little Endian ByteSwap来访问PLC Doubles和Floats已使用我之前为excel购买的Modbusspoll进行了测试。

任何想法我该如何解决

谢谢

解决方法

感谢您的帮助。

这有效

var ReadunitIdentifier = (byte)0xFF;
        var ReadstartingAddress = (ushort)40;
        var Readcount = (ushort)4;

       
        if (modbusTcpClient.IsConnected)
        {
            try
            {
                var byteData = modbusTcpClient.ReadHoldingRegisters<byte>(ReadunitIdentifier,ReadstartingAddress,Readcount);
                byte highByte0 = byteData[0];
                byte lowByte0 = byteData[1];
                byte highByte1 = byteData[2];
                byte lowByte1 = byteData[3];
                byte[] doubleBytes =
                {
                    lowByte0,highByte0,lowByte1,highByte1
                };
                SharedVariables.LoadcellScaled = BitConverter.ToInt32(doubleBytes,0);
            }
,

v2.1.0版本开始,您应该能够提供服务器的字节布局(小端与大端):

var client = new ModbusTcpClient(...);
client.Connect(...,ModbusEndianness.BigEndian);

var value = client.ReadHoldingRegisters<float>(...);

使用ModbusEndianness.BigEndian,您告诉客户端期望使用大端服务器,这将使客户端根据客户端的操作系统体系结构(主要是小端)对字节进行重新排序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?