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 2022/09/28 12:23:43 UTC
[plc4x] branch develop updated: refactor(codegen): Refactored all usages of BitString to use BYTE, WORD, DWORD or LWORD instead.
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new 7e509a6b1 refactor(codegen): Refactored all usages of BitString to use BYTE, WORD, DWORD or LWORD instead.
7e509a6b1 is described below
commit 7e509a6b16de8ed596e473c4138d45456e2940c6
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Sep 28 14:23:34 2022 +0200
refactor(codegen): Refactored all usages of BitString to use BYTE, WORD, DWORD or LWORD instead.
---
plc4c/generated-sources/modbus/src/data_item.c | 156 +++++++++----------
plc4c/generated-sources/plc4x/src/plc4x_value.c | 170 ++++++++++-----------
plc4c/generated-sources/s7/src/data_item.c | 170 ++++++++++-----------
plc4go/protocols/ads/readwrite/model/DataItem.go | 24 +--
.../knxnetip/readwrite/model/KnxDatapoint.go | 24 +--
.../protocols/modbus/readwrite/model/DataItem.go | 108 +++++--------
plc4go/protocols/s7/readwrite/model/DataItem.go | 114 ++++++--------
.../plc4x/protocol/ads/ManualAdsDriverTest.java | 27 ++++
.../knxnetip/readwrite/model/KnxDatapoint.cs | 24 +--
.../ads/src/main/resources/protocols/ads/ads.mspec | 8 +-
protocols/knxnetip/src/main/xslt/knx-types.xsl | 8 +-
.../main/resources/protocols/modbus/modbus.mspec | 20 +--
.../main/resources/protocols/plc4x/v0/plc4x.mspec | 16 +-
.../protocols/plc4x/ParserSerializerTestsuite.xml | 59 +------
.../s7/src/main/resources/protocols/s7/s7.mspec | 16 +-
15 files changed, 413 insertions(+), 531 deletions(-)
diff --git a/plc4c/generated-sources/modbus/src/data_item.c b/plc4c/generated-sources/modbus/src/data_item.c
index d3b82044e..30d78a4a7 100644
--- a/plc4c/generated-sources/modbus/src/data_item.c
+++ b/plc4c/generated-sources/modbus/src/data_item.c
@@ -77,7 +77,7 @@ plc4c_return_code plc4c_modbus_read_write_data_item_parse(plc4c_spi_read_buffer*
}
*data_item = plc4c_data_create_list_data(value);
- } else if((dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) && (numberOfValues == 1)) { /* List */
+ } else if((dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) && (numberOfValues == 1)) { /* BYTE */
// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
{
@@ -91,21 +91,14 @@ plc4c_return_code plc4c_modbus_read_write_data_item_parse(plc4c_spi_read_buffer*
}
}
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 8;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
+ // Simple Field (value)
+ uint8_t value = 0;
+ _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_byte_data(value);
} else if(dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) { /* List */
@@ -125,59 +118,38 @@ plc4c_return_code plc4c_modbus_read_write_data_item_parse(plc4c_spi_read_buffer*
}
*data_item = plc4c_data_create_list_data(value);
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_WORD) { /* List */
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_WORD) { /* WORD */
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) (numberOfValues) * (16);
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
+ // Simple Field (value)
+ uint16_t value = 0;
+ _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_DWORD) { /* List */
+ *data_item = plc4c_data_create_word_data(value);
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) (numberOfValues) * (32);
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_DWORD) { /* DWORD */
+
+ // Simple Field (value)
+ uint32_t value = 0;
+ _res = plc4c_spi_read_unsigned_int(readBuffer, 32, (uint32_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_LWORD) { /* List */
+ *data_item = plc4c_data_create_dword_data(value);
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) (numberOfValues) * (64);
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_LWORD) { /* LWORD */
+
+ // Simple Field (value)
+ uint64_t value = 0;
+ _res = plc4c_spi_read_unsigned_long(readBuffer, 64, (uint64_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_lword_data(value);
} else if((dataType == plc4c_modbus_read_write_modbus_data_type_SINT) && (numberOfValues == 1)) { /* SINT */
@@ -570,23 +542,39 @@ plc4c_return_code plc4c_modbus_read_write_data_item_serialize(plc4c_spi_write_bu
} else if(dataType == plc4c_modbus_read_write_modbus_data_type_BOOL) { /* List */
// Array field
- } else if((dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) && (numberOfValues == 1)) { /* List */
+ } else if((dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) && (numberOfValues == 1)) { /* BYTE */
// Reserved Field (reserved)
- // Array field
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, (*data_item)->data.byte_value);
+ if(_res != OK) {
+ return _res;
+ }
} else if(dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) { /* List */
// Array field
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_WORD) { /* List */
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_WORD) { /* WORD */
- // Array field
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_DWORD) { /* List */
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_short(writeBuffer, 16, (*data_item)->data.word_value);
+ if(_res != OK) {
+ return _res;
+ }
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_DWORD) { /* DWORD */
- // Array field
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_LWORD) { /* List */
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_int(writeBuffer, 32, (*data_item)->data.dword_value);
+ if(_res != OK) {
+ return _res;
+ }
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_LWORD) { /* LWORD */
- // Array field
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_long(writeBuffer, 64, (*data_item)->data.lword_value);
+ if(_res != OK) {
+ return _res;
+ }
} else if((dataType == plc4c_modbus_read_write_modbus_data_type_SINT) && (numberOfValues == 1)) { /* SINT */
// Reserved Field (reserved)
@@ -732,29 +720,29 @@ uint16_t plc4c_modbus_read_write_data_item_length_in_bits(plc4c_data* data_item,
// Array field
lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if((dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) && (numberOfValues == 1)) { /* List */
+ } else if((dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) && (numberOfValues == 1)) { /* BYTE */
// Reserved Field (reserved)
lengthInBits += 8;
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
+ // Simple field (value)
+ lengthInBits += 8;
} else if(dataType == plc4c_modbus_read_write_modbus_data_type_BYTE) { /* List */
// Array field
lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_WORD) { /* List */
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_WORD) { /* WORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_DWORD) { /* List */
+ // Simple field (value)
+ lengthInBits += 16;
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_DWORD) { /* DWORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(dataType == plc4c_modbus_read_write_modbus_data_type_LWORD) { /* List */
+ // Simple field (value)
+ lengthInBits += 32;
+ } else if(dataType == plc4c_modbus_read_write_modbus_data_type_LWORD) { /* LWORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
+ // Simple field (value)
+ lengthInBits += 64;
} else if((dataType == plc4c_modbus_read_write_modbus_data_type_SINT) && (numberOfValues == 1)) { /* SINT */
// Reserved Field (reserved)
diff --git a/plc4c/generated-sources/plc4x/src/plc4x_value.c b/plc4c/generated-sources/plc4x/src/plc4x_value.c
index 17f4ba17e..2aababae4 100644
--- a/plc4c/generated-sources/plc4x/src/plc4x_value.c
+++ b/plc4c/generated-sources/plc4x/src/plc4x_value.c
@@ -59,77 +59,49 @@ plc4c_return_code plc4c_plc4x_read_write_plc4x_value_parse(plc4c_spi_read_buffer
*data_item = plc4c_data_create_bool_data(value);
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_BYTE) { /* List */
-
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 8;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
-
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WORD) { /* List */
-
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 16;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
-
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_DWORD) { /* List */
-
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 32;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
-
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_LWORD) { /* List */
-
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 64;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_BYTE) { /* BYTE */
+
+ // Simple Field (value)
+ uint8_t value = 0;
+ _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_byte_data(value);
+
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WORD) { /* WORD */
+
+ // Simple Field (value)
+ uint16_t value = 0;
+ _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_word_data(value);
+
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_DWORD) { /* DWORD */
+
+ // Simple Field (value)
+ uint32_t value = 0;
+ _res = plc4c_spi_read_unsigned_int(readBuffer, 32, (uint32_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_dword_data(value);
+
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_LWORD) { /* LWORD */
+
+ // Simple Field (value)
+ uint64_t value = 0;
+ _res = plc4c_spi_read_unsigned_long(readBuffer, 64, (uint64_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_lword_data(value);
} else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_USINT) { /* USINT */
@@ -287,18 +259,34 @@ plc4c_return_code plc4c_plc4x_read_write_plc4x_value_serialize(plc4c_spi_write_b
if(_res != OK) {
return _res;
}
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_BYTE) { /* List */
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_BYTE) { /* BYTE */
- // Array field
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WORD) { /* List */
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, (*data_item)->data.byte_value);
+ if(_res != OK) {
+ return _res;
+ }
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WORD) { /* WORD */
- // Array field
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_DWORD) { /* List */
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_short(writeBuffer, 16, (*data_item)->data.word_value);
+ if(_res != OK) {
+ return _res;
+ }
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_DWORD) { /* DWORD */
- // Array field
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_LWORD) { /* List */
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_int(writeBuffer, 32, (*data_item)->data.dword_value);
+ if(_res != OK) {
+ return _res;
+ }
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_LWORD) { /* LWORD */
- // Array field
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_long(writeBuffer, 64, (*data_item)->data.lword_value);
+ if(_res != OK) {
+ return _res;
+ }
} else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_USINT) { /* USINT */
// Simple field (value)
@@ -408,22 +396,22 @@ uint16_t plc4c_plc4x_read_write_plc4x_value_length_in_bits(plc4c_data* data_item
// Simple field (value)
lengthInBits += 1;
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_BYTE) { /* List */
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_BYTE) { /* BYTE */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WORD) { /* List */
+ // Simple field (value)
+ lengthInBits += 8;
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WORD) { /* WORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_DWORD) { /* List */
+ // Simple field (value)
+ lengthInBits += 16;
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_DWORD) { /* DWORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_LWORD) { /* List */
+ // Simple field (value)
+ lengthInBits += 32;
+ } else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_LWORD) { /* LWORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
+ // Simple field (value)
+ lengthInBits += 64;
} else if(valueType == plc4c_plc4x_read_write_plc4x_value_type_USINT) { /* USINT */
// Simple field (value)
diff --git a/plc4c/generated-sources/s7/src/data_item.c b/plc4c/generated-sources/s7/src/data_item.c
index 0dc86a4a1..f999b07a7 100644
--- a/plc4c/generated-sources/s7/src/data_item.c
+++ b/plc4c/generated-sources/s7/src/data_item.c
@@ -59,77 +59,49 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* rea
*data_item = plc4c_data_create_bool_data(value);
- } else if(strcmp(dataProtocolId, "IEC61131_BYTE") == 0) { /* List */
-
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 8;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
-
- } else if(strcmp(dataProtocolId, "IEC61131_WORD") == 0) { /* List */
-
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 16;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
-
- } else if(strcmp(dataProtocolId, "IEC61131_DWORD") == 0) { /* List */
-
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 32;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
-
- } else if(strcmp(dataProtocolId, "IEC61131_LWORD") == 0) { /* List */
-
- // Array field (value)
- // Count array
- plc4c_list* value;
- plc4c_utils_list_create(&value);
- int itemCount = (int) 64;
- for(int curItem = 0; curItem < itemCount; curItem++) {
- bool* _val = malloc(sizeof(bool) * 1);
- _res = plc4c_spi_read_bit(readBuffer, (bool*) _val);
- if(_res != OK) {
- return _res;
- }
- plc4c_data* _item = plc4c_data_create_bool_data(*_val);
- plc4c_utils_list_insert_head_value(value, _item);
- }
- *data_item = plc4c_data_create_list_data(value);
+ } else if(strcmp(dataProtocolId, "IEC61131_BYTE") == 0) { /* BYTE */
+
+ // Simple Field (value)
+ uint8_t value = 0;
+ _res = plc4c_spi_read_unsigned_byte(readBuffer, 8, (uint8_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_byte_data(value);
+
+ } else if(strcmp(dataProtocolId, "IEC61131_WORD") == 0) { /* WORD */
+
+ // Simple Field (value)
+ uint16_t value = 0;
+ _res = plc4c_spi_read_unsigned_short(readBuffer, 16, (uint16_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_word_data(value);
+
+ } else if(strcmp(dataProtocolId, "IEC61131_DWORD") == 0) { /* DWORD */
+
+ // Simple Field (value)
+ uint32_t value = 0;
+ _res = plc4c_spi_read_unsigned_int(readBuffer, 32, (uint32_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_dword_data(value);
+
+ } else if(strcmp(dataProtocolId, "IEC61131_LWORD") == 0) { /* LWORD */
+
+ // Simple Field (value)
+ uint64_t value = 0;
+ _res = plc4c_spi_read_unsigned_long(readBuffer, 64, (uint64_t*) &value);
+ if(_res != OK) {
+ return _res;
+ }
+
+ *data_item = plc4c_data_create_lword_data(value);
} else if(strcmp(dataProtocolId, "IEC61131_SINT") == 0) { /* SINT */
@@ -418,18 +390,34 @@ plc4c_return_code plc4c_s7_read_write_data_item_serialize(plc4c_spi_write_buffer
if(_res != OK) {
return _res;
}
- } else if(strcmp(dataProtocolId, "IEC61131_BYTE") == 0) { /* List */
+ } else if(strcmp(dataProtocolId, "IEC61131_BYTE") == 0) { /* BYTE */
- // Array field
- } else if(strcmp(dataProtocolId, "IEC61131_WORD") == 0) { /* List */
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_byte(writeBuffer, 8, (*data_item)->data.byte_value);
+ if(_res != OK) {
+ return _res;
+ }
+ } else if(strcmp(dataProtocolId, "IEC61131_WORD") == 0) { /* WORD */
- // Array field
- } else if(strcmp(dataProtocolId, "IEC61131_DWORD") == 0) { /* List */
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_short(writeBuffer, 16, (*data_item)->data.word_value);
+ if(_res != OK) {
+ return _res;
+ }
+ } else if(strcmp(dataProtocolId, "IEC61131_DWORD") == 0) { /* DWORD */
- // Array field
- } else if(strcmp(dataProtocolId, "IEC61131_LWORD") == 0) { /* List */
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_int(writeBuffer, 32, (*data_item)->data.dword_value);
+ if(_res != OK) {
+ return _res;
+ }
+ } else if(strcmp(dataProtocolId, "IEC61131_LWORD") == 0) { /* LWORD */
- // Array field
+ // Simple field (value)
+ _res = plc4c_spi_write_unsigned_long(writeBuffer, 64, (*data_item)->data.lword_value);
+ if(_res != OK) {
+ return _res;
+ }
} else if(strcmp(dataProtocolId, "IEC61131_SINT") == 0) { /* SINT */
// Simple field (value)
@@ -614,22 +602,22 @@ uint16_t plc4c_s7_read_write_data_item_length_in_bits(plc4c_data* data_item, cha
// Simple field (value)
lengthInBits += 1;
- } else if(strcmp(dataProtocolId, "IEC61131_BYTE") == 0) { /* List */
+ } else if(strcmp(dataProtocolId, "IEC61131_BYTE") == 0) { /* BYTE */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(strcmp(dataProtocolId, "IEC61131_WORD") == 0) { /* List */
+ // Simple field (value)
+ lengthInBits += 8;
+ } else if(strcmp(dataProtocolId, "IEC61131_WORD") == 0) { /* WORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(strcmp(dataProtocolId, "IEC61131_DWORD") == 0) { /* List */
+ // Simple field (value)
+ lengthInBits += 16;
+ } else if(strcmp(dataProtocolId, "IEC61131_DWORD") == 0) { /* DWORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
- } else if(strcmp(dataProtocolId, "IEC61131_LWORD") == 0) { /* List */
+ // Simple field (value)
+ lengthInBits += 32;
+ } else if(strcmp(dataProtocolId, "IEC61131_LWORD") == 0) { /* LWORD */
- // Array field
- lengthInBits += 1 * plc4c_utils_list_size(data_item->data.list_value);
+ // Simple field (value)
+ lengthInBits += 64;
} else if(strcmp(dataProtocolId, "IEC61131_SINT") == 0) { /* SINT */
// Simple field (value)
diff --git a/plc4go/protocols/ads/readwrite/model/DataItem.go b/plc4go/protocols/ads/readwrite/model/DataItem.go
index b989797e2..1856eaa47 100644
--- a/plc4go/protocols/ads/readwrite/model/DataItem.go
+++ b/plc4go/protocols/ads/readwrite/model/DataItem.go
@@ -45,38 +45,38 @@ func DataItemParse(readBuffer utils.ReadBuffer, plcValueType PlcValueType, strin
}
readBuffer.CloseContext("DataItem")
return values.NewPlcBOOL(value), nil
- case plcValueType == PlcValueType_BYTE: // BitString
+ case plcValueType == PlcValueType_BYTE: // BYTE
// Simple Field (value)
value, _valueErr := readBuffer.ReadUint8("value", 8)
if _valueErr != nil {
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcBitString(value), nil
- case plcValueType == PlcValueType_WORD: // BitString
+ return values.NewPlcBYTE(value), nil
+ case plcValueType == PlcValueType_WORD: // WORD
// Simple Field (value)
value, _valueErr := readBuffer.ReadUint16("value", 16)
if _valueErr != nil {
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcBitString(value), nil
- case plcValueType == PlcValueType_DWORD: // BitString
+ return values.NewPlcWORD(value), nil
+ case plcValueType == PlcValueType_DWORD: // DWORD
// Simple Field (value)
value, _valueErr := readBuffer.ReadUint32("value", 32)
if _valueErr != nil {
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcBitString(value), nil
- case plcValueType == PlcValueType_LWORD: // BitString
+ return values.NewPlcDWORD(value), nil
+ case plcValueType == PlcValueType_LWORD: // LWORD
// Simple Field (value)
value, _valueErr := readBuffer.ReadUint64("value", 64)
if _valueErr != nil {
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcBitString(value), nil
+ return values.NewPlcLWORD(value), nil
case plcValueType == PlcValueType_SINT: // SINT
// Simple Field (value)
value, _valueErr := readBuffer.ReadInt8("value", 8)
@@ -266,22 +266,22 @@ func DataItemSerialize(writeBuffer utils.WriteBuffer, value api.PlcValue, plcVal
if _err := writeBuffer.WriteBit("value", value.GetBool()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case plcValueType == PlcValueType_BYTE: // BitString
+ case plcValueType == PlcValueType_BYTE: // BYTE
// Simple Field (value)
if _err := writeBuffer.WriteUint8("value", 8, value.GetUint8()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case plcValueType == PlcValueType_WORD: // BitString
+ case plcValueType == PlcValueType_WORD: // WORD
// Simple Field (value)
if _err := writeBuffer.WriteUint16("value", 16, value.GetUint16()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case plcValueType == PlcValueType_DWORD: // BitString
+ case plcValueType == PlcValueType_DWORD: // DWORD
// Simple Field (value)
if _err := writeBuffer.WriteUint32("value", 32, value.GetUint32()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case plcValueType == PlcValueType_LWORD: // BitString
+ case plcValueType == PlcValueType_LWORD: // LWORD
// Simple Field (value)
if _err := writeBuffer.WriteUint64("value", 64, value.GetUint64()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
diff --git a/plc4go/protocols/knxnetip/readwrite/model/KnxDatapoint.go b/plc4go/protocols/knxnetip/readwrite/model/KnxDatapoint.go
index b00c1da35..512a07007 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/KnxDatapoint.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/KnxDatapoint.go
@@ -45,7 +45,7 @@ func KnxDatapointParse(readBuffer utils.ReadBuffer, datapointType KnxDatapointTy
}
readBuffer.CloseContext("KnxDatapoint")
return values.NewPlcBOOL(value), nil
- case datapointType == KnxDatapointType_BYTE: // BitString
+ case datapointType == KnxDatapointType_BYTE: // BYTE
// Reserved Field (Just skip the bytes)
if _, _err := readBuffer.ReadUint8("reserved", 8); _err != nil {
return nil, errors.Wrap(_err, "Error parsing reserved field")
@@ -57,8 +57,8 @@ func KnxDatapointParse(readBuffer utils.ReadBuffer, datapointType KnxDatapointTy
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("KnxDatapoint")
- return values.NewPlcBitString(value), nil
- case datapointType == KnxDatapointType_WORD: // BitString
+ return values.NewPlcBYTE(value), nil
+ case datapointType == KnxDatapointType_WORD: // WORD
// Reserved Field (Just skip the bytes)
if _, _err := readBuffer.ReadUint8("reserved", 8); _err != nil {
return nil, errors.Wrap(_err, "Error parsing reserved field")
@@ -70,8 +70,8 @@ func KnxDatapointParse(readBuffer utils.ReadBuffer, datapointType KnxDatapointTy
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("KnxDatapoint")
- return values.NewPlcBitString(value), nil
- case datapointType == KnxDatapointType_DWORD: // BitString
+ return values.NewPlcWORD(value), nil
+ case datapointType == KnxDatapointType_DWORD: // DWORD
// Reserved Field (Just skip the bytes)
if _, _err := readBuffer.ReadUint8("reserved", 8); _err != nil {
return nil, errors.Wrap(_err, "Error parsing reserved field")
@@ -83,8 +83,8 @@ func KnxDatapointParse(readBuffer utils.ReadBuffer, datapointType KnxDatapointTy
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("KnxDatapoint")
- return values.NewPlcBitString(value), nil
- case datapointType == KnxDatapointType_LWORD: // BitString
+ return values.NewPlcDWORD(value), nil
+ case datapointType == KnxDatapointType_LWORD: // LWORD
// Reserved Field (Just skip the bytes)
if _, _err := readBuffer.ReadUint8("reserved", 8); _err != nil {
return nil, errors.Wrap(_err, "Error parsing reserved field")
@@ -96,7 +96,7 @@ func KnxDatapointParse(readBuffer utils.ReadBuffer, datapointType KnxDatapointTy
return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("KnxDatapoint")
- return values.NewPlcBitString(value), nil
+ return values.NewPlcLWORD(value), nil
case datapointType == KnxDatapointType_USINT: // USINT
// Reserved Field (Just skip the bytes)
if _, _err := readBuffer.ReadUint8("reserved", 8); _err != nil {
@@ -7579,7 +7579,7 @@ func KnxDatapointSerialize(writeBuffer utils.WriteBuffer, value api.PlcValue, da
if _err := writeBuffer.WriteBit("value", value.GetBool()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case datapointType == KnxDatapointType_BYTE: // BitString
+ case datapointType == KnxDatapointType_BYTE: // BYTE
// Reserved Field (Just skip the bytes)
if _err := writeBuffer.WriteUint8("reserved", 8, uint8(0x00)); _err != nil {
return errors.Wrap(_err, "Error serializing reserved field")
@@ -7589,7 +7589,7 @@ func KnxDatapointSerialize(writeBuffer utils.WriteBuffer, value api.PlcValue, da
if _err := writeBuffer.WriteUint8("value", 8, value.GetUint8()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case datapointType == KnxDatapointType_WORD: // BitString
+ case datapointType == KnxDatapointType_WORD: // WORD
// Reserved Field (Just skip the bytes)
if _err := writeBuffer.WriteUint8("reserved", 8, uint8(0x00)); _err != nil {
return errors.Wrap(_err, "Error serializing reserved field")
@@ -7599,7 +7599,7 @@ func KnxDatapointSerialize(writeBuffer utils.WriteBuffer, value api.PlcValue, da
if _err := writeBuffer.WriteUint16("value", 16, value.GetUint16()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case datapointType == KnxDatapointType_DWORD: // BitString
+ case datapointType == KnxDatapointType_DWORD: // DWORD
// Reserved Field (Just skip the bytes)
if _err := writeBuffer.WriteUint8("reserved", 8, uint8(0x00)); _err != nil {
return errors.Wrap(_err, "Error serializing reserved field")
@@ -7609,7 +7609,7 @@ func KnxDatapointSerialize(writeBuffer utils.WriteBuffer, value api.PlcValue, da
if _err := writeBuffer.WriteUint32("value", 32, value.GetUint32()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case datapointType == KnxDatapointType_LWORD: // BitString
+ case datapointType == KnxDatapointType_LWORD: // LWORD
// Reserved Field (Just skip the bytes)
if _err := writeBuffer.WriteUint8("reserved", 8, uint8(0x00)); _err != nil {
return errors.Wrap(_err, "Error serializing reserved field")
diff --git a/plc4go/protocols/modbus/readwrite/model/DataItem.go b/plc4go/protocols/modbus/readwrite/model/DataItem.go
index 9710262cf..5742dc9d1 100644
--- a/plc4go/protocols/modbus/readwrite/model/DataItem.go
+++ b/plc4go/protocols/modbus/readwrite/model/DataItem.go
@@ -56,23 +56,19 @@ func DataItemParse(readBuffer utils.ReadBuffer, dataType ModbusDataType, numberO
}
readBuffer.CloseContext("DataItem")
return values.NewPlcList(value), nil
- case dataType == ModbusDataType_BYTE && numberOfValues == uint16(1): // List
+ case dataType == ModbusDataType_BYTE && numberOfValues == uint16(1): // BYTE
// Reserved Field (Just skip the bytes)
if _, _err := readBuffer.ReadUint8("reserved", 8); _err != nil {
return nil, errors.Wrap(_err, "Error parsing reserved field")
}
- // Array Field (value)
- var value []api.PlcValue
- for i := 0; i < int((8)); i++ {
- _item, _itemErr := readBuffer.ReadBit("value")
- if _itemErr != nil {
- return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
- }
- value = append(value, values.NewPlcBOOL(_item))
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadUint8("value", 8)
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcList(value), nil
+ return values.NewPlcBYTE(value), nil
case dataType == ModbusDataType_BYTE: // List
// Array Field (value)
var value []api.PlcValue
@@ -85,42 +81,30 @@ func DataItemParse(readBuffer utils.ReadBuffer, dataType ModbusDataType, numberO
}
readBuffer.CloseContext("DataItem")
return values.NewPlcList(value), nil
- case dataType == ModbusDataType_WORD: // List
- // Array Field (value)
- var value []api.PlcValue
- for i := 0; i < int((numberOfValues)*(16)); i++ {
- _item, _itemErr := readBuffer.ReadBit("value")
- if _itemErr != nil {
- return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
- }
- value = append(value, values.NewPlcBOOL(_item))
+ case dataType == ModbusDataType_WORD: // WORD
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadUint16("value", 16)
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcList(value), nil
- case dataType == ModbusDataType_DWORD: // List
- // Array Field (value)
- var value []api.PlcValue
- for i := 0; i < int((numberOfValues)*(32)); i++ {
- _item, _itemErr := readBuffer.ReadBit("value")
- if _itemErr != nil {
- return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
- }
- value = append(value, values.NewPlcBOOL(_item))
+ return values.NewPlcWORD(value), nil
+ case dataType == ModbusDataType_DWORD: // DWORD
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadUint32("value", 32)
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcList(value), nil
- case dataType == ModbusDataType_LWORD: // List
- // Array Field (value)
- var value []api.PlcValue
- for i := 0; i < int((numberOfValues)*(64)); i++ {
- _item, _itemErr := readBuffer.ReadBit("value")
- if _itemErr != nil {
- return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
- }
- value = append(value, values.NewPlcBOOL(_item))
+ return values.NewPlcDWORD(value), nil
+ case dataType == ModbusDataType_LWORD: // LWORD
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadUint64("value", 64)
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcList(value), nil
+ return values.NewPlcLWORD(value), nil
case dataType == ModbusDataType_SINT && numberOfValues == uint16(1): // SINT
// Reserved Field (Just skip the bytes)
if _, _err := readBuffer.ReadUint8("reserved", 8); _err != nil {
@@ -405,18 +389,15 @@ func DataItemSerialize(writeBuffer utils.WriteBuffer, value api.PlcValue, dataTy
return errors.Wrap(_itemErr, "Error serializing 'value' field")
}
}
- case dataType == ModbusDataType_BYTE && numberOfValues == uint16(1): // List
+ case dataType == ModbusDataType_BYTE && numberOfValues == uint16(1): // BYTE
// Reserved Field (Just skip the bytes)
if _err := writeBuffer.WriteUint8("reserved", 8, uint8(0x00)); _err != nil {
return errors.Wrap(_err, "Error serializing reserved field")
}
- // Array Field (value)
- for i := uint32(0); i < uint32((8)); i++ {
- _itemErr := writeBuffer.WriteBit("", value.GetIndex(i).GetBool())
- if _itemErr != nil {
- return errors.Wrap(_itemErr, "Error serializing 'value' field")
- }
+ // Simple Field (value)
+ if _err := writeBuffer.WriteUint8("value", 8, value.GetUint8()); _err != nil {
+ return errors.Wrap(_err, "Error serializing 'value' field")
}
case dataType == ModbusDataType_BYTE: // List
// Array Field (value)
@@ -426,29 +407,20 @@ func DataItemSerialize(writeBuffer utils.WriteBuffer, value api.PlcValue, dataTy
return errors.Wrap(_itemErr, "Error serializing 'value' field")
}
}
- case dataType == ModbusDataType_WORD: // List
- // Array Field (value)
- for i := uint32(0); i < uint32((m.NumberOfValues)*(16)); i++ {
- _itemErr := writeBuffer.WriteBit("", value.GetIndex(i).GetBool())
- if _itemErr != nil {
- return errors.Wrap(_itemErr, "Error serializing 'value' field")
- }
+ case dataType == ModbusDataType_WORD: // WORD
+ // Simple Field (value)
+ if _err := writeBuffer.WriteUint16("value", 16, value.GetUint16()); _err != nil {
+ return errors.Wrap(_err, "Error serializing 'value' field")
}
- case dataType == ModbusDataType_DWORD: // List
- // Array Field (value)
- for i := uint32(0); i < uint32((m.NumberOfValues)*(32)); i++ {
- _itemErr := writeBuffer.WriteBit("", value.GetIndex(i).GetBool())
- if _itemErr != nil {
- return errors.Wrap(_itemErr, "Error serializing 'value' field")
- }
+ case dataType == ModbusDataType_DWORD: // DWORD
+ // Simple Field (value)
+ if _err := writeBuffer.WriteUint32("value", 32, value.GetUint32()); _err != nil {
+ return errors.Wrap(_err, "Error serializing 'value' field")
}
- case dataType == ModbusDataType_LWORD: // List
- // Array Field (value)
- for i := uint32(0); i < uint32((m.NumberOfValues)*(64)); i++ {
- _itemErr := writeBuffer.WriteBit("", value.GetIndex(i).GetBool())
- if _itemErr != nil {
- return errors.Wrap(_itemErr, "Error serializing 'value' field")
- }
+ case dataType == ModbusDataType_LWORD: // LWORD
+ // Simple Field (value)
+ if _err := writeBuffer.WriteUint64("value", 64, value.GetUint64()); _err != nil {
+ return errors.Wrap(_err, "Error serializing 'value' field")
}
case dataType == ModbusDataType_SINT && numberOfValues == uint16(1): // SINT
// Reserved Field (Just skip the bytes)
diff --git a/plc4go/protocols/s7/readwrite/model/DataItem.go b/plc4go/protocols/s7/readwrite/model/DataItem.go
index b3ac2319f..e75da7baf 100644
--- a/plc4go/protocols/s7/readwrite/model/DataItem.go
+++ b/plc4go/protocols/s7/readwrite/model/DataItem.go
@@ -45,54 +45,38 @@ func DataItemParse(readBuffer utils.ReadBuffer, dataProtocolId string, stringLen
}
readBuffer.CloseContext("DataItem")
return values.NewPlcBOOL(value), nil
- case dataProtocolId == "IEC61131_BYTE": // List
- // Array Field (value)
- var value []api.PlcValue
- for i := 0; i < int((8)); i++ {
- _item, _itemErr := readBuffer.ReadBit("value")
- if _itemErr != nil {
- return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
- }
- value = append(value, values.NewPlcBOOL(_item))
+ case dataProtocolId == "IEC61131_BYTE": // BYTE
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadUint8("value", 8)
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcList(value), nil
- case dataProtocolId == "IEC61131_WORD": // List
- // Array Field (value)
- var value []api.PlcValue
- for i := 0; i < int((16)); i++ {
- _item, _itemErr := readBuffer.ReadBit("value")
- if _itemErr != nil {
- return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
- }
- value = append(value, values.NewPlcBOOL(_item))
+ return values.NewPlcBYTE(value), nil
+ case dataProtocolId == "IEC61131_WORD": // WORD
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadUint16("value", 16)
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcList(value), nil
- case dataProtocolId == "IEC61131_DWORD": // List
- // Array Field (value)
- var value []api.PlcValue
- for i := 0; i < int((32)); i++ {
- _item, _itemErr := readBuffer.ReadBit("value")
- if _itemErr != nil {
- return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
- }
- value = append(value, values.NewPlcBOOL(_item))
+ return values.NewPlcWORD(value), nil
+ case dataProtocolId == "IEC61131_DWORD": // DWORD
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadUint32("value", 32)
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcList(value), nil
- case dataProtocolId == "IEC61131_LWORD": // List
- // Array Field (value)
- var value []api.PlcValue
- for i := 0; i < int((64)); i++ {
- _item, _itemErr := readBuffer.ReadBit("value")
- if _itemErr != nil {
- return nil, errors.Wrap(_itemErr, "Error parsing 'value' field")
- }
- value = append(value, values.NewPlcBOOL(_item))
+ return values.NewPlcDWORD(value), nil
+ case dataProtocolId == "IEC61131_LWORD": // LWORD
+ // Simple Field (value)
+ value, _valueErr := readBuffer.ReadUint64("value", 64)
+ if _valueErr != nil {
+ return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
}
readBuffer.CloseContext("DataItem")
- return values.NewPlcList(value), nil
+ return values.NewPlcLWORD(value), nil
case dataProtocolId == "IEC61131_SINT": // SINT
// Simple Field (value)
value, _valueErr := readBuffer.ReadInt8("value", 8)
@@ -314,37 +298,25 @@ func DataItemSerialize(writeBuffer utils.WriteBuffer, value api.PlcValue, dataPr
if _err := writeBuffer.WriteBit("value", value.GetBool()); _err != nil {
return errors.Wrap(_err, "Error serializing 'value' field")
}
- case dataProtocolId == "IEC61131_BYTE": // List
- // Array Field (value)
- for i := uint32(0); i < uint32((8)); i++ {
- _itemErr := writeBuffer.WriteBit("", value.GetIndex(i).GetBool())
- if _itemErr != nil {
- return errors.Wrap(_itemErr, "Error serializing 'value' field")
- }
- }
- case dataProtocolId == "IEC61131_WORD": // List
- // Array Field (value)
- for i := uint32(0); i < uint32((16)); i++ {
- _itemErr := writeBuffer.WriteBit("", value.GetIndex(i).GetBool())
- if _itemErr != nil {
- return errors.Wrap(_itemErr, "Error serializing 'value' field")
- }
- }
- case dataProtocolId == "IEC61131_DWORD": // List
- // Array Field (value)
- for i := uint32(0); i < uint32((32)); i++ {
- _itemErr := writeBuffer.WriteBit("", value.GetIndex(i).GetBool())
- if _itemErr != nil {
- return errors.Wrap(_itemErr, "Error serializing 'value' field")
- }
- }
- case dataProtocolId == "IEC61131_LWORD": // List
- // Array Field (value)
- for i := uint32(0); i < uint32((64)); i++ {
- _itemErr := writeBuffer.WriteBit("", value.GetIndex(i).GetBool())
- if _itemErr != nil {
- return errors.Wrap(_itemErr, "Error serializing 'value' field")
- }
+ case dataProtocolId == "IEC61131_BYTE": // BYTE
+ // Simple Field (value)
+ if _err := writeBuffer.WriteUint8("value", 8, value.GetUint8()); _err != nil {
+ return errors.Wrap(_err, "Error serializing 'value' field")
+ }
+ case dataProtocolId == "IEC61131_WORD": // WORD
+ // Simple Field (value)
+ if _err := writeBuffer.WriteUint16("value", 16, value.GetUint16()); _err != nil {
+ return errors.Wrap(_err, "Error serializing 'value' field")
+ }
+ case dataProtocolId == "IEC61131_DWORD": // DWORD
+ // Simple Field (value)
+ if _err := writeBuffer.WriteUint32("value", 32, value.GetUint32()); _err != nil {
+ return errors.Wrap(_err, "Error serializing 'value' field")
+ }
+ case dataProtocolId == "IEC61131_LWORD": // LWORD
+ // Simple Field (value)
+ if _err := writeBuffer.WriteUint64("value", 64, value.GetUint64()); _err != nil {
+ return errors.Wrap(_err, "Error serializing 'value' field")
}
case dataProtocolId == "IEC61131_SINT": // SINT
// Simple Field (value)
diff --git a/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsDriverTest.java b/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsDriverTest.java
index 3beb89099..35691b976 100644
--- a/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsDriverTest.java
+++ b/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsDriverTest.java
@@ -18,6 +18,7 @@
*/
package org.apache.plc4x.protocol.ads;
+import org.apache.plc4x.java.api.value.PlcValue;
import org.apache.plc4x.java.spi.values.*;
import org.apache.plc4x.test.manual.ManualTest;
@@ -25,6 +26,8 @@ import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
+import java.util.HashMap;
+import java.util.Map;
public class ManualAdsDriverTest extends ManualTest {
@@ -106,6 +109,30 @@ public class ManualAdsDriverTest extends ManualTest {
test.addTestCase("MAIN.hurz_TIME_OF_DAY", new PlcTIME_OF_DAY(LocalTime.parse("15:36:30.123")));
test.addTestCase("MAIN.hurz_DATE_AND_TIME", new PlcDATE_AND_TIME(LocalDateTime.parse("1996-05-06T15:36:30")));
//test.addTestCase("MAIN.hurz_DT", new PlcDT("1972-03-29T00:00"));
+ Map<String, PlcValue> children = new HashMap<>();
+ children.put("hurz_BOOL", new PlcBOOL(true));
+ children.put("hurz_BYTE", new PlcBitString(new boolean[]{false, false, false, false, false, false, false, true}));
+ children.put("hurz_WORD", new PlcBitString(new boolean[]{false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false}));
+ children.put("hurz_DWORD", new PlcBitString(new boolean[]{false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true}));
+ children.put("hurz_LDWORD", new PlcBitString(new boolean[]{false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, [...]
+ children.put("hurz_SINT", new PlcSINT(5));
+ children.put("hurz_USINT", new PlcUSINT(6));
+ children.put("hurz_INT", new PlcINT(7));
+ children.put("hurz_UINT", new PlcUINT(8));
+ children.put("hurz_DINT", new PlcDINT(9));
+ children.put("hurz_UDINT", new PlcUDINT(10));
+ children.put("hurz_LINT", new PlcLINT(11));
+ children.put("hurz_ULINT", new PlcULINT(12));
+ children.put("hurz_REAL", new PlcREAL(13.0));
+ children.put("hurz_LREAL", new PlcLREAL(14.0));
+ children.put("hurz_STRING", new PlcSTRING("hurz"));
+ children.put("hurz_WSTRING", new PlcWSTRING("wolf"));
+ children.put("hurz_TIME", new PlcTIME(Duration.parse("PT1.234S")));
+ children.put("hurz_LTIME", new PlcLTIME(Duration.parse("PT24015H23M12.034002044S")));
+ children.put("hurz_DATE", new PlcDATE(LocalDate.parse("1978-03-28")));
+ children.put("hurz_TIME_OF_DAY", new PlcTIME_OF_DAY(LocalTime.parse("15:36:30.123")));
+ children.put("hurz_DATE_AND_TIME", new PlcDATE_AND_TIME(LocalDateTime.parse("1996-05-06T15:36:30")));
+ test.addTestCase("MAIN.hurz_Struct", new PlcStruct(children));
test.run();
}
diff --git a/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxDatapoint.cs b/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxDatapoint.cs
index 353d74aae..3eb010994 100644
--- a/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxDatapoint.cs
+++ b/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxDatapoint.cs
@@ -50,7 +50,7 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
var value = readBuffer.ReadBit("");
return new PlcBOOL(value);
- } else if( datapointType == KnxDatapointType.BYTE ) { // BitString
+ } else if( datapointType == KnxDatapointType.BYTE ) { // BYTE
// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
{
@@ -63,8 +63,8 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
// Simple Field (value)
var value = readBuffer.ReadByte("", 8);
- return new PlcBitString(value);
- } else if( datapointType == KnxDatapointType.WORD ) { // BitString
+ return new PlcBYTE(value);
+ } else if( datapointType == KnxDatapointType.WORD ) { // WORD
// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
{
@@ -77,8 +77,8 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
// Simple Field (value)
var value = readBuffer.ReadUshort("", 16);
- return new PlcBitString(value);
- } else if( datapointType == KnxDatapointType.DWORD ) { // BitString
+ return new PlcWORD(value);
+ } else if( datapointType == KnxDatapointType.DWORD ) { // DWORD
// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
{
@@ -91,8 +91,8 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
// Simple Field (value)
var value = readBuffer.ReadUint("", 32);
- return new PlcBitString(value);
- } else if( datapointType == KnxDatapointType.LWORD ) { // BitString
+ return new PlcDWORD(value);
+ } else if( datapointType == KnxDatapointType.LWORD ) { // LWORD
// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
{
@@ -105,7 +105,7 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
// Simple Field (value)
var value = readBuffer.ReadUlong("", 64);
- return new PlcBitString(value);
+ return new PlcLWORD(value);
} else if( datapointType == KnxDatapointType.USINT ) { // USINT
// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
@@ -6541,7 +6541,7 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
var value = (bool) _value.GetBool();
writeBuffer.WriteBit("", (value));
return writeBuffer;
- } else if( datapointType == KnxDatapointType.BYTE ) { // BitString
+ } else if( datapointType == KnxDatapointType.BYTE ) { // BYTE
var writeBuffer = new WriteBuffer();
// Reserved Field
@@ -6550,7 +6550,7 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
var value = (byte) _value.GetByte();
writeBuffer.WriteByte("", 8, (byte) (value));
return writeBuffer;
- } else if( datapointType == KnxDatapointType.WORD ) { // BitString
+ } else if( datapointType == KnxDatapointType.WORD ) { // WORD
var writeBuffer = new WriteBuffer();
// Reserved Field
@@ -6559,7 +6559,7 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
var value = (ushort) _value.GetUshort();
writeBuffer.WriteUshort("", 16, (ushort) (value));
return writeBuffer;
- } else if( datapointType == KnxDatapointType.DWORD ) { // BitString
+ } else if( datapointType == KnxDatapointType.DWORD ) { // DWORD
var writeBuffer = new WriteBuffer();
// Reserved Field
@@ -6568,7 +6568,7 @@ if( datapointType == KnxDatapointType.BOOL ) { // BOOL
var value = (uint) _value.GetUint();
writeBuffer.WriteUint("", 32, (uint) (value));
return writeBuffer;
- } else if( datapointType == KnxDatapointType.LWORD ) { // BitString
+ } else if( datapointType == KnxDatapointType.LWORD ) { // LWORD
var writeBuffer = new WriteBuffer();
// Reserved Field
diff --git a/protocols/ads/src/main/resources/protocols/ads/ads.mspec b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
index e3f458cf6..08e6e0171 100644
--- a/protocols/ads/src/main/resources/protocols/ads/ads.mspec
+++ b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
@@ -397,19 +397,19 @@
// Bit-strings
// -----------------------------------------
// 1 byte
- ['BYTE' BitString
+ ['BYTE' BYTE
[simple uint 8 value]
]
// 2 byte (16 bit)
- ['WORD' BitString
+ ['WORD' WORD
[simple uint 16 value]
]
// 4 byte (32 bit)
- ['DWORD' BitString
+ ['DWORD' DWORD
[simple uint 32 value]
]
// 8 byte (64 bit)
- ['LWORD' BitString
+ ['LWORD' LWORD
[simple uint 64 value]
]
diff --git a/protocols/knxnetip/src/main/xslt/knx-types.xsl b/protocols/knxnetip/src/main/xslt/knx-types.xsl
index 6aa3a7007..8d25cb111 100644
--- a/protocols/knxnetip/src/main/xslt/knx-types.xsl
+++ b/protocols/knxnetip/src/main/xslt/knx-types.xsl
@@ -119,19 +119,19 @@
[reserved uint 7 '0x00']
[simple bit value]
]
- ['BYTE' BitString
+ ['BYTE' BYTE
[reserved uint 8 '0x00']
[simple uint 8 value ]
]
- ['WORD' BitString
+ ['WORD' WORD
[reserved uint 8 '0x00']
[simple uint 16 value]
]
- ['DWORD' BitString
+ ['DWORD' DWORD
[reserved uint 8 '0x00']
[simple uint 32 value]
]
- ['LWORD' BitString
+ ['LWORD' LWORD
[reserved uint 8 '0x00']
[simple uint 64 value]
]
diff --git a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
index 2ff7f748d..4fc3e8b6d 100644
--- a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
+++ b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
@@ -319,26 +319,26 @@
// TODO: Handle adding some reserved bits at the end to fill up the last word.
[array bit value count 'numberOfValues' ]
]
- ['BYTE','1' List
+ ['BYTE','1' BYTE
[reserved uint 8 '0x00']
- [array bit value count '8' ]
+ [simple uint 8 value]
]
['BYTE' List
// TODO: If the number of values is odd, add a reserved byte
[array bit value count 'numberOfValues * 8' ]
]
- ['WORD' List
- [array bit value count 'numberOfValues * 16']
+ ['WORD' WORD
+ [simple uint 16 value]
]
- ['DWORD' List
- [array bit value count 'numberOfValues * 32']
+ ['DWORD' DWORD
+ [simple uint 32 value]
]
- ['LWORD' List
- [array bit value count 'numberOfValues * 64']
+ ['LWORD' LWORD
+ [simple uint 64 value]
]
['SINT','1' SINT
- [reserved uint 8 '0x00']
- [simple int 8 value ]
+ [reserved uint 8 '0x00']
+ [simple int 8 value ]
]
['SINT' List
[array int 8 value count 'numberOfValues']
diff --git a/protocols/plc4x/src/main/resources/protocols/plc4x/v0/plc4x.mspec b/protocols/plc4x/src/main/resources/protocols/plc4x/v0/plc4x.mspec
index 37592e4d3..ec4cf5e98 100644
--- a/protocols/plc4x/src/main/resources/protocols/plc4x/v0/plc4x.mspec
+++ b/protocols/plc4x/src/main/resources/protocols/plc4x/v0/plc4x.mspec
@@ -119,17 +119,17 @@
[reserved uint 7 '0x00' ]
[simple bit value ]
]
- ['BYTE' List
- [array bit value count '8' ]
+ ['BYTE' BYTE
+ [simple uint 8 value ]
]
- ['WORD' List
- [array bit value count '16' ]
+ ['WORD' WORD
+ [simple uint 16 value ]
]
- ['DWORD' List
- [array bit value count '32' ]
+ ['DWORD' DWORD
+ [simple uint 32 value ]
]
- ['LWORD' List
- [array bit value count '64' ]
+ ['LWORD' LWORD
+ [simple uint 64 value ]
]
// Unsigned Integers
diff --git a/protocols/plc4x/src/test/resources/protocols/plc4x/ParserSerializerTestsuite.xml b/protocols/plc4x/src/test/resources/protocols/plc4x/ParserSerializerTestsuite.xml
index fd792f23e..b1393e72c 100644
--- a/protocols/plc4x/src/test/resources/protocols/plc4x/ParserSerializerTestsuite.xml
+++ b/protocols/plc4x/src/test/resources/protocols/plc4x/ParserSerializerTestsuite.xml
@@ -380,14 +380,7 @@
<Plc4xValueType dataType="uint" bitLength="8" stringRepresentation="BYTE">2</Plc4xValueType>
</valueType>
<value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
+ <value dataType="uint" bitLength="8">191</value>
</value>
</Plc4xFieldValueResponse>
<Plc4xFieldValueResponse>
@@ -406,22 +399,7 @@
<Plc4xValueType dataType="uint" bitLength="8" stringRepresentation="WORD">3</Plc4xValueType>
</valueType>
<value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
+ <value dataType="uint" bitLength="16">10527</value>
</value>
</Plc4xFieldValueResponse>
<Plc4xFieldValueResponse>
@@ -440,38 +418,7 @@
<Plc4xValueType dataType="uint" bitLength="8" stringRepresentation="DWORD">4</Plc4xValueType>
</valueType>
<value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">true</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">false</value>
- <value dataType="bit" bitLength="1">true</value>
+ <value dataType="uint" bitLength="32">2015598905</value>
</value>
</Plc4xFieldValueResponse>
<Plc4xFieldValueResponse>
diff --git a/protocols/s7/src/main/resources/protocols/s7/s7.mspec b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
index 0a04787bd..28d6555a0 100644
--- a/protocols/s7/src/main/resources/protocols/s7/s7.mspec
+++ b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
@@ -535,20 +535,20 @@
// Bit-strings
// -----------------------------------------
// 1 byte
- ['"IEC61131_BYTE"' List
- [array bit value count '8']
+ ['"IEC61131_BYTE"' BYTE
+ [simple uint 8 value]
]
// 2 byte (16 bit)
- ['"IEC61131_WORD"' List
- [array bit value count '16']
+ ['"IEC61131_WORD"' WORD
+ [simple uint 16 value]
]
// 4 byte (32 bit)
- ['"IEC61131_DWORD"' List
- [array bit value count '32']
+ ['"IEC61131_DWORD"' DWORD
+ [simple uint 32 value]
]
// 8 byte (64 bit)
- ['"IEC61131_LWORD"' List
- [array bit value count '64']
+ ['"IEC61131_LWORD"' LWORD
+ [simple uint 64 value]
]
// -----------------------------------------