public static int Export_ModBus(ref MODBUS_TX_MSG MBTM, ref byte[] Buf) { int i = 0; int CheckValue; MBTM.Addr = Buf[i++]; MBTM.FuncCode = Buf[i++]; MBTM.Length = Buf[i++]; if (MBTM.Length > 100) { return(0); } for (int n = 0; n < (MBTM.Length); n++) { MBTM.Buf[n] = Buf[n + i]; } i += MBTM.Length; CheckValue = Tools.GetCrc16(Buf, i); MBTM.CheckValue = Buf[i + 1]; MBTM.CheckValue <<= 8; MBTM.CheckValue |= Buf[i]; if (CheckValue == MBTM.CheckValue) { return(MBTM.Length); } return(-1); }
public static int SendData(SerialPort CommPort, byte[] TxBuffer, int TxLength, ref byte[] RxBuffer, int RxLength) { int Length = 0; MODBUS_TX_MSG MBTM = new MODBUS_TX_MSG(); MBTM.Buf = new byte[100]; for (int i = 0; i < 2; i++) { Length = SendDataOne(CommPort, TxBuffer, TxLength, ref RxBuffer, RxLength); if (标准ModBus.Export_ModBus(ref MBTM, ref RxBuffer) != -1) { break; } } // MessageBox.Show("重试次数过多"); return(Length); }
private MODBUS_TX_MSG ThreadGetMsg(int Offset, int Count) { MODBUS_RX_MSG MBRM = new MODBUS_RX_MSG(); MODBUS_TX_MSG MBTM = new MODBUS_TX_MSG(); MBTM.Buf = new byte[100]; byte[] RxBuffer = new byte[200]; byte[] TxBuffer = new byte[200]; MBRM.Addr = Value.RSValue.RS485Addr; MBRM.FuncCode = 0x03; MBRM.Length = Count; MBRM.Offset = (byte)Offset; int Length = 标准ModBus.CreateMsg_ModBus(MBRM, ref TxBuffer); Length = Usart.SendData(serialPort1, TxBuffer, Length, ref RxBuffer, 200); 标准ModBus.Export_ModBus(ref MBTM, ref RxBuffer); return(MBTM); }
private MODBUS_TX_MSG GetMsg(int Offset, int Count) { MODBUS_RX_MSG MBRM = new MODBUS_RX_MSG(); MODBUS_TX_MSG MBTM = new MODBUS_TX_MSG(); MBTM.Buf = new byte[100]; byte[] RxBuffer = new byte[200]; byte[] TxBuffer = new byte[200]; MBRM.Addr = byte.Parse(comboBox3.Text); MBRM.FuncCode = 0x03; MBRM.Length = Count; MBRM.Offset = (byte)Offset; int Length = 标准ModBus.CreateMsg_ModBus(MBRM, ref TxBuffer); serialPort1.ReadTimeout = 500; Length = Usart.SendData(serialPort1, TxBuffer, Length, ref RxBuffer, 200); 标准ModBus.Export_ModBus(ref MBTM, ref RxBuffer); return(MBTM); }