From b69499ba65be1f46872b20e40d88cfef20cc41b2 Mon Sep 17 00:00:00 2001 From: hxy7yx <1595670487@qq.com> Date: Fri, 29 Mar 2024 11:07:55 +0800 Subject: [PATCH] determine whether tag set endianness --- include/neuron/tag.h | 1 + src/base/tag.c | 15 ++++++++++----- tests/ft/neuron/api.py | 12 ++++++++++++ tests/ft/neuron/config.py | 5 +++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/include/neuron/tag.h b/include/neuron/tag.h index 606e885f..044ee05c 100644 --- a/include/neuron/tag.h +++ b/include/neuron/tag.h @@ -59,6 +59,7 @@ typedef union { } value16; struct { neu_datatag_endian_e endian; + bool is_default; } value32; struct { neu_datatag_endian_e endian; diff --git a/src/base/tag.c b/src/base/tag.c index 9fb29601..645a1fe0 100644 --- a/src/base/tag.c +++ b/src/base/tag.c @@ -213,7 +213,8 @@ int neu_datatag_parse_addr_option(const neu_datatag_t * datatag, case NEU_TYPE_UINT32: { char *op = find_last_character(datatag->address, '#'); - option->value32.endian = NEU_DATATAG_ENDIAN_LL32; + option->value32.endian = NEU_DATATAG_ENDIAN_LL32; + option->value32.is_default = true; if (op != NULL) { char e1 = 0; char e2 = 0; @@ -221,16 +222,20 @@ int neu_datatag_parse_addr_option(const neu_datatag_t * datatag, if (n == 2) { if (e1 == 'B' && e2 == 'B') { - option->value32.endian = NEU_DATATAG_ENDIAN_BB32; + option->value32.endian = NEU_DATATAG_ENDIAN_BB32; + option->value32.is_default = false; } if (e1 == 'B' && e2 == 'L') { - option->value32.endian = NEU_DATATAG_ENDIAN_BL32; + option->value32.endian = NEU_DATATAG_ENDIAN_BL32; + option->value32.is_default = false; } if (e1 == 'L' && e2 == 'L') { - option->value32.endian = NEU_DATATAG_ENDIAN_LL32; + option->value32.endian = NEU_DATATAG_ENDIAN_LL32; + option->value32.is_default = false; } if (e1 == 'L' && e2 == 'B') { - option->value32.endian = NEU_DATATAG_ENDIAN_LB32; + option->value32.endian = NEU_DATATAG_ENDIAN_LB32; + option->value32.is_default = false; } } } diff --git a/tests/ft/neuron/api.py b/tests/ft/neuron/api.py index 2a6df7a0..1a687070 100644 --- a/tests/ft/neuron/api.py +++ b/tests/ft/neuron/api.py @@ -318,6 +318,18 @@ def modbus_rtu_node_setting(node, port=502, connection_mode=0, transport_mode=0, "parity": parity, "baud": baud, "data": data}) +def modbus_tcp_node_setting_endian(node, port, connection_mode=0, transport_mode=0, interval=0, host='127.0.0.1', timeout=3000, max_retries=2, endianness=1): + return node_setting(node, json={"connection_mode": connection_mode, "transport_mode": transport_mode, "interval": interval, + "host": host, "port": port, "timeout": timeout, "max_retries": max_retries, "endianess": endianness}) + + +def modbus_rtu_node_setting_endian(node, port=502, connection_mode=0, transport_mode=0, interval=0, host='127.0.0.1', timeout=3000, max_retries=2, link=1, device="", stop=0, parity=0, baud=4, data=3, endianness=1): + return node_setting(node, json={"connection_mode": connection_mode, "transport_mode": transport_mode, + "interval": interval, "host": host, "port": port, "timeout": timeout, + "max_retries": max_retries, "link": link, "device": device, "stop": stop, + "parity": parity, "baud": baud, "data": data, "endianess": endianness}) + + def mqtt_node_setting(node): return node_setting(node, json={"client-id": "neuron_aBcDeF", "qos": 0, "format": 0, "write-req-topic": f"/neuron/{node}/write/req", "write-resp-topic": f"/neuron/{node}/write/resp", diff --git a/tests/ft/neuron/config.py b/tests/ft/neuron/config.py index e62d3c88..b4e7254e 100644 --- a/tests/ft/neuron/config.py +++ b/tests/ft/neuron/config.py @@ -68,6 +68,11 @@ NEU_DATA_6 = 1 NEU_DATA_7 = 2 NEU_DATA_8 = 3 +ENDIAN_ABCD = 1, +ENDIAN_BADC = 2, +ENDIAN_DCBA = 3, +ENDIAN_CDAB = 4, + PLUGIN_MODBUS_TCP = "Modbus TCP" PLUGIN_MODBUS_RTU = "Modbus RTU" PLUGIN_MQTT = "MQTT"