ADM/GW/src/Function_Layer/Lamp_FUNC/NO_BCM_SIG.c

114 lines
2.9 KiB
C

#include "Ignition.h"
#include "Global_Variable.h"
#include "BMS_SOC.h"
#include "Low_SOC_mode.h"
#include "NO_BCM_SIG.h"
#include "can.h"
#include "board.h"
// BCM 신호 반응 없을시 작동 함수
// 1. 모든 신호 일괄 없을 시 -> 들어온 신호 if 문 돌려서 걸리면 cnt 증가 , 정합성 안맞으면 ㄴㄴ
// gb.tmr_cnt 이용, 1초 동안 연결 없을 시, if(gb.tmr_cnt >= (tick_1sec + 1000)) 발동
//GV_Any_Signal_BCM = 0 이상무 / 1 전체 이상 / 2/ 3/ 4/ 5 /6 -> 각 신호 이상
// 각 신호 이상 부분은 각각의 플래그로 수정 가능, 현재 용이성 문제로 간략히 만든 것 뿐
void ALL_BCM_Signal_Check(void){// task 1sec 에 넣으면 될듯
Any_Signal_BCM();
No_signal_CH0_0x570();
No_signal_CH0_0x580();
No_signal_CH0_0x590();
No_signal_CH0_0x595();
No_signal_CH0_0x585();
// if 문으로 GV_BCM_CNT_NOW / GV_CH0_0x570_CNT 부분이 정해진 비트값 이상 오버플로우 나지 않게 방어 코드
if(GV_BCM_CNT_NOW>=200){ // 200 이상 넘어가면 값 초기화, 다 0으로 만들면 GV_Any_Signal_BCM 걸릴 수 있음
GV_BCM_CNT_NOW =0;
GV_CH0_0x570_CNT =1;
GV_CH0_0x580_CNT =1;
GV_CH0_0x590_CNT =1;
GV_CH0_0x595_CNT =1;
GV_CH0_0x585_CNT =1;
}
}
void Any_Signal_BCM (void){
GV_BCM_CNT_NOW = GV_CH0_0x570_CNT+GV_CH0_0x580_CNT+GV_CH0_0x590_CNT+GV_CH0_0x595_CNT+GV_CH0_0x585_CNT;
if(GV_BCM_CNT_PAST != GV_BCM_CNT_NOW){
GV_BCM_CNT_PAST = GV_BCM_CNT_NOW;
}else{
GV_Any_Signal_BCM = 1 ;
// 비상정지 가동
//Emergency_stop_flag = 1;
//GV_VCU_RC_Emergency_Stop = 1;
}
}
// 2. 개별신호 없을 시
void No_signal_CH0_0x570 (void){
if(GV_No_signal_CH0_0x570 != GV_CH0_0x570_CNT){ // BCM_CNT 에는 1초전의 cnt 값을 기록, cnt 값은 현재 상승
GV_No_signal_CH0_0x570 = GV_CH0_0x570_CNT;
}else{ // 1초가 지낫는데도 둘다 같은 값이면 -> 신호가 안들어오고 있음
GV_Any_Signal_BCM = 2 ;
}
}
void No_signal_CH0_0x580 (void){
if(GV_No_signal_CH0_0x580 != GV_CH0_0x580_CNT){ // BCM_CNT 에는 1초전의 cnt 값을 기록, cnt 값은 현재 상승
GV_No_signal_CH0_0x580 = GV_CH0_0x580_CNT;
}else{ // 1초가 지낫는데도 둘다 같은 값이면 -> 신호가 안들어오고 있음
GV_Any_Signal_BCM = 3 ;
}
}
void No_signal_CH0_0x590 (void){
if(GV_No_signal_CH0_0x590 != GV_CH0_0x590_CNT){ // BCM_CNT 에는 1초전의 cnt 값을 기록, cnt 값은 현재 상승
GV_No_signal_CH0_0x590 = GV_CH0_0x590_CNT;
}else{ // 1초가 지낫는데도 둘다 같은 값이면 -> 신호가 안들어오고 있음
GV_Any_Signal_BCM = 4 ;
}
}
void No_signal_CH0_0x595 (void){
if(GV_No_signal_CH0_0x595 != GV_CH0_0x595_CNT){ // BCM_CNT 에는 1초전의 cnt 값을 기록, cnt 값은 현재 상승
GV_No_signal_CH0_0x595 = GV_CH0_0x595_CNT;
}else{ // 1초가 지낫는데도 둘다 같은 값이면 -> 신호가 안들어오고 있음
GV_Any_Signal_BCM = 5 ;
}
}
void No_signal_CH0_0x585 (void){
if(GV_No_signal_CH0_0x585 != GV_CH0_0x585_CNT){ // BCM_CNT 에는 1초전의 cnt 값을 기록, cnt 값은 현재 상승
GV_No_signal_CH0_0x585 = GV_CH0_0x585_CNT;
}else{ // 1초가 지낫는데도 둘다 같은 값이면 -> 신호가 안들어오고 있음
GV_Any_Signal_BCM = 6 ;
}
}