Обновить README.md
This commit is contained in:
46
README.md
46
README.md
@@ -20,14 +20,14 @@ _Note: Здесь описано подключение просто архив
|
||||
|
||||
void USARTx_IRQHandler(void)
|
||||
{
|
||||
RS_UART_Handler(&modbus1);
|
||||
RS_UART_Handler(&hmodbus1);
|
||||
return;
|
||||
HAL_UART_IRQHandler(&huart);
|
||||
}
|
||||
|
||||
void TIMx_IRQHandler(void)
|
||||
{
|
||||
RS_TIM_Handler(&modbus1);
|
||||
RS_TIM_Handler(&hmodbus1);
|
||||
return;
|
||||
HAL_TIM_IRQHandler(&htim);
|
||||
}
|
||||
@@ -39,8 +39,8 @@ void TIMx_IRQHandler(void)
|
||||
|
||||
```c
|
||||
// MODBUS PARAMS
|
||||
#define MODBUS_DEVICE_ID 1 // Адрес устройства в сети Modbus
|
||||
#define MODBUS_TIMEOUT 100 // Таймаут в тиках таймера (рекомендуется 100-200ms)
|
||||
#define MODBUS_DEVICE_ID 1 ///< Адрес устройства в сети Modbus
|
||||
#define MODBUS_TIMEOUT 5000 ///< Таймаут в тиках таймера
|
||||
|
||||
// Строковые идентификаторы устройства
|
||||
#define MODBUS_VENDOR_NAME "NIO-12"
|
||||
@@ -86,7 +86,7 @@ int main(void)
|
||||
|
||||
// Инициализация Modbus
|
||||
MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
|
||||
MODBUS_Config(&hmodbus1, 1, 1000, MODBUS_MODE_SLAVE);
|
||||
MODBUS_Config(&hmodbus1, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE);
|
||||
|
||||
// Запуск приема Modbus
|
||||
MODBUS_SlaveStart(&hmodbus1, NULL);
|
||||
@@ -102,7 +102,22 @@ int main(void)
|
||||
|
||||
```c
|
||||
#include "modbus.h"
|
||||
|
||||
read_hold[10];
|
||||
// Запрос на 1 ID, считать холдинг регистры с 0 адреса 10 штук
|
||||
RS_MsgTypeDef read_hold_cmd = MB_MASTER_READ_HOLDING_REGS(1, 0, 10);
|
||||
// коллбек, вызовется при получении ответа от слейва
|
||||
void callback_func(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
|
||||
{
|
||||
// MB_RespGet_... Чтобы достать нужные данные из ответа
|
||||
for(int addr = MODBUS_MSG.Addr; addr < MODBUS_MSG.Addr + MODBUS_MSG.Qnt; addr++)
|
||||
{
|
||||
uint16_t value;
|
||||
if(MB_RespGet_RegisterValue(&MODBUS_MSG, addr, &value))
|
||||
{
|
||||
read_hold[i] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
int main(void)
|
||||
{
|
||||
// Инициализация HAL
|
||||
@@ -114,16 +129,11 @@ int main(void)
|
||||
|
||||
// Инициализация Modbus
|
||||
MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
|
||||
MODBUS_Config(&hmodbus1, 0, 1000, MODBUS_MODE_MASTER);
|
||||
MODBUS_Config(&hmodbus1, 0, MODBUS_TIMEOUT, MODBUS_MODE_MASTER);
|
||||
|
||||
// Запуск приема Modbus
|
||||
// Запрос на 1 ID, считать холдинг регистры с 0 адреса 10 штук
|
||||
RS_MsgTypeDef msg = MB_MASTER_READ_HOLDING_REGS(1, 0, 10);
|
||||
MODBUS_MasterRequest(&hmodbus1, &msg, &callback_func);
|
||||
void callback_func(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
|
||||
{
|
||||
// MB_RespGet_... Чтобы достать нужные данные из ответа
|
||||
}
|
||||
// Запрос по Modbus
|
||||
MODBUS_MasterRequest(&hmodbus1, &read_hold_cmd, &callback_func);
|
||||
|
||||
}
|
||||
```
|
||||
### 5. Настройка карты данных
|
||||
@@ -183,11 +193,11 @@ uint16_t temp = MB_DATA.InRegs.Temperature;
|
||||
MB_DATA.HoldRegs.SetpointTemp = 2500;
|
||||
|
||||
// Управление coils
|
||||
MB_Set_Coil_Local(&MB_DATA.Coils, 0); // Включить Relay1
|
||||
MB_Reset_Coil_Local(&MB_DATA.Coils, 1); // Выключить Relay2
|
||||
MB_Coil_Set_Local(&MB_DATA.Coils, 0); // Включить Relay1
|
||||
MB_Coil_Reset_Local(&MB_DATA.Coils, 1); // Выключить Relay2
|
||||
|
||||
// Чтение coil
|
||||
if (MB_Read_Coil_Local(&MB_DATA.Coils, 2)) {
|
||||
if (MB_Coil_Read_Local(&MB_DATA.Coils, 2)) {
|
||||
// Pump включен
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user