Minor
[libmodbus.git] / docs / modbus_write_and_read_registers.md
blob646cb939c8d7a15f5142496670ad4c3f208b34db
1 # modbus_write_and_read_registers
3 ## Name
5 modbus_write_and_read_registers - write and read many registers in a single transaction
7 ## Synopsis
9 ```c
10 int modbus_write_and_read_registers(
11     modbus_t *ctx,
12     int write_addr, int write_nb, const uint16_t *src,
13     int read_addr, int read_nb, const uint16_t *dest
15 ```
17 ## Description
19 The *modbus_write_and_read_registers()* function shall write the content of the
20 `write_nb` holding registers from the array 'src' to the address `write_addr` of
21 the remote device then shall read the content of the `read_nb` holding registers
22 to the address `read_addr` of the remote device. The result of reading is stored
23 in `dest` array as word values (16 bits).
25 You must take care to allocate enough memory to store the results in `dest`
26 (at least `nb * sizeof(uint16_t)`).
28 The function uses the Modbus function code 0x17 (write/read registers).
30 ## Return value
32 The function shall return the number of read registers if successful. Otherwise
33 it shall return -1 and set errno.
35 ## Errors
37 - *EMBMDATA*, too many registers requested, Too many registers to write
39 ## See also
41 - [modbus_read_registers](modbus_read_registers.md)
42 - [modbus_write_register](modbus_write_register.md)
43 - [modbus_write_registers](modbus_write_registers.md)