#3 Настройки перенесены в модбас, все подтягивается оттуда
- В modbus коилах задается режим и выставляется флаг запустить тест. Запустить тест также можно по кнопке - Добавлена функция для выставления дефолтных настроек TESTER_Set_Default_Settings: она выставляет все настройки в modbus по дефолту и еще некоторые не modbus настройки (порты и пины ключей, кнопок, светодиодов) - Добавлена функция для обновления настроек тестера TESTER_UpdateSettings: она подтягивает все настроки из modbus в соответствующие структуры тестера. Вызывается каждый раз перед тестированием
This commit is contained in:
parent
a5704ae4be
commit
24b6295935
@ -262,13 +262,8 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
|
||||
|
||||
if(RegisterType == RegisterType_Holding)
|
||||
{
|
||||
// Устаки для напряжений ТЭ: предупреждения аварии
|
||||
if(MB_Check_Address_For_Arr(Addr, Qnt, R_SETPOINTS_ADDR, R_SETPOINTS_QNT) == NO_ERRORS)
|
||||
{
|
||||
*pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr); // начало регистров хранения/входных
|
||||
}
|
||||
// Устаки для настройки МЗКТЭ: запрет опроса и настройки общения (MODBUS/UART)
|
||||
else if(MB_Check_Address_For_Arr(Addr, Qnt, R_SETTINGS_ADDR, R_SETTINGS_QNT) == NO_ERRORS)
|
||||
// Устаки для тестера
|
||||
if(MB_Check_Address_For_Arr(Addr, Qnt, R_SETTINGS_ADDR, R_SETTINGS_QNT) == NO_ERRORS)
|
||||
{
|
||||
*pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr); // начало регистров хранения/входных
|
||||
}
|
||||
@ -280,13 +275,8 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
|
||||
}
|
||||
else if(RegisterType == RegisterType_Input)
|
||||
{
|
||||
// Напряжения на ТЭ
|
||||
if(MB_Check_Address_For_Arr(Addr, Qnt, R_TE_VOLTAGE_ADDR, R_TE_VOLTAGE_QNT) == NO_ERRORS)
|
||||
{
|
||||
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // начало регистров хранения/входных
|
||||
}
|
||||
// Статус регистр МЗКТЭ
|
||||
else if(MB_Check_Address_For_Arr(Addr, Qnt, R_STATUS_REG_ADDR, R_STATUS_REG_QNT) == NO_ERRORS)
|
||||
// Измеренные параметры диода
|
||||
if(MB_Check_Address_For_Arr(Addr, Qnt, R_MEASURED_ADDR, R_MEASURED_QNT) == NO_ERRORS)
|
||||
{
|
||||
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // начало регистров хранения/входных
|
||||
}
|
||||
@ -323,10 +313,14 @@ MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint
|
||||
return ILLEGAL_DATA_VALUE; // return exception code
|
||||
}
|
||||
|
||||
// peripheral control coils
|
||||
if(MB_Check_Address_For_Arr(Addr, Qnt, C_TE_EXCLUDE_ADDR, C_TE_EXCLUDE_QNT) == NO_ERRORS)
|
||||
// tester settings coils
|
||||
if(MB_Check_Address_For_Arr(Addr, Qnt, C_SETTINGS_ADDR, C_SETTINGS_QNT) == NO_ERRORS)
|
||||
{
|
||||
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr-C_TE_EXCLUDE_ADDR);
|
||||
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr);
|
||||
}// tester control coils
|
||||
else if(MB_Check_Address_For_Arr(Addr, Qnt, C_CONTROL_ADDR, C_CONTROL_QNT) == NO_ERRORS)
|
||||
{
|
||||
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr);
|
||||
}
|
||||
// if address doesnt match any array - return illegal data address response
|
||||
else
|
||||
|
@ -37,7 +37,8 @@
|
||||
*/
|
||||
typedef struct //MB_DataInRegsTypeDef
|
||||
{
|
||||
unsigned DUMMY;
|
||||
uint16_t ForwardVoltage;
|
||||
uint16_t PeakVoltage;
|
||||
}MB_DataInRegsTypeDef;
|
||||
|
||||
|
||||
@ -46,23 +47,26 @@ typedef struct //MB_DataInRegsTypeDef
|
||||
*/
|
||||
typedef struct //MB_DataInRegsTypeDef
|
||||
{
|
||||
unsigned DUMMY;
|
||||
uint16_t TimeForPositiveDC;
|
||||
uint16_t TimeBeforeTest;
|
||||
uint16_t TimeBeforePeak;
|
||||
uint16_t TimeBeforeDisconnect;
|
||||
|
||||
uint16_t Adc_PulseWidth;
|
||||
uint16_t Adc_PulseSign;
|
||||
uint16_t Adc_CalibrValue;
|
||||
uint16_t Adc_ZeroValue;
|
||||
uint16_t Adc_U_Calibr;
|
||||
}MB_DataHoldRegsTypeDef;
|
||||
|
||||
|
||||
// DEFINES FOR INPUT REGISTERS ARRAYS
|
||||
#define R_TE_VOLTAGE_ADDR 0
|
||||
#define R_TE_VOLTAGE_QNT 85
|
||||
|
||||
#define R_STATUS_REG_ADDR 85
|
||||
#define R_STATUS_REG_QNT 1
|
||||
#define R_MEASURED_ADDR 0
|
||||
#define R_MEASURED_QNT 1
|
||||
|
||||
// DEFINES FOR HOLDING REGISTERS ARRAYS
|
||||
#define R_SETPOINTS_ADDR 0
|
||||
#define R_SETPOINTS_QNT 170
|
||||
|
||||
#define R_SETTINGS_ADDR 170
|
||||
#define R_SETTINGS_QNT 5
|
||||
#define R_SETTINGS_ADDR 0
|
||||
#define R_SETTINGS_QNT 4
|
||||
|
||||
|
||||
// DEFINES FOR REGISTERS LOCAL ADDRESSES
|
||||
@ -95,12 +99,24 @@ typedef struct //MB_DataInRegsTypeDef
|
||||
*/
|
||||
typedef struct //MB_DataCoilsTypeDef
|
||||
{
|
||||
unsigned DUMMY;
|
||||
/* reg 1 */
|
||||
unsigned PositiveTest:1;
|
||||
unsigned NegativeTest:1;
|
||||
unsigned StartTest:1;
|
||||
unsigned reserved:13;
|
||||
|
||||
/* reg 2 */
|
||||
unsigned msTimeBeforeTest_enable:1;
|
||||
unsigned msTimeBeforePeak_enable:1;
|
||||
unsigned msTimeBeforeDisconnect_enable:1;
|
||||
}MB_DataCoilsTypeDef;
|
||||
|
||||
// DEFINES FOR COIL ARRAYS
|
||||
#define C_TE_EXCLUDE_ADDR 0
|
||||
#define C_TE_EXCLUDE_QNT 85
|
||||
#define C_CONTROL_ADDR 0
|
||||
#define C_CONTROL_QNT 3
|
||||
|
||||
#define C_SETTINGS_ADDR 16
|
||||
#define C_SETTINGS_QNT 3
|
||||
|
||||
/** MODBUS_DATA_COILS_DEFINES
|
||||
* @}
|
||||
|
@ -186,7 +186,7 @@ RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_H
|
||||
UART_Base_Init(suart);
|
||||
hRS->huart = &suart->huart;
|
||||
#else
|
||||
RS_UART_Init();
|
||||
// RS_UART_Init();
|
||||
hRS->huart = huart;
|
||||
#endif
|
||||
|
||||
@ -206,7 +206,7 @@ RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_H
|
||||
hRS->htim = &stim->htim;
|
||||
}
|
||||
#else
|
||||
RS_TIM_Init();
|
||||
// RS_TIM_Init();
|
||||
hRS->htim = htim;
|
||||
#endif
|
||||
|
||||
@ -250,8 +250,6 @@ HAL_StatusTypeDef RS_ReInit_UART(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huar
|
||||
UART_MspDeInit(&suart->huart);
|
||||
|
||||
RS_RES = UART_Base_Init(suart);
|
||||
|
||||
RS_RES = RS_UART_Init()
|
||||
|
||||
#else
|
||||
// // check is settings are valid
|
||||
|
@ -77,12 +77,17 @@ void TESTER_ADC_StructInit(TESTER_ADCTypeDef *adc)
|
||||
{
|
||||
ClearStruct(*adc);
|
||||
adc->hadc = &hadc1;
|
||||
adc->chAdc.s.pulse_width = TESTER_PULES_EXPETCED_WIDTH;
|
||||
adc->chAdc.s.ADC_calibr = ADC_VALUE_CALIBR;
|
||||
adc->chAdc.s.ADC_zero = ADC_VALUE_ZERO;
|
||||
adc->chAdc.s.U_step = ADC_U_CALIBR/adc->chAdc.s.ADC_calibr;
|
||||
}
|
||||
|
||||
void TESTER_ADC_UpdateSettings(TESTER_ADCTypeDef *adc, MB_DataStructureTypeDef *mbdata)
|
||||
{
|
||||
adc->chAdc.s.ADC_calibr = mbdata->HoldRegs.Adc_CalibrValue;
|
||||
adc->chAdc.s.ADC_zero = mbdata->HoldRegs.Adc_ZeroValue;
|
||||
adc->chAdc.s.expected_pulse_sign = mbdata->HoldRegs.Adc_PulseSign;
|
||||
adc->chAdc.s.pulse_width = mbdata->HoldRegs.Adc_PulseWidth;
|
||||
|
||||
adc->chAdc.s.U_step = (float)mbdata->HoldRegs.Adc_U_Calibr/(adc->chAdc.s.ADC_calibr - adc->chAdc.s.ADC_zero);
|
||||
}
|
||||
|
||||
HAL_StatusTypeDef ADC_DMA_StartRead(TESTER_ADCTypeDef *adc)
|
||||
{
|
||||
@ -235,7 +240,7 @@ HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
||||
uint16_t filter_halfend = ADC_BUFF_SIZE/2;
|
||||
uint16_t filter_end = ADC_BUFF_SIZE;
|
||||
uint8_t run_adc_check = 0;
|
||||
uint8_t expected_dmaBufferHalf = 1;
|
||||
uint8_t expected_dmaBufferHalf = 2;
|
||||
|
||||
/* Обработка АЦП */
|
||||
while(1)
|
||||
@ -273,7 +278,7 @@ HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
||||
|
||||
|
||||
/* Переход на следующие во времени значения каналов АЦП */
|
||||
adc_buff_ind++;
|
||||
// adc_buff_ind++;
|
||||
/* если это первая половина DMA буфера */
|
||||
if(expected_dmaBufferHalf == 1)
|
||||
{
|
||||
@ -298,15 +303,15 @@ HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
||||
printf_adc_processing(": wait for processing complete...");
|
||||
}
|
||||
|
||||
if(adc_buff_ind > filter_end) // Проверка первой половины закончена
|
||||
{
|
||||
// if(adc_buff_ind > filter_end) // Проверка первой половины закончена
|
||||
// {
|
||||
adc_buff_ind = 0; // Выставляем индекс на первую половину
|
||||
run_adc_check = 0; // Сбрасываем флаг проверки каналов
|
||||
expected_dmaBufferHalf = 1; // Устанавливаем ожидание готовности первой половины данных DMA буфера
|
||||
|
||||
printf_adc_processing("\n%d: ADC Processing DMA complete", uwTick);
|
||||
break;
|
||||
}
|
||||
// }
|
||||
}
|
||||
/* если это "никакая" половина DMA буфера */
|
||||
else
|
||||
@ -333,16 +338,16 @@ HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
||||
HAL_StatusTypeDef ADC_ReadContinuous(TESTER_ADCTypeDef *adc, uint32_t buff_size, uint32_t tickstart, uint32_t timeout)
|
||||
{
|
||||
HAL_StatusTypeDef res = HAL_OK;
|
||||
uint16_t val_sum;
|
||||
uint16_t val_sum = 0;
|
||||
if(buff_size == 0)
|
||||
return HAL_ERROR;
|
||||
|
||||
for(int i = 0; i < buff_size; i++)
|
||||
int i = 0;
|
||||
for(i = 0; i < buff_size; i++)
|
||||
{
|
||||
if(HAL_GetTick() - tickstart > timeout)
|
||||
{
|
||||
res = HAL_TIMEOUT;
|
||||
break;
|
||||
return res;
|
||||
}
|
||||
|
||||
HAL_ADC_PollForConversion(adc->hadc, 1);
|
||||
@ -350,7 +355,7 @@ HAL_StatusTypeDef ADC_ReadContinuous(TESTER_ADCTypeDef *adc, uint32_t buff_size,
|
||||
val_sum += adc->chAdc.ADC_Buff[i];
|
||||
}
|
||||
|
||||
adc->chAdc.ADC_Filtered = val_sum/(buff_size);
|
||||
adc->chAdc.ADC_Filtered = val_sum/(i);
|
||||
adc->chAdc.U_Current = adc->chAdc.s.U_step*adc->chAdc.ADC_Filtered;
|
||||
return res;
|
||||
}
|
||||
|
@ -80,6 +80,7 @@ extern uint16_t ADC_DMA_HalfBuff[ADC_DMA_BUFF_SIZE/2];
|
||||
|
||||
void TESTER_ADC_StructInit(TESTER_ADCTypeDef *adc);
|
||||
|
||||
void TESTER_ADC_UpdateSettings(TESTER_ADCTypeDef *adc, MB_DataStructureTypeDef *mbdata);
|
||||
void ADC_DMA_Handler(TESTER_ADCTypeDef *adc);
|
||||
|
||||
void ADC_DMA_ProcessBufferForPeak(TESTER_ADCChannelTypeDef *adc_fc);
|
||||
|
@ -12,46 +12,6 @@
|
||||
#define _TESTER_CONFIG_H_
|
||||
|
||||
|
||||
#define TESTER_PULES_EXPETCED_WIDTH 4 ///< Предполагаемая длительность пика в отчетах ацп
|
||||
|
||||
/**
|
||||
* @addtogroup TESTER_INTERFACE_CONFIG Configs for interface of tester
|
||||
* @ingroup TESTER_CONFIGS
|
||||
* @brief Конфигурации для интерфейса тестера
|
||||
@{
|
||||
*/
|
||||
|
||||
/* Дефайны для светодиодов */
|
||||
/* Состояния включенного и выключенного светодиода */
|
||||
#define LED_ON 0 ///< Состояние включенного светодиода
|
||||
#define LED_OFF 1 ///< Состояние выключенного светодиода
|
||||
|
||||
#define LED1_Port GPIOC ///< Порт светодиода (при перенастройке надо также перенастроить через cube)
|
||||
#define LED1_Pin GPIO_PIN_13 ///< Пин светодиода (при перенастройке надо также перенастроить через cube)
|
||||
|
||||
/* Периоды моргания светодиода */
|
||||
#define LED_POSITIVE_DIODE_PERIOD 250 ///< Моргание для индикации подключенного положительного напряжения
|
||||
#define LED_NEGATIVE_DIODE_PERIOD 25 ///< Моргание для индикации подключенного отрицательного напряжения
|
||||
#define LED_BLINK_AS_ON 5 ///< Моргание незаметное для глаза (светодиод просто включен)
|
||||
|
||||
|
||||
/* Дефайны для кнопки */
|
||||
/* Состояния нажатой и отжатой кнопки */
|
||||
#define SW_ON 1 ///< Состояние нажатой кнопки
|
||||
#define SW_OFF 0 ///< Состояние отжатой кнопки
|
||||
|
||||
/* Пин кнопки при перенастройке надо также перенастроить через cube) */
|
||||
#define SWITCH_START_Port GPIOC ///< Порт кнокпи старта (при перенастройке надо также перенастроить через cube)
|
||||
#define SWITCH_START_Pin GPIO_PIN_14 ///< Пин кнокпи старта (при перенастройке надо также перенастроить через cube)
|
||||
|
||||
/* Задержка для компенсации дребезга (в миллисекундах) */
|
||||
#define SWITCH_ANTI_DREBEZG_DELAY 50 ///< Время которое выжидается для окончания дребезга
|
||||
|
||||
|
||||
|
||||
/** TESTER_INTERFACE_CONFIG
|
||||
* @}
|
||||
*/
|
||||
/**
|
||||
* @addtogroup TESTER_SW_TIMINGS_CONFIG Configs for switching timings
|
||||
* @ingroup TESTER_CONFIGS
|
||||
@ -63,7 +23,7 @@
|
||||
* @brief Задержка (миллисекундная) для положительного напряжения ПО УМОЛЧАНИЮ
|
||||
* @details Пока только миллисекунды, т.к. меньше я пока не реализовал, да и как понимаю не требуется
|
||||
*/
|
||||
#define DEF_MS_TIME_FOR_POSITIVE 1000
|
||||
#define DEF_MS_TIME_FOR_POSITIVE 1500
|
||||
|
||||
/**
|
||||
* @brief Задержка перед началом тестирования ПО УМОЛЧАНИЮ
|
||||
@ -87,13 +47,51 @@
|
||||
* @brief Задержка перед окончанием тестирования (отключение питания) ПО УМОЛЧАНИЮ
|
||||
* @details Задержка миллисекундная или тики for() @ref TIME_BEFORE_DISCONNECT_MS_DELAY
|
||||
*/
|
||||
#define DEF_TIME_BEFORE_DISCONNECT 50
|
||||
#define DEF_TIME_BEFORE_DISCONNECT 200
|
||||
#define DEF_TIME_BEFORE_DISCONNECT_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_DISCONNECT (0 - задержка for(), 1 - миллисекундная)
|
||||
|
||||
/** TESTER_SW_TIMINGS_CONFIG
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup TESTER_INTERFACE_CONFIG Configs for interface of tester
|
||||
* @ingroup TESTER_CONFIGS
|
||||
* @brief Конфигурации для интерфейса тестера
|
||||
@{
|
||||
*/
|
||||
|
||||
/* Дефайны для светодиодов */
|
||||
/* Состояния включенного и выключенного светодиода */
|
||||
#define LED_ON 0 ///< Состояние включенного светодиода
|
||||
#define LED_OFF 1 ///< Состояние выключенного светодиода
|
||||
|
||||
#define LED1_Port GPIOC ///< Порт светодиода (при перенастройке надо также перенастроить через cube)
|
||||
#define LED1_Pin GPIO_PIN_13 ///< Пин светодиода (при перенастройке надо также перенастроить через cube)
|
||||
|
||||
/* Периоды моргания светодиода */
|
||||
#define LED_POSITIVE_DIODE_PERIOD 250 ///< Моргание для индикации подключенного положительного напряжения
|
||||
#define LED_NEGATIVE_DIODE_PERIOD 25 ///< Моргание для индикации подключенного отрицательного напряжения
|
||||
#define LED_BLINK_AS_ON 5 ///< Моргание незаметное для глаза (светодиод просто включен)
|
||||
|
||||
|
||||
/* Дефайны для кнопки */
|
||||
/* Состояния нажатой и отжатой кнопки */
|
||||
#define SW_ON 1 ///< Состояние нажатой кнопки
|
||||
#define SW_OFF 0 ///< Состояние отжатой кнопки
|
||||
|
||||
/* Пин кнопки при перенастройке надо также перенастроить через cube) */
|
||||
#define SWITCH_START_Port GPIOC ///< Порт кнокпи старта (при перенастройке надо также перенастроить через cube)
|
||||
#define SWITCH_START_Pin GPIO_PIN_14 ///< Пин кнокпи старта (при перенастройке надо также перенастроить через cube)
|
||||
|
||||
/* Задержка для компенсации дребезга (в миллисекундах) */
|
||||
#define SWITCH_ANTI_DREBEZG_DELAY 50 ///< Время которое выжидается для окончания дребезга
|
||||
|
||||
/** TESTER_INTERFACE_CONFIG
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup TESTER_POWER_SW_CONFIG Configs for switches for power
|
||||
* @ingroup TESTER_CONFIGS
|
||||
@ -101,7 +99,7 @@
|
||||
@{
|
||||
*/
|
||||
//#define USE_HAL_GPIO_FUNCTIONS ///< Использовать для переключения пинов HAL функции
|
||||
//#define ALL_SW_USE_SAME_PORT ///< Дефайн указывающий что все пины будут иметь один порт (для ускорения переключения)
|
||||
#define ALL_SW_USE_SAME_PORT ///< Дефайн указывающий что все пины будут иметь один порт (для ускорения переключения)
|
||||
|
||||
/* Состояния ключей для подключения и откючения питания */
|
||||
#define POWER_CONNECT 1 ///< Питание подключено в данном состоянии пина
|
||||
@ -140,6 +138,8 @@
|
||||
|
||||
#define ADC_READ_TIMEOUT_MS 20 ///< Таймаут на ожидание разрядки конденсатора
|
||||
|
||||
#define TESTER_ADC_PULES_EXPETCED_WIDTH 4 ///< Предполагаемая длительность пика в отчетах ацп
|
||||
|
||||
/** TESTER_ADC_CONFIG
|
||||
* @}
|
||||
*/
|
||||
|
@ -11,31 +11,7 @@ void TESTER_HandleInit(TESTER_TestHandleTypeDef *htest, TESTER_LEDsTypeDef *leds
|
||||
htest->adc = &tester_adc;
|
||||
htest->leds = leds;
|
||||
TESTER_ADC_StructInit(htest->adc);
|
||||
|
||||
/* Настройка пинов для подключения отрицательного источника */
|
||||
htest->DCNegSw.SW_Port = SWITCH_DC_NEGATIVE_Port;
|
||||
htest->DCNegSw.SwGND_Pin = SWITCH_DC_NEGATIVE_GND_Pin;
|
||||
htest->DCNegSw.SwVDD_Pin = SWITCH_DC_NEGATIVE_VDD_Pin;
|
||||
|
||||
/* Настройка пинов для подключения положительного источника */
|
||||
htest->DCPosSw.SW_Port = SWITCH_DC_POSITIVE_Port;
|
||||
htest->DCPosSw.SwGND_Pin = SWITCH_DC_POSITIVE_GND_Pin;
|
||||
htest->DCPosSw.SwVDD_Pin = SWITCH_DC_POSITIVE_VDD_Pin;
|
||||
|
||||
|
||||
/* Настройка таймингов по умолчанию для тестирования */
|
||||
htest->SwTimings.msticks_for_positive_dc = DEF_MS_TIME_FOR_POSITIVE;
|
||||
|
||||
htest->SwTimings.ticks_before_disconnect.ticks = DEF_TIME_BEFORE_DISCONNECT;
|
||||
htest->SwTimings.ticks_before_disconnect.msdelay = DEF_TIME_BEFORE_DISCONNECT_MS_DELAY;
|
||||
|
||||
htest->SwTimings.ticks_before_go_to_peak.ticks = DEF_TIME_BEFORE_PEAK;
|
||||
htest->SwTimings.ticks_before_go_to_peak.msdelay = DEF_TIME_BEFORE_PEAK_MS_DELAY;
|
||||
|
||||
htest->SwTimings.ticks_before_test.ticks = DEF_TIME_BEFORE_TEST;
|
||||
htest->SwTimings.ticks_before_test.msdelay = DEF_TIME_BEFORE_TEST_MS_DELAY;
|
||||
|
||||
|
||||
|
||||
htest->continuous_buff_size = 20;
|
||||
}
|
||||
|
||||
@ -75,6 +51,8 @@ void TESTER_TestDiode_PositivePower(TESTER_TestHandleTypeDef *htest)
|
||||
HAL_ADC_Stop(htest->adc->hadc);
|
||||
|
||||
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
||||
|
||||
htest->DiodeForwardVolt = htest->adc->chAdc.U_Current;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -104,7 +82,9 @@ void TESTER_TestDiode_NegativePower(TESTER_TestHandleTypeDef *htest)
|
||||
/* Обработка DMA */
|
||||
ADC_DMA_ReadForPeak(htest->adc, ADC_READ_TIMEOUT_MS);
|
||||
|
||||
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
||||
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
||||
|
||||
htest->DiodePeakVolt = htest->adc->chAdc.U_Current;
|
||||
}
|
||||
|
||||
|
||||
@ -122,6 +102,7 @@ void TESTER_TestDiode_PosNegPower(TESTER_TestHandleTypeDef *htest)
|
||||
|
||||
/* Подкючение положительного питания к диоду */
|
||||
msDelay(htest->SwTimings.msticks_for_positive_dc);
|
||||
htest->DiodeForwardVolt = htest->adc->chAdc.U_Current;
|
||||
TESTER_LED_TestingDiode_Negative(&htest->leds->LED1);
|
||||
|
||||
/* Включение АЦП */
|
||||
@ -142,7 +123,9 @@ void TESTER_TestDiode_PosNegPower(TESTER_TestHandleTypeDef *htest)
|
||||
/* Обработка DMA */
|
||||
ADC_DMA_ReadForPeak(htest->adc, ADC_READ_TIMEOUT_MS);
|
||||
|
||||
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
||||
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
||||
|
||||
htest->DiodePeakVolt = htest->adc->chAdc.U_Current;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -206,6 +189,7 @@ void TESTER_Reconnect_Power(TESTER_PowerSwitchTypeDef *DCPosSw, TESTER_PowerSwit
|
||||
#endif //ALL_SW_USE_SAME_PORT
|
||||
#endif //USE_HAL_GPIO_FUNCTIONS
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Формирование задержки (в тиках или миллисекундная)
|
||||
*/
|
||||
|
@ -60,7 +60,8 @@ typedef struct
|
||||
|
||||
uint32_t continuous_buff_size;
|
||||
|
||||
float DiodeVolt;
|
||||
float DiodeForwardVolt;
|
||||
float DiodePeakVolt;
|
||||
|
||||
TESTER_LEDsTypeDef *leds;
|
||||
}TESTER_TestHandleTypeDef;
|
||||
|
@ -6,14 +6,6 @@
|
||||
*/
|
||||
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds)
|
||||
{
|
||||
swstart->Sw_Port = SWITCH_START_Port;
|
||||
swstart->Sw_Pin = SWITCH_START_Pin;
|
||||
swstart->Sw_FilterDelay = SWITCH_ANTI_DREBEZG_DELAY;
|
||||
|
||||
|
||||
leds->LED1.LED_Port = LED1_Port;
|
||||
leds->LED1.LED_Pin = LED1_Pin;
|
||||
leds->LED1.period = LED_BLINK_AS_ON;
|
||||
}
|
||||
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
#define _TESTER_INTERFACE_FUNC_H_
|
||||
|
||||
#include "mylibs_include.h"
|
||||
#include "rs_message.h"
|
||||
|
||||
|
||||
typedef struct
|
||||
|
@ -18,8 +18,10 @@ void TESTER_Init(TESTER_ProjectTypeDef *tester)
|
||||
tester->func.disable_reset_call = 0;
|
||||
tester->htest = &hTestDiode;
|
||||
TESTER_HandleInit(tester->htest, &tester->leds);
|
||||
tester->f.flag_init_done = 1;
|
||||
|
||||
|
||||
tester->hmodbus = &hmodbus1;
|
||||
tester->mbdata = &MB_DATA;
|
||||
MODBUS_FirstInit();
|
||||
}
|
||||
|
||||
|
||||
@ -28,7 +30,12 @@ void TESTER_Init(TESTER_ProjectTypeDef *tester)
|
||||
*/
|
||||
void TESTER_pre_while(TESTER_ProjectTypeDef *tester)
|
||||
{
|
||||
TESTER_Set_Default_Settings(tester);
|
||||
TESTER_UpdateSettings(tester->htest, tester->mbdata);
|
||||
|
||||
RS_Receive_IT(tester->hmodbus, &MODBUS_MSG);
|
||||
tester->leds.LED1.period = LED_BLINK_AS_ON;
|
||||
tester->f.flag_init_done = 1;
|
||||
}
|
||||
|
||||
|
||||
@ -44,27 +51,46 @@ void TESTER_main_while(TESTER_ProjectTypeDef *tester)
|
||||
/* ТЕСТ В ОБРАТНОМ ВКЛЮЧЕНИИ */
|
||||
if(tester->func.test_diode_neg)
|
||||
{
|
||||
tester->f.flag_test_active = 1;
|
||||
TESTER_TestDiode_NegativePower(tester->htest);
|
||||
|
||||
/* Запись данных в modbus */
|
||||
tester->mbdata->InRegs.PeakVoltage = tester->htest->DiodePeakVolt*1000;
|
||||
|
||||
if(tester->func.disable_reset_call == 0)
|
||||
tester->func.test_diode_neg = 0;
|
||||
|
||||
tester->f.flag_test_active = 0;
|
||||
}
|
||||
|
||||
/* ТЕСТ В ПРЯМОМ ВКЛЮЧЕНИИ */
|
||||
if(tester->func.test_diode_pos)
|
||||
{
|
||||
tester->f.flag_test_active = 1;
|
||||
TESTER_TestDiode_PositivePower(tester->htest);
|
||||
|
||||
/* Запись данных в modbus */
|
||||
tester->mbdata->InRegs.ForwardVoltage = tester->htest->DiodeForwardVolt*1000;
|
||||
|
||||
if(tester->func.disable_reset_call == 0)
|
||||
tester->func.test_diode_pos = 0;
|
||||
|
||||
tester->f.flag_test_active = 0;
|
||||
}
|
||||
/* ТЕСТ ПЕРЕХОДА ИЗ ПРЯМОГО В ОБРАТНОЕ ВКЛЮЧЕНИЯ*/
|
||||
if(tester->func.test_diode_posneg)
|
||||
{
|
||||
tester->f.flag_test_active = 1;
|
||||
TESTER_TestDiode_PosNegPower(tester->htest);
|
||||
|
||||
/* Запись данных в modbus */
|
||||
tester->mbdata->InRegs.PeakVoltage = tester->htest->DiodePeakVolt*1000;
|
||||
tester->mbdata->InRegs.ForwardVoltage = tester->htest->DiodeForwardVolt*1000;
|
||||
|
||||
if(tester->func.disable_reset_call == 0)
|
||||
tester->func.test_diode_posneg = 0;
|
||||
|
||||
tester->f.flag_test_active = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,16 +106,108 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
|
||||
|
||||
|
||||
|
||||
if(TESTER_ReadSwichStart(&tester->SwStart))
|
||||
|
||||
/* считывание режима тестера с модбас */
|
||||
tester->mode = *((TESTER_TestModeTypeDef *)&tester->mbdata->Coils);
|
||||
|
||||
/* если кнопка нажата или пришла соответствующая комманда модбас */
|
||||
if(TESTER_ReadSwichStart(&tester->SwStart) || tester->mbdata->Coils.StartTest)
|
||||
{
|
||||
tester->func.test_diode_posneg = 1;
|
||||
/* Обновление настроек тестера */
|
||||
TESTER_UpdateSettings(tester->htest, tester->mbdata);
|
||||
switch(tester->mode)
|
||||
{
|
||||
case TEST_POSITIVE:
|
||||
tester->func.test_diode_pos = 1;
|
||||
break;
|
||||
|
||||
case TEST_NEGATIVE:
|
||||
tester->func.test_diode_neg = 1;
|
||||
break;
|
||||
|
||||
case TEST_POSNEG:
|
||||
tester->func.test_diode_posneg = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TESTER_LED_Blink(&tester->leds.LED1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Обновление настроек тестера
|
||||
*/
|
||||
void TESTER_UpdateSettings(TESTER_TestHandleTypeDef *htest, MB_DataStructureTypeDef *mbdata)
|
||||
{
|
||||
htest->SwTimings.ticks_before_disconnect.ticks = mbdata->HoldRegs.TimeBeforeDisconnect;
|
||||
htest->SwTimings.ticks_before_go_to_peak.ticks = mbdata->HoldRegs.TimeBeforePeak;
|
||||
htest->SwTimings.ticks_before_test.ticks = mbdata->HoldRegs.TimeBeforeTest;
|
||||
htest->SwTimings.msticks_for_positive_dc = mbdata->HoldRegs.TimeForPositiveDC;
|
||||
|
||||
htest->SwTimings.ticks_before_disconnect.msdelay = mbdata->Coils.msTimeBeforeDisconnect_enable;
|
||||
htest->SwTimings.ticks_before_go_to_peak.msdelay = mbdata->Coils.msTimeBeforePeak_enable;
|
||||
htest->SwTimings.ticks_before_test.msdelay = mbdata->Coils.msTimeBeforeTest_enable;
|
||||
|
||||
TESTER_ADC_UpdateSettings(htest->adc, mbdata);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Инициализация тестера по дефолтным настрйокам в tester_config.h
|
||||
*/
|
||||
void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester)
|
||||
{
|
||||
tester->mbdata->Coils.PositiveTest = 1;
|
||||
tester->mbdata->Coils.NegativeTest = 1;
|
||||
|
||||
/* Настройка пинов для подключения отрицательного источника */
|
||||
tester->htest->DCNegSw.SW_Port = SWITCH_DC_NEGATIVE_Port;
|
||||
tester->htest->DCNegSw.SwGND_Pin = SWITCH_DC_NEGATIVE_GND_Pin;
|
||||
tester->htest->DCNegSw.SwVDD_Pin = SWITCH_DC_NEGATIVE_VDD_Pin;
|
||||
|
||||
/* Настройка пинов для подключения положительного источника */
|
||||
tester->htest->DCPosSw.SW_Port = SWITCH_DC_POSITIVE_Port;
|
||||
tester->htest->DCPosSw.SwGND_Pin = SWITCH_DC_POSITIVE_GND_Pin;
|
||||
tester->htest->DCPosSw.SwVDD_Pin = SWITCH_DC_POSITIVE_VDD_Pin;
|
||||
|
||||
|
||||
/* Настройка пинов для кнопки старта */
|
||||
tester->SwStart.Sw_Port = SWITCH_START_Port;
|
||||
tester->SwStart.Sw_Pin = SWITCH_START_Pin;
|
||||
tester->SwStart.Sw_FilterDelay = SWITCH_ANTI_DREBEZG_DELAY;
|
||||
|
||||
/* Настройка пинов для светодиода*/
|
||||
tester->leds.LED1.LED_Port = LED1_Port;
|
||||
tester->leds.LED1.LED_Pin = LED1_Pin;
|
||||
tester->leds.LED1.period = LED_BLINK_AS_ON;
|
||||
|
||||
|
||||
/* Настройка таймингов по умолчанию для тестирования */
|
||||
tester->mbdata->HoldRegs.TimeForPositiveDC = DEF_MS_TIME_FOR_POSITIVE;
|
||||
|
||||
tester->mbdata->HoldRegs.TimeBeforeDisconnect = DEF_TIME_BEFORE_DISCONNECT;
|
||||
tester->mbdata->Coils.msTimeBeforeDisconnect_enable = DEF_TIME_BEFORE_DISCONNECT_MS_DELAY;
|
||||
|
||||
tester->mbdata->HoldRegs.TimeBeforePeak = DEF_TIME_BEFORE_PEAK;
|
||||
tester->mbdata->Coils.msTimeBeforePeak_enable = DEF_TIME_BEFORE_PEAK_MS_DELAY;
|
||||
|
||||
tester->mbdata->HoldRegs.TimeBeforeTest = DEF_TIME_BEFORE_TEST;
|
||||
tester->mbdata->Coils.msTimeBeforeTest_enable = DEF_TIME_BEFORE_TEST_MS_DELAY;
|
||||
|
||||
|
||||
/* Настройка АЦП */
|
||||
tester->mbdata->HoldRegs.Adc_PulseWidth = TESTER_ADC_PULES_EXPETCED_WIDTH;
|
||||
tester->mbdata->HoldRegs.Adc_CalibrValue = ADC_VALUE_CALIBR;
|
||||
tester->mbdata->HoldRegs.Adc_ZeroValue = ADC_VALUE_ZERO;
|
||||
tester->mbdata->HoldRegs.Adc_U_Calibr = ADC_U_CALIBR;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Задеркжка главного цикла
|
||||
*/
|
||||
|
@ -32,8 +32,18 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
unsigned flag_init_done:1;
|
||||
unsigned flag_test_active:1;
|
||||
}TESTER_FlagsTypeDef;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
TEST_DISABLE = 0,
|
||||
TEST_POSITIVE = 1,
|
||||
TEST_NEGATIVE = 2,
|
||||
TEST_POSNEG = 3
|
||||
}TESTER_TestModeTypeDef;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Структура проекта тестер
|
||||
*/
|
||||
@ -41,8 +51,14 @@ typedef struct
|
||||
{
|
||||
function_calls func; ///< вызов разных функций
|
||||
|
||||
TESTER_TestModeTypeDef mode; ///< режим тестера
|
||||
|
||||
TESTER_TestHandleTypeDef *htest; ///< дескриптор тестера
|
||||
|
||||
RS_HandleTypeDef *hmodbus;
|
||||
MB_DataStructureTypeDef *mbdata;
|
||||
|
||||
|
||||
TESTER_SwitchStartTypeDef SwStart; ///< структура кнопки старта
|
||||
TESTER_LEDsTypeDef leds; ///< структура светодиодов
|
||||
|
||||
@ -64,6 +80,10 @@ void TESTER_pre_while(TESTER_ProjectTypeDef *tester);
|
||||
void TESTER_main_while(TESTER_ProjectTypeDef *tester);
|
||||
/* Функция работы интерфейса */
|
||||
void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester);
|
||||
/* Обновление настроек тестера */
|
||||
void TESTER_UpdateSettings(TESTER_TestHandleTypeDef *htest, MB_DataStructureTypeDef *mbdata);
|
||||
/* Инициализация тестера по дефолтным настрйокам в tester_config.h */
|
||||
void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester);
|
||||
/*Задеркжка главного цикла */
|
||||
void TESTER_main_delay(TESTER_ProjectTypeDef *tester);
|
||||
#endif //_TESTER_MAIN_H_
|
||||
|
@ -182,6 +182,11 @@
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>timeout,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>4</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>val_sum,0x0A</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow2>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
|
@ -158,8 +158,8 @@ RCC.VCOOutput2Freq_Value=8000000
|
||||
SH.ADCx_IN0.0=ADC1_IN0,IN0
|
||||
SH.ADCx_IN0.ConfNb=1
|
||||
TIM3.IPParameters=Period,Prescaler,TIM_MasterOutputTrigger
|
||||
TIM3.Period=8999
|
||||
TIM3.Prescaler=0
|
||||
TIM3.Period=10000
|
||||
TIM3.Prescaler=72-1
|
||||
TIM3.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
||||
USART1.IPParameters=VirtualMode
|
||||
USART1.VirtualMode=VM_ASYNC
|
||||
|
Loading…
Reference in New Issue
Block a user