public void Initialize()
        {
            try
            {
                var command  = ProtocolFinsCommand.GetHandshakeCommand(pcNode);
                var response = new byte[] { };

                if (!comPort.IsConnected)
                {
                    comPort.Open(false);
                }

                response = Send(command);

                if (!response.Any() || GetErrorCode(response) != ErrorCodeOK)
                {
                    throw new ApplicationException($"握手失败,错误码:{GetErrorCode(response)}");
                }
                else
                {
                    pcNode  = response[19];
                    plcNode = response[23];
                }
            }
            catch (Exception e)
            {
                throw new ApplicationException("建立与PLC连接失败,请确认", e);
            }
        }
        public IEnumerable <TValue> Read <TValue>(DataAddress address)
        {
            if (address.Equals(DataAddress.Empty))
            {
                throw new ApplicationException("地址为空");
            }

            var command = ProtocolFinsCommand.GetReadCommand(address, pcNode, plcNode);

            byte[] response = { };

            using (new StopwatchWrapper($"读取PLC"))
            {
                response = Send(command);
            }

            if (!response.Any() || GetErrorCode(response) != ErrorCodeOK)
            {
                Reconnect();

                throw new ApplicationException($"读取失败,地址:{address },错误码:{GetErrorCode(response)}");
            }

            return(GetValues <TValue>(address, response));
        }
        public void Write <TValue>(DataAddress address, IEnumerable <TValue> values)
        {
            if (address.Equals(DataAddress.Empty))
            {
                throw new ApplicationException("地址为空");
            }
            if (values == null || !values.Any())
            {
                throw new ApplicationException($"参数异常,values为null或空");
            }

            var command = ProtocolFinsCommand.GetWriteCommand(address, values, pcNode, plcNode);

            byte[] response = { };

            using (new StopwatchWrapper($"写入PLC"))
            {
                response = Send(command);
            }

            if (!response.Any() || GetErrorCode(response) != ErrorCodeOK)
            {
                Reconnect();

                throw new ApplicationException($"写入失败,地址:{address },错误码:{GetErrorCode(response)}");
            }
        }