diff --git a/UPP/Core/Configs/modbus_data.c b/UPP/Core/Configs/modbus_data.c
index 33c0103..d016027 100644
--- a/UPP/Core/Configs/modbus_data.c
+++ b/UPP/Core/Configs/modbus_data.c
@@ -81,16 +81,19 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
return ET_ILLEGAL_DATA_VALUE; // return exception code
}
+ int local_addr = 0;
if(RegisterType == RegisterType_Holding)
{
// Default holding registers
if(MB_Check_Address_For_Arr(Addr, Qnt, R_HOLDING_ADDR, R_HOLDING_QNT) == ET_NO_ERRORS)
{
- *pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr - R_HOLDING_ADDR); // указатель на выбранный по Addr регистр
+ local_addr = Addr - R_HOLDING_ADDR;
+ *pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, local_addr); // указатель на выбранный по Addr регистр
}
- else if(MB_Check_Address_For_Arr(Addr, Qnt, R_HOLDING_PRVT_PARAMS_ADR, R_HOLDING_PRVT_PARAMS_QNT) == ET_NO_ERRORS)
+ else if(MB_Check_Address_For_Arr(Addr, Qnt, R_HOLDING_PRVT_ADDR, R_HOLDING_PRVT_QNT) == ET_NO_ERRORS)
{
- *pRegs = MB_Set_Register_Ptr(&MB_INTERNAL, Addr - R_HOLDING_PRVT_PARAMS_ADR); // указатель на выбранный по Addr регистр
+ local_addr = Addr - R_HOLDING_PRVT_ADDR;
+ *pRegs = MB_Set_Register_Ptr(&MB_INTERNAL.param, local_addr); // указатель на выбранный по Addr регистр
}
// if address doesnt match any array - return illegal data address response
else
@@ -103,7 +106,8 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
// Default input registers
if(MB_Check_Address_For_Arr(Addr, Qnt, R_INPUT_ADDR, R_INPUT_QNT) == ET_NO_ERRORS)
{
- *pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr - R_INPUT_ADDR); // указатель на выбранный по Addr регистр
+ local_addr = Addr - R_INPUT_ADDR;
+ *pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, local_addr); // указатель на выбранный по Addr регистр
}
// if address doesnt match any array - return illegal data address response
else
@@ -135,7 +139,12 @@ MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint
/* В режиме работа ничего не записываем */
if((upp.workmode == UPP_Work) && WriteFlag)
{
- return ET_ILLEGAL_FUNCTION;
+ /* Оставляем только запись регистрво управления */
+ int is_control_register = (Addr > 100 && Addr + Qnt <= 101);
+ if(!is_control_register)
+ {
+ return ET_ILLEGAL_FUNCTION;
+ }
}
/* check quantity error */
@@ -143,11 +152,18 @@ MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint
{
return ET_ILLEGAL_DATA_VALUE; // return exception code
}
-
+
+ int local_addr = 0;
// Default coils
if(MB_Check_Address_For_Arr(Addr, Qnt, C_COILS_ADDR, C_COILS_QNT) == ET_NO_ERRORS)
{
- *pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr - C_COILS_ADDR); // указатель на выбранный по Addr массив коилов
+ local_addr = Addr - C_COILS_ADDR;
+ *pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, local_addr); // указатель на выбранный по Addr массив коилов
+ }
+ else if(MB_Check_Address_For_Arr(Addr, Qnt, C_COILS_PRVT_ADDR, C_COILS_PRVT_QNT) == ET_NO_ERRORS)
+ {
+ local_addr = Addr - C_COILS_PRVT_ADDR;
+ *pCoils = MB_Set_Coil_Reg_Ptr(&MB_INTERNAL.FuncCalls, local_addr); // указатель на выбранный по Addr массив коилов
}
// if address doesnt match any array - return illegal data address response
else
@@ -155,7 +171,7 @@ MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint
return ET_ILLEGAL_DATA_ADDRESS;
}
- *start_shift = Addr % 16; // set shift to requested coil
+ *start_shift = local_addr % 16; // set shift to requested coil
// if found requeried array return no err
return ET_NO_ERRORS; // return no errors
}
diff --git a/UPP/Core/Configs/modbus_data.h b/UPP/Core/Configs/modbus_data.h
index 289053c..c76596e 100644
--- a/UPP/Core/Configs/modbus_data.h
+++ b/UPP/Core/Configs/modbus_data.h
@@ -56,23 +56,6 @@
#include "stdint.h"
-
-//--------------SIZES OF DATA---------------
-#define R_HOLDING_PRVT_PARAMS_ADR 555
-#define R_HOLDING_PRVT_PARAMS_QNT (sizeof(UPP_PrvtParams_t)/sizeof(uint16_t))
-
-// DEFINES FOR INPUT REGISTERS ARRAYS
-#define R_INPUT_ADDR 0 ///< Начальный адрес входных регистров
-#define R_INPUT_QNT (sizeof(UPP_PUI_Values_t)/sizeof(uint16_t)) ///< Количество входных регистров
-
-// DEFINES FOR HOLDING REGISTERS ARRAYS
-#define R_HOLDING_ADDR 0 ///< Начальный адрес регистров хранения
-#define R_HOLDING_QNT (2000) ///< Количество регистров хранения
-
-// DEFINES FOR COIL ARRAYS
-#define C_COILS_ADDR 0 ///< Начальный адрес коилов
-#define C_COILS_QNT 16 ///< Количество регистров коилов
-
//--------------DEFINES FOR REGISTERS---------------
// DEFINES FOR ARRAYS
/**
@@ -93,7 +76,7 @@
*/
typedef struct //MB_DataInRegsTypeDef
{
- UPP_PUI_Values_t pui;
+ UPP_PUI_Values_t pui_values;
}MB_DataInRegsTypeDef;
@@ -102,7 +85,10 @@ typedef struct //MB_DataInRegsTypeDef
*/
typedef struct //MB_DataInRegsTypeDef
{
- UPP_PUI_Params_t pui_params;
+ UPP_PUI_Params_t pui_params; ///< Адрес 0 и далее : Уставки от ПУИ
+ uint16_t reserved1[mb_fill_rsv(100, UPP_PUI_Params_t)];
+
+ UPP_PUI_Control_t pui_control; ///< Адрес 100 и далее: Управление от ПУИ
}MB_DataHoldRegsTypeDef;
@@ -172,6 +158,30 @@ typedef struct
}MB_DataInternalTypeDef;
extern MB_DataInternalTypeDef MB_INTERNAL;
+
+
+//--------------SIZES OF DATA---------------
+#define R_HOLDING_PRVT_ADDR 1000
+#define R_HOLDING_PRVT_QNT (sizeof(UPP_PrvtParams_t)/sizeof(uint16_t))
+
+#define C_COILS_PRVT_ADDR 1000
+#define C_COILS_PRVT_QNT (16)
+
+// DEFINES FOR INPUT REGISTERS ARRAYS
+#define R_INPUT_ADDR 0 ///< Начальный адрес входных регистров
+#define R_INPUT_QNT (sizeof(MB_DataInRegsTypeDef)/sizeof(uint16_t)) ///< Количество входных регистров
+
+// DEFINES FOR HOLDING REGISTERS ARRAYS
+#define R_HOLDING_ADDR 0 ///< Начальный адрес регистров хранения
+#define R_HOLDING_QNT (sizeof(MB_DataHoldRegsTypeDef)/sizeof(uint16_t)) ///< Количество регистров хранения
+
+// DEFINES FOR COIL ARRAYS
+#define C_COILS_ADDR 0 ///< Начальный адрес коилов
+#define C_COILS_QNT 0 ///< Количество регистров коилов
+
+
+
+
#endif //_MODBUS_DATA_H_
/////////////////////////////////////////////////////////////
diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h
index a2e11de..f79a833 100644
--- a/UPP/Core/Configs/upp_config.h
+++ b/UPP/Core/Configs/upp_config.h
@@ -106,6 +106,7 @@
#define ERRORS_DELAY_MS_UAMP_ERR 1500 // todo
#define ERRORS_DELAY_MS_F_ERR 5000
#define ERRORS_DELAY_MS_CRITICAL_ERR 0.0f
+#define ERRORS_DELAY_MS_POWERBOARDS 2000
#define ERRORS_DELAY_MS_DEFAULT 0.1f
diff --git a/UPP/Core/Configs/upp_defs.h b/UPP/Core/Configs/upp_defs.h
index 375fe32..8b4b023 100644
--- a/UPP/Core/Configs/upp_defs.h
+++ b/UPP/Core/Configs/upp_defs.h
@@ -15,6 +15,20 @@
#include "upp_config.h"
+/**
+ * @brief Определить размер структуры в регистрах модбас (16-бит слова)
+ */
+#define mb_sizeof(_struct_) (sizeof(_struct_)/sizeof(uint16_t))
+/**
+ * @brief Определить количество резервных байт для выравнивания
+ * @details Выравнивает так, чтобы количество регистров в _struct_ и reserved равнялось _align_.
+ *
+ */
+#define mb_fill_rsv(_align_, _struct_) ((_align_ > mb_sizeof(_struct_)) ? (_align_ - mb_sizeof(_struct_)) : 0)
+
+
+
+
/**
* @addtogroup UPP_HIGHLEVEL Defines for high-level
* @ingroup UPP_DEFS
@@ -27,10 +41,10 @@
* @brief Список аварий УПП
*/
typedef enum {
- UPP_Init = 0, ///< УПП не инициализирован
- UPP_Ready = 1, ///< УПП в готовности
- UPP_Work = 2, ///< УПП в работе, управляет тиристорами
- UPP_Error = 3, ///< УПП в аварии
+ UPP_Error = 0, ///< УПП в аварии
+ UPP_Init = 1, ///< УПП не инициализирован
+ UPP_Ready = 2, ///< УПП в готовности
+ UPP_Work = 3, ///< УПП в работе, управляет тиристорами
// WM_Done = 3, ///< УПП закончил свою работу
} UPP_WorkModeType_t;
@@ -118,12 +132,13 @@ typedef struct
*/
typedef struct
{
- uint16_t NoConnectionPCH:1;
+ uint16_t Workmode:2;
+ uint16_t NoConnectionLSU:1;
uint16_t NoInputVoltage:1;
uint16_t CurrentLimited:1;
uint16_t OverVoltage:1;
uint16_t UnderVoltage:1;
-}UPP_PUI_Warnings_t;
+}UPP_PUI_Status_t;
/**
* @brief Структура данных от УПП передаваемых в ПУИ
@@ -131,36 +146,32 @@ typedef struct
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 Trad; /** @brief Адрес 14: Температура радиатора тиристоров, Градусы Цельсия */
- uint16_t Tshkaf; /** @brief Адрес 15: Температура внутри шкафа УПП, Градусы Цельсия */
-
- uint16_t reserved[34]; /** @brief Адрес 16-49: Зарезервированны */
-
-
union
{
uint16_t all;
- UPP_PUI_Warnings_t warn;
- }Warnings; /** @brief Адрес 50: Предупреждения УПП */
+ UPP_PUI_Status_t bit;
+ }Status; /** @brief Адрес 1: Состояние УПП */
+
+ uint16_t reserved[3];
+
+ uint16_t Uall; /** @brief Адрес 5: Среднее напряжение по трем фазам на входе УПП (RMS), Вольты */
+ uint16_t Uab; /** @brief Адрес 6: Напряжение фазы AB (RMS), Вольты */
+ uint16_t Ubc; /** @brief Адрес 7: Напряжение фазы BC (RMS), Вольты */
+ uint16_t Uca; /** @brief Адрес 8: Напряжение фазы CA (RMS), Вольты */
+
+ uint16_t Iall; /** @brief Адрес 9: Средний ток по трем фазам на входе УПП (RMS), Амперы */
+ uint16_t Ia; /** @brief Адрес 10: Ток фазы A (RMS), Амперы */
+ uint16_t Ib; /** @brief Адрес 11: Ток фазы B (RMS), Амперы */
+ uint16_t Ic; /** @brief Адрес 12: Ток фазы C (RMS), Амперы */
+
+ uint16_t Fall; /** @brief Адрес 13: Средняя частота напряжений по трем фазам на входе УПП, Герцы */
+ uint16_t Fab; /** @brief Адрес 14: Частота напряжения фазы AB, Герцы */
+ uint16_t Fbc; /** @brief Адрес 15: Частота напряжения фазы BC, Герцы */
+ uint16_t Fca; /** @brief Адрес 16: Частота напряжения фазы CA, Герцы */
+
+ uint16_t Trad; /** @brief Адрес 17: Температура радиатора тиристоров, Градусы Цельсия */
+ uint16_t Tshkaf; /** @brief Адрес 18: Температура внутри шкафа УПП, Градусы Цельсия */
+
} UPP_PUI_Values_t;
/**
@@ -207,6 +218,15 @@ typedef struct {
} UPP_PUI_Params_t;
+/**
+ * @brief Структура управления УПП от ПУИ
+ * @details Параметры по умолчанию приведены в @ref UPP_PARAMS_DEFAULT
+ * @note Защиты №X приведены в @ref UPP_ErrorType_t
+ */
+typedef struct {
+ uint16_t Pusk; /** @brief Адрес 100: Пуск УПП
+ @details 0 – Остановка и сброс ошибок УПП, 1 – Запуск УПП */
+} UPP_PUI_Control_t;
/** //UPP_HIGHLEVEL
* @}
*/
diff --git a/UPP/Core/PowerMonitor/power_monitor.c b/UPP/Core/PowerMonitor/power_monitor.c
index 4bcc300..7d539d6 100644
--- a/UPP/Core/PowerMonitor/power_monitor.c
+++ b/UPP/Core/PowerMonitor/power_monitor.c
@@ -107,8 +107,8 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
ADC_UpdateTemperatures(&hpm->adc);
float t1 = hpm->adc.Data[ADC_CHANNEL_TEMP1];
float t2 = hpm->adc.Data[ADC_CHANNEL_TEMP2];
- meas->final.T[TEMP_RAD] = Filter_Process(&hpm->avg[AVG_TEMP1], t1);
- meas->final.T[TEMP_SHKAF] = Filter_Process(&hpm->avg[AVG_TEMP2], t2);
+ meas->final.T[TEMP_SHKAF] = Filter_Process(&hpm->avg[AVG_TEMP1], t1);
+ meas->final.T[TEMP_RAD] = Filter_Process(&hpm->avg[AVG_TEMP2], t2);
/* Расчет третьей фазы */
meas->slow.U[U_BC] = U_BC_calc(meas->slow.U[U_AB], meas->slow.U[U_CA]);
diff --git a/UPP/Core/Src/gpio.c b/UPP/Core/Src/gpio.c
index 99df2bd..7a5e077 100644
--- a/UPP/Core/Src/gpio.c
+++ b/UPP/Core/Src/gpio.c
@@ -134,11 +134,17 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(ERR_5VSI_GPIO_Port, &GPIO_InitStruct);
- /*Configure GPIO pins : PDPin PDPin PDPin */
- GPIO_InitStruct.Pin = DIN3_Pin|ERR_24VDIO_Pin|DIN2_Pin;
+ /*Configure GPIO pins : PDPin PDPin */
+ GPIO_InitStruct.Pin = DIN3_Pin|DIN2_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = ERR_24VDIO_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+ HAL_GPIO_Init(ERR_24VDIO_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = ERR_24V_Pin;
diff --git a/UPP/Core/UPP/upp_errors.c b/UPP/Core/UPP/upp_errors.c
index 2f68376..9ce030e 100644
--- a/UPP/Core/UPP/upp_errors.c
+++ b/UPP/Core/UPP/upp_errors.c
@@ -57,8 +57,12 @@ void UPP_Errors_Program(void)
void UPP_Errors_Power(void)
{
- static int error_latch_ticks = 0;
- int error_latch_timeout = 5000;
+ /* Счетчики для отсчитывания задержки выставления ошибки */
+ static int Power_DIO_24VCnt = 0;
+ static int Power_24VCnt = 0;
+ static int Power_Digit_5VCnt = 0;
+ static int Power_SCI_5VCnt = 0;
+ static int Power_Analog_5VCnt = 0;
/* Считывание неисправностей источников питания */
int err_24Vdio = GPIO_Read_Switch(&UPP_DIN.err_24Vdio);
@@ -67,11 +71,32 @@ void UPP_Errors_Power(void)
int err_5Vsi = GPIO_Read_Switch(&UPP_DIN.err_5Vsi);
int err_Va = GPIO_Read_Switch(&UPP_DIN.err_Va);
- ERR_PUI->Power_DIO_24V = err_24Vdio;
- ERR_PUI->Power_24V = err_24V;
- ERR_PUI->Power_Digit_5V = err_5Vd;
- ERR_PUI->Power_SCI_5V = err_5Vsi;
- ERR_PUI->Power_Analog_5V = err_Va;
+ ERR_PUI->Power_DIO_24V = setError(err_24Vdio,
+ ERR_PUI->Power_DIO_24V,
+ &Power_DIO_24VCnt,
+ MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_POWERBOARDS));
+ ERR_PUI->Power_24V = setError(err_24V,
+ ERR_PUI->Power_24V,
+ &Power_24VCnt,
+ MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_POWERBOARDS));
+ ERR_PUI->Power_Digit_5V = setError(err_5Vd,
+ ERR_PUI->Power_Digit_5V,
+ &Power_Digit_5VCnt,
+ MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_POWERBOARDS));
+ ERR_PUI->Power_SCI_5V = setError(err_5Vsi,
+ ERR_PUI->Power_SCI_5V,
+ &Power_SCI_5VCnt,
+ MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_POWERBOARDS));
+ ERR_PUI->Power_Analog_5V = setError(err_Va,
+ ERR_PUI->Power_Analog_5V,
+ &Power_Analog_5VCnt,
+ MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_POWERBOARDS));
+
+// ERR_PUI->Power_DIO_24V = err_24Vdio;
+// ERR_PUI->Power_24V = err_24V;
+// ERR_PUI->Power_Digit_5V = err_5Vd;
+// ERR_PUI->Power_SCI_5V = err_5Vsi;
+// ERR_PUI->Power_Analog_5V = err_Va;
}
void UPP_Errors_Ranges(void)
@@ -182,17 +207,21 @@ void UPP_Errors_Other(void)
static int InterlaceCnt = 0;
#ifndef UPP_DISABLE_PROTECT_LONGSTART
+ /* Долгий пуск */
if(ERR_PRIVATE->longstart)
ERR_PUI->LongStart = 1;
else
ERR_PUI->LongStart = 0;
#endif
- ERR_PUI->Interlace = setError(ERR_PRIVATE->interlance,
- ERR_PUI->Interlace,
- &InterlaceCnt,
- MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
- //Interlance
+ /* Неправильный порядок чередования фаз */
+ if(upp.PUI.params->Interlace)
+ {
+ ERR_PUI->Interlace = setError(ERR_PRIVATE->interlance,
+ ERR_PUI->Interlace,
+ &InterlaceCnt,
+ MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
+ }
}
static UPP_ErrorType_t UPP_SelectCommonError(void)
diff --git a/UPP/Core/UPP/upp_main.c b/UPP/Core/UPP/upp_main.c
index e59841b..0db25b3 100644
--- a/UPP/Core/UPP/upp_main.c
+++ b/UPP/Core/UPP/upp_main.c
@@ -16,6 +16,7 @@
#include "tim.h"
#include "iwdg.h"
+int hardware_init_done = 0;
UPP_t upp;
RS_HandleTypeDef hmodbus_pui;
HAL_StatusTypeDef res; // сюда сохраняется результат от выполения всяких функций
@@ -34,8 +35,9 @@ int UPP_App_Init(void)
BenchTime_Init();
// Подключение указателей
upp.errors = &errors;
+ upp.PUI.control = &MB_DATA.HoldRegs.pui_control;
upp.PUI.params = &MB_DATA.HoldRegs.pui_params;
- upp.PUI.values = &MB_DATA.InRegs.pui;
+ upp.PUI.values = &MB_DATA.InRegs.pui_values;
upp.call = &MB_INTERNAL.FuncCalls;
#ifdef UPP_SET_DEFAULT
@@ -97,6 +99,7 @@ int UPP_PreWhile(void)
UPP_DO.CEN(ENABLE);
+ hardware_init_done = 1;
return 0;
}
@@ -163,28 +166,25 @@ int UPP_While(void)
UPP_Errors_Handle();
// Контроль парамеров
UPP_Params_Control();
+ // Определение режима работы УПП
+ UPP_Status_Handler_SlowCalc();
-
- // Сброс на дефолтные по запросу
- if(upp.call->set_default_pui || upp.call->set_default_internal)
+
+ // Если КВИТИРОВАНИЕ - переходим в Init, где сбрасываем ошибки
+ if(upp.call->kvitir)
{
- UPP_Params_SetDefault(upp.call->set_default_pui, upp.call->set_default_internal);
- upp.call->set_default_pui = 0;
- upp.call->set_default_internal = 0;
+ upp.call->kvitir = 0;
+ upp.call->error_stop = 0;
+ upp.workmode = UPP_Init;
}
-
-#ifndef UPP_DISABLE_ERROR_BLOCK
- // если ошибка вызываем СТОП
- upp.call->stop = (errors.common != Err_None);
-#endif
-
// Если СТОП - переходим в ошибку
- if (upp.call->stop)
+ else if (upp.call->error_stop)
{
Angle_PID_Reset(&upp.hangle);
upp.workmode = UPP_Error;
}
-
+
+
// Автомат состояний УПП
switch(upp.workmode)
{
@@ -278,9 +278,9 @@ int UPP_While(void)
UPP_DO.Ready(DISABLE);
UPP_DO.Work(DISABLE);
UPP_DO.Error(ENABLE);
- // Находимся до тех пор пока ошибки не будет устранена
- if(errors.common == Err_None)
- upp.workmode = UPP_Init;
+// // Находимся до тех пор пока ошибки не будет устранена
+// if(errors.common == Err_None)
+// upp.workmode = UPP_Init;
retval = 1;
break;
@@ -303,11 +303,11 @@ int UPP_While(void)
*/
void UPP_Tick(void)
{
- // Начинаем все проверять только после того как уйдем из режима инициализации
- if(upp.workmode == UPP_Init)
+ // Начинаем все проверять только после того как инициализируем железо
+ if(hardware_init_done == 0)
return;
- UPP_Status_Handler();
+ UPP_Status_Handler_IRQ();
}
diff --git a/UPP/Core/UPP/upp_main.h b/UPP/Core/UPP/upp_main.h
index 112354d..e204971 100644
--- a/UPP/Core/UPP/upp_main.h
+++ b/UPP/Core/UPP/upp_main.h
@@ -31,6 +31,7 @@ typedef struct
{
UPP_PUI_Params_t *params; ///< Параметры от ПУИ
UPP_PUI_Values_t *values; ///< Данные для ПУИ
+ UPP_PUI_Control_t *control; ///< Управление от ПУИ
} PUI; ///< Общение с ПУИ
diff --git a/UPP/Core/UPP/upp_params.h b/UPP/Core/UPP/upp_params.h
index df58690..938bb0e 100644
--- a/UPP/Core/UPP/upp_params.h
+++ b/UPP/Core/UPP/upp_params.h
@@ -17,12 +17,13 @@
typedef struct
{
unsigned go:1; ///< Запустить УПП
- unsigned stop:1; ///< Остановка УПП (авария)
+ unsigned error_stop:1; ///< Остановка УПП (авария)
+ unsigned kvitir:1; ///< Квитирование ошибок
unsigned set_default_pui:1; ///< Выставить настройки ПУИ в дефолтные
unsigned set_default_internal:1;///< Выставить внутренние настройки в дефолтные
- unsigned reserved:11;
+ unsigned reserved:10;
unsigned reset_mcu:1;
}UPP_FuncCalls_t;
@@ -47,6 +48,7 @@ typedef struct
typedef struct
{
UPP_ParamsNominal_t nominal;
+ uint16_t reserved[1];
/* Параметры Температур */
struct
@@ -81,7 +83,7 @@ typedef struct
uint16_t PhaseMask; ///< Адрес 1050: Битовяя маска на какие фазы подавать ШИМ: 0 бит - a, 1 бит - b, 2 бит - c
uint16_t Frequency; ///< Адрес 1051: Частота ШИМ для пачки импульсов на тиристоры [Герцы]
uint16_t Duty; ///< Адрес 1052: Скважность ШИМ для пачки импульсов на тиристоры [Проценты]
- uint16_t PulseLength; ///< Адрес 1053: Количесво импульсов в пачке [Количество]
+ uint16_t PulseLength; ///< Адрес 1053: Длина пачки импульсов [0..1 x 65535 от 180 градусов]
uint16_t reserved[6];
}pwm;
diff --git a/UPP/Core/UPP/upp_status.c b/UPP/Core/UPP/upp_status.c
index 8283f2c..de1f051 100644
--- a/UPP/Core/UPP/upp_status.c
+++ b/UPP/Core/UPP/upp_status.c
@@ -8,40 +8,93 @@
#include "upp_main.h" // всё остальное по работе с УПП
#include "upp_status.h"
int cnt_oscil_size = 100;
-void UPP_Status_Handler(void)
+
+void UPP_Status_Handler_SlowCalc(void)
+{
+ static int pui_pusk_prev = 0;
+ static int can_kvitir_prev = 0;
+ int pui_pusk = upp.PUI.control->Pusk;
+ int disc_pusk = GPIO_Read_Switch(&UPP_DIN.Pusk);
+ int mest = GPIO_Read_Switch(&UPP_DIN.MestDist);
+ int can_kvitir = 0;
+
+
+ if(mest) // Если МЕСТНОЕ - управляем от ПУИ
+ {
+ upp.call->go = pui_pusk;
+ // Если пришел СТОП от ПУИ - дополнительно квитируем ошибки
+ if(!pui_pusk && pui_pusk_prev)
+ {
+ upp.call->kvitir = 1;
+ }
+ }
+ else // Если ДИСТАНЦИОННОЕ - управляем от ПУИ
+ {
+ upp.call->go = disc_pusk;
+ upp.call->kvitir = can_kvitir;
+ if(can_kvitir && !can_kvitir_prev)
+ {
+ upp.call->kvitir = 1;
+ }
+ }
+
+
+
+
+
+
+
+ // Сброс на дефолтные по запросу
+ if(upp.call->set_default_pui || upp.call->set_default_internal)
+ {
+ UPP_Params_SetDefault(upp.call->set_default_pui, upp.call->set_default_internal);
+ upp.call->set_default_pui = 0;
+ upp.call->set_default_internal = 0;
+ }
+
+#ifndef UPP_DISABLE_ERROR_BLOCK
+ // если ошибка вызываем СТОП
+ upp.call->error_stop = (errors.common != Err_None);
+#endif
+
+
+
+}
+
+void UPP_Status_Handler_IRQ(void)
{
/* Хендлы для отладочных светодиодов (если выбран режим моргания) */
GPIO_LED_Dynamic_Handle(&UPP_LEDS.green1);
GPIO_LED_Dynamic_Handle(&UPP_LEDS.green2);
GPIO_LED_Dynamic_Handle(&UPP_LEDS.red);
- MB_DATA.InRegs.pui.Error = upp.errors->common;
- MB_DATA.InRegs.pui.WorkMode = upp.workmode;
+ upp.PUI.values->Error = upp.errors->common;
+ upp.PUI.values->Status.bit.Workmode = upp.workmode;
+ upp.PUI.values->Status.bit.NoConnectionLSU = 0; //todo
+ upp.PUI.values->Status.bit.NoInputVoltage = !upp.pm.f.isU;
+ upp.PUI.values->Status.bit.CurrentLimited = upp.hangle.f.CurrentLimited;
+ upp.PUI.values->Status.bit.OverVoltage = upp.errors->pui.err.OverVoltage;
+ upp.PUI.values->Status.bit.UnderVoltage = upp.errors->pui.err.UnderVoltage;
- MB_DATA.InRegs.pui.Uall = upp.pm.measured.final.Uamp * MB_INTERNAL.param.nominal.U;
- MB_DATA.InRegs.pui.Uab = upp.pm.measured.final.U[U_AB] * MB_INTERNAL.param.nominal.U;
- MB_DATA.InRegs.pui.Ubc = upp.pm.measured.final.U[U_BC] * MB_INTERNAL.param.nominal.U;
- MB_DATA.InRegs.pui.Uca = upp.pm.measured.final.U[U_CA] * MB_INTERNAL.param.nominal.U;
+
+ upp.PUI.values->Uall = upp.pm.measured.final.Uamp * MB_INTERNAL.param.nominal.U / 10;
+ upp.PUI.values->Uab = upp.pm.measured.final.U[U_AB] * MB_INTERNAL.param.nominal.U / 10;
+ upp.PUI.values->Ubc = upp.pm.measured.final.U[U_BC] * MB_INTERNAL.param.nominal.U / 10;
+ upp.PUI.values->Uca = upp.pm.measured.final.U[U_CA] * MB_INTERNAL.param.nominal.U / 10;
- MB_DATA.InRegs.pui.Iall = upp.pm.measured.final.Iamp * MB_INTERNAL.param.nominal.I;
- MB_DATA.InRegs.pui.Ia = upp.pm.measured.final.I[I_A] * MB_INTERNAL.param.nominal.I;
- MB_DATA.InRegs.pui.Ib = upp.pm.measured.final.I[I_B] * MB_INTERNAL.param.nominal.I;
- MB_DATA.InRegs.pui.Ic = upp.pm.measured.final.I[I_C] * MB_INTERNAL.param.nominal.I;
+ upp.PUI.values->Iall = upp.pm.measured.final.Iamp * MB_INTERNAL.param.nominal.I;
+ upp.PUI.values->Ia = upp.pm.measured.final.I[I_A] * MB_INTERNAL.param.nominal.I;
+ upp.PUI.values->Ib = upp.pm.measured.final.I[I_B] * MB_INTERNAL.param.nominal.I;
+ upp.PUI.values->Ic = upp.pm.measured.final.I[I_C] * MB_INTERNAL.param.nominal.I;
- MB_DATA.InRegs.pui.Fall = upp.pm.measured.final.Fmean * 10;
- MB_DATA.InRegs.pui.Fab = upp.pm.measured.final.F[U_AB] * 10;
- MB_DATA.InRegs.pui.Fbc = upp.pm.measured.final.F[U_BC] * 10;
- MB_DATA.InRegs.pui.Fca = upp.pm.measured.final.F[U_CA] * 10;
+ upp.PUI.values->Fall = upp.pm.measured.final.Fmean * 10;
+ upp.PUI.values->Fab = upp.pm.measured.final.F[U_AB] * 10;
+ upp.PUI.values->Fbc = upp.pm.measured.final.F[U_BC] * 10;
+ upp.PUI.values->Fca = upp.pm.measured.final.F[U_CA] * 10;
- MB_DATA.InRegs.pui.Trad = upp.pm.measured.final.T[TEMP_RAD] * 10;
- MB_DATA.InRegs.pui.Tshkaf = upp.pm.measured.final.T[TEMP_SHKAF] * 10;
-
- MB_DATA.InRegs.pui.Warnings.warn.NoConnectionPCH = 0; //todo
- MB_DATA.InRegs.pui.Warnings.warn.NoInputVoltage = !upp.pm.f.isU;
- MB_DATA.InRegs.pui.Warnings.warn.CurrentLimited = upp.hangle.f.CurrentLimited;
- MB_DATA.InRegs.pui.Warnings.warn.OverVoltage = !upp.errors->pui.err.OverVoltage;
- MB_DATA.InRegs.pui.Warnings.warn.UnderVoltage = !upp.errors->pui.err.UnderVoltage;
+ upp.PUI.values->Trad = upp.pm.measured.final.T[TEMP_RAD] * 10;
+ upp.PUI.values->Tshkaf = upp.pm.measured.final.T[TEMP_SHKAF] * 10;
static int mb_u_cnt = 0;
@@ -69,13 +122,4 @@ void UPP_Status_Handler(void)
cnt_oscil = 0;
}
-
- if(GPIO_Read_Switch(&UPP_DIN.Pusk))
- {
- upp.call->go = 1;
- }
- else
- {
- upp.call->go = 0;
- }
}
\ No newline at end of file
diff --git a/UPP/Core/UPP/upp_status.h b/UPP/Core/UPP/upp_status.h
index b7f21ed..2396146 100644
--- a/UPP/Core/UPP/upp_status.h
+++ b/UPP/Core/UPP/upp_status.h
@@ -10,5 +10,6 @@
#define _UPP_STATUS_H
#include "main.h" // общие библиотеки, конфигурации и вербальные имена из CubeMX
-void UPP_Status_Handler(void);
+void UPP_Status_Handler_SlowCalc(void);
+void UPP_Status_Handler_IRQ(void);
#endif //_UPP_STATUS_H
\ No newline at end of file
diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx
index 0090099..bb70ab3 100644
--- a/UPP/MDK-ARM/UPP.uvoptx
+++ b/UPP/MDK-ARM/UPP.uvoptx
@@ -165,6 +165,22 @@
\\UPP\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c\351
+
+ 1
+ 0
+ 183
+ 1
+ 134280762
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ..\Core\UPP\upp_main.c
+
+ \\UPP\../Core/UPP/upp_main.c\183
+
@@ -247,6 +263,26 @@
1
dbg_polarity
+
+ 16
+ 1
+ MB_DATA,0x0A
+
+
+ 17
+ 1
+ MB_INTERNAL,0x0A
+
+
+ 18
+ 1
+ &MB_INTERNAL.FuncCalls
+
+
+ 19
+ 1
+ pCoils
+
@@ -317,40 +353,35 @@
13
2
- MB_DATA.InRegs.pui
+ upp.errors->pui.err
14
2
- upp.errors->pui.err
+ MB_INTERNAL.param.nominal.U,0x0A
15
2
- MB_INTERNAL.param.nominal.U,0x0A
+ MB_INTERNAL.param,0x0A
16
2
- MB_INTERNAL.param,0x0A
+ upp.hangle,0x0A
17
2
- upp.hangle,0x0A
+ MB_INTERNAL.oscil.data,0x0A
18
2
- MB_INTERNAL.oscil.data,0x0A
-
-
- 19
- 2
hmodbus1
- 20
+ 19
2
cnt_oscil_size,0x0A
@@ -402,6 +433,10 @@
System Viewer\ADC3
35905
+
+ System Viewer\GPIOD
+ 35903
+
System Viewer\TIM1
35904
@@ -1088,7 +1123,7 @@
Application/User/Core
- 0
+ 1
0
0
0
diff --git a/UPP/UPP.ioc b/UPP/UPP.ioc
index 4e903e3..93cd83d 100644
--- a/UPP/UPP.ioc
+++ b/UPP/UPP.ioc
@@ -294,16 +294,18 @@ PC8.Signal=S_TIM8_CH3
PC9.GPIOParameters=GPIO_Label
PC9.GPIO_Label=PWM6
PC9.Signal=S_TIM8_CH4
-PD2.GPIOParameters=GPIO_Label
+PD2.GPIOParameters=GPIO_PuPd,GPIO_Label
PD2.GPIO_Label=DIN3
+PD2.GPIO_PuPd=GPIO_PULLUP
PD2.Locked=true
PD2.Signal=GPIO_Input
PD3.GPIOParameters=GPIO_Label
PD3.GPIO_Label=ERR_24VDIO
PD3.Locked=true
PD3.Signal=GPIO_Input
-PD6.GPIOParameters=GPIO_Label
+PD6.GPIOParameters=GPIO_PuPd,GPIO_Label
PD6.GPIO_Label=DIN2
+PD6.GPIO_PuPd=GPIO_PULLUP
PD6.Locked=true
PD6.Signal=GPIO_Input
PE0.GPIOParameters=PinState,GPIO_Label
diff --git a/Информация для программиста (УПП СП СЭД)/Modbus Карта.docx b/Информация для программиста (УПП СП СЭД)/Modbus Карта.docx
index d798307..d4a6644 100644
Binary files a/Информация для программиста (УПП СП СЭД)/Modbus Карта.docx and b/Информация для программиста (УПП СП СЭД)/Modbus Карта.docx differ
diff --git a/Информация для программиста (УПП СП СЭД)/Modbus/Внутренние настройки.mbp b/Информация для программиста (УПП СП СЭД)/Modbus/Внутренние настройки.mbp
new file mode 100644
index 0000000..2ce14e3
--- /dev/null
+++ b/Информация для программиста (УПП СП СЭД)/Modbus/Внутренние настройки.mbp
@@ -0,0 +1,537 @@
+
+
+
+
+ 96
+
+ 1000
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 16
+ 10
+
+ 1330
+ 380
+ 900
+ 900
+ 1210
+ 900
+ 900
+ 900
+ 900
+ 900
+ 900
+ 900
+ 900
+ 900
+ 900
+ 900
+
+
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+
+ 0
+ 0
+ 3
+ 6
+
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ Type log name here
+
+
+
+ 1
+ 1
+ 1000
+ 0
+ 1
+ 1
+ 1
+ Type log name here
+
+
+ 3
+ 1000
+ 80
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 3
+ 0
+ 216
+ 14
+ 88
+ 2
+ 232
+ 3
+ 136
+ 19
+ 232
+ 3
+ 232
+ 3
+ 30
+ 0
+ 0
+ 0
+ 90
+ 0
+ 90
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 255
+ 56
+ 255
+ 56
+ 123
+ 2
+ 123
+ 2
+ 69
+ 7
+ 69
+ 7
+ 69
+ 7
+ 69
+ 7
+ 69
+ 7
+ 69
+ 7
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 52
+ 2
+ 40
+ 0
+ 66
+ 8
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 7
+ 0
+ 128
+ 62
+ 16
+ 0
+ 27
+ 199
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 10
+ 0
+ 200
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 27
+ 199
+ 227
+ 56
+ 25
+ 0
+ 226
+ 4
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+ |
+
+
+ Послед. фаз
+
+ |
+
+
+
+ Кол-во фаз
+
+ |
+
+
+
+ Номинал U, Вx10
+
+ |
+
+
+
+ Отклонение U+, %x100
+
+ |
+
+
+
+ Отклонение U-, %x100
+
+ |
+
+
+
+ Номинал F, Гцx100
+
+ |
+
+
+
+ Отклонение F+, %x100
+
+ |
+
+
+
+ Отклонение F-, %x100
+
+ |
+
+
+
+ Номинал I, Аx10
+
+ |
+
+
+
+ Темпер. предупр.
+
+ |
+
+
+
+ Темпер. авария
+
+ |
+
+
+
+ АЦП макс. Uab, Вх10
+
+ |
+
+
+
+ АЦП макс. Uca, Вх10
+
+ |
+
+
+
+ АЦП макс. Ic, Ах10
+
+ |
+
+
+
+ АЦП макс. Ia, Ах10
+
+ |
+
+
+
+ АЦП ур. нуля Uab
+
+ |
+
+
+
+ АЦП ур. нуля Uca
+
+ |
+
+
+
+ АЦП ур. нуля Ic
+
+ |
+
+
+
+ АЦП ур. нуля Ia
+
+ |
+
+
+
+ АЦП ур. нуля Trad
+
+ |
+
+
+
+ АЦП ур. нуля Tshkaf
+
+ |
+
+
+
+ Ампл. Imax, % от Inom
+
+ |
+
+
+
+ rms_window_size
+
+ |
+
+
+
+ rms_exp_alpha
+
+ |
+
+
+
+ ШИМ PhaseMask
+
+ |
+
+
+
+ ШИМ Частота, Гц
+
+ |
+
+
+
+ ШИМ Скважность, %
+
+ |
+
+
+
+ ШИМ Длина пачки
+
+ |
+
+
+
+ Угол Макс. 0..1
+
+ |
+
+
+
+ Угол Мин. 0..1
+
+ |
+
+
+
+ ПИД Kp, x10 000
+
+ |
+
+
+
+ ПИД Ki, x10 000
+
+ |
+
+
+
+ ПИД Kd, x10 000
+
+ |
+
+
+
+
+
+
+
diff --git a/Информация для программиста (УПП СП СЭД)/Modbus/Вызов функций.mbp b/Информация для программиста (УПП СП СЭД)/Modbus/Вызов функций.mbp
new file mode 100644
index 0000000..98cda53
--- /dev/null
+++ b/Информация для программиста (УПП СП СЭД)/Modbus/Вызов функций.mbp
@@ -0,0 +1,138 @@
+
+
+
+
+ 96
+
+ 1000
+ 1
+ 1
+ 0
+ 0
+ 4
+ 0
+ 0
+ 0
+ 2
+ 16
+
+ 900
+ 900
+
+
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+
+ 0
+ 0
+ 9
+ 2
+
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ Type log name here
+
+
+
+ 1
+ 1
+ 1000
+ 0
+ 1
+ 1
+ 1
+ Type log name here
+
+
+ 1
+ 1000
+ 16
+ 0
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ Go
+
+ |
+
+
+
+ Stop
+
+ |
+
+
+
+ Kvitir
+
+ |
+
+
+
+ Set default PUI
+
+ |
+
+
+
+ Set Default Internal
+
+ |
+
+
+
+ Reset MCU
+
+ |
+
+
+
+
diff --git a/Информация для программиста (УПП СП СЭД)/Modbus/Значения для ПУИ.mbp b/Информация для программиста (УПП СП СЭД)/Modbus/Значения для ПУИ.mbp
new file mode 100644
index 0000000..54ff48d
--- /dev/null
+++ b/Информация для программиста (УПП СП СЭД)/Modbus/Значения для ПУИ.mbp
@@ -0,0 +1,277 @@
+
+
+
+
+ 96
+
+ 100
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 4
+ 10
+
+ 950
+ 1120
+ 900
+ 900
+
+
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+
+ 0
+ 0
+ 1
+ 1
+
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ Type log name here
+
+
+
+ 1
+ 1
+ 1000
+ 0
+ 1
+ 1
+ 1
+ Type log name here
+
+
+ 4
+ 0
+ 19
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 10
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 213
+ 0
+ 198
+ 0
+
+
+
+
+
+ Текущая авария
+
+ |
+
+
+
+ Состояние УПП
+
+ |
+
+
+
+ U, В
+
+ |
+
+
+
+ Uab, В
+
+ |
+
+
+
+ Ubc, В
+
+ |
+
+
+
+ Uca, В
+
+ |
+
+
+
+ I, А x10
+
+ |
+
+
+
+ Ia, А x10
+
+ |
+
+
+
+ Ib, А x10
+
+ |
+
+
+
+ Ic, А x10
+
+ |
+
+
+
+ F, Гц x10
+
+ |
+
+
+
+ Fab, Гц x10
+
+ |
+
+
+
+ Fbc, Гц x10
+
+ |
+
+
+
+ Fca, Гц x10
+
+ |
+
+
+
+ Tрад, °С x10
+
+ |
+
+
+
+ Tвнутр, °С x10
+
+ |
+
+
+
+
+
+
+ Режим работы
+ Режим работы
+ Нет связи с ЛСУ
+ Нет входной сети
+ Токоограничение
+ Повышенное напряжеине
+ Пониежнное напряжение
+
+
+
+
+
+
+
+
+
+
+
+ Режим работы
+ Режим работы
+ Нет связи с ЛСУ
+ Нет входной сети
+ Токоограничение
+ Повышенное напряжеине
+ Пониженное напряжение
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Информация для программиста (УПП СП СЭД)/Modbus/Настройки ПУИ.mbp b/Информация для программиста (УПП СП СЭД)/Modbus/Настройки ПУИ.mbp
new file mode 100644
index 0000000..d0d91de
--- /dev/null
+++ b/Информация для программиста (УПП СП СЭД)/Modbus/Настройки ПУИ.mbp
@@ -0,0 +1,169 @@
+
+
+
+
+ 96
+
+ 1000
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 10
+
+ 900
+ 900
+
+
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+ 200
+
+ 0
+ 0
+ 6
+ 2
+
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ Type log name here
+
+
+
+ 1
+ 1
+ 1000
+ 0
+ 1
+ 1
+ 1
+ Type log name here
+
+
+ 3
+ 0
+ 10
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 44
+ 1
+ 136
+ 19
+ 80
+ 0
+ 120
+ 0
+ 24
+ 0
+ 7
+ 0
+ 136
+ 19
+ 30
+ 0
+ 1
+ 0
+ 0
+ 0
+
+
+
+
+
+ Iref, %
+
+ |
+
+
+
+ Тнт, мс
+
+ |
+
+
+
+ Umin, %
+
+ |
+
+
+
+ Umax, %
+
+ |
+
+
+
+ Imax, % от 50 А
+
+ |
+
+
+
+ Imin, %
+
+ |
+
+
+
+ TiMax, мкс
+
+ |
+
+
+
+ Tdelay, с
+
+ |
+
+
+
+ Interlance
+
+ |
+
+
+
+
+
+
+
diff --git a/Информация для программиста (УПП СП СЭД)/Modbus/Управление от ПУИ.mbp b/Информация для программиста (УПП СП СЭД)/Modbus/Управление от ПУИ.mbp
new file mode 100644
index 0000000..00cf497
--- /dev/null
+++ b/Информация для программиста (УПП СП СЭД)/Modbus/Управление от ПУИ.mbp
@@ -0,0 +1,78 @@
+
+
+
+
+ 96
+
+ 1000
+ 1
+ 1
+ 0
+ 0
+ 4
+ 0
+ 0
+ 0
+ 2
+ 1
+
+ 900
+ 900
+
+
+ 200
+
+ 0
+ 0
+ 1
+ 2
+
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ Type log name here
+
+
+
+ 1
+ 1
+ 1000
+ 0
+ 1
+ 1
+ 1
+ Type log name here
+
+
+ 3
+ 100
+ 1
+ 0
+
+
+
+
+ 1
+ 0
+
+
+
+
+
+
+
+