From 20b74671177fb3a7c2dfd13aecbff4470f00f916 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Tue, 16 Jul 2019 21:35:50 +0200 Subject: [PATCH] Modbus library: Fix responses to write commands --- lib/modbus.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/modbus.c b/lib/modbus.c index 41757d3..cd1d34e 100644 --- a/lib/modbus.c +++ b/lib/modbus.c @@ -478,6 +478,9 @@ static void func_write_single_coil(void) return report_error(ERR_ILLEGAL_DATA_VALUE); modbus_set_coil(addr, value); + + write_u16(addr); + write_u16(value); } static void func_write_single_register(void) @@ -492,6 +495,9 @@ static void func_write_single_register(void) return report_error(ERR_ILLEGAL_DATA_ADDRESS); modbus_set_holding_register(addr, value); + + write_u16(addr); + write_u16(value); } static void func_write_multiple_coils(void) @@ -512,6 +518,9 @@ static void func_write_multiple_coils(void) for (u16 i = 0; i < count; i++) modbus_set_coil(start + i, rx_frame[i/8] & (1U << (i%8))); + + write_u16(start); + write_u16(count); } static void func_write_multiple_registers(void) @@ -532,6 +541,9 @@ static void func_write_multiple_registers(void) for (u16 i = 0; i < count; i++) modbus_set_holding_register(start + i, read_u16()); + + write_u16(start); + write_u16(count); } static void func_mask_write_register(void) @@ -549,6 +561,10 @@ static void func_mask_write_register(void) u16 reg = modbus_get_holding_register(addr); reg = (reg & and_mask) | (or_mask & ~and_mask); modbus_set_holding_register(addr, reg); + + write_u16(addr); + write_u16(and_mask); + write_u16(or_mask); } static void func_read_write_multiple_registers(void) -- 2.39.2