modbus写入负数和超过65535的方法(c#winform)
项目中遇到的问题试验代码(使用NModbus4库)
private void button4_Click(object sender, EventArgs e)
{
//int valueToWrite = -3600; // 要写入的负数
//ushort highWord = (ushort)(valueToWrite >> 16);
//ushort lowWord = (ushort)valueToWrite;
写入寄存器
//md.modbusMaster.WriteMultipleRegisters(1, 1, new ushort[] { lowWord });
//Console.WriteLine($"负数 已成功写入寄存器 .");
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//超过65535的数值的写入方法
int your32BitData = 703333;
// Split 32-bit data into two 16-bit values
ushort lowPart = (ushort)(your32BitData & 0xFFFF);
ushort highPart = (ushort)(your32BitData >> 16);
ushort address = 1;
md.modbusMaster.WriteSingleRegister(1, address, lowPart);
md.modbusMaster.WriteSingleRegister(1, (ushort)(address + 1), highPart);
//还原写入的超过65535的数值
ushort lowPart1 = md.modbusMaster.ReadHoldingRegisters(1, address, 1)[0];
// 从寄存器读取高位
ushort highPart1 = md.modbusMaster.ReadHoldingRegisters(1, (ushort)(address + 1), 1)[0];
int your32BitData1 = (highPart << 16) | lowPart;
textBox1.Text = your32BitData1.ToString();
}
private void button5_Click(object sender, EventArgs e)
{
//还原负数
ushort[] registers = md.modbusMaster.ReadHoldingRegisters(1, 1, 1);
ushort num = registers[0];
short signedValue = (short)num;
textBox1.Text = signedValue.ToString("g");
}