This example adds functionality to support basic communication in RS485 networks using Modbus protocol. This example uses FreeModbus stack and regular UART driver API to communicate in RS485 half duplex mode. Added initial support of modbus controller pure C api to access device parameters over Modbus transport. Move freemodbus stack and port files into components folder Move the modbus_controller interface into components idf folder Source files updated after review. Add modbus interface documentation docs/en/api-reference/protocols/modbus.rst porttimer.c: fix bug with timer1 selected in the Kconfig Add support of cmake system (added cmake files) Closes https://github.com/espressif/esp-idf/issues/858
131 lines
4.2 KiB
C
131 lines
4.2 KiB
C
/*=====================================================================================
|
|
* Description:
|
|
* The Modbus parameter structures used to define Modbus instances that
|
|
* can be addressed by Modbus protocol. Define these structures per your needs in
|
|
* your application. Below is just an example of possible parameters.
|
|
*====================================================================================*/
|
|
#ifndef _DEVICE_PARAMS
|
|
#define _DEVICE_PARAMS
|
|
|
|
#define A24_ARR_SIZE 24
|
|
|
|
// This file defines structure of modbus parameters which reflect correspond modbus address space
|
|
// for each modbus register type (coils, discreet inputs, holding registers, input registers)
|
|
#pragma pack(push, 1)
|
|
typedef struct
|
|
{
|
|
// Parameter: discrete_input0
|
|
uint8_t discrete_input0:1;
|
|
// Parameter: discrete_input1
|
|
uint8_t discrete_input1:1;
|
|
// Parameter: discrete_input2
|
|
uint8_t discrete_input2:1;
|
|
// Parameter: discrete_input3
|
|
uint8_t discrete_input3:1;
|
|
// Parameter: discrete_input4
|
|
uint8_t discrete_input4:1;
|
|
// Parameter: discrete_input5
|
|
uint8_t discrete_input5:1;
|
|
// Parameter: discrete_input6
|
|
uint8_t discrete_input6:1;
|
|
// Parameter: discrete_input7
|
|
uint8_t discrete_input7:1;
|
|
uint8_t discrete_input_port1:8;
|
|
} discrete_reg_params_t;
|
|
#pragma pack(pop)
|
|
|
|
#pragma pack(push, 1)
|
|
typedef struct
|
|
{
|
|
// Parameter: Coil 0 : Coil0
|
|
uint8_t coil0:1;
|
|
// Parameter: Coil 1 : Coil1
|
|
uint8_t coil1:1;
|
|
// Parameter: Coil 2 : Coil2
|
|
uint8_t coil2:1;
|
|
// Parameter: Coil 3 : Coil3
|
|
uint8_t coil3:1;
|
|
// Parameter: Coil 4 : Coil4
|
|
uint8_t coil4:1;
|
|
// Parameter: Coil 5 : Coil5
|
|
uint8_t coil5:1;
|
|
// Parameter: Coil 6 : Coil6
|
|
uint8_t coil6:1;
|
|
// Parameter: Coil 7 : Coil7
|
|
uint8_t coil7:1;
|
|
// Coils port 1
|
|
uint8_t coil_port1:8;
|
|
} coil_reg_params_t;
|
|
#pragma pack(pop)
|
|
|
|
#pragma pack(push, 1)
|
|
typedef struct
|
|
{
|
|
// Parameter: Data channel 0 : data_chan0 : NV Address: 0
|
|
float data_chan0;
|
|
// Parameter: Data channel 1 : data_chan1 : NV Address: 0
|
|
float data_chan1;
|
|
// Parameter: Data channel 2 : data_chan2 : NV Address: 0
|
|
float data_chan2;
|
|
// Parameter: Data channel 3 : data_chan3 : NV Address: 0
|
|
float data_chan3;
|
|
} input_reg_params_t;
|
|
#pragma pack(pop)
|
|
|
|
//See register map for more information.
|
|
#pragma pack(push, 1)
|
|
typedef struct
|
|
{
|
|
// Parameter: Data channel 0 : DataChan0
|
|
float data_chan0;
|
|
// Parameter: Data channel 1 : DataChan1
|
|
float data_chan1;
|
|
// Parameter: Data channel 2 : DataChan2
|
|
float data_chan2;
|
|
// Parameter: Data channel 3 : DataChan3
|
|
float data_chan3;
|
|
// Parameter: Protocol version : protocol_version
|
|
uint16_t protocol_version;
|
|
// Parameter: Hardware version : hardware_version
|
|
uint16_t hardware_version;
|
|
// Parameter: Software Version : software_version
|
|
uint16_t software_version;
|
|
// Parameter: Software Revision : software_revision
|
|
uint16_t software_revision;
|
|
// Parameter: Device Type : deviceType :
|
|
uint16_t deviceType;
|
|
// Parameter: Modbus Network Address : modbus_address
|
|
uint16_t modbus_address;
|
|
// Parameter: Modbus Baudrate : modbus_baud
|
|
uint16_t modbus_baud;
|
|
// Parameter: Modbus parity : modbus_parity
|
|
uint16_t modbus_parity;
|
|
// Parameter: Modbus stopbit : modbus_stop_bits
|
|
uint16_t modbus_stop_bits;
|
|
// Parameter: Brace control : modbus_brace_ctrl
|
|
uint16_t modbus_brace_ctrl;
|
|
// Parameter: Serial number : serial_number
|
|
uint32_t serial_number;
|
|
// Parameter: Up time : up_time
|
|
uint32_t up_time;
|
|
// Parameter: Device state : device_state
|
|
uint16_t device_state;
|
|
// Parameter: Test Float0 : test_float0
|
|
float test_float0;
|
|
// Parameter: Test Float1 : test_float1
|
|
float test_float1;
|
|
// Parameter: Test Float2 : test_float2
|
|
float test_float2;
|
|
// Parameter: Test Float3 : test_float3
|
|
float test_float3;
|
|
// Parameter: Test String : string_test
|
|
uint8_t string_test[A24_ARR_SIZE];
|
|
} holding_reg_params_t;
|
|
#pragma pack(pop)
|
|
|
|
extern holding_reg_params_t holding_reg_params;
|
|
extern input_reg_params_t input_reg_params;
|
|
extern coil_reg_params_t coil_reg_params;
|
|
extern discrete_reg_params_t discrete_reg_params;
|
|
|
|
#endif // !defined(_DEVICE_PARAMS)
|