移植了官方Modbus程序的部分代码
This commit is contained in:
parent
753b9760f0
commit
3c1e019c3d
@ -3,7 +3,7 @@ if(CONFIG_EXAMPLE_LCD_IMAGE_FROM_EMBEDDED_BINARY)
|
|||||||
file(GLOB_RECURSE embedded_images images/*.c)
|
file(GLOB_RECURSE embedded_images images/*.c)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
idf_component_register(SRCS "i80_controller_example_main.c" "lvgl_demo_ui.c" ${embedded_images}
|
idf_component_register(SRCS "FreeBus.c" "i80_controller_example_main.c" "lvgl_demo_ui.c" ${embedded_images}
|
||||||
REQUIRES FluxUI FluxPower spiffs
|
REQUIRES FluxUI FluxPower spiffs
|
||||||
INCLUDE_DIRS ".")
|
INCLUDE_DIRS ".")
|
||||||
|
|
||||||
|
|||||||
65
main/FreeBus.c
Normal file
65
main/FreeBus.c
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
|
||||||
|
#include "FreeBus.h"
|
||||||
|
|
||||||
|
static const char *TAG = "MASTER_TEST";
|
||||||
|
|
||||||
|
|
||||||
|
/*定义设备寄存器存储地址*/
|
||||||
|
const mb_parameter_descriptor_t device_parameters[] = {
|
||||||
|
{ CID_INP_DATA_0, STR("Data_channel_0"), STR("Volts"), MB_DEVICE_ADDR1, MB_PARAM_INPUT, 0, 2,
|
||||||
|
INPUT_OFFSET(input_data0), PARAM_TYPE_FLOAT, 4, OPTS( -10, 10, 1 ), PAR_PERMS_READ_WRITE_TRIGGER },
|
||||||
|
{ CID_HOLD_DATA_0, STR("Humidity_1"), STR("%rH"), MB_DEVICE_ADDR1, MB_PARAM_HOLDING, 0, 2,
|
||||||
|
HOLD_OFFSET(holding_data0), PARAM_TYPE_FLOAT, 4, OPTS( 0, 100, 1 ), PAR_PERMS_READ_WRITE_TRIGGER },
|
||||||
|
};
|
||||||
|
// Calculate number of parameters in the table
|
||||||
|
const uint16_t num_device_parameters = (sizeof(device_parameters)/sizeof(device_parameters[0]));
|
||||||
|
|
||||||
|
static esp_err_t master_init(void)
|
||||||
|
{
|
||||||
|
// Initialize and start Modbus controller
|
||||||
|
mb_communication_info_t comm = {
|
||||||
|
.port = MB_PORT_NUM,
|
||||||
|
#if CONFIG_MB_COMM_MODE_ASCII
|
||||||
|
.mode = MB_MODE_ASCII,
|
||||||
|
#elif CONFIG_MB_COMM_MODE_RTU
|
||||||
|
.mode = MB_MODE_RTU,
|
||||||
|
#endif
|
||||||
|
.baudrate = MB_DEV_SPEED,
|
||||||
|
.parity = MB_PARITY_NONE
|
||||||
|
};
|
||||||
|
void* master_handler = NULL;
|
||||||
|
|
||||||
|
esp_err_t err = mbc_master_init(MB_PORT_SERIAL_MASTER, &master_handler);
|
||||||
|
MB_RETURN_ON_FALSE((master_handler != NULL), ESP_ERR_INVALID_STATE, TAG,
|
||||||
|
"mb controller initialization fail.");
|
||||||
|
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
|
||||||
|
"mb controller initialization fail, returns(0x%x).", (int)err);
|
||||||
|
err = mbc_master_setup((void*)&comm);
|
||||||
|
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
|
||||||
|
"mb controller setup fail, returns(0x%x).", (int)err);
|
||||||
|
|
||||||
|
// Set UART pin numbers
|
||||||
|
err = uart_set_pin(MB_PORT_NUM, CONFIG_MB_UART_TXD, CONFIG_MB_UART_RXD,
|
||||||
|
UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
|
||||||
|
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
|
||||||
|
"mb serial set pin failure, uart_set_pin() returned (0x%x).", (int)err);
|
||||||
|
|
||||||
|
err = mbc_master_start();
|
||||||
|
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
|
||||||
|
"mb controller start fail, returned (0x%x).", (int)err);
|
||||||
|
|
||||||
|
// Set driver mode to Half Duplex
|
||||||
|
err = uart_set_mode(MB_PORT_NUM, UART_MODE_RS485_HALF_DUPLEX);
|
||||||
|
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
|
||||||
|
"mb serial set mode failure, uart_set_mode() returned (0x%x).", (int)err);
|
||||||
|
|
||||||
|
vTaskDelay(5);
|
||||||
|
err = mbc_master_set_descriptor(&device_parameters[0], num_device_parameters);
|
||||||
|
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
|
||||||
|
"mb controller set descriptor fail, returns(0x%x).", (int)err);
|
||||||
|
ESP_LOGI(TAG, "Modbus master stack initialized...");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,7 +1,65 @@
|
|||||||
#include "modbus_params.h" // for modbus parameters structures
|
#include "modbus_params.h" // for modbus parameters structures
|
||||||
#include "mbcontroller.h"
|
#include "mbcontroller.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
#define MB_PORT_NUM (CONFIG_MB_UART_PORT_NUM) // Number of UART port used for Modbus connection
|
#define MB_PORT_NUM (UART_NUM_1) // Number of UART port used for Modbus connection
|
||||||
#define MB_DEV_SPEED (CONFIG_MB_UART_BAUD_RATE) // The communication speed of the UART
|
#define MB_DEV_SPEED (9600) // The communication speed of the UART
|
||||||
|
|
||||||
|
// Note: Some pins on target chip cannot be assigned for UART communication.
|
||||||
|
// See UART documentation for selected board and target to configure pins using Kconfig.
|
||||||
|
|
||||||
|
// The number of parameters that intended to be used in the particular control process
|
||||||
|
#define MASTER_MAX_CIDS num_device_parameters
|
||||||
|
|
||||||
|
// Number of reading of parameters from slave
|
||||||
|
#define MASTER_MAX_RETRY 30
|
||||||
|
|
||||||
|
// Timeout to update cid over Modbus
|
||||||
|
#define UPDATE_CIDS_TIMEOUT_MS (500)
|
||||||
|
#define UPDATE_CIDS_TIMEOUT_TICS (UPDATE_CIDS_TIMEOUT_MS / portTICK_PERIOD_MS)
|
||||||
|
|
||||||
|
// Timeout between polls
|
||||||
|
#define POLL_TIMEOUT_MS (1)
|
||||||
|
#define POLL_TIMEOUT_TICS (POLL_TIMEOUT_MS / portTICK_PERIOD_MS)
|
||||||
|
|
||||||
|
// The macro to get offset for parameter in the appropriate structure
|
||||||
|
#define HOLD_OFFSET(field) ((uint16_t)(offsetof(holding_reg_params_t, field) + 1))
|
||||||
|
#define INPUT_OFFSET(field) ((uint16_t)(offsetof(input_reg_params_t, field) + 1))
|
||||||
|
#define COIL_OFFSET(field) ((uint16_t)(offsetof(coil_reg_params_t, field) + 1))
|
||||||
|
// Discrete offset macro
|
||||||
|
#define DISCR_OFFSET(field) ((uint16_t)(offsetof(discrete_reg_params_t, field) + 1))
|
||||||
|
|
||||||
|
#define STR(fieldname) ((const char*)( fieldname ))
|
||||||
|
// Options can be used as bit masks or parameter limits
|
||||||
|
#define OPTS(min_val, max_val, step_val) { .opt1 = min_val, .opt2 = max_val, .opt3 = step_val }
|
||||||
|
|
||||||
|
/*串口通讯接口定义*/
|
||||||
|
#define CONFIG_MB_UART_TXD 0
|
||||||
|
#define CONFIG_MB_UART_RXD 1
|
||||||
|
|
||||||
|
//#define MB_PORT_NUM UART_NUM_1
|
||||||
|
//#define MB_DEV_SPEED 9600
|
||||||
|
|
||||||
|
// Enumeration of modbus device addresses accessed by master device
|
||||||
|
enum {
|
||||||
|
MB_DEVICE_ADDR1 = 1 // Only one slave device used for the test (add other slave addresses here)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Enumeration of all supported CIDs for device (used in parameter definition table)
|
||||||
|
enum {
|
||||||
|
CID_INP_DATA_0 = 0,
|
||||||
|
CID_HOLD_DATA_0,
|
||||||
|
CID_INP_DATA_1,
|
||||||
|
CID_HOLD_DATA_1,
|
||||||
|
CID_INP_DATA_2,
|
||||||
|
CID_HOLD_DATA_2,
|
||||||
|
CID_HOLD_TEST_REG,
|
||||||
|
CID_RELAY_P1,
|
||||||
|
CID_RELAY_P2,
|
||||||
|
CID_DISCR_P1,
|
||||||
|
CID_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
/*Modbus总线初始化函数*/
|
||||||
|
static esp_err_t master_init(void);
|
||||||
Loading…
Reference in New Issue
Block a user