From fe5989497f6c03bb11390cf886d25f93e545ee2f Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Thu, 1 Oct 2026 17:36:49 +0300 Subject: [PATCH] fixed coils read --- F1:F103/FX3U/Readme.md | 8 ++++++-- F1:F103/FX3U/fx3u.bin | Bin 15828 -> 15796 bytes F1:F103/FX3U/fx3u.creator.user | 2 +- F1:F103/FX3U/modbusproto.c | 3 +-- F1:F103/FX3U/version.inc | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/F1:F103/FX3U/Readme.md b/F1:F103/FX3U/Readme.md index 3255ae4..614323e 100644 --- a/F1:F103/FX3U/Readme.md +++ b/F1:F103/FX3U/Readme.md @@ -426,7 +426,7 @@ Errors: `02` — bad start channel; `03` — bad amount (zero or beyond last cha #### 05 — write coil Changes a single relay state. `regaddr` — relay number, `nregs` — value (0 = off, non-zero = on). -Example: +Example - turn on coil 3: - request: `01 05 00 03 00 01` - answer: `01 05 00 03 00 01` @@ -446,9 +446,13 @@ Changes all relays at once. `regaddr` must be 0, `nregs` a multiple of 8, `N` = Each data bit is a relay state. Example — turn on relays 0..7: -- request: `01 0f 00 00 00 08 ff 01` +- request: `01 0f 00 00 00 08 01 ff` - answer: `01 0f 00 00 00 08` +Turn on all relays (0..7 and 10, 11): +- request: `01 0f 00 00 00 10 02 ff 0f` +- answer: `01 0f 00 00 00 10 56 c2` + Errors: `02` — non-zero `regaddr`; `03` — wrong amount; `07` — cannot change relays. #### 10 — write multiple registers diff --git a/F1:F103/FX3U/fx3u.bin b/F1:F103/FX3U/fx3u.bin index 55efcb6cf3268d03824bd2070850b8ebbd676946..61f8bd021d0dcf4db6b9598e003c71994d81b59a 100755 GIT binary patch delta 2166 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 aAQu#XLa+rmK`|%=mEgcq63T_(27d$l1s)^- diff --git a/F1:F103/FX3U/fx3u.creator.user b/F1:F103/FX3U/fx3u.creator.user index d15f67a..a7a0aee 100644 --- a/F1:F103/FX3U/fx3u.creator.user +++ b/F1:F103/FX3U/fx3u.creator.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/F1:F103/FX3U/modbusproto.c b/F1:F103/FX3U/modbusproto.c index 3496fcb..ea4bb5b 100644 --- a/F1:F103/FX3U/modbusproto.c +++ b/F1:F103/FX3U/modbusproto.c @@ -45,13 +45,12 @@ TRUE_INLINE void readcoil(modbus_request *r){ return; } uint8_t bytes[OUTMAXBYTES] = {0}; - int curidx = OUTMAXBYTES; int vals = get_relay(OUTMAX+1); for(int i = 0; i < amount; ++i){ bytes[i] = vals & 0xff; vals >>= 8; } - modbus_response resp = {.Fcode = r->Fcode, .ID = the_conf.modbusID, .data = bytes+curidx, .datalen = amount}; + modbus_response resp = {.Fcode = r->Fcode, .ID = the_conf.modbusID, .data = bytes, .datalen = amount}; modbus_send_response(&resp); } diff --git a/F1:F103/FX3U/version.inc b/F1:F103/FX3U/version.inc index 033da29..da4a632 100644 --- a/F1:F103/FX3U/version.inc +++ b/F1:F103/FX3U/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "120" +#define BUILD_NUMBER "121" #define BUILD_DATE "2026-10-01"