133 lines
4.0 KiB
C
133 lines
4.0 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
|
||
//di_signal->di_item.status, di->di_iteml.type
|
||
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)
|
||
{
|
||
//I don't know what's the meaning of this line.Whatever I change the 5000 to what , it is always enter the " if " and set the fault level.
|
||
//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);
|
||
}
|
||
}
|
||
|
||
/*无,消防1,消防2,消防3,DO1反馈信号,DO2反馈信号,DO3反馈信号,DO4反馈信号,DO5反馈信号,
|
||
DO6反馈信号,门禁,水浸,保险丝故障信号,PCS故障信号,空调故障信号,隔离开关反馈信号,气体检测故障信号,
|
||
UPS故障信号,EMS故障信号,*/
|
||
//DI策略对应函数,注意应与枚举DiStrategy顺序一致
|
||
const DiFun di_func[kDiType_End]= {
|
||
NULL,
|
||
ord_di_emerge_stop_func, //急停,
|
||
ord_di_fire_alarm1_func,//消防1
|
||
ord_di_fire_alarm1_func,//消防2
|
||
ord_di_fire_alarm1_func,//消防3
|
||
ord_di_do_feedback_func,//DO1反馈信号
|
||
ord_di_do_feedback_func,//DO2反馈信号
|
||
ord_di_do_feedback_func,//DO3反馈信号
|
||
ord_di_do_feedback_func,//DO4反馈信号
|
||
ord_di_do_feedback_func,//DO5反馈信号
|
||
ord_di_do_feedback_func,//DO6反馈信号
|
||
NULL,//门禁
|
||
ord_di_water1_fun,//水浸
|
||
ord_di_fuse1_fun,//保险丝故障信号
|
||
NULL,//PCS故障信号
|
||
NULL,//空调故障信号
|
||
NULL,//隔离开关反馈信号
|
||
NULL,//气体检测故障信号
|
||
NULL,//UPS故障信号
|
||
NULL//EMS故障信号
|
||
};
|
||
|
||
|