2025-03-04 15:21:41 +08:00
|
|
|
|
|
2025-03-08 10:17:00 +08:00
|
|
|
|
#include "FluxMod.h"
|
2025-03-04 15:21:41 +08:00
|
|
|
|
|
|
|
|
|
|
static const char *TAG = "MASTER_TEST";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>ַ*/
|
|
|
|
|
|
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]));
|
|
|
|
|
|
|
2025-03-08 10:17:00 +08:00
|
|
|
|
esp_err_t modbus_master_init(void)
|
2025-03-04 15:21:41 +08:00
|
|
|
|
{
|
|
|
|
|
|
// Initialize and start Modbus controller
|
|
|
|
|
|
mb_communication_info_t comm = {
|
|
|
|
|
|
.port = MB_PORT_NUM,
|
|
|
|
|
|
.mode = MB_MODE_RTU,
|
|
|
|
|
|
.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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|