3.0 KiB
Modbus: подключение и использование
Это вариант голого (bare) modbus, где вся инициализация скинута на CubeMX
Настройка
-
Подключите обработчики прерываний UART и TIM в свои IRQ обработчики после HAL-обработчиков:
#include "rs_message.h" void USARTx_IRQHandler(void) { HAL_UART_IRQHandler(&huart); RS_UART_Handler(&modbus1); } void TIMx_IRQHandler(void) { HAL_TIM_IRQHandler(&htim); RS_TIM_Handler(&modbus1); } -
Настройте
modbus_config.h:// MODBUS PARAMS #define MODBUS_DEVICE_ID 1 ///< девайс текущего устройства #define MODBUS_TIMEOUT 5000 ///< максимальнйы тайтаут MB в тиках таймера // PERIPH FUNCTIONS AND HANDLERS #define RS_UART_Init MX_USART1_UART_Init #define RS_UART_DeInit HAL_UART_MspDeInit #define RS_TIM_Init MX_TIM3_Init #define RS_TIM_DeInit HAL_TIM_Base_MspDeInit #define rs_huart huart1 #define rs_htim htim3 -
Для инициализации Modbus добавьте:
#include "rs_message.h" MODBUS_FirstInit(); -
Настройка регистров и коилов
В этом проекте структура данных Modbus организована в три основных типа элементов: входные регистры (
Input Registers- только чтение), регистры хранения (Holding Registers- чтение и запись) и коилы (Coils- отдельные биты, чтение и запись). Каждый тип данных структурирован как отдельный набор с определенными адресами и размерностями.Все три типа данных объединены в общую структуру устройства
MB_DataStructureTypeDef, которая содержит:- Входные регистры (
InRegs) - Коилы (
Coils) - Регистры хранения (
HoldRegs)
Пример настройки
Input Registers:typedef struct //MB_DataInRegsTypeDef { uint16_t ForwardVoltage; uint16_t ReversePeakVoltage; }MB_DataInRegsTypeDef; // DEFINES FOR INPUT REGISTERS ARRAYS #define R_INPUT_ADDR 0 // начальный адресс инпут регистров #define R_INPUT_QNT 2 // количество инпут регистровАналогично с
Hodling RegistersиCoils(в коилах только битовые поля) - Входные регистры (
-
Для запуска Modbus вызовите:
RS_Receive_IT(&hmodbus1, &MODBUS_MSG);