/** ****************************************************************************** * @file modbus.h * @brief Главный заголовочный файл Modbus библиотеки ****************************************************************************** @addtogroup MODBUS Modbus tools ****************************************************************************** @addtogroup MODBUS_FUNCTIONS Main API for Modbus Library @ingroup MODBUS @{ ****************************************************************************** * @details Объединяющий файл для подключения всей функциональности Modbus. Подключает все необходимые модули: @section init Инструкция по подключению Для корректной работы надо: - Подключить обработчики RS_UART_Handler(), RS_TIM_Handler(), в соответствубщие низкоуровневые прерывания UART_IRQHandler, TIM_IRQHandler вместо HAL'овского обработчика - В modbus_config.h настроить дефайны для нужной работы UART - Инициализировать хендл мобдас. По умолчанию глобально создается hmodbus1 - После для запуска Modbus: @verbatim //----------------Слейв модбас----------------// #include "modbus.h" MODBUS_FirstInit(&hmodbus1, &huart1, &htim3); MODBUS_Config(&hmodbus1, 1, 1000, MODBUS_MODE_SLAVE); MODBUS_SlaveStart(&hmodbus1, NULL); @endverbatim @verbatim //----------------Мастер модбас----------------// #include "modbus.h" MODBUS_FirstInit(&hmodbus1, &huart1, &htim3); MODBUS_Config(&hmodbus1, 0, 1000, MODBUS_MODE_MASTER); // - если нужны другие настройки, не из modbus_config.h // Запрос на 1 ID, считать холдинг регистры с 0 адреса 10 штук RS_MsgTypeDef msg = MB_REQUEST_READ_HOLDING_REGS(1, 0, 10); MODBUS_MasterRequest(&hmodbus1, &msg, &callback_func); void callback_func(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg) { // modbus_msg содержит ответ от устройства } @endverbatim @section Подключаемые модули: - rs_message.h - работа с uart - modbus_core.h - базовые определения - modbus_coils.h - работа с дискретными выходами - modbus_holdregs.h - работа с регистрами хранения - modbus_inputregs.h - работа с входными регистрами - modbus_devid.h - идентификация устройства - modbus_diag.h - диагностика modbus @section Структура данных Modbus #### Holding/Input Registers: - Регистры — 16-битные слова. Доступ к регистрам осуществляется через указатель. Таким образом, сами регистры могут представлять собой как массив так и структуру. #### Coils: - Coils — это биты, упакованные в 16-битные слова. Доступ к коилам осуществляется через указатель. Таким образом, сами коилы могут представлять собой как массив так и структуру. ******************************************************************************/ #ifndef __MODBUS_H_ #define __MODBUS_H_ #include "rs_message.h" #include "modbus_master.h" #include "modbus_slave.h" #include "modbus_coils.h" #include "modbus_holdregs.h" #include "modbus_inputregs.h" #include "modbus_devid.h" #include "modbus_diag.h" ///////////////////////////////////////////////////////////////////// /////////////////////////---FUNCTIONS---///////////////////////////// //----------------FUNCTIONS FOR USER---------------- /* Инициализация периферии модбас. */ HAL_StatusTypeDef MODBUS_FirstInit(RS_HandleTypeDef *hmodbus, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim); /* Программная конфигурация модбас. */ HAL_StatusTypeDef MODBUS_Config(RS_HandleTypeDef *hmodbus, uint8_t ID, uint16_t Timeout, uint8_t master); /* Запуск слейв устройства */ HAL_StatusTypeDef MODBUS_SlaveStart(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg); /* Реквест мастера модбас */ HAL_StatusTypeDef MODBUS_MasterRequest(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, void (*pClbk)(RS_HandleTypeDef*, RS_MsgTypeDef*)); //---------PROCESS MODBUS COMMAND FUNCTIONS--------- /////////////////////////---FUNCTIONS---///////////////////////////// #endif //__MODBUS_H_ /** MODBUS_FUNCTIONS * @} */