esp-idf/examples/protocols/modbus/tcp
Alex Lisitsyn 96b77a28b1 freemodbus: add support for list of area descriptors for each register area
add multi register area descriptors into concrete port (initial)
add create/destroy of area descriptors into concrete port
add  the list of descriptors in common slave interface structure and init/destroy in concrete slave port
move r/w callback functions into common slave
final update of common slave interface wrappers add override API option in concrete port
update slave examples to check new  feature
2021-01-28 12:29:32 +08:00
..
mb_tcp_master Whitespace: Automated whitespace fixes (large commit) 2020-11-11 07:36:35 +00:00
mb_tcp_slave freemodbus: add support for list of area descriptors for each register area 2021-01-28 12:29:32 +08:00
example_test.py style: format python files with isort and double-quote-string-fixer 2021-01-26 10:49:01 +08:00
README.md

Modbus TCP Master-Slave Example

Overview

These two projects illustrate the communication between Modbus master and slave device in the segment. Master initializes Modbus interface driver and then reads parameters from slave device in the segment. After several successful read attempts slave sets the alarm relay (end of test condition). Once master reads the alarm it stops communication and destroy driver.

The examples:

  • examples/protocols/modbus/tcp/mb_tcp_master - Modbus TCP master
  • examples/protocols/modbus/tcp/mb_tcp_slave - Modbus TCP slave

See README.md for each individual project for more information.

How to use example

Hardware Required

This example can be run on any commonly available ESP32(-S2) development board. The master and slave boards should be connected to the same network (see the README.md file in example folder) and slave address CONFIG_MB_SLAVE_ADDR be defined for slave board(s). See the connection schematic in README.md files of each example.

Configure the project

This example test requires communication mode setting for master and slave be the same and slave address set to 1. Please refer to README.md files of each example project for more information. This example uses the default option CONFIG_MB_SLAVE_IP_FROM_STDIN to resolve slave IP address and supports IPv4 address type for communication in this case.

About common_component in this example

The folder "mb_example_common" one level above includes definitions of parameter structures for master and slave device (both projects share the same parameters). However, currently it is for example purpose only and can be modified for particular application.

Example Output

Refer to README.md file in the appropriate example folder for more information about master and slave log output.

Troubleshooting

If the examples do not work as expected and slave and master boards are not able to communicate correctly it is possible to find the reason for errors. The most important errors are described in master example output and formatted as below:

E (1692332) MB_CONTROLLER_MASTER: mbc_master_get_parameter(111): SERIAL master get parameter failure error=(0x107) (ESP_ERR_TIMEOUT).

ESP_ERR_TIMEOUT (0x107) - Modbus slave device does not respond during configured timeout. Check ability for communication pinging each slave configured in the master parameter description table or use command on your host machine to find modbus slave using mDNS (requires CONFIG_MB_MDNS_IP_RESOLVER option be enabled): >dns-sd -L mb_slave_tcp_XX _modbus._tcp . where XX is the short slave address (index) of the slave configured in the Kconfig of slave example. Also it is possible to increase Kconfig value CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND to compensate network communication delays between master and slaves.

ESP_ERR_NOT_SUPPORTED (0x106), ESP_ERR_INVALID_RESPONSE (0x108) - Modbus slave device does not support requested command or register and sent exeption response.

ESP_ERR_INVALID_STATE (0x103) - Modbus stack is not configured correctly or can't work correctly due to critical failure.