fixed coils read

This commit is contained in:
2026-10-01 17:36:49 +03:00
parent a2cb827a76
commit fe5989497f
5 changed files with 9 additions and 6 deletions

View File

@@ -426,7 +426,7 @@ Errors: `02` — bad start channel; `03` — bad amount (zero or beyond last cha
#### 05 — write coil #### 05 — write coil
Changes a single relay state. `regaddr` — relay number, `nregs` — value (0 = off, non-zero = on). 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` - request: `01 05 00 03 00 01`
- answer: `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. Each data bit is a relay state.
Example — turn on relays 0..7: 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` - 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. Errors: `02` — non-zero `regaddr`; `03` — wrong amount; `07` — cannot change relays.
#### 10 — write multiple registers #### 10 — write multiple registers

Binary file not shown.

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 20.0.2, 2026-10-01T16:22:16. --> <!-- Written by QtCreator 20.0.2, 2026-10-01T17:35:26. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

View File

@@ -45,13 +45,12 @@ TRUE_INLINE void readcoil(modbus_request *r){
return; return;
} }
uint8_t bytes[OUTMAXBYTES] = {0}; uint8_t bytes[OUTMAXBYTES] = {0};
int curidx = OUTMAXBYTES;
int vals = get_relay(OUTMAX+1); int vals = get_relay(OUTMAX+1);
for(int i = 0; i < amount; ++i){ for(int i = 0; i < amount; ++i){
bytes[i] = vals & 0xff; bytes[i] = vals & 0xff;
vals >>= 8; 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); modbus_send_response(&resp);
} }

View File

@@ -1,2 +1,2 @@
#define BUILD_NUMBER "120" #define BUILD_NUMBER "121"
#define BUILD_DATE "2026-10-01" #define BUILD_DATE "2026-10-01"