Добавлены коилы для включения отдельных ключей. Протестирован modbus - работает.

Чуть оптимизированы функции переключения ключей: теперь ifdef для использования HAL функций не в test_func.c а в test_func.h
This commit is contained in:
2024-12-24 11:20:19 +03:00
parent be64bbf5d2
commit 0c06d07f4e
11 changed files with 152 additions and 144 deletions

View File

@@ -18,18 +18,18 @@
@{
*/
#define MODBUS_UART_NUMB 3 ///< Номер используемого UART, по нему выставляется дефайн USED_MB_UART = USARTx
//#define MODBUS_UART_NUMB 1 ///< Номер используемого UART, по нему выставляется дефайн USED_MB_UART = USARTx
#define MODBUS_SPEED 115200 ///< Скорость UART для модбас
#define MODBUS_GPIOX GPIOB ///< Порт для UART RX/TX
#define MODBUS_GPIO_PIN_RX GPIO_PIN_11 ///< Пин для UART RX
#define MODBUS_GPIO_PIN_TX GPIO_PIN_10 ///< Пин для UART TX
//#define MODBUS_GPIOX GPIOA ///< Порт для UART RX/TX
//#define MODBUS_GPIO_PIN_RX GPIO_PIN_9 ///< Пин для UART RX
//#define MODBUS_GPIO_PIN_TX GPIO_PIN_10 ///< Пин для UART TX
#define MODBUS_TIM_NUMB 7 ///< number of used tim, accord to this define sets define USED_MB_TIM = TIMx
#define MODBUS_TIM_AHB_FREQ 72 ///< TIM AHB Bus Freq
//#define MODBUS_TIM_NUMB 2 ///< number of used tim, accord to this define sets define USED_MB_TIM = TIMx
//#define MODBUS_TIM_AHB_FREQ 72 ///< TIM AHB Bus Freq
// defines for modbus behaviour
#define MODBUS_DEVICE_ID 1 ///< девайс текущего устройства
#define MODBUS_MAX_TIMEOUT 5000 ///< максимальнйы тайтаут MB is ms
//#define MODBUS_MAX_TIMEOUT 500 ///< максимальнйы тайтаут MB is ms
#define RS_UART_Init MX_USART1_UART_Init
@@ -38,8 +38,12 @@
#define RS_TIM_DeInit HAL_TIM_Base_MspDeInit
#define rs_huart huart1
#define rs_htim htim2
/**
* @brief Поменять комманды 0x03 и 0x04 местами (для LabView терминалки от двигателей)
* @details Терминалка от двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS
* Поэтому чтобы считывать Input Regs - надо поменять их местами.
*/
#define MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
/////////////////////////////////////////////////////////////////////
/////////////////////////---CALC DEFINES---//////////////////////////

View File

@@ -126,7 +126,6 @@ void MODBUS_FirstInit(void)
#endif
// set up modbus: MB_RX_Size_NotConst and Timeout enable
hmodbus1.ID = MODBUS_DEVICE_ID;
hmodbus1.sRS_Timeout = MODBUS_MAX_TIMEOUT;
hmodbus1.sRS_Mode = SLAVE_ALWAYS_WAIT;
hmodbus1.sRS_RX_Size_Mode = RS_RX_Size_NotConst;
@@ -879,54 +878,18 @@ RS_StatusTypeDef RS_Define_Size_of_RX_Message(RS_HandleTypeDef *hmodbus, uint32_
//-------------------------------------------------------------------
//-------------------------HANDLERS FUNCTION-------------------------
#if (MODBUS_UART_NUMB == 1) // choose handler for UART
void USART1_IRQHandler(void)
#elif (MODBUS_UART_NUMB == 2)
void USART2_IRQHandler(void)
#elif (MODBUS_UART_NUMB == 3)
void USART3_IRQHandler(void)
#elif (MODBUS_UART_NUMB == 4)
void USART4_IRQHandler(void)
#elif (MODBUS_UART_NUMB == 5)
void USART5_IRQHandler(void)
#elif (MODBUS_UART_NUMB == 6)
void USART6_IRQHandler(void)
#endif
{
Trace_MB_UART_Enter();
RS_UART_Handler(&hmodbus1);
Trace_MB_UART_Exit();
}
#if (MODBUS_TIM_NUMB == 1) || (MODBUS_TIM_NUMB == 10) // choose handler for TIM
void TIM1_UP_TIM10_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 2)
void TIM2_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 3)
void TIM3_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 4)
void TIM4_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 5)
void TIM5_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 6)
void TIM6_DAC_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 7)
void TIM7_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 8) || (MODBUS_TIM_NUMB == 13)
void TIM8_UP_TIM13_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 1) || (MODBUS_TIM_NUMB == 9)
void TIM1_BRK_TIM9_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 1) || (MODBUS_TIM_NUMB == 11)
void TIM1_TRG_COM_TIM11_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 8) || (MODBUS_TIM_NUMB == 12)
void TIM8_BRK_TIM12_IRQHandler(void)
#elif (MODBUS_TIM_NUMB == 8) || (MODBUS_TIM_NUMB == 14)
void TIM8_TRG_COM_TIM14_IRQHandler(void)
#endif
{
Trace_MB_TIM_Enter();
RS_TIM_Handler(&hmodbus1);
Trace_MB_TIM_Exit();
}
//void USART1_IRQHandler(void)
//{
// Trace_MB_UART_Enter();
// RS_UART_Handler(&hmodbus1);
// Trace_MB_UART_Exit();
//}
//void TIM1_UP_TIM10_IRQHandler(void)
//{
// Trace_MB_TIM_Enter();
// RS_TIM_Handler(&hmodbus1);
// Trace_MB_TIM_Exit();
//}
//-------------------------HANDLERS FUNCTION-------------------------
//-------------------------------------------------------------------

