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); } }
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("ошибка не известна"); } }
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); } }
/// <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; }
private void WriteExceptionResponse(byte rawFunctionCode, ModbusExceptionCode exceptionCode) { this.FrameBuffer.Writer.Write((byte)(ModbusFunctionCode.Error + rawFunctionCode)); this.FrameBuffer.Writer.Write((byte)exceptionCode); }
private void WriteExceptionResponse(ModbusFunctionCode functionCode, ModbusExceptionCode exceptionCode) { this.WriteExceptionResponse((byte)functionCode, exceptionCode); }
/// <summary> /// 생성자 /// </summary> /// <param name="code">Modbus Exception 코드</param> public ModbusException(ModbusExceptionCode code) { Code = code; }
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); }
public ModbusException(ModbusExceptionCode exceptionCode) : base($"Error code returned {exceptionCode}") { this.ExceptionCode = exceptionCode; }