Exemplo n.º 1
0
 /// <summary>
 /// 处理多个线圈写入
 /// </summary>
 /// <param name="masterWriteData">Modubs Master 写入数据</param>
 private void HanlderWriteMultipleCoilsData(MasterWriteDataBase masterWriteData)
 {
     if (masterWriteData is WriteMultipleCoilsData)
     {
         //02 0F 00 01 00 0A 02 FF 03 F1 E8
         //02--从机地址
         //0F--功能码
         //00 01--寄存器地址
         //00 0A--寄存器数量
         //02--数据长度
         //FF 03--数据
         //F1 E8--CRC
         WriteMultipleCoilsData _data = (WriteMultipleCoilsData)masterWriteData;
         using (ByteArrayBuilder builder = new ByteArrayBuilder())
         {
             builder.Append(_data.SlaveID);                               //高位在前
             builder.Append((byte)ModbusBaseOrderCmd.WriteMultipleCoils); //功能码
             builder.Append(ByteHelper.ToBytes(_data.Address, true));     //高位在前
             builder.Append(ByteHelper.ToBytes(_data.Quantity, true));    //数量
             byte[] _coilsValue = _data.ColisStatus.ToBytes();
             byte   _coilsCount = (byte)_coilsValue.Length;
             builder.Append(_coilsCount);
             builder.Append(_coilsValue);
             ModBusAppData = builder.ToArray();
         }
     }
 }
Exemplo n.º 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 多个寄存器写入
        }