+readme
This commit is contained in:
parent
d694b3c6d1
commit
09f8b0821b
75
README.md
Normal file
75
README.md
Normal 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);
|
||||
```
|
Loading…
Reference in New Issue
Block a user