From 8a2e7398e18f64ff6ca89537e8f318850c201aa3 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Thu, 6 Nov 2025 12:48:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D0=BB=D1=83=D1=88=D0=B5=D0=BA=20=D0=B2=20mod?= =?UTF-8?q?bus=5Fcompat=20=D0=B8=20=D0=B7=D0=B0=D0=B3=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8=20=D0=B4=D0=BB=D1=8F=20TCP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/__modbus_compat.h | 114 +++++++++++++++++++++++++++++++++++++++++ Inc/modbus.h | 16 +++++- Inc/modbus_core.h | 5 +- Src/__modbus_compat.c | 9 ++++ Src/modbus_coils.c | 10 +--- Src/modbus_devid.c | 12 +---- Src/modbus_diag.c | 18 +------ Src/modbus_holdregs.c | 11 +--- Src/modbus_inputregs.c | 8 +-- Src/modbus_master.c | 52 +------------------ Src/modbus_slave.c | 30 +++++++++-- Src/rs_message.c | 4 +- 12 files changed, 175 insertions(+), 114 deletions(-) create mode 100644 Inc/__modbus_compat.h create mode 100644 Src/__modbus_compat.c diff --git a/Inc/__modbus_compat.h b/Inc/__modbus_compat.h new file mode 100644 index 0000000..d8cf952 --- /dev/null +++ b/Inc/__modbus_compat.h @@ -0,0 +1,114 @@ +/** +************************************************************************** +* @file __modbus_compat.h +* @brief Модуль для совместимости библиотеки MODBUS. +************************************************************************** +* @details Файл содержит API старых функций, а также заглушки для отключенных модулей: +******************************************************************************/ +#include "modbus.h" + + +/** @addtogroup MODBUS_LEGACY_API Legacy API + * @ingroup MODBUS_FUNCTIONS + * @{ + */ + + +/** MODBUS_LEGACY_API + * @} + */ + +/** @cond Заглушки отключенных модулей */ + +#ifndef MODBUS_ENABLE_COILS + #define MB_Coil_Write_Global(Addr, WriteVal) ILLEGAL_FUNCTION + #define MB_Coil_Read_Global(Addr, Exception) 0 + #define MB_Process_Read_Coils(modbus_msg) 0 + #define MB_Process_Write_Single_Coil(modbus_msg) 0 + #define MB_Process_Write_Miltuple_Coils(modbus_msg) 0 +#endif + +#ifndef MODBUS_ENABLE_HOLDINGS + #define MB_Holding_Write_Global(Addr, WriteVal) ILLEGAL_FUNCTION + #define MB_Holding_Read_Global(Addr, Exception) 0 + #define MB_Process_Read_Hold_Regs(modbus_msg) 0 + #define MB_Process_Write_Single_Reg(modbus_msg) 0 + #define MB_Process_Write_Miltuple_Regs(modbus_msg) 0 +#endif + +#ifndef MODBUS_ENABLE_INPUTS + #define MB_Input_Write_Global(Addr, WriteVal) ILLEGAL_FUNCTION + #define MB_Input_Read_Global(Addr, Exception) 0 + #define MB_Process_Read_Input_Regs(modbus_msg) 0 +#endif + +#ifndef MODBUS_ENABLE_DEVICE_IDENTIFICATIONS + #define MB_WriteSingleObjectToMessage(mbdata, ind, obj) + #define MB_WriteObjectsToMessage(modbus_msg, maxidofobj) + #define MB_Process_Read_Device_Identifications(modbus_msg) 0 + #define MB_DeviceInentificationInit() +#endif + + +#ifndef MODBUS_ENABLE_DIAGNOSTICS + #define MB_DiagnosticsInit() + #define MB_Diagnostics_WriteBit(bit_num, bit_state) 0 + #define MB_Diagnostics_GetBit(bit_num) 0 + #define MB_Process_Diagnostics(modbus_msg) 0 + #define MB_Diagnostics_BusMessageCnt() + #define MB_Diagnostics_CommunicationErrorCnt() + #define MB_Diagnostics_ExceptionErrorCnt() + #define MB_Diagnostics_CharacterOverrunCnt() + #define MB_Diagnostics_SlaveMessageCnt() + #define MB_Diagnostics_SlaveNoResponseCnt() + #define MB_Diagnostics_SlaveNAKCnt() + #define MB_Diagnostics_SlaveBusyCnt() + #define MB_GetDeviceMode(void) MODBUS_NORMAL_MODE +#endif + + + +#ifndef MODBUS_ENABLE_MASTER + #define MB_RespGet_RegisterValue(modbus_msg, reg_addr, reg_value) 0 + #define MB_RespGet_CoilState(modbus_msg, coil_addr, coil_state) 0 + #define MB_RespGet_NumberOfObjects(modbus_msg) 0 + #define MB_RespGet_ObjectById(modbus_msg, obj_id, obj_data, obj_length) 0 + #define MB_RespGet_ObjectByIndex(modbus_msg, index, obj_id, obj_data, obj_length) 0 + #define MB_RespGet_Diagnostic(modbus_msg, data) 0 + #define MB_REQUEST_READ_COILS(slave_addr, start_addr, quantity) {0} + #define MB_REQUEST_READ_DISCRETE_INPUTS(slave_addr, start_addr, quantity) {0} + #define MB_REQUEST_READ_HOLDING_REGS(slave_addr, start_addr, quantity) {0} + #define MB_REQUEST_READ_INPUT_REGS(slave_addr, start_addr, quantity) {0} + #define MB_REQUEST_WRITE_SINGLE_COIL(slave_addr, coil_addr, value) {0} + #define MB_REQUEST_WRITE_SINGLE_REG(slave_addr, reg_addr, value) {0} + #define MB_REQUEST_WRITE_MULTIPLE_COILS(slave_addr, start_addr, quantity, coils_data) {0} + #define MB_REQUEST_WRITE_MULTIPLE_REGS(slave_addr, start_addr, quantity, regs_data) {0} + #define MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, sub_function, data) {0} + #define MB_REQUEST_RETURN_QUERY_DATA(slave_addr) {0} + #define MB_REQUEST_RESTART_COMMUNICATIONS(slave_addr, data) {0} + #define MB_REQUEST_RETURN_DIAGNOSTIC_REGISTER(slave_addr) {0} + #define MB_REQUEST_FORCE_LISTEN_ONLY_MODE(slave_addr) {0} + #define MB_REQUEST_CLEAR_COUNTERS_AND_DIAGNOSTIC_REGISTER(slave_addr) {0} + #define MB_REQUEST_RETURN_BUS_MESSAGE_COUNT(slave_addr) {0} + #define MB_REQUEST_RETURN_BUS_COMMUNICATION_ERROR_COUNT(slave_addr) {0} + #define MB_REQUEST_RETURN_SLAVE_EXCEPTION_ERROR_COUNT(slave_addr) {0} + #define MB_REQUEST_RETURN_SLAVE_MESSAGE_COUNT(slave_addr) {0} + #define MB_REQUEST_RETURN_SLAVE_NO_RESPONSE_COUNT(slave_addr) {0} + #define MB_REQUEST_RETURN_SLAVE_NAK_COUNT(slave_addr) {0} + #define MB_REQUEST_RETURN_SLAVE_BUSY_COUNT(slave_addr) {0} + #define MB_REQUEST_RETURN_BUS_CHARACTER_OVERRUN_COUNT(slave_addr) {0} + #define MB_REQUEST_READ_DEVICE_ID_BASIC(slave_addr) {0} + #define MB_REQUEST_READ_DEVICE_ID_REGULAR(slave_addr) {0} + #define MB_REQUEST_READ_DEVICE_ID_EXTENDED(slave_addr) {0} + #define MB_REQUEST_READ_DEVICE_ID_SPECIFIC(slave_addr, object_id) {0} + #define MB_Master_Collect_Message(hmodbus, modbus_msg, modbus_uart_buff) RS_ERR + #define MB_Master_Parse_Message(hmodbus, modbus_msg, modbus_uart_buff) RS_ERR +#endif + +#ifndef MODBUS_ENABLE_SLAVE + #define MB_Slave_Response(hmodbus, modbus_msg) RS_ERR + #define MB_Slave_Collect_Message(hmodbus, modbus_msg, modbus_uart_buff) RS_ERR + #define MB_Slave_Parse_Message(hmodbus, modbus_msg, modbus_uart_buff) RS_ERR +#endif + +/** @endcond */ \ No newline at end of file diff --git a/Inc/modbus.h b/Inc/modbus.h index 38b7538..6b07e42 100644 --- a/Inc/modbus.h +++ b/Inc/modbus.h @@ -28,7 +28,7 @@ #include "modbus.h" MODBUS_FirstInit(&hmodbus1, &huart1, &htim3); - MODBUS_Config(&hmodbus1, 1, 1000, MODBUS_MODE_SLAVE); + MODBUS_Config(&hmodbus1, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE); MODBUS_SlaveStart(&hmodbus1, NULL); @endverbatim @verbatim @@ -84,13 +84,27 @@ #define __MODBUS_H_ #include "rs_message.h" +#ifdef MODBUS_ENABLE_MASTER #include "modbus_master.h" +#endif +#ifdef MODBUS_ENABLE_SLAVE #include "modbus_slave.h" +#endif +#ifdef MODBUS_ENABLE_COILS #include "modbus_coils.h" +#endif +#ifdef MODBUS_ENABLE_HOLDINGS #include "modbus_holdregs.h" +#endif +#ifdef MODBUS_ENABLE_INPUTS #include "modbus_inputregs.h" +#endif +#ifdef MODBUS_ENABLE_DEVICE_IDENTIFICATIONS #include "modbus_devid.h" +#endif +#ifdef MODBUS_ENABLE_DIAGNOSTICS #include "modbus_diag.h" +#endif #ifdef MODBUS_ENABLE_MASTER diff --git a/Inc/modbus_core.h b/Inc/modbus_core.h index 3935fd6..26ad345 100644 --- a/Inc/modbus_core.h +++ b/Inc/modbus_core.h @@ -171,7 +171,7 @@ typedef struct // RS_MsgTypeDef { #ifdef MODBUS_PROTOCOL_TCP uint16_t ID_Transaction; ///< Modbus TCP: ID Transaction - uint16_t ID_Prot; ///< Modbus TCP: ID Protocol + uint16_t ID_Protocol; ///< Modbus TCP: ID Protocol uint16_t PDU_Length; ///< Modbus TCP: PDU_Length #endif @@ -299,6 +299,9 @@ MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint /** MODBUS_CMD_PROCESS_FUNCTIONS * @} */ + + + /////////////////////////---FUNCTIONS---///////////////////////////// #endif //__MODBUS_CORE_H_ /** MODBUS_INTERNAL diff --git a/Src/__modbus_compat.c b/Src/__modbus_compat.c new file mode 100644 index 0000000..f96e6c8 --- /dev/null +++ b/Src/__modbus_compat.c @@ -0,0 +1,9 @@ +/** +************************************************************************** +* @file __modbus_compat.c +* @brief Модуль для совместимости библиотеки MODBUS. +************************************************************************** +* @details Файл содержит API старых функций, а также заглушки для отключенных модулей: +******************************************************************************/ +#include "modbus.h" + diff --git a/Src/modbus_coils.c b/Src/modbus_coils.c index 5b2d4d9..597a87f 100644 --- a/Src/modbus_coils.c +++ b/Src/modbus_coils.c @@ -236,13 +236,5 @@ uint8_t MB_Process_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg) return 1; } -#else //MODBUS_ENABLE_COILS - -MB_ExceptionTypeDef MB_Coil_Write_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal) {return ILLEGAL_FUNCTION;} -uint16_t MB_Coil_Read_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception) {return 0;} -uint8_t MB_Process_Read_Coils(RS_MsgTypeDef *modbus_msg) {return 0;} -uint8_t MB_Process_Write_Single_Coil(RS_MsgTypeDef *modbus_msg) {return 0;} -uint8_t MB_Process_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg) {return 0;} - -#endif \ No newline at end of file +#endif //MODBUS_ENABLE_COILS \ No newline at end of file diff --git a/Src/modbus_devid.c b/Src/modbus_devid.c index 129b1c7..f2c6f0d 100644 --- a/Src/modbus_devid.c +++ b/Src/modbus_devid.c @@ -544,14 +544,4 @@ void MB_DeviceInentificationInit(void) #endif } - -#else //MODBUS_ENABLE_DEVICE_IDENTIFICATIONS - -/* Получить количество объектов в сообщении */ - -void MB_WriteSingleObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj) {} -void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj) {} -uint8_t MB_Process_Read_Device_Identifications(RS_MsgTypeDef *modbus_msg) {return 0;} -void MB_DeviceInentificationInit(void) {} - -#endif \ No newline at end of file +#endif //MODBUS_ENABLE_DEVICE_IDENTIFICATIONS \ No newline at end of file diff --git a/Src/modbus_diag.c b/Src/modbus_diag.c index e2cd966..ed6d5aa 100644 --- a/Src/modbus_diag.c +++ b/Src/modbus_diag.c @@ -293,20 +293,4 @@ MB_DeviceModeTypeDef MB_GetDeviceMode(void) return MB_DIAG.DeviceMode; } -#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_Process_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 +#endif //MODBUS_ENABLE_DIAGNOSTICS \ No newline at end of file diff --git a/Src/modbus_holdregs.c b/Src/modbus_holdregs.c index 57503cf..6b113e5 100644 --- a/Src/modbus_holdregs.c +++ b/Src/modbus_holdregs.c @@ -159,13 +159,4 @@ uint8_t MB_Process_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg) return 1; } - -#else //MODBUS_ENABLE_HOLDINGS - -MB_ExceptionTypeDef MB_Holding_Write_Global(uint16_t Addr, uint16_t WriteVal) {return ILLEGAL_FUNCTION;} -uint16_t MB_Holding_Read_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception) {return 0;} -uint8_t MB_Process_Read_Hold_Regs(RS_MsgTypeDef *modbus_msg) {return 0;} -uint8_t MB_Process_Write_Single_Reg(RS_MsgTypeDef *modbus_msg) {return 0;} -uint8_t MB_Process_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg) {return 0;} - -#endif \ No newline at end of file +#endif //MODBUS_ENABLE_HOLDINGS \ No newline at end of file diff --git a/Src/modbus_inputregs.c b/Src/modbus_inputregs.c index 06d8981..808959b 100644 --- a/Src/modbus_inputregs.c +++ b/Src/modbus_inputregs.c @@ -104,10 +104,4 @@ uint8_t MB_Process_Read_Input_Regs(RS_MsgTypeDef *modbus_msg) return 1; } -#else //MODBUS_ENABLE_INPUTS - -MB_ExceptionTypeDef MB_Input_Write_Global(uint16_t Addr, uint16_t WriteVal) {return ILLEGAL_FUNCTION;} -uint16_t MB_Input_Read_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception) {return 0;} -uint8_t MB_Process_Read_Input_Regs(RS_MsgTypeDef *modbus_msg) {return 0;} - -#endif \ No newline at end of file +#endif //MODBUS_ENABLE_INPUTS \ No newline at end of file diff --git a/Src/modbus_master.c b/Src/modbus_master.c index 5d769bf..95c8ec7 100644 --- a/Src/modbus_master.c +++ b/Src/modbus_master.c @@ -676,54 +676,4 @@ RS_MsgTypeDef MB_REQUEST_READ_DEVICE_ID_SPECIFIC(uint8_t slave_addr, uint8_t obj return msg; } - - - - -#else -RS_MsgTypeDef msg_dummy = {0}; - -int MB_RespGet_RegisterValue(RS_MsgTypeDef *modbus_msg, uint16_t reg_addr, uint16_t *reg_value) {return 0;} -int MB_RespGet_CoilState(RS_MsgTypeDef *modbus_msg, uint16_t coil_addr, int *coil_state) {return 0;} -int MB_RespGet_NumberOfObjects(RS_MsgTypeDef *modbus_msg) {return 0;} -int MB_RespGet_ObjectById(RS_MsgTypeDef *modbus_msg, uint8_t obj_id, char *obj_data, uint8_t *obj_length) {return 0;} -int MB_RespGet_ObjectByIndex(RS_MsgTypeDef *modbus_msg, int index, uint8_t *obj_id, char *obj_data, uint8_t *obj_length) {return 0;} -int MB_RespGet_Diagnostic(RS_MsgTypeDef *modbus_msg, uint16_t *data) {return 0;} - -RS_MsgTypeDef MB_REQUEST_READ_COILS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_READ_DISCRETE_INPUTS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_READ_HOLDING_REGS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_READ_INPUT_REGS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_WRITE_SINGLE_COIL(uint8_t slave_addr, uint16_t coil_addr, uint8_t value) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_WRITE_SINGLE_REG(uint8_t slave_addr, uint16_t reg_addr, uint16_t value) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_WRITE_MULTIPLE_COILS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity, uint8_t *coils_data) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_WRITE_MULTIPLE_REGS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity, uint16_t *regs_data) {return msg_dummy;} - -//---------ДИАГНОСТИЧЕСКИЕ ДАННЫЕ----------- -RS_MsgTypeDef MB_REQUEST_DIAGNOSTIC_QUERY(uint8_t slave_addr, uint16_t sub_function, uint16_t data) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_QUERY_DATA(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RESTART_COMMUNICATIONS(uint8_t slave_addr, uint16_t data) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_DIAGNOSTIC_REGISTER(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_FORCE_LISTEN_ONLY_MODE(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_CLEAR_COUNTERS_AND_DIAGNOSTIC_REGISTER(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_BUS_MESSAGE_COUNT(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_BUS_COMMUNICATION_ERROR_COUNT(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_SLAVE_EXCEPTION_ERROR_COUNT(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_SLAVE_MESSAGE_COUNT(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_SLAVE_NO_RESPONSE_COUNT(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_SLAVE_NAK_COUNT(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_SLAVE_BUSY_COUNT(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_RETURN_BUS_CHARACTER_OVERRUN_COUNT(uint8_t slave_addr) {return msg_dummy;} - -//---------ИДЕНТИФИКАТОРЫ МОДБАС----------- -RS_MsgTypeDef MB_REQUEST_READ_DEVICE_ID_BASIC(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_READ_DEVICE_ID_REGULAR(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_READ_DEVICE_ID_EXTENDED(uint8_t slave_addr) {return msg_dummy;} -RS_MsgTypeDef MB_REQUEST_READ_DEVICE_ID_SPECIFIC(uint8_t slave_addr, uint8_t object_id) {return msg_dummy;} - -RS_StatusTypeDef MB_Master_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff) {return RS_ERR;} -RS_StatusTypeDef MB_Master_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff) {return RS_ERR;} -#endif - - - +#endif //MODBUS_ENABLE_MASTER \ No newline at end of file diff --git a/Src/modbus_slave.c b/Src/modbus_slave.c index 982bc1a..6127c45 100644 --- a/Src/modbus_slave.c +++ b/Src/modbus_slave.c @@ -173,6 +173,16 @@ RS_StatusTypeDef MB_Slave_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeD else { //------INFO ABOUT DATA/MESSAGE------ +#ifdef MODBUS_PROTOCOL_TCP + modbus_uart_buff[ind++] = modbus_msg->ID_Transaction >> 8; + modbus_uart_buff[ind++] = modbus_msg->ID_Transaction& 0xFF; + + modbus_uart_buff[ind++] = modbus_msg->ID_Protocol >> 8; + modbus_uart_buff[ind++] = modbus_msg->ID_Protocol& 0xFF; + + modbus_uart_buff[ind++] = modbus_msg->PDU_Length >> 8; + modbus_uart_buff[ind++] = modbus_msg->PDU_Length& 0xFF; +#endif //-----------[first bytes]----------- // set ID of message/user modbus_uart_buff[ind++] = modbus_msg->MbAddr; @@ -255,12 +265,14 @@ RS_StatusTypeDef MB_Slave_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeD //---------------CRC---------------- //---------[last 16 bytes]---------- +#ifndef MODBUS_PROTOCOL_TCP // calc crc of received data uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind); // write crc to message structure and modbus-uart buffer modbus_msg->MB_CRC = CRC_VALUE; modbus_uart_buff[ind++] = CRC_VALUE; modbus_uart_buff[ind++] = CRC_VALUE >> 8; +#endif hmodbus->RS_Message_Size = ind; @@ -317,6 +329,16 @@ RS_StatusTypeDef MB_Slave_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef hmodbus->f.RX_Continue = 0; int expected_size = 0; //-----INFO ABOUT DATA/MESSAGE------- +#ifdef MODBUS_PROTOCOL_TCP + modbus_msg->ID_Transaction =modbus_uart_buff[ind++]<<8; + modbus_msg->ID_Transaction |=modbus_uart_buff[ind++]; + + modbus_msg->ID_Protocol =modbus_uart_buff[ind++]<<8; + modbus_msg->ID_Protocol |=modbus_uart_buff[ind++]; + + modbus_msg->PDU_Length =modbus_uart_buff[ind++]<<8; + modbus_msg->PDU_Length |=modbus_uart_buff[ind++]; +#endif //-----------[first bits]------------ // get ID of message/user if(modbus_uart_buff[ind] != hmodbus->ID) @@ -414,6 +436,7 @@ RS_StatusTypeDef MB_Slave_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef //---------------CRC---------------- //----------[last 16 bits]---------- +#ifndef MODBUS_PROTOCOL_TCP // calc crc of received data uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind); // get crc of received data @@ -426,12 +449,9 @@ RS_StatusTypeDef MB_Slave_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef TrackerCnt_Err(hmodbus->rs_err); modbus_msg->Func_Code |= ERR_VALUES_START; } +#endif return RS_OK; } -#else // MODBUS_ENABLE_SLAVE -RS_StatusTypeDef MB_Slave_Response(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg) {return RS_ERR;} -RS_StatusTypeDef MB_Slave_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff) {return RS_ERR;} -RS_StatusTypeDef MB_Slave_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff) {return RS_ERR;} -#endif \ No newline at end of file +#endif //MODBUS_ENABLE_SLAVE \ No newline at end of file diff --git a/Src/rs_message.c b/Src/rs_message.c index a298b97..08a2a57 100644 --- a/Src/rs_message.c +++ b/Src/rs_message.c @@ -362,10 +362,10 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS) } else { + RS_Set_Free(hRS); // освобожднаем RS if(hRS->pCallback) { hRS->pCallback(hRS, hRS->pMessagePtr); // обрабатываем ответ - RS_Set_Free(hRS); // освобожднаем RS } } } @@ -447,11 +447,11 @@ void RS_TIM_Handler(RS_HandleTypeDef *hRS) if(hRS->sRS_Mode >= RS_MASTER_MODE_START) { // Мастер: коллбек и освобождение для нового запроса + RS_Set_Free(hRS); if(hRS->pCallback) { hRS->pCallback(hRS, hRS->pMessagePtr); // обрабатываем ответ } - RS_Set_Free(hRS); } else { // Слейв: перезапускаем прием RS_Handle_Receive_Start(hRS, hRS->pMessagePtr);