This commit is contained in:
Razvalyaev 2025-05-28 13:41:03 +03:00
parent d694b3c6d1
commit 09f8b0821b

75
README.md Normal file
View File

@ -0,0 +1,75 @@
# 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);
```