From af34ac941ff51a53abcbca57c86c847ffec58b63 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Tue, 4 Nov 2025 13:35:26 +0300 Subject: [PATCH] =?UTF-8?q?0.2.1=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5/=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D1=85=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D1=83=D0=BB=D0=B5=D0=B9=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=88=D0=B8=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/rs_message.h | 2 +- Src/modbus_coils.c | 11 ++++++++++- Src/modbus_devid.c | 12 ++++++++++++ Src/modbus_diag.c | 21 ++++++++++++++++++++- Src/modbus_holdregs.c | 10 ++++++++++ Src/modbus_inputregs.c | 8 ++++++++ Src/rs_message.c | 1 + 7 files changed, 62 insertions(+), 3 deletions(-) diff --git a/Inc/rs_message.h b/Inc/rs_message.h index 6afe650..c8a8d18 100644 --- a/Inc/rs_message.h +++ b/Inc/rs_message.h @@ -61,7 +61,7 @@ #define RS_Set_TX_Flags(_hRS_) _hRS_->f.TX_Busy = 1; _hRS_->f.TX_Done = 0 -#define RS_Reset_RX_Active_Flags(_hRS_) _hRS_->f.RX_Ongoing = 0 +#define RS_Reset_RX_Active_Flags(_hRS_) _hRS_->f.RX_Ongoing = 0; _hRS_->f.RX_Continue = 0; #define RS_Reset_RX_Flags(_hRS_) RS_Reset_RX_Active_Flags(_hRS_); _hRS_->f.RX_Busy = 0; _hRS_->f.RX_Done = 0; _hRS_->f.RX_Half = 0 #define RS_Reset_TX_Flags(_hRS_) _hRS_->f.TX_Busy = 0; _hRS_->f.TX_Done = 0 diff --git a/Src/modbus_coils.c b/Src/modbus_coils.c index f0dd07e..456079f 100644 --- a/Src/modbus_coils.c +++ b/Src/modbus_coils.c @@ -12,7 +12,7 @@ ******************************************************************************/ #include "modbus_coils.h" - +#ifdef MODBUS_ENABLE_COILS /** * @brief Set or Reset Coil at its global address. @@ -236,3 +236,12 @@ uint8_t MB_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg) return 1; } +#else //MODBUS_ENABLE_COILS + +MB_ExceptionTypeDef MB_Write_Coil_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal) {return ILLEGAL_FUNCTION;} +uint16_t MB_Read_Coil_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception) {return 0;} +uint8_t MB_Proccess_Read_Coils(RS_MsgTypeDef *modbus_msg) {return 0;} +uint8_t MB_Proccess_Write_Single_Coil(RS_MsgTypeDef *modbus_msg) {return 0;} +uint8_t MB_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg) {return 0;} + +#endif \ No newline at end of file diff --git a/Src/modbus_devid.c b/Src/modbus_devid.c index ad70117..49a9ce5 100644 --- a/Src/modbus_devid.c +++ b/Src/modbus_devid.c @@ -16,6 +16,8 @@ ******************************************************************************/ #include "modbus_devid.h" +#ifdef MODBUS_ENABLE_DEVICE_IDENTIFICATORS + MB_DeviceIdentificationTypeDef MB_DEVID; ///< Device Identificatino= @@ -539,3 +541,13 @@ void MB_DeviceInentificationInit(void) #endif } + +#else //MODBUS_ENABLE_DEVICE_IDENTIFICATORS + + +void MB_WriteSingleObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj) {} +void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj) {} +uint8_t MB_Proccess_Read_Device_Identification(RS_MsgTypeDef *modbus_msg) {return 0;} +void MB_DeviceInentificationInit(void) {} + +#endif \ No newline at end of file diff --git a/Src/modbus_diag.c b/Src/modbus_diag.c index 0b7ab30..9690b34 100644 --- a/Src/modbus_diag.c +++ b/Src/modbus_diag.c @@ -12,6 +12,7 @@ ******************************************************************************/ #include "modbus_diag.h" +#ifdef MODBUS_ENABLE_DIAGNOSTICS // Глобальная структура диагностики MB_DiagnosticsInfoTypeDef MB_DIAG = {0}; @@ -290,4 +291,22 @@ void MB_Diagnostics_SlaveBusyCnt(void) MB_DeviceModeTypeDef MB_GetDeviceMode(void) { return MB_DIAG.DeviceMode; -} \ No newline at end of file +} + +#else //MODBUS_ENABLE_DIAGNOSTICS + +void MB_DiagnosticsInit(void) {} +int MB_Diagnostics_WriteBit(int bit_num, int bit_state) {return 0;} +int MB_Diagnostics_GetBit(int bit_num) {return 0;} +uint8_t MB_Proccess_Diagnostics(RS_MsgTypeDef *modbus_msg) {return 0;} +void MB_Diagnostics_BusMessageCnt(void) {} +void MB_Diagnostics_CommunicationErrorCnt(void) {} +void MB_Diagnostics_ExceptionErrorCnt(void) {} +void MB_Diagnostics_CharacterOverrunCnt(void) {} +void MB_Diagnostics_SlaveMessageCnt(void) {} +void MB_Diagnostics_SlaveNoResponseCnt(void) {} +void MB_Diagnostics_SlaveNAKCnt(void) {} +void MB_Diagnostics_SlaveBusyCnt(void) {} +MB_DeviceModeTypeDef MB_GetDeviceMode(void) {return MODBUS_NORMAL_MODE;} + +#endif \ No newline at end of file diff --git a/Src/modbus_holdregs.c b/Src/modbus_holdregs.c index 8524536..8ac96d1 100644 --- a/Src/modbus_holdregs.c +++ b/Src/modbus_holdregs.c @@ -21,6 +21,7 @@ #include "modbus_inputregs.h" +#ifdef MODBUS_ENABLE_HOLDINGS /** @@ -97,3 +98,12 @@ uint8_t MB_Proccess_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg) } return 1; } + + +#else //MODBUS_ENABLE_HOLDINGS + +uint8_t MB_Proccess_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg) {return 0;} +uint8_t MB_Proccess_Write_Single_Reg(RS_MsgTypeDef *modbus_msg) {return 0;} +uint8_t MB_Proccess_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg) {return 0;} + +#endif \ No newline at end of file diff --git a/Src/modbus_inputregs.c b/Src/modbus_inputregs.c index d6ed111..62927c5 100644 --- a/Src/modbus_inputregs.c +++ b/Src/modbus_inputregs.c @@ -12,6 +12,8 @@ #include "modbus_inputregs.h" +#ifdef MODBUS_ENABLE_INPUTS + /** * @brief Proccess command Read Input Registers (04 - 0x04). * @param modbus_msg Указатель на структуру собщения modbus. @@ -42,3 +44,9 @@ uint8_t MB_Proccess_Read_Input_Regs(RS_MsgTypeDef *modbus_msg) } return 1; } + +#else //MODBUS_ENABLE_INPUTS + +uint8_t MB_Proccess_Read_Input_Regs(RS_MsgTypeDef *modbus_msg) {return 0;} + +#endif \ No newline at end of file diff --git a/Src/rs_message.c b/Src/rs_message.c index 39a8647..bea7d7f 100644 --- a/Src/rs_message.c +++ b/Src/rs_message.c @@ -339,6 +339,7 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS) __HAL_UART_CLEAR_IDLEFLAG(hRS->huart); // Важно: очистить флаг IDLE //-------------STANDARD UART HANDLING------------- HAL_UART_IRQHandler(hRS->huart); + hRS->f.RX_Continue = 0; // Если прием активен и мы получили IDLE - это конец фрейма if(RS_Is_RX_Busy(hRS) && hRS->f.RX_Ongoing)