Commit 02f16fd439f81de159fa2abde4e030ddc1ac6ccc
1 parent
14749913
Common error handling for RTU and TCP.
Showing
2 changed files
with
13 additions
and
15 deletions
modbus/modbus.c
| @@ -140,13 +140,12 @@ static void error_treat(int code, const char *string, modbus_param_t *mb_param) | @@ -140,13 +140,12 @@ static void error_treat(int code, const char *string, modbus_param_t *mb_param) | ||
| 140 | perror(string); | 140 | perror(string); |
| 141 | printf("\n\nERROR %s\n\n", string); | 141 | printf("\n\nERROR %s\n\n", string); |
| 142 | 142 | ||
| 143 | - // FIXME Create a new FLUSH_OR_RECONNECT_ON_ERROR | ||
| 144 | // FIXME Filter on code | 143 | // FIXME Filter on code |
| 145 | 144 | ||
| 146 | - if (mb_param->type_com == RTU) { | ||
| 147 | - tcflush(mb_param->fd, TCIOFLUSH); | ||
| 148 | - } else { | ||
| 149 | - if (mb_param->error_handling == RECONNECT_ON_ERROR) { | 145 | + if (mb_param->error_handling == FLUSH_OR_RECONNECT_ON_ERROR) { |
| 146 | + if (mb_param->type_com == RTU) { | ||
| 147 | + tcflush(mb_param->fd, TCIOFLUSH); | ||
| 148 | + } else { | ||
| 150 | modbus_close(mb_param); | 149 | modbus_close(mb_param); |
| 151 | modbus_connect(mb_param); | 150 | modbus_connect(mb_param); |
| 152 | } | 151 | } |
| @@ -1224,23 +1223,22 @@ void modbus_init_tcp(modbus_param_t *mb_param, char *ip, uint16_t port) | @@ -1224,23 +1223,22 @@ void modbus_init_tcp(modbus_param_t *mb_param, char *ip, uint16_t port) | ||
| 1224 | mb_param->type_com = TCP; | 1223 | mb_param->type_com = TCP; |
| 1225 | mb_param->header_length = HEADER_LENGTH_TCP; | 1224 | mb_param->header_length = HEADER_LENGTH_TCP; |
| 1226 | mb_param->checksum_size = CHECKSUM_SIZE_TCP; | 1225 | mb_param->checksum_size = CHECKSUM_SIZE_TCP; |
| 1227 | - mb_param->error_handling = RECONNECT_ON_ERROR; | 1226 | + mb_param->error_handling = FLUSH_OR_RECONNECT_ON_ERROR; |
| 1228 | } | 1227 | } |
| 1229 | 1228 | ||
| 1230 | -/* By default, the error handling mode used is RECONNECT_ON_ERROR. | 1229 | +/* By default, the error handling mode used is FLUSH_OR_RECONNECT_ON_ERROR. |
| 1231 | 1230 | ||
| 1232 | - With RECONNECT_ON_ERROR, the library will attempt an immediate | ||
| 1233 | - reconnection which may hang for several seconds if the network to | ||
| 1234 | - the remote target unit is down. | 1231 | + With FLUSH_OR_RECONNECT_ON_ERROR, the library will flush to I/O |
| 1232 | + port in RTU mode or attempt an immediate reconnection which may | ||
| 1233 | + hang for several seconds if the network to the remote target unit | ||
| 1234 | + is down in TCP mode. | ||
| 1235 | 1235 | ||
| 1236 | With NOP_ON_ERROR, it is expected that the application will | 1236 | With NOP_ON_ERROR, it is expected that the application will |
| 1237 | - check for network error returns and deal with them as necessary. | ||
| 1238 | - | ||
| 1239 | - This function is only useful in TCP mode. | 1237 | + check for error returns and deal with them as necessary. |
| 1240 | */ | 1238 | */ |
| 1241 | void modbus_set_error_handling(modbus_param_t *mb_param, error_handling_t error_handling) | 1239 | void modbus_set_error_handling(modbus_param_t *mb_param, error_handling_t error_handling) |
| 1242 | { | 1240 | { |
| 1243 | - if (error_handling == RECONNECT_ON_ERROR || | 1241 | + if (error_handling == FLUSH_OR_RECONNECT_ON_ERROR || |
| 1244 | error_handling == NOP_ON_ERROR) { | 1242 | error_handling == NOP_ON_ERROR) { |
| 1245 | mb_param->error_handling = error_handling; | 1243 | mb_param->error_handling = error_handling; |
| 1246 | } else { | 1244 | } else { |
modbus/modbus.h
| @@ -110,7 +110,7 @@ | @@ -110,7 +110,7 @@ | ||
| 110 | #define MSG_SIZE_UNDEFINED -1 | 110 | #define MSG_SIZE_UNDEFINED -1 |
| 111 | 111 | ||
| 112 | typedef enum { RTU, TCP } type_com_t; | 112 | typedef enum { RTU, TCP } type_com_t; |
| 113 | -typedef enum { RECONNECT_ON_ERROR, NOP_ON_ERROR } error_handling_t; | 113 | +typedef enum { FLUSH_OR_RECONNECT_ON_ERROR, NOP_ON_ERROR } error_handling_t; |
| 114 | 114 | ||
| 115 | /* This structure is byte-aligned */ | 115 | /* This structure is byte-aligned */ |
| 116 | typedef struct { | 116 | typedef struct { |