Ejemplo n.º 1
0
        /// <summary>
        /// 检查当前的Modbus-Ascii响应是否是正确的
        /// </summary>
        /// <param name="send">发送的数据信息</param>
        /// <returns>带是否成功的结果数据</returns>
        protected override OperateResult <byte[]> CheckModbusTcpResponse(byte[] send)
        {
            // 转ascii
            byte[] modbus_ascii = ModbusInfo.TransRtuToAsciiPackCommand(send);

            // 核心交互
            OperateResult <byte[]> result = ReadBase(modbus_ascii);

            if (!result.IsSuccess)
            {
                return(result);
            }

            // 还原modbus报文
            OperateResult <byte[]> modbus_core = ModbusInfo.TransAsciiPackCommandToRtu(result.Content);

            if (!modbus_core.IsSuccess)
            {
                return(modbus_core);
            }

            // 发生了错误
            if ((send[1] + 0x80) == modbus_core.Content[1])
            {
                return new OperateResult <byte[]>( )
                       {
                           ErrorCode = modbus_core.Content[2], Message = ModbusInfo.GetDescriptionByErrorCode(modbus_core.Content[2])
                       }
            }
            ;

            // 成功的消息
            return(OperateResult.CreateSuccessResult(modbus_core.Content));
        }