@@ -35,9 +35,24 @@ values are 5, 6, 7 and 8.
3535The `stop_bits` argument specifies the bits of stop, the allowed values are 1
3636and 2.
3737
38- Once the `modbus_t` structure is initialized, you must set the slave of your
39- device with [modbus_set_slave](modbus_set_slave.md) and connect to the serial bus with
40- [modbus_connect](modbus_connect.md).
38+ Once the `modbus_t` structure is initialized, you can connect to the serial bus
39+ with [modbus_connect](modbus_connect.md).
40+
41+ In RTU, your program can act as server or client:
42+
43+ - **server** is called *slave* in Modbus terminology, your program will expose
44+ data to the network by processing and answering the requests of one of several
45+ clients. It up to you to define the slave ID of your service with
46+ [modbus_set_slave](modbus_set_slave.md), this ID should be used by the client
47+ to communicate with your program.
48+
49+ - **client** is called *master* in Modbus terminology, your program will send
50+ requests to servers to read or write data from them. Before issuing the
51+ requests, you should define the slave ID of the remote device with
52+ [modbus_set_slave](modbus_set_slave.md). The slave ID is not an argument of
53+ the read/write functions because it's very frequent to talk with only one
54+ server so you can set it once and for all. The slave ID it not used in TCP
55+ communications so this way the API is common to both.
4156
4257## Return value
4358
@@ -53,22 +68,33 @@ defined below.
5368
5469## Example
5570
71+ In this example, the program will open a serial communication on USB. All
72+ subsequent calls such as read or write of registers will be sent on the wire and
73+ the request will be visible to all connected devices. According to the Modbus
74+ protocol, only the master associated to slave ID 10 will process and answer your
75+ requests.
76+
5677```c
78+ const int REMOTE_ID = 10;
5779modbus_t *ctx;
80+ uint16_t tab_reg[10];
5881
5982ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1);
6083if (ctx == NULL) {
6184 fprintf(stderr, "Unable to create the libmodbus context\n");
6285 return -1;
6386}
6487
65- modbus_set_slave(ctx, YOUR_DEVICE_ID);
66-
6788if (modbus_connect(ctx) == -1) {
6889 fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
6990 modbus_free(ctx);
7091 return -1;
7192}
93+
94+ modbus_set_slave(ctx, REMOTE_ID);
95+
96+ // Read 2 registers from address 0 of server ID 10.
97+ modbus_read_registers(ctx, 0, 2, tab_reg);
7298```
7399
74100## See also
0 commit comments