modbus/mb_runtime.c
changeset 2713 680ea4684209
parent 2665 978cf239c689
child 2714 0b636dc947a2
--- 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
              */