Добрый день, подскажите пожалуйста.
Задача: логировать ошибки Modbus TCP Slave устройства.
Вот, что пока накидал
Код:
VAR
	MbState: 		IoDrvModbusTCP.MB_ErrorCodes; 
	sMbLog:		STRING(255);
	sMbLogError:	STRING(255);
	byMbLog:		BYTE;
	byMbLogPrev:	BYTE;
	xLogMbWrite:	BOOL;
	FB_FIFO_64_STRING_0: FB_FIFO_64_STRING;
END_VAR


MbState:= Modbus_TCP_Slave.byModbusError;
byMbLog := MbState;

IF Modbus_TCP_Slave.xError THEN
	xLogMbWrite:= TRUE;
	// коды ошибок из IoDrvModbusTCP  (enum  MB_ErrorCodes)
	IF byMbLog = 16#0  THEN sMbLogError := 'RESPONSE_SUCCESS';END_IF
	IF byMbLog = 16#1  THEN sMbLogError := 'ILLEGAL_FUNCTION';END_IF
	IF byMbLog = 16#2  THEN sMbLogError := 'ILLEGAL_DATA_ADDRESS';END_IF
	IF byMbLog = 16#3  THEN sMbLogError := 'ILLEGAL_DATA_VALUE';END_IF
	IF byMbLog = 16#4  THEN sMbLogError := 'SLAVE_DEVICE_FAILURE';END_IF
	IF byMbLog = 16#5  THEN sMbLogError := 'ACKNOWLEDGE';END_IF
	IF byMbLog = 16#6  THEN sMbLogError := 'SLAVE_DEVICE_BUSY';END_IF
	IF byMbLog = 16#8  THEN sMbLogError := 'MEMORY_PARITY_ERROR';END_IF
	IF byMbLog = 16#A  THEN sMbLogError := 'GATEWAY_PATH_UNAVAILABLE';END_IF
	IF byMbLog = 16#B  THEN sMbLogError := 'GATEWAY_DEVICE_FAILED_TO_RESPOND';END_IF
	IF byMbLog = 16#A1 THEN sMbLogError := 'RESPONSE_TIMEOUT';END_IF
	IF byMbLog = 16#A2 THEN sMbLogError := 'RESPONSE_CRC_FAIL';END_IF
	IF byMbLog = 16#A3 THEN sMbLogError := 'RESPONSE_WRONG_SLAVE';END_IF
	IF byMbLog = 16#A4 THEN sMbLogError := 'RESPONSE_WRONG_FUNCTIONCODE';END_IF
	IF byMbLog = 16#A5 THEN sMbLogError := 'TCP_COMMUNICATION_ERROR';END_IF
	IF byMbLog = 16#A6 THEN sMbLogError := 'RESPONSE_INVALID_DATA';END_IF
	IF byMbLog = 16#A7 THEN sMbLogError := 'RESPONSE_INVALID_PROTOCOL';END_IF
	IF byMbLog = 16#A8 THEN sMbLogError := 'RESPONSE_INVALID_HEADER';END_IF
	IF byMbLog = 16#FF THEN sMbLogError := 'UNDEFINED';END_IF
	
	sMbLog	:=	CONCAT(TSandCYCLES, sMbLogError);
	sMbLog	:=	CONCAT(sMbLog, '$N');
	
	FB_FIFO_64_STRING_0 (StrIn:=sMbLog, E:=TRUE, RD:=FALSE, WD:=xLogMbWrite, RST:=FALSE);
END_IF
Сам код работает. У меня возникли такие вопросы:
1. Правильно ли отлавливать ошибки по Modbus_TCP_Slave.xError, не нужна ли дополнительная обработка? (например при обрыве связи постоянно сыплет сообщения "TCP_COMMUNICATION_ERROR").
2. Можно ли уйти от большего количества конструкций "IF byMbLog = 16# THEN sMbLogError := 'ERROR'; END_IF с расшифровками ошибок? (пришлось ручками набивать, не придумал как иначе).

Спасибо.