View File

@@ -72,7 +72,7 @@ typedef enum //MB_FunctonTypeDef
// reading
MB_R_COILS = 0x01, ///< Чтение битовых ячеек
MB_R_DISC_IN = 0x02, ///< Чтение дискретных входов
#ifndef TESTER_MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
#ifndef MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
MB_R_HOLD_REGS = 0x03, ///< Чтение входных регистров
MB_R_IN_REGS = 0x04, ///< Чтение регистров хранения
#else

View File

@@ -63,7 +63,7 @@ typedef struct //MB_DataInRegsTypeDef
// DEFINES FOR INPUT REGISTERS ARRAYS
#define R_MEASURED_ADDR 0
#define R_MEASURED_QNT 1
#define R_MEASURED_QNT 2
// DEFINES FOR HOLDING REGISTERS ARRAYS
#define R_SETTINGS_ADDR 0
@@ -100,22 +100,28 @@ typedef struct //MB_DataInRegsTypeDef
*/
typedef struct //MB_DataCoilsTypeDef
{
/* reg 1 */
/* reg 1 - control */
unsigned ForwardTest:1;
unsigned ReverseTest:1;
unsigned StartTest:1;
unsigned reserved:13;
unsigned PhaseForwardHiTest:1;
unsigned PhaseForwardLoTest:1;
unsigned PhaseReverseHiTest:1;
unsigned PhaseReverseLoTest:1;
/* reg 2 */
unsigned reserved:9;
/* reg 2 - settings */
unsigned msTimeBeforeTest_enable:1;
unsigned msTimeDeadtime_enable:1;
unsigned msTimeBeforePeak_enable:1;
unsigned msTimeBeforeDisconnect_enable:1;
unsigned reserved2:11;
}MB_DataCoilsTypeDef;
// DEFINES FOR COIL ARRAYS
#define C_CONTROL_ADDR 0
#define C_CONTROL_QNT 3
#define C_CONTROL_QNT 7
#define C_SETTINGS_ADDR 16
#define C_SETTINGS_QNT 3