You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/09/16 11:42:42 UTC

[plc4x] branch feature/plc4c updated (7d85b71 -> a536ba9)

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a change to branch feature/plc4c
in repository https://gitbox.apache.org/repos/asf/plc4x.git.


    from 7d85b71  - Got the S7 PLC identifiation working - Got the first read-requests working
     new 8d1afb3  - PLC4X-207 - No registered handler found for message TPKTPacket[], , using default decode method - Communication with S7 and Modbus device hangs
     new a536ba9  - Continued working on the S7 C driver

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../s7/readwrite/protocol/S7ProtocolLogic.java     |  9 +++++++
 .../drivers/modbus/src/driver_modbus_sm_read.c     |  1 -
 sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c   | 30 ++++++++++++++++++++--
 .../plc4c/examples/hello-world/src/hello_world.c   |  1 +
 .../generated-sources/modbus/src/modbus_pdu.c      | 19 +++-----------
 .../plc4c/generated-sources/s7/src/cotp_packet.c   |  2 +-
 .../generated-sources/s7/src/cotp_parameter.c      |  1 -
 .../plc4c/generated-sources/s7/src/s7_parameter.c  |  6 ++---
 .../plc4c/generated-sources/s7/src/s7_payload.c    |  8 +++---
 .../s7/src/s7_payload_user_data_item.c             |  2 +-
 .../s7/src/s7_var_payload_data_item.c              |  1 -
 .../generated-sources/s7/src/szl_data_tree_item.c  |  1 -
 12 files changed, 51 insertions(+), 30 deletions(-)


[plc4x] 02/02: - Continued working on the S7 C driver

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/plc4c
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit a536ba9c792a457d4b2c1b31d30ce153e7bc8c69
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Sep 16 13:42:34 2020 +0200

    - Continued working on the S7 C driver
---
 .../drivers/modbus/src/driver_modbus_sm_read.c     |  1 -
 sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c   | 30 ++++++++++++++++++++--
 .../plc4c/examples/hello-world/src/hello_world.c   |  1 +
 .../generated-sources/modbus/src/modbus_pdu.c      | 19 +++-----------
 .../plc4c/generated-sources/s7/src/cotp_packet.c   |  2 +-
 .../generated-sources/s7/src/cotp_parameter.c      |  1 -
 .../plc4c/generated-sources/s7/src/s7_parameter.c  |  6 ++---
 .../plc4c/generated-sources/s7/src/s7_payload.c    |  8 +++---
 .../s7/src/s7_payload_user_data_item.c             |  2 +-
 .../s7/src/s7_var_payload_data_item.c              |  1 -
 .../generated-sources/s7/src/szl_data_tree_item.c  |  1 -
 11 files changed, 42 insertions(+), 30 deletions(-)

diff --git a/sandbox/plc4c/drivers/modbus/src/driver_modbus_sm_read.c b/sandbox/plc4c/drivers/modbus/src/driver_modbus_sm_read.c
index 689bc79..b855edd 100644
--- a/sandbox/plc4c/drivers/modbus/src/driver_modbus_sm_read.c
+++ b/sandbox/plc4c/drivers/modbus/src/driver_modbus_sm_read.c
@@ -17,7 +17,6 @@
   under the License.
 */
 
-#include <plc4c/plc4c.h>
 #include <plc4c/spi/types_private.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c b/sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c
index d554e43..94c7f31 100644
--- a/sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c
+++ b/sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c
@@ -80,8 +80,34 @@ plc4c_return_code plc4c_driver_s7_read_machine_function(
         return return_code;
       }
 
-      // TODO: Check the response ...
-      // TODO: Decode the items in the response ...
+      // Check the response.
+      plc4c_s7_read_write_s7_parameter* parameter = s7_read_response_packet->payload->payload->parameter;
+      if(parameter->_type != plc4c_s7_read_write_s7_parameter_type_plc4c_s7_read_write_s7_parameter_read_var_response) {
+        return INTERNAL_ERROR;
+      }
+      // Check if the number of items matches that of the request
+      // (Otherwise we won't know how to interpret the items)
+      if(parameter->s7_parameter_read_var_response_num_items != plc4c_utils_list_size(read_request->items)) {
+        return INTERNAL_ERROR;
+      }
+      // Iterate over the request items and use the types to decode the
+      // response items.
+      plc4c_s7_read_write_s7_payload* payload = s7_read_response_packet->payload->payload->payload;
+      plc4c_list_element* cur_request_item_element = plc4c_utils_list_tail(read_request->items);
+      plc4c_list_element* cur_response_item_element = plc4c_utils_list_tail(payload->s7_payload_read_var_response_items);
+      while((cur_request_item_element != NULL) && (cur_response_item_element != NULL)) {
+        plc4c_item* cur_request_item = cur_request_item_element->value;
+        plc4c_s7_read_write_s7_address* s7_address = cur_request_item->address;
+        plc4c_s7_read_write_transport_size transport_size = s7_address->s7_address_any_transport_size;
+        uint16_t num_elements = s7_address->s7_address_any_number_of_elements;
+
+        plc4c_s7_read_write_s7_var_payload_data_item* cur_response_item = cur_response_item_element->value;
+        
+
+        cur_request_item_element = cur_request_item_element->next;
+        cur_request_item_element = cur_response_item_element->next;
+      }
+
       // TODO: Return the results to the API ...
 
       task->completed = true;
