public void SetData(byte SlaveAddr, ushort StartAddr, Action <bool> DataSent, params ushort[] Data) { byte[] buffer = new byte[9 + Data.Length * 2]; buffer[0] = SlaveAddr; buffer[1] = 0x10; buffer[2] = (byte)((StartAddr >> 8) & 0xFF); buffer[3] = (byte)(StartAddr & 0xFF); buffer[4] = (byte)((Data.Length >> 8) & 0xFF); buffer[5] = (byte)(Data.Length & 0xFF); buffer[6] = (byte)(2 * Data.Length); for (int i = 0; i < Data.Length; i++) { buffer[7 + i * 2] = (byte)((Data[i] >> 8) & 0xFF); buffer[8 + i * 2] = (byte)(Data[i] & 0xFF); } byte[] buffer1; ModbusCRC.CalcCRC(buffer, 7 + Data.Length * 2, out buffer1); this.DataSent = DataSent; waitByteCount = 8; Action <byte[]> a = new Action <byte[]>(SendWriteCoils); a.BeginInvoke(buffer1, null, null); }
public void GetData(byte SlaveAddr, ushort StartAddr, int Count, Action <bool, ushort[]> DataReceived) { byte[] txBuffer = new byte[8]; txBuffer[0] = SlaveAddr; txBuffer[1] = 0x03; BitConverter.GetBytes(StartAddr).Reverse().ToArray().CopyTo(txBuffer, 2); BitConverter.GetBytes((ushort)Count).Reverse().ToArray().CopyTo(txBuffer, 4); byte[] txBufferCRC; ModbusCRC.CalcCRC(txBuffer, 6, out txBufferCRC); this.DataReceived = DataReceived; waitByteCount = 5 + 2 * Count; waitWordCount = Count; Action <byte[]> a = new Action <byte[]>(SendReadCoils); a.BeginInvoke(txBufferCRC, null, null); }
public void Request(byte[] Buffer, byte ExpectByteCount, Action <bool, byte[]> DataReceived) { if (Buffer == null) { return; } if (Buffer.Length < 2) { return; } byte[] txBufferCRC; ModbusCRC.CalcCRC(Buffer, Buffer.Length, out txBufferCRC); waitByteCount = ExpectByteCount; this.DataReceivedByte = DataReceived; Action <byte[]> a = new Action <byte[]>(SendRequest); a.BeginInvoke(txBufferCRC, null, null); }