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);
        }
Example #2
0
        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();
         }
     }
 }