mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00:00 
			
		
		
		
	Add TCP port files to provide Modbus TCP interface for communication Add freemodbus add tcp support for common master/slave iface and tcp example based on socket API The communication between master and slave checked for each example serial_master, serial_slave (use ModbusPoll TCP) update tcp example according netif changes, fix ci issues update TCP slave implementation update example_test.py to to set IP through stdin update API documentation event bit instead of semahore to lock communication resource update default options and master/slave port files Closes https://github.com/espressif/esp-idf/issues/858 Closes IDF-452
		
			
				
	
	
		
			59 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# 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.
 | 
						|
 
 | 
						|
 |