|
| 1 | +# modbus_send_raw_request_tid |
| 2 | + |
| 3 | +## Name |
| 4 | + |
| 5 | +modbus_send_raw_request_tid - send a raw request with a specific transaction id |
| 6 | + |
| 7 | +## Synopsis |
| 8 | + |
| 9 | +```c |
| 10 | +int modbus_send_raw_request_tid(modbus_t *ctx, const uint8_t *raw_req, int raw_req_length, int tid); |
| 11 | +``` |
| 12 | +
|
| 13 | +## Description |
| 14 | +
|
| 15 | +The *modbus_send_raw_request_tid()* function shall send a request via the socket of |
| 16 | +the context `ctx`. This function must be used for debugging purposes because you |
| 17 | +have to take care to make a valid request by hand. The function only adds to the |
| 18 | +message, the header or CRC of the selected backend, so `raw_req` must start and |
| 19 | +contain at least a slave/unit identifier and a function code. This function can |
| 20 | +be used to send request not handled by the library. |
| 21 | +
|
| 22 | +The public header of libmodbus provides a list of supported Modbus functions |
| 23 | +codes, prefixed by `MODBUS_FC_` (eg. `MODBUS_FC_READ_HOLDING_REGISTERS`), to help |
| 24 | +build of raw requests. |
| 25 | +
|
| 26 | +## Return value |
| 27 | +
|
| 28 | +The function shall return the full message length, counting the extra data |
| 29 | +relating to the backend, if successful. Otherwise it shall return -1 and set |
| 30 | +errno. |
| 31 | +
|
| 32 | +## Example |
| 33 | +
|
| 34 | +```c |
| 35 | +modbus_t *ctx; |
| 36 | +/* Read 5 holding registers from address 1 */ |
| 37 | +uint8_t raw_req[] = { 0xFF, MODBUS_FC_READ_HOLDING_REGISTERS, 0x00, 0x01, 0x0, 0x05 }; |
| 38 | +int req_length; |
| 39 | +uint8_t rsp[MODBUS_TCP_MAX_ADU_LENGTH]; |
| 40 | +
|
| 41 | +ctx = modbus_new_tcp("127.0.0.1", 1502); |
| 42 | +if (modbus_connect(ctx) == -1) { |
| 43 | + fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno)); |
| 44 | + modbus_free(ctx); |
| 45 | + return -1; |
| 46 | +} |
| 47 | +
|
| 48 | +req_length = modbus_send_raw_request(ctx, raw_req, 6 * sizeof(uint8_t), 0); |
| 49 | +modbus_receive_confirmation(ctx, rsp); |
| 50 | +
|
| 51 | +modbus_close(ctx); |
| 52 | +modbus_free(ctx); |
| 53 | +``` |
| 54 | + |
| 55 | +## See also |
| 56 | + |
| 57 | +- [modbus_receive_confirmation](modbus_receive_confirmation.md) |
0 commit comments