示例#1
0
        private UnPackageError CheckedPackageData(byte[] data, out SlaveReplyDataBase replyDataBase)
        {
            try
            {
                replyDataBase = null;

                switch (OrderCmd)
                {
                case 0x01:
                    replyDataBase = new SlaveReadCoilsReplyData(SlaveID, OrderCmd, Data);
                    break;

                case 0x02:
                    replyDataBase = new SlaveReadDiscreteInputsReplyData(SlaveID, OrderCmd, Data);
                    break;

                case 0x03:
                    replyDataBase = new SlaveReadHoldingRegisterReplyData(SlaveID, OrderCmd, Data);
                    break;

                case 0x04:
                    replyDataBase = new SlaveReadInputRegistersReplyData(SlaveID, OrderCmd, Data);
                    break;

                default:
                    replyDataBase = new SlaveUnknownReplyData(SlaveID, OrderCmd, Data);
                    break;
                }
                return(UnPackageError.Normal);
            }
            catch (Exception ex)
            {
                throw CreateUnPackageException("CheckedPackageData", ex, data);
            }
        }
示例#2
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);
        }
示例#3
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);
        }
        /// <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 UnPackageError CheckedPackageData(byte[] data, out SlaveReplyDataBase replyDataBase)
        {
            try
            {
                replyDataBase = null;
                byte[] _expectCrc = ByteHelper.ToBytes(CRCBuilder.Calu16MODBUS(CrcCaluData), false);
                if (!ArrayHelper.CompletelyEqual(_expectCrc, CRC))
                {
                    return(UnPackageError.CRCError);
                }

                switch (OrderCmd)
                {
                case 0x01:
                    replyDataBase = new SlaveReadCoilsReplyData(SlaveID, OrderCmd, Data);
                    break;

                case 0x02:
                    replyDataBase = new SlaveReadDiscreteInputsReplyData(SlaveID, OrderCmd, Data);
                    break;

                case 0x03:
                    replyDataBase = new SlaveReadHoldingRegisterReplyData(SlaveID, OrderCmd, Data);
                    break;

                case 0x04:
                    replyDataBase = new SlaveReadInputRegistersReplyData(SlaveID, OrderCmd, Data);
                    break;

                default:
                    replyDataBase = new SlaveUnknownReplyData(SlaveID, OrderCmd, Data);
                    break;
                }
                return(UnPackageError.Normal);
            }
            catch (Exception ex)
            {
                throw CreateUnPackageException("CheckedPackageData", ex, data);
            }
        }