determine whether tag set endianness

This commit is contained in:
hxy7yx
2024-03-29 13:41:03 +08:00
parent 462b7e08a5
commit b69499ba65
4 changed files with 28 additions and 5 deletions
+1
View File
@@ -59,6 +59,7 @@ typedef union {
} value16;
struct {
neu_datatag_endian_e endian;
bool is_default;
} value32;
struct {
neu_datatag_endian_e endian;
+10 -5
View File
@@ -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;
}
}
}
+12
View File
@@ -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",
+5
View File
@@ -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"