public void BuilderObjFromBytesTest() { byte[] _orderCmd0x01 = { 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x02, 0x01, 0x02, 0x1F, 0x00 }; ModBusTCPUnPackage _unpackageOrderCmd0x01 = new ModBusTCPUnPackage(); SlaveReplyDataBase _slaveReplyData = null; UnPackageError _unpackageError = _unpackageOrderCmd0x01.BuilderObjFromBytes(_orderCmd0x01, out _slaveReplyData); Assert.AreEqual(_slaveReplyData.OrderCmdCode, 0x01); }
public void BuilderObjFromBytesTest() { byte[] _orderCmd0x01 = { 0x02, 0x01, 0x02, 0x1F, 0x00, 0xF5, 0xCC }; ModBusRTUUnPackage _unpackageOrderCmd0x01 = new ModBusRTUUnPackage(); SlaveReplyDataBase _slaveReplyData = null; UnPackageError _unpackageError = _unpackageOrderCmd0x01.BuilderObjFromBytes(_orderCmd0x01, out _slaveReplyData); Assert.AreEqual(_slaveReplyData.OrderCmdCode, 0x01); byte[] _orderCmd0x03 = { 002, 0x03, 0x14, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x57 }; ModBusRTUUnPackage _unpackageOrderCmd0x03 = new ModBusRTUUnPackage(); _slaveReplyData = null; _unpackageError = _unpackageOrderCmd0x03.BuilderObjFromBytes(_orderCmd0x03, out _slaveReplyData); Assert.AreEqual(_slaveReplyData.OrderCmdCode, 0x03); }
private bool AnalyzePackageData(byte[] data, out UnPackageError unPackageError) { bool _result = false; try { FullPackageData = ByteHelper.ToHexStringWithBlank(data); TransactionIdentifier = ArrayHelper.Copy(data, 0, 2); //事物标识符 ProtocolIdentifier = ArrayHelper.Copy(data, 2, 4); //协议标识符 Length = ArrayHelper.Copy(data, 4, 6); //长度 SlaveID = data[6]; //从设备地址 OrderCmd = data[7]; //功能码 unPackageError = UnPackageError.Normal; if (data.Length == 9) { byte _errorCode = data[8];//错误代码 if (_errorCode == 0x01 || _errorCode == 0x02 || _errorCode == 0x03 || _errorCode == 0x04) { unPackageError = (UnPackageError)_errorCode; } } else { //00 77 00 00 00 05 02 01 02 1F 00--Read Coils //00 74 --事物标识符 //00 00 --协议标识符 //00 05 --长度 //02--从机地址 //01--功能码 //02 --数据长度 //1F 00--数据 DataLength = data[8]; //数据长度 Data = ArrayHelper.Copy(data, 9, 9 + DataLength); //实际数据 _result = true; } } catch (Exception ex) { throw CreateUnPackageException("AnalyzePackageData", ex, data); } return(_result); }
/// <summary> /// 拆包 /// </summary> /// <param name="data">数据报文</param> /// <returns>返回结果;1.是否拆包成功;2.拆包成功后对象</returns> public UnPackageError BuilderObjFromBytes(byte[] data, out SlaveReplyDataBase slaveReplyData) { slaveReplyData = null; UnPackageError _unpackageError = UnPackageError.Normal; try { bool _analyzeResult = AnalyzePackageData(data, out _unpackageError); if (_unpackageError == UnPackageError.Normal) { _unpackageError = CheckedPackageData(data, out slaveReplyData); } return(_unpackageError); } catch (UnPackageException) { _unpackageError = UnPackageError.ExceptionError; } return(_unpackageError); }
private bool AnalyzePackageData(byte[] data, out UnPackageError unPackageError) { bool _result = false; try { FullPackageData = ByteHelper.ToHexStringWithBlank(data); SlaveID = data[0]; //从设备地址 OrderCmd = data[1]; //功能码 unPackageError = UnPackageError.Normal; if (data.Length == 5) { byte _errorCode = data[2];//错误代码 if (_errorCode == 0x01 || _errorCode == 0x02 || _errorCode == 0x03 || _errorCode == 0x04) { unPackageError = (UnPackageError)_errorCode; } } else { //02 01 02 1F 00 F5 CC --Read Coils //02--从机地址 //01--功能码 //02--数据长度 //1F 00--数据 //F5 CC--CRC //02 02 02 1F 00 F5 88 --Read Discrete Inputs //02--从机地址 //02--功能码 //02--数据长度 //1F 00--数据 //F8 88--CRC //02 03 14 00 01 00 02 00 03 00 04 00 05 00 00 00 00 00 00 00 00 00 00 37 57 //02--从机地址 //03--功能码 //14--数据长度 //00 01 00 02 00 03 00 04 00 05 00 00 00 00 00 00 00 00 00 00--数据 //37 57--CRC //02 04 14 00 01 00 02 00 03 00 04 00 05 00 00 00 00 00 00 00 00 00 00 01 B1 //02--从机地址 //04--功能码 //14--数据长度 //00 01 00 02 00 03 00 04 00 05 00 00 00 00 00 00 00 00 00 00--数据 //01 B1--CRC int _packageLength = data.Length; DataLength = data[2]; //数据长度 CrcCaluData = ArrayHelper.Copy(data, 0, _packageLength - 2); Data = ArrayHelper.Copy(data, 3, 3 + DataLength); //实际数据 CRC = ArrayHelper.Copy(data, _packageLength - 2, _packageLength); _result = true; } } catch (Exception ex) { throw CreateUnPackageException("AnalyzePackageData", ex, data); } return(_result); }