111 lines
2.7 KiB
C
111 lines
2.7 KiB
C
#include "kit_debug.h"
|
||
|
||
#include "dido_manager.h"
|
||
#include "fault_manager.h"
|
||
#include "signal_manager.h"
|
||
#include "flash_manager.h"
|
||
#include "eeprom_manager.h"
|
||
#include "run_status.h"
|
||
|
||
typedef struct
|
||
{
|
||
uint16_t step;
|
||
uint16_t dly;
|
||
}DiParamItem;
|
||
|
||
DiParamItem di_param_item[kDiType_End];
|
||
|
||
|
||
//辅助触点1
|
||
void ord_di_do_feedback_func(uint32_t base_time, DiStatus di_signal, DiType di)
|
||
{
|
||
if(di < kDiType_End)
|
||
{
|
||
if(bms_get_do_status_by_idx(di - kDiType_Do1Feedback) != di_signal)
|
||
{
|
||
di_param_item[di].dly += base_time;
|
||
if(di_param_item[di].dly >= 5000)
|
||
{
|
||
bms_set_fault_level(kFaultCode_Feedback, kFaultLevel_First, kFaultHandle_AlarmIdx);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
di_param_item[di].dly = 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
//消防火警 报故障,断继电器
|
||
void ord_di_fire_alarm1_func(uint32_t base_time, DiStatus di_signal, DiType di)
|
||
{
|
||
if((di < kDiType_End) && (di_signal == kDiStatus_Trigger))
|
||
{
|
||
di_param_item[di].dly += base_time;
|
||
bms_set_fault_level(kFaultCode_Fire, kFaultLevel_Third, kFaultHandle_CutNoRelIdx);
|
||
}
|
||
}
|
||
|
||
|
||
//急停信号
|
||
void ord_di_emerge_stop_func(uint32_t base_time, DiStatus di_signal, DiType di)
|
||
{
|
||
if(di_signal == kDiStatus_Trigger)
|
||
{
|
||
bms_set_fault_level(kFaultCode_Stop, kFaultLevel_Third, kFaultHandle_CutNoRelIdx);
|
||
}
|
||
}
|
||
|
||
|
||
//自锁信号-解除休眠
|
||
void ord_di_self_lock_func(uint32_t base_time, DiStatus di_signal, DiType di)
|
||
{
|
||
bool is_lock_enable_off = false;
|
||
if(di_signal == kDiStatus_Trigger)
|
||
{
|
||
bms_set_signal(kSignalIdx_LowVoltSleep,(SignalStatus)is_lock_enable_off);
|
||
bms_set_signal(kSignalIdx_StandbySleep,(SignalStatus)is_lock_enable_off);
|
||
}
|
||
}
|
||
|
||
//水浸故障1
|
||
void ord_di_water1_fun(uint32_t base_time, DiStatus di_signal, DiType di)
|
||
{
|
||
if((di < kDiType_End) && (di_signal == kDiStatus_Trigger))
|
||
{
|
||
di_param_item[di].dly += base_time;
|
||
bms_set_fault_level(kFaultCode_Water, kFaultLevel_Third, kFaultHandle_CutNoRelIdx);
|
||
}
|
||
}
|
||
|
||
//熔断器故障1
|
||
void ord_di_fuse1_fun(uint32_t base_time, DiStatus di_signal, DiType di)
|
||
{
|
||
if((di < kDiType_End) && (di_signal == kDiStatus_Trigger))
|
||
{
|
||
di_param_item[di].dly += base_time;
|
||
bms_set_fault_level(kFaultCode_FuseStatus, kFaultLevel_Third, kFaultHandle_CutNoRelIdx);
|
||
}
|
||
}
|
||
|
||
//断路器反馈信号1
|
||
void ord_di_breaker1_fun(uint32_t base_time, DiStatus di_signal, DiType di)
|
||
{
|
||
if((di < kDiType_End) && (di_signal == kDiStatus_Trigger))
|
||
{
|
||
di_param_item[di].dly += base_time;
|
||
bms_set_fault_level(kFaultCode_Feedback, kFaultLevel_Third, kFaultHandle_CutNoRelIdx);
|
||
}
|
||
}
|
||
|
||
|
||
//DI策略对应函数,注意应与枚举DiStrategy顺序一致
|
||
const DiFun di_func[kDiType_End]= {
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
};
|
||
|
||
|