public void ModBusTCPPackageTest() { byte[] _expectWriteSingleCoil = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x05, 0x00, 0x01, 0xFF, 0x00 }; WriteSingleCoilData _writeSingleCoilData = new WriteSingleCoilData(0x02, 1, true); ModBusTCPPackage _writeSingleCoil = new ModBusTCPPackage(_writeSingleCoilData); byte[] _actualWriteSingleCoil = _writeSingleCoil.ToArray(); CollectionAssert.AreEqual(_expectWriteSingleCoil, _actualWriteSingleCoil); }
public void ModBusRTUPackageTest() { #region 单个寄存器写入 byte[] _expectWriteSingleRegister = { 0x02, 0x06, 0x00, 0x01, 0x00, 0x03, 0x98, 0x38 }; WriteSingleRegisterData _writeSingleRegisterData = new WriteSingleRegisterData(0x02, 1, 0x03); ModBusRTUPackage _writeSingleRegister = new ModBusRTUPackage(_writeSingleRegisterData); byte[] _actualWriteSingleRegister = _writeSingleRegister.ToArray(); CollectionAssert.AreEqual(_expectWriteSingleRegister, _actualWriteSingleRegister); #endregion 单个寄存器写入 #region 单个线圈写入 byte[] _expectWriteSingleCoil = { 0x02, 0x05, 0x00, 0x01, 0xFF, 0x00, 0xDD, 0xC9 }; WriteSingleCoilData _writeSingleCoilData = new WriteSingleCoilData(0x02, 1, true); ModBusRTUPackage _writeSingleCoil = new ModBusRTUPackage(_writeSingleCoilData); byte[] _actualWriteSingleCoil = _writeSingleCoil.ToArray(); CollectionAssert.AreEqual(_expectWriteSingleCoil, _actualWriteSingleCoil); #endregion 单个线圈写入 #region 多个线圈写入 byte[] _expectWriteMultipleCoil = { 0x02, 0x0F, 0x00, 0x01, 0x00, 0x0A, 0x02, 0xFF, 0x01, 0x70, 0x29 }; BitArray _coilsValue = new BitArray(new bool[10] { true, true, true, true, true, true, true, true, true, false }); WriteMultipleCoilsData _writeMultipleCoilData = new WriteMultipleCoilsData(0x02, 1, _coilsValue); ModBusRTUPackage _writeMultipleCoil = new ModBusRTUPackage(_writeMultipleCoilData); byte[] _actualWriteMultipleCoil = _writeMultipleCoil.ToArray(); CollectionAssert.AreEqual(_expectWriteMultipleCoil, _actualWriteMultipleCoil); #endregion 多个线圈写入 #region 多个寄存器写入 byte[] _expectWriteMultipleRegister = { 0x02, 0x10, 0x00, 0x01, 0x00, 0x01, 0x02, 0xFF, 0x01, 0x33, 0x41 }; short[] _registersValue = { -255 }; WriteMultipleRegisterData _writeWriteMultipleRegisterData = new WriteMultipleRegisterData(0x02, 1, _registersValue); ModBusRTUPackage _writeMultipleRegister = new ModBusRTUPackage(_writeWriteMultipleRegisterData); byte[] _actualWriteMultipleRegister = _writeMultipleRegister.ToArray(); CollectionAssert.AreEqual(_expectWriteMultipleRegister, _actualWriteMultipleRegister); #endregion 多个寄存器写入 }
/// <summary> /// 处理单个线圈写入 /// </summary> /// <param name="masterWriteData">Modubs Master 写入数据</param> private void HanlderWriteSingleCoilData(MasterWriteDataBase masterWriteData) { if (masterWriteData is WriteSingleCoilData) { //02 05 00 01 FF 00 DD C9 //02 --从设备地址 //05 --功能码 //00 01 --线圈起始地址 //FF 00 --线圈写入值 //DD C9 --CRC WriteSingleCoilData _data = (WriteSingleCoilData)masterWriteData; using (ByteArrayBuilder builder = new ByteArrayBuilder()) { byte _on = 0xFF; byte _off = 0x00; builder.Append(_data.SlaveID); //高位在前 builder.Append((byte)ModbusBaseOrderCmd.WriteSingleCoil); //功能码 builder.Append(ByteHelper.ToBytes(_data.Address, true)); //高位在前 builder.Append(_data.OnOff == true ? _on : _off); //数值 builder.Append(_off); ModBusAppData = builder.ToArray(); } } }