diff --git a/sandbox/plc4c/examples/hello-world/src/hello_world.c b/sandbox/plc4c/examples/hello-world/src/hello_world.c
index 101e3fd..5ed9357 100644
--- a/sandbox/plc4c/examples/hello-world/src/hello_world.c
+++ b/sandbox/plc4c/examples/hello-world/src/hello_world.c
@@ -26,6 +26,7 @@
 #include <plc4c/utils/list.h>
 #include <stdio.h>
 #include <string.h>
+#include <unistd.h>
 
 #include "../../../spi/include/plc4c/spi/types_private.h"
 
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
index d1a22eb..350b6d0 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu.c
@@ -196,7 +196,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -253,7 +252,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -352,7 +350,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -431,7 +428,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -488,7 +484,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -587,7 +582,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -684,7 +678,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -719,7 +712,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -839,7 +831,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = fifoCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         uint16_t* _value = malloc(sizeof(uint16_t));
         _res = plc4c_spi_read_unsigned_short(buf, 16, (uint16_t*) _value);
         if(_res != OK) {
@@ -874,7 +865,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t _itemsLength = byteCount;
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
-        plc4c_list* _value = NULL;
+        plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item* _value = NULL;
         _res = plc4c_modbus_read_write_modbus_pdu_read_file_record_request_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -908,7 +899,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t _itemsLength = byteCount;
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
-        plc4c_list* _value = NULL;
+        plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item* _value = NULL;
         _res = plc4c_modbus_read_write_modbus_pdu_read_file_record_response_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -942,7 +933,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t _itemsLength = byteCount;
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
-        plc4c_list* _value = NULL;
+        plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item* _value = NULL;
         _res = plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -976,7 +967,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t _itemsLength = byteCount;
       uint8_t itemsEndPos = plc4c_spi_read_get_pos(buf) + _itemsLength;
       while(plc4c_spi_read_get_pos(buf) < itemsEndPos) {
-        plc4c_list* _value = NULL;
+        plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item* _value = NULL;
         _res = plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -1080,7 +1071,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = (byteCount) - (6);
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
@@ -1118,7 +1108,6 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_parse(plc4c_spi_read_buffer
       uint8_t itemCount = byteCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         int8_t* _value = malloc(sizeof(int8_t));
         _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
         if(_res != OK) {
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
index 3238c58..a57dbf2 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_packet.c
@@ -254,7 +254,7 @@ plc4c_return_code plc4c_s7_read_write_cotp_packet_parse(plc4c_spi_read_buffer* b
     uint8_t _parametersLength = (((headerLength) + (1))) - (curPos);
     uint8_t parametersEndPos = plc4c_spi_read_get_pos(buf) + _parametersLength;
     while(plc4c_spi_read_get_pos(buf) < parametersEndPos) {
-      plc4c_list* _value = NULL;
+      plc4c_s7_read_write_cotp_parameter* _value = NULL;
       _res = plc4c_s7_read_write_cotp_parameter_parse(buf, (((headerLength) + (1))) - (curPos), (void*) &_value);
       if(_res != OK) {
         return _res;
diff --git a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
index ce38827..cad3703 100644
--- a/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/cotp_parameter.c
@@ -139,7 +139,6 @@ plc4c_return_code plc4c_s7_read_write_cotp_parameter_parse(plc4c_spi_read_buffer
       uint8_t itemCount = rest;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         
-                  
         uint8_t* _value = malloc(sizeof(uint8_t));
         _res = plc4c_spi_read_unsigned_byte(buf, 8, (uint8_t*) _value);
         if(_res != OK) {
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
index fac4180..cdd0bd1 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_parameter.c
@@ -141,7 +141,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       uint8_t itemCount = numItems;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_request_parameter_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_request_parameter_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_request_parameter_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -187,7 +187,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       uint8_t itemCount = numItems;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_request_parameter_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_request_parameter_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_request_parameter_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -233,7 +233,7 @@ plc4c_return_code plc4c_s7_read_write_s7_parameter_parse(plc4c_spi_read_buffer*
       uint8_t itemCount = numItems;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_parameter_user_data_item* _value = NULL;
+        plc4c_s7_read_write_s7_parameter_user_data_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_parameter_user_data_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
index 6f035ab..62cf046 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload.c
@@ -75,7 +75,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       uint8_t itemCount = ((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_read_var_response_num_items;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_payload_data_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_payload_data_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_payload_data_item_parse(buf, lastItem, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -100,7 +100,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       uint8_t itemCount = plc4c_spi_evaluation_helper_count(((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_write_var_request_items);
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_payload_data_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_payload_data_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_payload_data_item_parse(buf, lastItem, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -125,7 +125,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       uint8_t itemCount = ((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_write_var_response_num_items;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_var_payload_status_item* _value = NULL;
+        plc4c_s7_read_write_s7_var_payload_status_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_var_payload_status_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
@@ -150,7 +150,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_parse(plc4c_spi_read_buffer* bu
       uint8_t itemCount = plc4c_spi_evaluation_helper_count(((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_user_data_items);
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_s7_payload_user_data_item* _value = NULL;
+        plc4c_s7_read_write_s7_payload_user_data_item* _value = NULL;
         _res = plc4c_s7_read_write_s7_payload_user_data_item_parse(buf, ((plc4c_s7_read_write_s7_parameter_user_data_item*) (plc4c_utils_list_get_value(((plc4c_s7_read_write_s7_parameter*) (parameter))->s7_parameter_user_data_items, 0)))->s7_parameter_user_data_item_cpu_functions_cpu_function_type, (void*) &_value);
         if(_res != OK) {
           return _res;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
index 312c246..04f9925 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_payload_user_data_item.c
@@ -141,7 +141,7 @@ plc4c_return_code plc4c_s7_read_write_s7_payload_user_data_item_parse(plc4c_spi_
       uint8_t itemCount = szlItemCount;
       for(int curItem = 0; curItem < itemCount; curItem++) {
         bool lastItem = curItem == (itemCount - 1);
-                          plc4c_s7_read_write_szl_data_tree_item* _value = NULL;
+        plc4c_s7_read_write_szl_data_tree_item* _value = NULL;
         _res = plc4c_s7_read_write_szl_data_tree_item_parse(buf, (void*) &_value);
         if(_res != OK) {
           return _res;
diff --git a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
index b7dbe3f..8cb2346 100644
--- a/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/s7_var_payload_data_item.c
@@ -68,7 +68,6 @@ plc4c_return_code plc4c_s7_read_write_s7_var_payload_data_item_parse(plc4c_spi_r
     uint8_t itemCount = ((plc4c_s7_read_write_data_transport_size_get_size_in_bits(transportSize)) ? plc4c_spi_evaluation_helper_ceil((dataLength) / (8.0)) : dataLength);
     for(int curItem = 0; curItem < itemCount; curItem++) {
       
-                
       int8_t* _value = malloc(sizeof(int8_t));
       _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
       if(_res != OK) {
diff --git a/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c b/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
index ba34255..99a321d 100644
--- a/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/szl_data_tree_item.c
@@ -53,7 +53,6 @@ plc4c_return_code plc4c_s7_read_write_szl_data_tree_item_parse(plc4c_spi_read_bu
     uint8_t itemCount = 20;
     for(int curItem = 0; curItem < itemCount; curItem++) {
       
-                
       int8_t* _value = malloc(sizeof(int8_t));
       _res = plc4c_spi_read_signed_byte(buf, 8, (int8_t*) _value);
       if(_res != OK) {


[plc4x] 01/02: - PLC4X-207 - No registered handler found for message TPKTPacket[], , using default decode method - Communication with S7 and Modbus device hangs

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/plc4c
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 8d1afb3ed2418e30e165d1e258f49348ef63d775
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Sep 16 13:42:13 2020 +0200

    - PLC4X-207 - No registered handler found for message TPKTPacket[], , using default decode method - Communication with S7 and Modbus device hangs
    
    Duplicated the Modbus fix for overflowing PDUs from the Modbus to the S7 protocol.
---
 .../apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
index 0b6e4ec..133cffc 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
@@ -206,6 +206,10 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
     private CompletableFuture<S7Message> readInternal(S7MessageRequest request) {
         CompletableFuture<S7Message> future = new CompletableFuture<>();
         int tpduId = tpduGenerator.getAndIncrement();
+        // If we've reached the max value for a 16 bit transaction identifier, reset back to 1
+        if(tpduGenerator.get() == 0xFFFF) {
+            tpduGenerator.set(1);
+        }
 
         // Create a new Request with correct tpuId (is not known before)
         S7MessageRequest s7MessageRequest = new S7MessageRequest(tpduId, request.getParameter(), request.getPayload());
@@ -243,6 +247,11 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
             payloadItems.add(serializePlcValue(field, plcValue));
         }
         final int tpduId = tpduGenerator.getAndIncrement();
+        // If we've reached the max value for a 16 bit transaction identifier, reset back to 1
+        if(tpduGenerator.get() == 0xFFFF) {
+            tpduGenerator.set(1);
+        }
+
         TPKTPacket tpktPacket = new TPKTPacket(new COTPPacketData(null,
             new S7MessageRequest(tpduId,
                 new S7ParameterWriteVarRequest(parameterItems.toArray(new S7VarRequestParameterItem[0])),