Merge pull request #119 from fengzeroz/main

fix: decode modbus protocol error when reading consecutive address
This commit is contained in:
fengzeroz
2021-10-21 17:34:48 +08:00
committed by GitHub
+9 -6
View File
@@ -535,8 +535,9 @@ static int process_read_res(modbus_cmd_t *cmd, char *buf, ssize_t len)
for (int i = 0; i < cmd->n_point; i++) {
switch (cmd->points[i]->value.type) {
case MODBUS_B16: {
uint16_t *ptr = (uint16_t *) (data + cmd->points[i]->addr -
cmd->start_addr);
uint16_t *ptr =
(uint16_t *) ((uint16_t *) data + cmd->points[i]->addr -
cmd->start_addr);
cmd->points[i]->value.val.val_u16 = ntohs(*ptr);
log_info("get result16.... %d, %d %d",
cmd->points[i]->value.val.val_u16, cmd->start_addr,
@@ -544,10 +545,12 @@ static int process_read_res(modbus_cmd_t *cmd, char *buf, ssize_t len)
break;
}
case MODBUS_B32: {
uint16_t *ptrl = (uint16_t *) (data + cmd->points[i]->addr -
cmd->start_addr);
uint16_t *ptrh = (uint16_t *) (data + cmd->points[i]->addr -
cmd->start_addr + 2);
uint16_t *ptrl =
(uint16_t *) ((uint16_t *) data + cmd->points[i]->addr -
cmd->start_addr);
uint16_t *ptrh =
(uint16_t *) ((uint16_t *) data + cmd->points[i]->addr -
cmd->start_addr + 1);
cmd->points[i]->value.val.val_u32 =
ntohs(*ptrl) << 16 | ntohs(*ptrh);