/** ******************************************************************************* * @file modbus_coils.h * @brief Работа с коилами Modbus ******************************************************************************* @addtogroup MODBUS_COILS Coils Tools @ingroup MODBUS_INTERNAL @brief Функции для работы с коилами ******************************************************************************* * @details Модуль для доступа к coils внутри программы: - Функции для доступа к coils по глобальным адресам - Макросы для доступа к coils по локальным адресам Модуль предоставляет функции и макросы для работы с битовыми данными: - Чтение coils (0x01) Упаковка битов в байты - Запись одиночного coil (0x05) Установка/сброс бита - Запись множественных coils (0x0F) - распаковка байтов в биты @section cbits Организация битовых данных: Coils упакованы в 16-битные слова для эффективного использования памяти. Биты нумеруются от младшего к старшему внутри каждого слова. @section caddr Адресация: - Глобальная - абсолютный адрес в пространстве Modbus - Локальная - относительный адрес внутри массива coils - Макросы автоматически вычисляют смещения и маски ******************************************************************************/ #ifndef __MODBUS_COILS_H_ #define __MODBUS_COILS_H_ #include "modbus_core.h" #ifdef MODBUS_ENABLE_COILS ///////////////////////////////////////////////////////////////////// ////////////////////---MODBUS FUNCTION DEFINES---//////////////////// //-------------------------------------------------- ///////////////////////////////////////////////////////////////////// /////////////////////////---FUNCTIONS---///////////////////////////// /** * @addtogroup MODBUS_DATA_ACCESS_FUNCTIONS API for Data Access * @ingroup MODBUS_FUNCTIONS * @brief API для доступа к данным модбас внутри программы * @{ */ /** @brief Enum for coils operation */ typedef enum { SET_COIL, RESET_COIL, TOOGLE_COIL, }MB_CoilsOpTypeDef; /** * @brief Считать коил по локальному адресу. * @param _parr_ - массив коилов. * @param _coil_ - Номер коила от начала массива _arr_. * @return uint16_t Возвращает запрошенный коил на 0м бите. * * @details Позволяет обратиться к коилу по адресу относительно _arr_. */ #define MB_Coil_Read_Local(_parr_, _coil_) (( *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) & MB_Set_Coil_Mask(_coil_) ) >> (_coil_)) /** * @brief Выставить коил по локальному адресу. * @param _parr_ Указатель на массив коилов. * @param _coil_ - Номер коила от начала массива _arr_. * * @details Позволяет обратиться к коилу по адресу относительно _arr_. */ #define MB_Coil_Set_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) |= MB_Set_Coil_Mask(_coil_) /** * @brief Сбросить коил по локальному адресу. * @param _parr_ Указатель на массив коилов. * @param _coil_ - Номер коила от начала массива _arr_. * * @details Позволяет обратиться к коилу по адресу относительно _arr_. */ #define MB_Coil_Reset_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) &= ~(MB_Set_Coil_Mask(_coil_)) /** * @brief Переключить состояние коила по локальному адресу. * @param _parr_ Указатель на массив коилов. * @param _coil_ - Номер коила от начала массива _arr_. * * @details Позволяет обратиться к коилу по адресу относительно _arr_. */ #define MB_Coil_Toogle_Local(_parr_, _coil_) *MB_Set_Coil_Reg_Ptr(_parr_, _coil_) ^= MB_Set_Coil_Mask(_coil_) /* Выставить/сбросить коил по глобальному адресу */ MB_ExceptionTypeDef MB_Coil_Write_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal); /* Считать коил по глобальному адресу */ uint16_t MB_Coil_Read_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception); /** MODBUS_DATA_ACCESS_FUNCTIONS * @} */ /** * @addtogroup MODBUS_CMD_PROCESS_FUNCTIONS * @{ */ /* Обработать функцию Read Coils (01 - 0x01) */ uint8_t MB_Process_Read_Coils(RS_MsgTypeDef *modbus_msg); /* Обработать функцию Write Single Coils (05 - 0x05) */ uint8_t MB_Process_Write_Single_Coil(RS_MsgTypeDef *modbus_msg); /* Обработать функцию Write Multiple Coils (15 - 0x0F) */ uint8_t MB_Process_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg); /** MODBUS_CMD_PROCESS_FUNCTIONS * @} */ /////////////////////////---FUNCTIONS---///////////////////////////// #endif //MODBUS_ENABLE_COILS #endif //__MODBUS_COILS_H_