283 lines
16 KiB
C
283 lines
16 KiB
C
/**
|
||
******************************************************************************
|
||
* @file upp_defs.h
|
||
* @brief Общие дефайны УПП
|
||
******************************************************************************
|
||
@addtogroup UPP_DEFS UPP defines
|
||
@ingroup UPP_MAIN
|
||
@brief Общие дефайны для всего проекта УПП
|
||
@{
|
||
******************************************************************************
|
||
* @details
|
||
******************************************************************************/
|
||
#ifndef _UPP_DEFS_H_
|
||
#define _UPP_DEFS_H_
|
||
#include "upp_config.h"
|
||
|
||
|
||
/**
|
||
* @addtogroup UPP_HIGHLEVEL Defines for high-level
|
||
* @ingroup UPP_DEFS
|
||
* @brief Дефайны УПП которые определяют коды ошибок и параметры для общения с верхним уровнем
|
||
* @{
|
||
*/
|
||
|
||
|
||
/**
|
||
* @brief Список аварий УПП
|
||
*/
|
||
typedef enum {
|
||
UPP_Init = 0, ///< УПП не инициализирован
|
||
UPP_Ready = 1, ///< УПП в готовности
|
||
UPP_Work = 2, ///< УПП в работе, управляет тиристорами
|
||
UPP_Error = 3, ///< УПП в аварии
|
||
// WM_Done = 3, ///< УПП закончил свою работу
|
||
} UPP_WorkModeType_t;
|
||
|
||
/**
|
||
* @brief Список аварий УПП
|
||
*/
|
||
typedef enum {
|
||
Err_None = 0, ///< Неисправность отсутствует
|
||
|
||
/* Програмные ошибки */
|
||
Err_Internal_1 = 1, ///< Внутренняя неисправность УПП 1
|
||
Err_Internal_2 = 2, ///< Внутренняя неисправность УПП 2
|
||
Err_Internal_3 = 3, ///< Внутренняя неисправность УПП 3
|
||
Err_Internal_4 = 4, ///< Внутренняя неисправность УПП 4
|
||
Err_Internal_5 = 5, ///< Внутренняя неисправность УПП 5
|
||
Err_Internal_6 = 6, ///< Внутренняя неисправность УПП 6
|
||
|
||
/* Ошибки по питанию */
|
||
Err_Power_Digit_5V = 7, ///< Неисправность цифрового источника питания (5 В)
|
||
Err_Power_24V = 8, ///< Неисправность источника питания 24 В
|
||
Err_Power_Analog_5V = 9, ///< Неисправность аналогового источника питания микроконтроллера (± 5 В)
|
||
Err_Power_SCI_5V = 10, ///< Неисправность источника питания последовательных интерфейсов микроконтроллера (5 В)
|
||
Err_Power_DIO_24V = 11, ///< Неисправность источника питания дискретных входов/выходов (24 В)
|
||
|
||
/* Ошибки по допустимым пределам Наряжений/Токов/Температуры */
|
||
Err_OverCurrent = 12, ///< Ток выше допустимого (см. Imax и TiMax в @ref UPP_PUI_Params_t)
|
||
Err_OverVoltage = 13, ///< Напряжение сети выше допустимого (см. Umах в @ref UPP_PUI_Params_t)
|
||
Err_OverTemperature = 14, ///< Температура выше допустимой (плюс 85 °C)
|
||
Err_UnderVoltage = 15, ///< Напряжение сети ниже допустимого (см. Umin в @ref UPP_PUI_Params_t)
|
||
Err_OverFrequency = 22, ///< Частота сети выше допустимой
|
||
Err_UnderFrequency = 23, ///< Частота сети ниже допустимой
|
||
|
||
/* Ошибки по обрывам фаз */
|
||
Err_LossPhaseAll = 16, ///< Обрыв трёх фаз (см. Imin в @ref UPP_PUI_Params_t)
|
||
Err_LossPhaseA = 17, ///< Обрыв фазы A (см. Imin в @ref UPP_PUI_Params_t)
|
||
Err_LossPhaseB = 18, ///< Обрыв фазы B (см. Imin в @ref UPP_PUI_Params_t)
|
||
Err_LossPhaseC = 19, ///< Обрыв фазы C (см. Imin в @ref UPP_PUI_Params_t)
|
||
|
||
/* Другие ошибки */
|
||
Err_LongStart = 20, ///< Затянутый пуск (ток не спадает за установленное время) (см. Tdelay в @ref UPP_PUI_Params_t)
|
||
Err_Interlace = 21, ///< Неправильный порядок чередования фаз (см. Interlace в @ref UPP_PUI_Params_t)
|
||
} UPP_ErrorType_t;
|
||
|
||
/**
|
||
* @brief Структура аварий УПП для ПУИ
|
||
*/
|
||
typedef struct
|
||
{
|
||
/* Програмные ошибки */
|
||
unsigned Internal_1:1; ///< Ошибка 1: Внутренняя неисправность УПП 1
|
||
unsigned Internal_2:1; ///< Ошибка 2: Внутренняя неисправность УПП 2
|
||
unsigned Internal_3:1; ///< Ошибка 3: Внутренняя неисправность УПП 3
|
||
unsigned Internal_4:1; ///< Ошибка 4: Внутренняя неисправность УПП 4
|
||
unsigned Internal_5:1; ///< Ошибка 5: Внутренняя неисправность УПП 5
|
||
unsigned Internal_6:1; ///< Ошибка 6: Внутренняя неисправность УПП 6
|
||
|
||
/* Ошибки по питанию */
|
||
unsigned Power_Digit_5V:1; ///< Ошибка 7: Неисправность цифрового источника питания (5 В)
|
||
unsigned Power_24V:1; ///< Ошибка 8: Неисправность источника питания 24 В
|
||
unsigned Power_Analog_5V:1; ///< Ошибка 9: Неисправность аналогового источника питания микроконтроллера (± 5 В)
|
||
unsigned Power_SCI_5V:1; ///< Ошибка 10: Неисправность источника питания последовательных интерфейсов микроконтроллера (5 В)
|
||
unsigned Power_DIO_24V:1; ///< Ошибка 11: Неисправность источника питания дискретных входов/выходов (24 В)
|
||
|
||
/* Ошибки по допустимым пределам Наряжений/Токов/Температуры */
|
||
unsigned OverCurrent:1; ///< Ошибка 12: Ток выше допустимого (см. Imax и TiMax в @ref UPP_PUI_Params_t)
|
||
unsigned OverVoltage:1; ///< Ошибка 13: Напряжение сети выше допустимого (см. Umах в @ref UPP_PUI_Params_t)
|
||
unsigned OverTemperature:1; ///< Ошибка 14: Температура выше допустимой (плюс 85 °C)
|
||
unsigned UnderVoltage:1; ///< Ошибка 15: Напряжение сети ниже допустимого (см. Umin в @ref UPP_PUI_Params_t)
|
||
|
||
/* Ошибки по обрывам фаз */
|
||
unsigned LossPhaseAll:1; ///< Ошибка 16: Обрыв трёх фаз (см. Imin в @ref UPP_PUI_Params_t)
|
||
unsigned LossPhaseA:1; ///< Ошибка 17: Обрыв фазы A (см. Imin в @ref UPP_PUI_Params_t)
|
||
unsigned LossPhaseB:1; ///< Ошибка 18: Обрыв фазы B (см. Imin в @ref UPP_PUI_Params_t)
|
||
unsigned LossPhaseC:1; ///< Ошибка 19: Обрыв фазы C (см. Imin в @ref UPP_PUI_Params_t)
|
||
|
||
/* Другие ошибки */
|
||
unsigned LongStart:1; ///< Ошибка 20: Затянутый пуск (ток не спадает за установленное время) (см. Tdelay в @ref UPP_PUI_Params_t)
|
||
unsigned Interlace:1; ///< Ошибка 21: Неправильный порядок чередования фаз (см. Interlace в @ref UPP_PUI_Params_t)
|
||
unsigned OverFrequency:1; ///< Ошибка 22: Частота сети выше допустимой
|
||
unsigned UnderFrequency:1; ///< Ошибка 23: Частота сети ниже допустимой
|
||
}UPP_PUI_Error_t;
|
||
|
||
/**
|
||
* @brief Структура предупреждений УПП для ПУИ
|
||
*/
|
||
typedef struct
|
||
{
|
||
}UPP_PUI_Warnings_t;
|
||
|
||
/**
|
||
* @brief Структура данных от УПП передаваемых в ПУИ
|
||
*/
|
||
typedef struct {
|
||
uint16_t Error; /** @brief Адрес 0: Текущая авария
|
||
@details В случае срабатывания защиты */
|
||
|
||
uint16_t WorkMode; /** @brief Адрес 1: Режим работы
|
||
@details «Готовность» или «Работа» */
|
||
|
||
uint16_t Uall; /** @brief Адрес 2: Среднее напряжение по трем фазам на входе УПП (RMS), Вольты */
|
||
uint16_t Uab; /** @brief Адрес 3: Напряжение фазы AB (RMS), Вольты */
|
||
uint16_t Ubc; /** @brief Адрес 4: Напряжение фазы BC (RMS), Вольты */
|
||
uint16_t Uca; /** @brief Адрес 5: Напряжение фазы CA (RMS), Вольты */
|
||
|
||
uint16_t Iall; /** @brief Адрес 6: Средний ток по трем фазам на входе УПП (RMS), Амперы */
|
||
uint16_t Ia; /** @brief Адрес 7: Ток фазы A (RMS), Амперы */
|
||
uint16_t Ib; /** @brief Адрес 8: Ток фазы B (RMS), Амперы */
|
||
uint16_t Ic; /** @brief Адрес 9: Ток фазы C (RMS), Амперы */
|
||
|
||
uint16_t Fall; /** @brief Адрес 10: Средняя частота напряжений по трем фазам на входе УПП, Герцы */
|
||
uint16_t Fab; /** @brief Адрес 11: Частота напряжения фазы AB, Герцы */
|
||
uint16_t Fbc; /** @brief Адрес 12: Частота напряжения фазы BC, Герцы */
|
||
uint16_t Fca; /** @brief Адрес 13: Частота напряжения фазы CA, Герцы */
|
||
|
||
uint16_t Temperature1; /** @brief Адрес 14: Температура радиатора тиристоров, Градусы Цельсия */
|
||
uint16_t Temperature2; /** @brief Адрес 15: Температура радиатора тиристоров, Градусы Цельсия */
|
||
|
||
uint16_t reserved[10]; /** @brief Адрес 16-49: Зарезервированны*/
|
||
|
||
|
||
union
|
||
{
|
||
uint16_t all;
|
||
UPP_PUI_Warnings_t warn;
|
||
}Warnings; /** @brief Адрес 4: Частота напряжения на входе УПП */
|
||
} UPP_PUI_Values_t;
|
||
|
||
/**
|
||
* @brief Структура параметров УПП от ПУИ
|
||
* @details Параметры по умолчанию приведены в @ref UPP_PARAMS_DEFAULT
|
||
* @note Защиты №X приведены в @ref UPP_ErrorType_t
|
||
*/
|
||
typedef struct {
|
||
uint16_t Iref; /** @brief Адрес 0: Уставка ограничения тока УПП
|
||
@details В диапазоне от 100 % до 500 % от Iн = 5 А
|
||
По умолчанию – @ref PUI_Iref_PERCENT_DEFAULT */
|
||
|
||
uint16_t Tnt; /** @brief Адрес 1: Уставка времени нарастания заданного тока
|
||
@details В диапазоне от 50 до 5000 мс.
|
||
По умолчанию – @ref PUI_Tnt_MS_DEFAULT */
|
||
|
||
uint16_t Umin; /** @brief Адрес 2: Уставка защиты №15 от понижения напряжения входной сети
|
||
@details В диапазоне от 5% до 99 % от Uн = 690 В.
|
||
По умолчанию – @ref PUI_Umin_PERCENT_DEFAULT */
|
||
|
||
uint16_t Umax; /** @brief Адрес 3: Уставка защиты №13 от повышения напряжения входной сети
|
||
@details В диапазоне от 100% до 120 % от Uн = 690 В.
|
||
По умолчанию – @ref PUI_Umax_PERCENT_DEFAULT */
|
||
|
||
uint16_t Imax; /** @brief Адрес 4: Уставка защиты №12 по току
|
||
@details В диапазоне от 5 % до 99 % от 50 А.
|
||
По умолчанию – @ref PUI_Imax_PERCENT_DEFAULT */
|
||
|
||
uint16_t Imin; /** @brief Адрес 5: Уставка защит № 16 – №19 от обрыва фаз(ы)
|
||
@details В диапазоне от 0 % до 40 % от Iн = 5 А. При задании нуля эти защиты отключаются.
|
||
По умолчанию – @ref PUI_Imin_PERCENT_DEFAULT */
|
||
|
||
uint16_t TiMax; /** @brief Адрес 6: Выдержка времени на срабатывание защиты № 12 по току
|
||
@details В диапазоне от 500 до 10000 мкс.
|
||
По умолчанию – @ref PUI_TiMax_US_DEFAULT */
|
||
|
||
uint16_t Tdelay; /** @brief Адрес 7: Выдержка времени защиты № 20 от затянутого пуска
|
||
@details В диапазоне от 5 до 60 с.
|
||
По умолчанию – @ref PUI_Tdelay_SECONDS_DEFAULT */
|
||
|
||
uint16_t Interlace; /** @brief Адрес 8: Разрешение защиты № 21 от обратного порядка чередования фаз;
|
||
@details 0 – нет защиты, 1 – есть защита.
|
||
По умолчанию – @ref PUI_Interlace_EN_DEFAULT */
|
||
} UPP_PUI_Params_t;
|
||
|
||
|
||
/** //UPP_HIGHLEVEL
|
||
* @}
|
||
*/
|
||
|
||
|
||
/**
|
||
* @addtogroup UPP_INTERNAL_DEFS Defines for internal use
|
||
* @ingroup UPP_DEFS
|
||
* @brief Дефайны УПП которые используютяс исключительно внутри программы
|
||
* @{
|
||
*/
|
||
|
||
// Проверка корректности структуры
|
||
#define assert_upp(_struct_) check_null_ptr_2(_struct_, (_struct_)->f.Initialized)
|
||
// Проверка корректности структуры и фазы
|
||
#define assert_upp_phase(_struct_, _phase_) (check_null_ptr_2(_struct_, (_struct_)->f.Initialized) || (_phase_ >= 3))
|
||
|
||
|
||
/* Дефайны для индексов */
|
||
/* Линейные напряжения */
|
||
#define U_AB 0
|
||
#define U_CA 1
|
||
#define U_BC 2
|
||
/* Токи фаз */
|
||
#define I_C 0
|
||
#define I_A 1
|
||
#define I_B 2
|
||
/* Температуры */
|
||
#define TEMP_1 0
|
||
#define TEMP_2 1
|
||
|
||
/* Перерасчеты в тики */
|
||
#define PM_SLOW_PERIOD_CNT (PM_SLOW_PERIOD_US/PM_FAST_PERIOD_US) ///< Период обновления медленных расчетов тиках @ref PM_FAST_PERIOD_US
|
||
#define US_TO_FAST_TICKS(_us_) ((_us_)/PM_FAST_PERIOD_US) ///< Пересчитать мкс в тики быстрых расчетов
|
||
#define MS_TO_FAST_TICKS(_ms_) US_TO_FAST_TICKS((_ms_)*1000) ///< Пересчитать мс в тики быстрых расчетов
|
||
#define US_TO_SLOW_TICKS(_us_) ((_us_)/PM_SLOW_PERIOD_US) ///< Пересчитать мкс в тики медленных расчетов
|
||
#define MS_TO_SLOW_TICKS(_ms_) US_TO_SLOW_TICKS((_ms_)*1000) ///< Пересчитать мс в тики медленных расчетов
|
||
#define PM_F_SLOW_PERIOD_CNT (MS_TO_SLOW_TICKS(PM_F_SLOW_PERIOD_MS)) ///< Период обновления частоты в тиках @ref PM_SLOW_PERIOD_CNT
|
||
|
||
#define SQRT2 1.4142135
|
||
|
||
/* Дефайны для "удобного" доступа к структурам */
|
||
//#define PARAM_INTERNAL MB_INTERNAL.param
|
||
//#define PARAM_PUI MB_DATA.HoldRegs.pui_params
|
||
//#define ERR_PUI errors.pui.err
|
||
//#define ERR_PRIVATE errors.prvt.f.err
|
||
//#define ERR_PRIVATE_CNT errors.prvt.cnt
|
||
|
||
|
||
/* Enum'ы УПП */
|
||
/**
|
||
* @brief Состояния полуволны
|
||
*/
|
||
typedef enum {
|
||
UPP_WAVE_UNKNOWED = 0,
|
||
UPP_WAVE_POSITIVE,
|
||
UPP_WAVE_NEGATIVE
|
||
} UPP_HalfWave_t;
|
||
|
||
/**
|
||
* @brief Названия Фаз
|
||
*/
|
||
typedef enum {
|
||
UPP_PHASE_A = 0,
|
||
UPP_PHASE_C = 1,
|
||
UPP_PHASE_B = 2,
|
||
UPP_PHASE_UNKNOWN = 3
|
||
} UPP_Phase_t;
|
||
|
||
/** //UPP_INTERNAL_DEFS
|
||
* @}
|
||
*/
|
||
#endif //_UPP_DEFS_H_
|
||
|
||
|
||
/** //UPP_DEFS
|
||
* @}
|
||
*/
|