转载请注明出处,联系我:田工,15118249062(微信同号)
当然先要在NuGet按照相应的dll
//不是ModbusRTU报文,在RTU报文前面加了4个字节,transactionIdentifier,protocolIdentifier,00 01 00 00 00 06 01 03 00 64 00 02
EasyModbus.ModbusClient modbusClient = new ModbusClient("127.0.0.1",502);
modbusClient.NumberOfRetries = 3;//重试次数
modbusClient.UnitIdentifier = 2;//站号
modbusClient.Connect();
int[] intValue = modbusClient.ReadHoldingRegisters(100,2);//读保持寄存器,相当于功能码03,长度为1代表读2个字节,1个字
modbusClient.Disconnect();
float floatResult = ModbusClient.ConvertRegistersToFloat(intValue,0);//0为LowHigh 1为HighLow
textBox1.Text = floatResult.ToString();
以下用的库是xktComm
xktComm.ModbusRtuOverTCP modbusRtuOverTCP = new xktComm.ModbusRtuOverTCP();
modbusRtuOverTCP.ConnectTimeOut = 500;
bool connect= modbusRtuOverTCP.Connect("127.0.0.1","502");
byte[] resultByte=modbusRtuOverTCP.ReadKeepReg(1,100,1);//序列是RTU,不是TCP,如01 03 00 64 00 01 C5 D5
byte[] resultReverse = new byte[2]
{
resultByte[1],
resultByte[0]
};
int result = BitConverter.ToUInt16(resultReverse, 0);
modbusRtuOverTCP.DisConnect();
textBox2.Text = result.ToString();