diff -r 253110ba0fd7 -r 680ea4684209 modbus/mb_runtime.c --- a/modbus/mb_runtime.c Sun Jun 07 23:46:16 2020 +0100 +++ b/modbus/mb_runtime.c Mon Dec 21 21:15:47 2020 +0000 @@ -60,7 +60,7 @@ (int) client_requests[request_id].count, client_nodes[client_requests[request_id].client_node_id].mb_nd, client_requests[request_id].retries, - &(client_requests[request_id].error_code), + &(client_requests[request_id].mb_error_code), &(client_requests[request_id].resp_timeout), &(client_requests[request_id].coms_buf_mutex)); @@ -72,7 +72,7 @@ (int) client_requests[request_id].count, client_nodes[client_requests[request_id].client_node_id].mb_nd, client_requests[request_id].retries, - &(client_requests[request_id].error_code), + &(client_requests[request_id].mb_error_code), &(client_requests[request_id].resp_timeout), &(client_requests[request_id].coms_buf_mutex)); @@ -84,7 +84,7 @@ (int) client_requests[request_id].count, client_nodes[client_requests[request_id].client_node_id].mb_nd, client_requests[request_id].retries, - &(client_requests[request_id].error_code), + &(client_requests[request_id].mb_error_code), &(client_requests[request_id].resp_timeout), &(client_requests[request_id].coms_buf_mutex)); @@ -96,7 +96,7 @@ (int) client_requests[request_id].count, client_nodes[client_requests[request_id].client_node_id].mb_nd, client_requests[request_id].retries, - &(client_requests[request_id].error_code), + &(client_requests[request_id].mb_error_code), &(client_requests[request_id].resp_timeout), &(client_requests[request_id].coms_buf_mutex)); @@ -106,7 +106,7 @@ client_requests[request_id].coms_buffer[0], client_nodes[client_requests[request_id].client_node_id].mb_nd, client_requests[request_id].retries, - &(client_requests[request_id].error_code), + &(client_requests[request_id].mb_error_code), &(client_requests[request_id].resp_timeout), &(client_requests[request_id].coms_buf_mutex)); @@ -116,7 +116,7 @@ client_requests[request_id].coms_buffer[0], client_nodes[client_requests[request_id].client_node_id].mb_nd, client_requests[request_id].retries, - &(client_requests[request_id].error_code), + &(client_requests[request_id].mb_error_code), &(client_requests[request_id].resp_timeout), &(client_requests[request_id].coms_buf_mutex)); @@ -136,7 +136,7 @@ client_requests[request_id].coms_buffer, client_nodes[client_requests[request_id].client_node_id].mb_nd, client_requests[request_id].retries, - &(client_requests[request_id].error_code), + &(client_requests[request_id].mb_error_code), &(client_requests[request_id].resp_timeout), &(client_requests[request_id].coms_buf_mutex)); @@ -147,7 +147,7 @@ client_requests[request_id].coms_buffer, client_nodes[client_requests[request_id].client_node_id].mb_nd, client_requests[request_id].retries, - &(client_requests[request_id].error_code), + &(client_requests[request_id].mb_error_code), &(client_requests[request_id].resp_timeout), &(client_requests[request_id].coms_buf_mutex)); @@ -362,34 +362,39 @@ // req, client_nodes[client_requests[req].client_node_id].periodic_act, client_requests[req].flag_exec_req ); int res_tmp = __execute_mb_request(req); + client_requests[req].tn_error_code = 0; // assume success switch (res_tmp) { case PORT_FAILURE: { if (res_tmp != client_nodes[client_node_id].prev_error) fprintf(stderr, "Modbus plugin: Error connecting Modbus client %%s to remote server.\n", client_nodes[client_node_id].location); client_nodes[client_node_id].prev_error = res_tmp; + client_requests[req].tn_error_code = 1; // error accessing IP network, or serial interface break; } case INVALID_FRAME: { if ((res_tmp != client_requests[req].prev_error) && (0 == client_nodes[client_node_id].prev_error)) fprintf(stderr, "Modbus plugin: Modbus client request configured at location %%s was unsuccesful. Server/slave returned an invalid/corrupted frame.\n", client_requests[req].location); client_requests[req].prev_error = res_tmp; + client_requests[req].tn_error_code = 2; // reply received from server was an invalid frame break; } case TIMEOUT: { if ((res_tmp != client_requests[req].prev_error) && (0 == client_nodes[client_node_id].prev_error)) fprintf(stderr, "Modbus plugin: Modbus client request configured at location %%s timed out waiting for reply from server.\n", client_requests[req].location); client_requests[req].prev_error = res_tmp; + client_requests[req].tn_error_code = 3; // server did not reply before timeout expired break; } case MODBUS_ERROR: { - if (client_requests[req].prev_error != client_requests[req].error_code) { - fprintf(stderr, "Modbus plugin: Modbus client request configured at location %%s was unsuccesful. Server/slave returned error code 0x%%2x", client_requests[req].location, client_requests[req].error_code); - if (client_requests[req].error_code <= MAX_MODBUS_ERROR_CODE ) { - fprintf(stderr, "(%%s)", modbus_error_messages[client_requests[req].error_code]); + if (client_requests[req].prev_error != client_requests[req].mb_error_code) { + fprintf(stderr, "Modbus plugin: Modbus client request configured at location %%s was unsuccesful. Server/slave returned error code 0x%%2x", client_requests[req].location, client_requests[req].mb_error_code); + if (client_requests[req].mb_error_code <= MAX_MODBUS_ERROR_CODE ) { + fprintf(stderr, "(%%s)", modbus_error_messages[client_requests[req].mb_error_code]); fprintf(stderr, ".\n"); } } - client_requests[req].prev_error = client_requests[req].error_code; + client_requests[req].prev_error = client_requests[req].mb_error_code; + client_requests[req].tn_error_code = 4; // server returned a valid Modbus error frame break; } default: { @@ -404,7 +409,13 @@ break; } } - + + /* Set the flag_exec_status that is mapped onto a located WORD variable, so the user program + * knows how the communication is going. + * This flag is an ammalgamation of the data in mb_error_code and tn_error_code + */ + client_requests[req].flag_exec_status = client_requests[req].tn_error_code * 256 + client_requests[req].mb_error_code; + /* We have just finished excuting a client transcation request. * If the current cycle was activated by user request we reset the flag used to ask to run it */