Modbus/README.md
2025-05-28 13:41:03 +03:00

76 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Modbus: подключение и использование
Это вариант голого (bare) modbus, где вся инициализация скинута на CubeMX
## Настройка
1. Подключите обработчики прерываний **UART** и **TIM** в свои IRQ обработчики после HAL-обработчиков:
```c
#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);
}
```
2. Настройте `modbus_config.h`:
```c
// 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
```
3. Для инициализации Modbus добавьте:
```c
#include "rs_message.h"
MODBUS_FirstInit();
```
4. Настройка регистров и коилов
В этом проекте структура данных Modbus организована в три основных типа элементов: входные регистры (`Input Registers` - только чтение), регистры хранения (`Holding Registers` - чтение и запись) и коилы (`Coils` - отдельные биты, чтение и запись). Каждый тип данных структурирован как отдельный набор с определенными адресами и размерностями.
Все три типа данных объединены в общую структуру устройства `MB_DataStructureTypeDef`, которая содержит:
- Входные регистры (`InRegs`)
- Коилы (`Coils`)
- Регистры хранения (`HoldRegs`)
Пример настройки `Input Registers`:
```c
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` (в коилах только битовые поля)
5. Для запуска Modbus вызовите:
```c
RS_Receive_IT(&hmodbus1, &MODBUS_MSG);
```