C#基于NModbus读取long大端小端ABCD的特殊处理

C#基于NModbus读取long大端小端ABCD的特殊处理


注意:在项目工程里面–管理NuGet程序包–搜索你需要的包(nmodbus4)–安装即可。

// 私有串口实例
private SerialPort serialPort = new SerialPort();
// 设定串口参数
serialPort.PortName = cbxPort.SelectedItem.ToString();
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = Parity.None;

// 创建ModbusRTU主站实例
master = ModbusSerialMaster.CreateRtu(serialPort);

// 打开串口
if (!serialPort.IsOpen) serialPort.Open();

// long 读取格式为 ABCD
ushort[] buff = master.ReadHoldingRegisters(1, 0, 2);

List result = new List();
result.AddRange(BitConverter.GetBytes(buff[1]));
result.AddRange(BitConverter.GetBytes(buff[0]));

long value = BitConverter.ToInt32(result.ToArray(), 0);

double cumulative_weight = Math.Round(Convert.ToDouble(value) / 1000, 2);

tbValueFloat.Text = cumulative_weight.ToString();

//关闭串口
serialPort.Close();

正常情况下CDAB读取设备的寄存器数据时,无需处理。

部分情况下ABCD读取设备的寄存器数据时,需要调整顺序。

发表回复

您的电子邮箱地址不会被公开。