Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        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);
        }