示例#1
0
        private bool IsException(ResponseBuffer buffer, ModbusRequest request, int timeout, out ModbusResponse responseMessage)
        {
            if ((Read(buffer, 1, timeout) & 0x80) == 0x80)
            {
                var codeValue = Read(buffer, 2, timeout);

                if (IsErrorCRC(buffer, 3, request, timeout))
                {
                    throw new ModbusCommException(ModbusCommErrorCode.ErrorCRC, buffer, request);
                }

                ModbusExceptionCode exceptionCode = ModbusExceptionCode.NotDefined;
                if (Enum.IsDefined(typeof(ModbusExceptionCode), codeValue))
                {
                    exceptionCode = (ModbusExceptionCode)codeValue;
                }

                responseMessage = new ModbusExceptionResponse(exceptionCode, request);
                return(true);
            }
            else
            {
                responseMessage = null;
                return(false);
            }
        }
示例#2
0
        private string GetModbusException(ModbusExceptionCode code)
        {
            switch (code)
            {
            case ModbusExceptionCode.ILLEGAL_FUNCTION: return("ILLEGAL_FUNCTION");

            case ModbusExceptionCode.ILLEGAL_DATA_ADDRESS: return("ILLEGAL_DATA_ADDRESS");

            case ModbusExceptionCode.ILLEGAL_DATA_VALUE: return("ILLEGAL_DATA_VALUE");

            case ModbusExceptionCode.FAILURE_IN_ASSOCIATED_DEVICEE: return("FAILURE_IN_ASSOCIATED_DEVICEE");

            case ModbusExceptionCode.ACKNOWLEDGE: return("ACKNOWLEDGE");

            case ModbusExceptionCode.SLAVE_DEVICE_BUSY: return("SLAVE_DEVICE_BUSY");

            case ModbusExceptionCode.MEMORY_PARITY_ERROR: return("MEMORY_PARITY_ERROR");

            case ModbusExceptionCode.GATEWAY_PATH_UNAVAILABLE: return("GATEWAY_PATH_UNAVAILABLE");

            case ModbusExceptionCode.GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND: return("GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND");

            default: return("ошибка не известна");
            }
        }
示例#3
0
        internal void ProcessError(ModbusFunctionCode functionCode, ModbusExceptionCode exceptionCode)
        {
            switch (exceptionCode)
            {
            case ModbusExceptionCode.IllegalFunction:
                throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x01_IllegalFunction);

            case ModbusExceptionCode.IllegalDataAddress:
                throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x02_IllegalDataAddress);

            case ModbusExceptionCode.IllegalDataValue:

                switch (functionCode)
                {
                case ModbusFunctionCode.WriteMultipleRegisters:
                    throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x03_IllegalDataValue_0x7B);

                case ModbusFunctionCode.ReadHoldingRegisters:
                case ModbusFunctionCode.ReadInputRegisters:
                    throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x03_IllegalDataValue_0x7D);

                case ModbusFunctionCode.ReadCoils:
                case ModbusFunctionCode.ReadDiscreteInputs:
                    throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x03_IllegalDataValue_0x7D0);

                default:
                    throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x03_IllegalDataValue);
                }

            case ModbusExceptionCode.ServerDeviceFailure:
                throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x04_ServerDeviceFailure);

            case ModbusExceptionCode.Acknowledge:
                throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x05_Acknowledge);

            case ModbusExceptionCode.ServerDeviceBusy:
                throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x06_ServerDeviceBusy);

            case ModbusExceptionCode.MemoryParityError:
                throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x08_MemoryParityError);

            case ModbusExceptionCode.GatewayPathUnavailable:
                throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x0A_GatewayPathUnavailable);

            case ModbusExceptionCode.GatewayTargetDeviceFailedToRespond:
                throw new ModbusException(exceptionCode, ErrorMessage.ModbusClient_0x0B_GatewayTargetDeviceFailedToRespond);

            default:
                throw new ArgumentOutOfRangeException(ErrorMessage.ModbusClient_InvalidExceptionCode);
            }
        }
示例#4
0
 /// <summary>
 /// 생성자
 /// </summary>
 /// <param name="channel">Modbus 채널</param>
 /// <param name="exceptionCode">Modbus Exception 코드</param>
 /// <param name="rawMessage">원본 메시지</param>
 public ModbusExceptionLog(IModbusChannel channel, ModbusExceptionCode exceptionCode, byte[] rawMessage) : base(channel)
 {
     ExceptionCode = exceptionCode;
     RawMessage    = rawMessage;
 }
示例#5
0
 private void WriteExceptionResponse(byte rawFunctionCode, ModbusExceptionCode exceptionCode)
 {
     this.FrameBuffer.Writer.Write((byte)(ModbusFunctionCode.Error + rawFunctionCode));
     this.FrameBuffer.Writer.Write((byte)exceptionCode);
 }
示例#6
0
 private void WriteExceptionResponse(ModbusFunctionCode functionCode, ModbusExceptionCode exceptionCode)
 {
     this.WriteExceptionResponse((byte)functionCode, exceptionCode);
 }
示例#7
0
 /// <summary>
 /// 생성자
 /// </summary>
 /// <param name="code">Modbus Exception 코드</param>
 public ModbusException(ModbusExceptionCode code)
 {
     Code = code;
 }
示例#8
0
 internal ModbusException(ModbusExceptionCode exceptionCode, string message) : base(message)
 {
     this.ExceptionCode = exceptionCode;
 }
 private void WriteExceptionResponse(byte rawFunctionCode, ModbusExceptionCode exceptionCode)
 {
     _responseWriter.Write((byte)(rawFunctionCode + 0x80));
     _responseWriter.Write((byte)exceptionCode);
 }
示例#10
0
 public ModbusException(ModbusExceptionCode exceptionCode)
     : base($"Error code returned {exceptionCode}")
 {
     this.ExceptionCode = exceptionCode;
 }