diff --git a/README.md b/README.md index 64ef473..8246134 100644 --- a/README.md +++ b/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 включен } ```