修改接收为kgf1和kgf2都接收转发

This commit is contained in:
2026-04-19 14:07:42 +08:00
parent daa4fd6bd3
commit c8b47e57ab
6 changed files with 240 additions and 171 deletions

15
CAN.C
View File

@@ -777,8 +777,6 @@ void CAN_vInit(void)
/// - message object is used as receive object /// - message object is used as receive object
/// - this message object is assigned to list 1 (node 0) /// - this message object is assigned to list 1 (node 0)
//--------------MOCTR11 = 0x00A00000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR11); // Addressing MO11 control register CAN_vWriteCANAddress(CAN_MOCTR11); // Addressing MO11 control register
CAN_vWriteAMData(0x00A00000); // load MO11 control register CAN_vWriteAMData(0x00A00000); // load MO11 control register
@@ -789,11 +787,11 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list /// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1) /// order (like class 1)
/// - extended 29-bit identifier /// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000004 /// - identifier 29-bit: 0x15000006
//--------------MOAR11 = 0xF5000004--------------------------------------- //--------------MOAR11 = 0xF5000006---------------------------------------
CAN_vWriteAMData(0xF5000004); // load MO11 arbitration register CAN_vWriteAMData(0xF5000006); // load MO11 arbitration register
// CAN Address pointing to the CAN_MODATAH11 // CAN Address pointing to the CAN_MODATAH11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1) CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -1009,6 +1007,7 @@ void CAN_vInit(void)
/// - message object is used as receive object /// - message object is used as receive object
/// - this message object is assigned to list 1 (node 0) /// - this message object is assigned to list 1 (node 0)
//--------------MOCTR14 = 0x00A00000--------------------------------------- //--------------MOCTR14 = 0x00A00000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR14); // Addressing MO14 control register CAN_vWriteCANAddress(CAN_MOCTR14); // Addressing MO14 control register
@@ -1021,11 +1020,11 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list /// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1) /// order (like class 1)
/// - extended 29-bit identifier /// - extended 29-bit identifier
/// - identifier 29-bit: 0x11000003 /// - identifier 29-bit: 0x15000004
//--------------MOAR14 = 0xF1000003--------------------------------------- //--------------MOAR14 = 0xF5000004---------------------------------------
CAN_vWriteAMData(0xF1000003); // load MO14 arbitration register CAN_vWriteAMData(0xF5000004); // load MO14 arbitration register
// CAN Address pointing to the CAN_MODATAH14 // CAN Address pointing to the CAN_MODATAH14
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1) CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)

File diff suppressed because one or more lines are too long

View File

@@ -17,8 +17,8 @@
</Extensions> </Extensions>
<DaveTm> <DaveTm>
<dwLowDateTime>187610842</dwLowDateTime> <dwLowDateTime>-1575929917</dwLowDateTime>
<dwHighDateTime>31157159</dwHighDateTime> <dwHighDateTime>31246864</dwHighDateTime>
</DaveTm> </DaveTm>
<Target> <Target>

39
MAIN.C
View File

@@ -243,43 +243,26 @@ void main(void)
// } // }
//E3<45><33>ʼ<EFBFBD><CABC> 20251117 //E3<45><33>ʼ<EFBFBD><CABC> 20251117
un_inf_can_kgf_output1.bit_data.KGF01 = 0x01; // E3 un_inf_can_kgf_output1.bit_data.KGF13 = 0x01; // <EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output1.bit_data.KGF02 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> un_inf_can_kgf_output2.bit_data.KGF01 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ1
un_inf_can_kgf_output1.bit_data.KGF03 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> un_inf_can_kgf_output2.bit_data.KGF02 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ2
un_inf_can_kgf_output1.bit_data.KGF05 = 0x01; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD> un_inf_can_kgf_output2.bit_data.KGF03 = 0x01; // ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
un_inf_can_kgf_output1.bit_data.KGF06 = 0x01; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD> un_inf_can_kgf_output2.bit_data.KGF04 = 0x01; // E3<EFBFBD><EFBFBD>Դ
un_inf_can_kgf_output1.bit_data.KGF07 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> un_inf_can_kgf_output2.bit_data.KGF05 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ1
un_inf_can_kgf_output1.bit_data.KGF08 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> un_inf_can_kgf_output2.bit_data.KGF06 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ2
un_inf_can_kgf_output1.bit_data.KGF09 = 0 ; // <20><><EFBFBD><EFBFBD> un_inf_can_kgf_output2.bit_data.KGF15 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ3
un_inf_can_kgf_output1.bit_data.KGF11 = 0x01; // <20><>װ un_inf_can_kgf_output2.bit_data.KGF16 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ4
un_inf_can_kgf_output1.bit_data.KGF12 = 0x01; // <20><>װ
un_inf_can_kgf_output1.bit_data.KGF14 = 0 ; // <20><>
un_inf_can_kgf_output1.bit_data.KGF15 = 0x01; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
un_inf_can_kgf_output1.bit_data.KGF16 = 0x01; // ң<><D2A3><EFBFBD><EFBFBD>
while(1) while(1)
{ {
// USER CODE BEGIN (MAIN_Main,4)
// for(j=0;j<200;j++){for(i=0;i<133;i++)WDT_vRefresh();}
// tmp[3] = (ubyte)CntCan_1;
// tmp[2] = (ubyte)(CntCan_1>>8);
// SwSample(); // SwSample();
CanRXTX(); CanRXTX();
CanErrorProcess(); CanErrorProcess();
WDT_vRefresh(); WDT_vRefresh();
// LedDr(); // LedDr();
BootMain(); BootMain();
// tmp[1] = (ubyte)CntCan_1;
// tmp[0] = (ubyte)(CntCan_1>>8);
// CAN_vLoadData(0x2, (ulong *)(tmp)); // Add this Line
// CAN_vTransmit(2);
// for(j=0;j<200;j++){for(i=0;i<133;i++)WDT_vRefresh();}
// USER CODE END
} }
} // End of function main } // End of function main

223
User.c
View File

@@ -2,14 +2,14 @@
#include "RTC.H" #include "RTC.H"
#include "temperature.H" #include "temperature.H"
#include <string.h> #include <string.h>
//can<EFBFBD><EFBFBD>Ϣ //can信息
UnInfCan UnInfCan_1 = {0}; UnInfCan UnInfCan_1 = {0};
UnSwOut UnSwOut_1 = {0}; UnSwOut UnSwOut_1 = {0};
//CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //CAN发送周期
uword CntCan_1 = 0; uword CntCan_1 = 0;
bit FlgCan_1 = 0; bit FlgCan_1 = 0;
//<EFBFBD><EFBFBD>һ<EFBFBD>βɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ //第一次采集到有效数据指示
bit FlgOneTime = 0; bit FlgOneTime = 0;
uword RgCanPerid = 1000; uword RgCanPerid = 1000;
@@ -17,41 +17,45 @@ uword RgCanPerid = 1000;
UnTimeOutput sleeptime = {0}; UnTimeOutput sleeptime = {0};
UnTimeOutput waketime = {0}; UnTimeOutput waketime = {0};
UnTimeOutput currenttime = {0}; UnTimeOutput currenttime = {0};
UnTimeOutput inittime = {00,1,1,0,0,0,0,0};// Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2000<30>꣬1<EAA3AC><31>1<EFBFBD><31> <20><><EFBFBD>գ<EFBFBD>0<EFBFBD><30>0<EFBFBD><30>00 UnTimeOutput inittime = {00,1,1,0,0,0,0,0};// 默认设置 2000年1月1日 周日0000
UnTimeOutput un_time_output1 = {0};//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨ʱ<EFBFBD><EFBFBD> UnTimeOutput un_time_output1 = {0};//接收设定时间
UnInfCanKGFOutput un_inf_can_kgf_output2 = {0};//kgf<EFBFBD><EFBFBD><EFBFBD><EFBFBD> UnInfCanKGFOutput un_inf_can_kgf_output2 = {0};//kgf输出
UnInfCanKGFOutput un_inf_can_kgf_output1 = {0};//kgf<EFBFBD><EFBFBD><EFBFBD><EFBFBD> UnInfCanKGFOutput un_inf_can_kgf_output1 = {0};//kgf输出
UnInfCanKGFOutput un_inf_can_kgf_output3 = {0};//kgf或结果
UnInfCanKGFOutput un_inf_can_kgf_output4 = {0};//kgf或结果
UnSampleKgfCommand un_sample_kgf_command = {0};//kgf转发
UnTimeOutput waketimelast = {0}; UnTimeOutput waketimelast = {0};
UnTimeOutput wake_time_10min = {0}; UnTimeOutput wake_time_10min = {0};
SystemState sleepstate = STATE_INIT; SystemState sleepstate = STATE_INIT;
//PWM 20181227 //PWM 20181227
ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
ubyte powerstate = 0;//<EFBFBD><EFBFBD>Դ״̬ ubyte powerstate = 0;//电源状态
ubyte vcu_can_cnt = 0; // ֡<EFBFBD>ۼ<EFBFBD><EFBFBD><EFBFBD> ubyte vcu_can_cnt = 0; // 帧累加器
ubyte vcu_can_last = 0; // ֡<EFBFBD>ۼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥֵ ubyte vcu_can_last = 0; // 帧累加器过去值
bool flg_wake_ecu = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>־ bool flg_wake_ecu = 0; //控制器唤醒标志
bool flg_KGF = 0;//KGF<EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>־ bool flg_KGF = 0;//KGF唤醒标志
ubyte can_error_cnt = 0; ubyte can_error_cnt = 0;
ubyte can_error_flg = 0; ubyte can_error_flg = 0;
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
//RTC<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> //RTC定时器
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
void RTCProcess(void) void RTCProcess(void)
{ {
//************************************************************************ //************************************************************************
//////CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //////CAN发送周期
if(FlgCan_1){CntCan_1++;if(CntCan_1 >= RgCanPerid){FlgCan_1=0; CntCan_1=0;}}else{CntCan_1=0;} if(FlgCan_1){CntCan_1++;if(CntCan_1 >= RgCanPerid){FlgCan_1=0; CntCan_1=0;}}else{CntCan_1=0;}
//************************************************************************ //************************************************************************
} }
//can<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //can错误处理
void CanErrorProcess(void) void CanErrorProcess(void)
{ {
ubyte ubNSRL; ubyte ubNSRL;
@@ -91,10 +95,10 @@ void CanErrorProcess(void)
void CanTransmit(void) void CanTransmit(void)
{ {
//----------------- -------- //----------------- --------
// װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 装载数据
if(1 == flg_KGF)//<EFBFBD>ȴ<EFBFBD>KGF<EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(1 == flg_KGF)//等待KGF唤醒后再发送数据
{ {
CAN_waitTransmit(DF_SwTx);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>һ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᶪ֡ CAN_waitTransmit(DF_SwTx);//发送前等待上一帧发送完毕,这样不会丢帧
CAN_vLoadData(DF_SwTx, (ulong *)(&UnInfCan_1.ArrData.Arr[0][0])); CAN_vLoadData(DF_SwTx, (ulong *)(&UnInfCan_1.ArrData.Arr[0][0]));
CAN_vTransmit(DF_SwTx); CAN_vTransmit(DF_SwTx);
} }
@@ -112,12 +116,12 @@ void canSendTo(ubyte index,ubyte *buf)
CanTransmitbuf[4] = buf[6]; CanTransmitbuf[4] = buf[6];
CanTransmitbuf[5] = buf[7]; CanTransmitbuf[5] = buf[7];
CAN_waitTransmit(index);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>һ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᶪ֡ CAN_waitTransmit(index);//发送前等待上一帧发送完毕,这样不会丢帧
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CAN_vLoadData(index, (ulong *)CanTransmitbuf);// 装载数据
CAN_vTransmit(index); CAN_vTransmit(index);
} }
//CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡ //CAN发送一帧
void CanTX(void) void CanTX(void)
{ {
//----------------------------------- //-----------------------------------
@@ -133,7 +137,7 @@ void CanTX(void)
CanTransmit(); CanTransmit();
} }
//<EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //休眠处理函数
//------------------------------------------------------------------ //------------------------------------------------------------------
void SystemStateMachine(SystemState *RgSTT) void SystemStateMachine(SystemState *RgSTT)
{ {
@@ -142,9 +146,9 @@ void SystemStateMachine(SystemState *RgSTT)
{ {
//------------------------------------------- //-------------------------------------------
case STATE_INIT: case STATE_INIT:
if(NORMAL == flg_wake_ecu)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(NORMAL == flg_wake_ecu)//控制器唤醒
{ {
bm8563SetAlarm(&waketime); //<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> bm8563SetAlarm(&waketime); //设置唤醒时间
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput)); memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
*RgSTT = STATE_ON; *RgSTT = STATE_ON;
} }
@@ -155,52 +159,52 @@ void SystemStateMachine(SystemState *RgSTT)
break; break;
case STATE_ON: case STATE_ON:
if(bm8563CheckAlarmFlag())//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD>عر<EFBFBD> if(bm8563CheckAlarmFlag())//唤醒时间到以及高压开关关闭
{ {
bm8563SetTime(&inittime);//20250802 <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<CEAA><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bm8563SetTime(&inittime);//20250802 初始化时间 解决因为时间不对导致无法休眠问题
bm8563SetAlarm(&sleeptime);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> bm8563SetAlarm(&sleeptime);//设置休眠时间
KGF_PIN = 0; //KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD> KGF_PIN = 0; //KGF休眠
CAN_PIN = 1; //canоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> CAN_PIN = 1; //can芯片休眠
BATTERY_PIN = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BATTERY_PIN = 0;//电池休眠
*RgSTT = STATE_INIT; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>״̬ *RgSTT = STATE_INIT; // 初始化状态
PS_vSetPowerDown();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> PS_vSetPowerDown();//休眠
} }
else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//<EFBFBD>Ƚ<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//比较值是否一样,不一样的话立马更新
{ {
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput)); memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
bm8563SetAlarm(&waketime); bm8563SetAlarm(&waketime);
*RgSTT = STATE_ON; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *RgSTT = STATE_ON; // 保持状态(唤醒后由中断处理)
} }
else if( (POWER_WORKING == powerstate) || (POWER_EMERGENCY == powerstate) )//<EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD>״̬ else if( (POWER_WORKING == powerstate) || (POWER_EMERGENCY == powerstate) )//等于工作状态
{ {
*RgSTT = STATE_ON2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>STATE_ON2 *RgSTT = STATE_ON2; // 进入STATE_ON2
} }
else else
{ {
*RgSTT = STATE_ON; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> *RgSTT = STATE_ON; // 保持
} }
break; break;
case STATE_ON2: case STATE_ON2:
if( POWER_STANDBY == powerstate )//<EFBFBD>ܿ<EFBFBD><EFBFBD>عرջ<EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD>standy if( POWER_STANDBY == powerstate )//总开关关闭或者进入standy
{ {
bm8563SetTime(&inittime);//20250802 <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<CEAA><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bm8563SetTime(&inittime);//20250802 初始化时间 解决因为时间不对导致无法休眠问题
bm8563SetAlarm(&sleeptime); bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD> KGF_PIN = 0; //KGF休眠
CAN_PIN = 1; //canоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> CAN_PIN = 1; //can芯片休眠
BATTERY_PIN = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BATTERY_PIN = 0;//电池休眠
*RgSTT = STATE_INIT; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *RgSTT = STATE_INIT; // 保持状态(唤醒后由中断处理)
PS_vSetPowerDown();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> PS_vSetPowerDown();//休眠
} }
else else
{ {
*RgSTT = STATE_ON2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> *RgSTT = STATE_ON2; // 保持
} }
break; break;
default:; default:;
} }
} }
//CAN<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD> //CAN发送接收
void CanRXTX(void) void CanRXTX(void)
{ {
stCAN_SWObj StrCanRx = {0}; stCAN_SWObj StrCanRx = {0};
@@ -230,7 +234,7 @@ void CanRXTX(void)
} }
if(CAN_ubNewData(DF_SwRxKGF2))//<EFBFBD>ȴ<EFBFBD>KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(CAN_ubNewData(DF_SwRxKGF2))//等待KGF唤醒
{ {
CAN_vGetMsgObj(DF_SwRxKGF2, &StrCanRx); CAN_vGetMsgObj(DF_SwRxKGF2, &StrCanRx);
@@ -241,18 +245,18 @@ void CanRXTX(void)
} }
if(CAN_ubNewData(DF_SwZFKGF1))//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>E3<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(CAN_ubNewData(DF_SwZFKGF1))//接受E3的转发控制
{ {
CAN_vGetMsgObj(DF_SwZFKGF1, &StrCanRx); CAN_vGetMsgObj(DF_SwZFKGF1, &StrCanRx);
un_inf_can_kgf_output1.arr[2] = StrCanRx.ulDATAL.ubDB[0]; un_sample_kgf_command.arr[2] = StrCanRx.ulDATAL.ubDB[0];
un_inf_can_kgf_output1.arr[3] = StrCanRx.ulDATAL.ubDB[1]; un_sample_kgf_command.arr[3] = StrCanRx.ulDATAL.ubDB[1];
un_inf_can_kgf_output1.arr[0] = StrCanRx.ulDATAL.ubDB[2]; un_sample_kgf_command.arr[0] = StrCanRx.ulDATAL.ubDB[2];
un_inf_can_kgf_output1.arr[1] = StrCanRx.ulDATAL.ubDB[3]; un_sample_kgf_command.arr[1] = StrCanRx.ulDATAL.ubDB[3];
un_inf_can_kgf_output1.arr[6] = StrCanRx.ulDATAH.ubDB[0]; un_sample_kgf_command.arr[6] = StrCanRx.ulDATAH.ubDB[0];
un_inf_can_kgf_output1.arr[7] = StrCanRx.ulDATAH.ubDB[1]; un_sample_kgf_command.arr[7] = StrCanRx.ulDATAH.ubDB[1];
un_inf_can_kgf_output1.arr[4] = StrCanRx.ulDATAH.ubDB[2]; un_sample_kgf_command.arr[4] = StrCanRx.ulDATAH.ubDB[2];
un_inf_can_kgf_output1.arr[5] = StrCanRx.ulDATAH.ubDB[3]; un_sample_kgf_command.arr[5] = StrCanRx.ulDATAH.ubDB[3];
CAN_vReleaseObj(DF_SwZFKGF1); CAN_vReleaseObj(DF_SwZFKGF1);
} }
@@ -278,25 +282,25 @@ void CanRXTX(void)
CAN_vReleaseObj(DF_SwRx); CAN_vReleaseObj(DF_SwRx);
vcu_can_cnt ++;//<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD> vcu_can_cnt ++;//节点在线检测累加
powerstate = UnInfCan_1.ArrData.ArrRX[0][4];//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ״̬ powerstate = UnInfCan_1.ArrData.ArrRX[0][4];//整车电源状态
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> //设定休眠时间
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][0] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][1] << 8) ;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> TimeTemp = UnInfCan_1.ArrData.ArrRX[0][0] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][1] << 8) ;//唤醒时间
if(TimeTemp >= MAX_TIME)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>30<EFBFBD><EFBFBD> if(TimeTemp >= MAX_TIME)//最大限制值30天
{ {
TimeTemp = MAX_TIME; TimeTemp = MAX_TIME;
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Сʱ // 分钟 → 小时
HoursTemp = TimeTemp / 60; HoursTemp = TimeTemp / 60;
sleeptime.bit_data.minute = TimeTemp % 60; sleeptime.bit_data.minute = TimeTemp % 60;
// Сʱ <20><> <20><> // 小时 → 天
DaysTemp = HoursTemp / 24; DaysTemp = HoursTemp / 24;
sleeptime.bit_data.hour = HoursTemp % 24; sleeptime.bit_data.hour = HoursTemp % 24;
if(DaysTemp >= 30)//<EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ if(DaysTemp >= 30)//日超过范围
{ {
sleeptime.bit_data.day = 30; sleeptime.bit_data.day = 30;
} }
@@ -305,21 +309,21 @@ void CanRXTX(void)
sleeptime.bit_data.day = DaysTemp; sleeptime.bit_data.day = DaysTemp;
} }
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> //设定唤醒时间
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][2] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][3] << 8);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> TimeTemp = UnInfCan_1.ArrData.ArrRX[0][2] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][3] << 8);//唤醒时间
if(TimeTemp > MAX_TIME)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>30<EFBFBD><EFBFBD> if(TimeTemp > MAX_TIME)//最大限制值30天
{ {
TimeTemp = MAX_TIME; TimeTemp = MAX_TIME;
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Сʱ // 分钟 → 小时
HoursTemp = TimeTemp / 60; HoursTemp = TimeTemp / 60;
waketime.bit_data.minute = TimeTemp % 60; waketime.bit_data.minute = TimeTemp % 60;
// Сʱ <20><> <20><> // 小时 → 天
DaysTemp = HoursTemp / 24; DaysTemp = HoursTemp / 24;
waketime.bit_data.hour = HoursTemp % 24; waketime.bit_data.hour = HoursTemp % 24;
if(DaysTemp >= 30)//<EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ if(DaysTemp >= 30)//日超过范围
{ {
waketime.bit_data.day = 30; waketime.bit_data.day = 30;
} }
@@ -329,63 +333,98 @@ void CanRXTX(void)
} }
} }
//<EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD> //休眠处理
// SystemStateMachine(&sleepstate); <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ֱ<EFBFBD>Ӷ<EFBFBD><D3B6>ϵ硣 SystemStateMachine(&sleepstate); //
//1000ms<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡ //1000ms发送一帧
if(!FlgCan_1) if(!FlgCan_1)
{ {
FlgCan_1 = 1; FlgCan_1 = 1;
bm8563GetTime(&currenttime);//1s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> bm8563GetTime(&currenttime);//1s更新一次时钟
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>ַ0x03<EFBFBD><EFBFBD> // 读取分钟(地址0x03
UnSwSample_1.arr[4] = (BM8563_ReadReg(BM8563_ALARM_MIN)); UnSwSample_1.arr[4] = (BM8563_ReadReg(BM8563_ALARM_MIN));
// <EFBFBD><EFBFBD>ȡСʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ0x04<EFBFBD><EFBFBD> // 读取小时(地址0x04
UnSwSample_1.arr[2] = (BM8563_ReadReg(BM8563_ALARM_HOUR)); // 24Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit6-7 UnSwSample_1.arr[2] = (BM8563_ReadReg(BM8563_ALARM_HOUR)); // 24小时制需屏蔽Bit6-7
// <EFBFBD><EFBFBD>ȡ<EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD>ַ0x05<EFBFBD><EFBFBD> // 读取日(地址0x05
UnSwSample_1.arr[1] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>λ UnSwSample_1.arr[1] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // 屏蔽控制位
// <EFBFBD><EFBFBD>ȡ<EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD>ַ0x05<EFBFBD><EFBFBD> // 读取日(地址0x05
UnSwSample_1.arr[5] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>λ UnSwSample_1.arr[5] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // 屏蔽控制位
// <EFBFBD><EFBFBD>ȡ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ַ0x06<EFBFBD><EFBFBD>BM8563<EFBFBD><EFBFBD>ֵΪ0x01-0x07<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BCDת<EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 读取周(地址0x06BM8563周值为0x01-0x07无需BCD转换
UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // 仅保留低3位
CanTX(); CanTX();
if(vcu_can_cnt == vcu_can_last)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(vcu_can_cnt == vcu_can_last)//数据一样表示故障
{ {
flg_wake_ecu = FAULT; flg_wake_ecu = FAULT;
if(1 == flg_KGF)//<EFBFBD>ȴ<EFBFBD>KGF<EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(1 == flg_KGF)//等待KGF唤醒后再发送数据
{ {
// canSendTo(DF_SwTxKGF2,(ubyte *)&un_inf_can_kgf_output2.arr[0]); un_inf_can_kgf_output3.bit_data.KGF01 = un_sample_kgf_command.bit_data.KGF01_CH01_Reserve | un_inf_can_kgf_output1.bit_data.KGF01;
canSendTo(DF_SwTxKGF1,(ubyte *)&un_inf_can_kgf_output1.arr[0]); un_inf_can_kgf_output3.bit_data.KGF02 = un_sample_kgf_command.bit_data.KGF01_CH02_Reserve | un_inf_can_kgf_output1.bit_data.KGF02;
un_inf_can_kgf_output3.bit_data.KGF03 = un_sample_kgf_command.bit_data.KGF01_CH03_Reserve | un_inf_can_kgf_output1.bit_data.KGF03;
un_inf_can_kgf_output3.bit_data.KGF04 = un_sample_kgf_command.bit_data.KGF01_PrechargeRelay | un_inf_can_kgf_output1.bit_data.KGF04;
un_inf_can_kgf_output3.bit_data.KGF05 = un_sample_kgf_command.bit_data.KGF01_CH05_Reserve | un_inf_can_kgf_output1.bit_data.KGF05;
un_inf_can_kgf_output3.bit_data.KGF06 = un_sample_kgf_command.bit_data.KGF01_CH06_Reserve | un_inf_can_kgf_output1.bit_data.KGF06;
un_inf_can_kgf_output3.bit_data.KGF07 = un_sample_kgf_command.bit_data.KGF01_HighVoltageRelayA | un_inf_can_kgf_output1.bit_data.KGF07;
un_inf_can_kgf_output3.bit_data.KGF08 = un_sample_kgf_command.bit_data.KGF01_HighVoltageRelayB | un_inf_can_kgf_output1.bit_data.KGF08;
un_inf_can_kgf_output3.bit_data.KGF09 = un_sample_kgf_command.bit_data.KGF01_CH09_Reserve | un_inf_can_kgf_output1.bit_data.KGF09;
un_inf_can_kgf_output3.bit_data.KGF10 = un_sample_kgf_command.bit_data.KGF01_CH10_Reserve | un_inf_can_kgf_output1.bit_data.KGF10;
un_inf_can_kgf_output3.bit_data.KGF11 = un_sample_kgf_command.bit_data.KGF01_LowVoltageRelayA | un_inf_can_kgf_output1.bit_data.KGF11;
un_inf_can_kgf_output3.bit_data.KGF12 = un_sample_kgf_command.bit_data.KGF01_LowVoltageRelayB | un_inf_can_kgf_output1.bit_data.KGF12;
un_inf_can_kgf_output3.bit_data.KGF13 = un_sample_kgf_command.bit_data.KGF01_LowVoltageCharge | un_inf_can_kgf_output1.bit_data.KGF13;
un_inf_can_kgf_output3.bit_data.KGF14 = un_sample_kgf_command.bit_data.KGF01_CH14_Reserve | un_inf_can_kgf_output1.bit_data.KGF14;
un_inf_can_kgf_output3.bit_data.KGF15 = un_sample_kgf_command.bit_data.KGF01_CH15_Reserve | un_inf_can_kgf_output1.bit_data.KGF15;
un_inf_can_kgf_output3.bit_data.KGF16 = un_sample_kgf_command.bit_data.KGF01_CH16_Reserve | un_inf_can_kgf_output1.bit_data.KGF16;
un_inf_can_kgf_output4.bit_data.KGF01 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerA | un_inf_can_kgf_output2.bit_data.KGF01;
un_inf_can_kgf_output4.bit_data.KGF02 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerB | un_inf_can_kgf_output2.bit_data.KGF02;
un_inf_can_kgf_output4.bit_data.KGF03 = un_sample_kgf_command.bit_data.KGF02_RemotePower | un_inf_can_kgf_output2.bit_data.KGF03;
un_inf_can_kgf_output4.bit_data.KGF04 = un_sample_kgf_command.bit_data.KGF02_VcuE3Power | un_inf_can_kgf_output2.bit_data.KGF04;
un_inf_can_kgf_output4.bit_data.KGF05 = un_sample_kgf_command.bit_data.KGF02_NetworkSwitchPowerA | un_inf_can_kgf_output2.bit_data.KGF05;
un_inf_can_kgf_output4.bit_data.KGF06 = un_sample_kgf_command.bit_data.KGF02_NetworkSwitchPowerB | un_inf_can_kgf_output2.bit_data.KGF06;
un_inf_can_kgf_output4.bit_data.KGF07 = un_sample_kgf_command.bit_data.KGF02_LeftHeadlightA | un_inf_can_kgf_output2.bit_data.KGF07;
un_inf_can_kgf_output4.bit_data.KGF08 = un_sample_kgf_command.bit_data.KGF02_LeftHeadlightB | un_inf_can_kgf_output2.bit_data.KGF08;
un_inf_can_kgf_output4.bit_data.KGF09 = un_sample_kgf_command.bit_data.KGF02_RightHeadlightA | un_inf_can_kgf_output2.bit_data.KGF09;
un_inf_can_kgf_output4.bit_data.KGF10 = un_sample_kgf_command.bit_data.KGF02_RightHeadlightB | un_inf_can_kgf_output2.bit_data.KGF10;
un_inf_can_kgf_output4.bit_data.KGF11 = un_sample_kgf_command.bit_data.KGF02_LeftTaillightA | un_inf_can_kgf_output2.bit_data.KGF11;
un_inf_can_kgf_output4.bit_data.KGF12 = un_sample_kgf_command.bit_data.KGF02_LeftTaillightB | un_inf_can_kgf_output2.bit_data.KGF12;
un_inf_can_kgf_output4.bit_data.KGF13 = un_sample_kgf_command.bit_data.KGF02_RightTaillightA | un_inf_can_kgf_output2.bit_data.KGF13;
un_inf_can_kgf_output4.bit_data.KGF14 = un_sample_kgf_command.bit_data.KGF02_RightTaillightB | un_inf_can_kgf_output2.bit_data.KGF14;
un_inf_can_kgf_output4.bit_data.KGF15 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerC | un_inf_can_kgf_output2.bit_data.KGF15;
un_inf_can_kgf_output4.bit_data.KGF16 = un_sample_kgf_command.bit_data.KGF02_ComputerPowerD | un_inf_can_kgf_output2.bit_data.KGF16;
canSendTo(DF_SwTxKGF1,(ubyte *)&un_inf_can_kgf_output3.arr[0]);
canSendTo(DF_SwTxKGF2,(ubyte *)&un_inf_can_kgf_output4.arr[0]);
} }
} }
else else
{ {
flg_wake_ecu = NORMAL; flg_wake_ecu = NORMAL;
vcu_can_last = vcu_can_cnt;//<EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><EFBFBD><EFBFBD> vcu_can_last = vcu_can_cnt;//数据更新
} }
GetTemp();//1s<EFBFBD>ɼ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GetTemp();//1s采集一次温度
UnSwSample_1.bit_data.emergency_stop_switch = 0; UnSwSample_1.bit_data.emergency_stop_switch = 0;
UnSwSample_1.bit_data.High_voltage_switch = 1; UnSwSample_1.bit_data.High_voltage_switch = 1;
UnSwSample_1.bit_data.CH03 = flg_wake_ecu; UnSwSample_1.bit_data.CH03 = flg_wake_ecu;
if(1 == flg_KGF)//<EFBFBD>ȴ<EFBFBD>KGF<EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(1 == flg_KGF)//等待KGF唤醒后再发送数据
{ {
canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1.arr[0]); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ɼ<EFBFBD> canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1.arr[0]); //不需要发送 小车不需要采集
} }
} }
if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625<EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD> if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625判断是否出现总线错误
{ {
can_error_flg = can_error_cnt; can_error_flg = can_error_cnt;
CAN_vInit(); CAN_vInit();

48
user.H
View File

@@ -94,8 +94,55 @@ typedef union _UnInfCanKGFOutput
} UnInfCanKGFOutput; } UnInfCanKGFOutput;
// VCU -> <20>ɼ<EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD> 0x15000004
typedef struct _StrSampleKgfCommand
{
//-----KGF01 Ŀ<><C4BF>λͼ byte0..1-----------------------------------------
unsigned int KGF01_CH01_Reserve : 1; // bit0 ͨ<><CDA8>1
unsigned int KGF01_CH02_Reserve : 1; // bit1 ͨ<><CDA8>2
unsigned int KGF01_CH03_Reserve : 1; // bit2 ͨ<><CDA8>3
unsigned int KGF01_PrechargeRelay : 1; // bit3 ͨ<><CDA8>4 Ԥ<><D4A4><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>
unsigned int KGF01_CH05_Reserve : 1; // bit4 ͨ<><CDA8>5
unsigned int KGF01_CH06_Reserve : 1; // bit5 ͨ<><CDA8>6
unsigned int KGF01_HighVoltageRelayA : 1; // bit6 ͨ<><CDA8>7 <20><>ѹ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>A
unsigned int KGF01_HighVoltageRelayB : 1; // bit7 ͨ<><CDA8>8 <20><>ѹ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>B
unsigned int KGF01_CH09_Reserve : 1; // bit8 ͨ<><CDA8>9
unsigned int KGF01_CH10_Reserve : 1; // bit9 ͨ<><CDA8>10
unsigned int KGF01_LowVoltageRelayA : 1; // bit10 ͨ<><CDA8>11 <20><>ѹ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>A
unsigned int KGF01_LowVoltageRelayB : 1; // bit11 ͨ<><CDA8>12 <20><>ѹ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD>B
unsigned int KGF01_LowVoltageCharge : 1; // bit12 ͨ<><CDA8>13 <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
unsigned int KGF01_CH14_Reserve : 1; // bit13 ͨ<><CDA8>14
unsigned int KGF01_CH15_Reserve : 1; // bit14 ͨ<><CDA8>15
unsigned int KGF01_CH16_Reserve : 1; // bit15 ͨ<><CDA8>16
//-----KGF02 Ŀ<><C4BF>λͼ byte2..3-----------------------------------------
unsigned int KGF02_ComputerPowerA : 1; // bit16 ͨ<><CDA8>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴA
unsigned int KGF02_ComputerPowerB : 1; // bit17 ͨ<><CDA8>2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴB
unsigned int KGF02_RemotePower : 1; // bit18 ͨ<><CDA8>3 ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
unsigned int KGF02_VcuE3Power : 1; // bit19 ͨ<><CDA8>4 VCU(E3)<29><>Դ
unsigned int KGF02_NetworkSwitchPowerA : 1; // bit20 ͨ<><CDA8>5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴA
unsigned int KGF02_NetworkSwitchPowerB : 1; // bit21 ͨ<><CDA8>6 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴB
unsigned int KGF02_LeftHeadlightA : 1; // bit22 ͨ<><CDA8>7 <20><>ǰ<EFBFBD><C7B0>A
unsigned int KGF02_LeftHeadlightB : 1; // bit23 ͨ<><CDA8>8 <20><>ǰ<EFBFBD><C7B0>B
unsigned int KGF02_RightHeadlightA : 1; // bit24 ͨ<><CDA8>9 <20><>ǰ<EFBFBD><C7B0>A
unsigned int KGF02_RightHeadlightB : 1; // bit25 ͨ<><CDA8>10 <20><>ǰ<EFBFBD><C7B0>B
unsigned int KGF02_LeftTaillightA : 1; // bit26 ͨ<><CDA8>11 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
unsigned int KGF02_LeftTaillightB : 1; // bit27 ͨ<><CDA8>12 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
unsigned int KGF02_RightTaillightA : 1; // bit28 ͨ<><CDA8>13 <20>Һ<EFBFBD><D2BA><EFBFBD>A
unsigned int KGF02_RightTaillightB : 1; // bit29 ͨ<><CDA8>14 <20>Һ<EFBFBD><D2BA><EFBFBD>B
unsigned int KGF02_ComputerPowerC : 1; // bit30 ͨ<><CDA8>15 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴC
unsigned int KGF02_ComputerPowerD : 1; // bit31 ͨ<><CDA8>16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴD
//-----<2D><><EFBFBD><EFBFBD> byte4..7--------------------------------------------------
ulong Reserve ; // bit32..63
} StrSampleKgfCommand;
typedef union _UnSampleKgfCommand
{
StrSampleKgfCommand bit_data; // ʹ<>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ubyte arr[sizeof(StrSampleKgfCommand)]; // ͨ<><CDA8><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>С
} UnSampleKgfCommand;
//---<2D>ⲿҪʹ<D2AA>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--------------------------------------------------------------------- //---<2D>ⲿҪʹ<D2AA>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------------
@@ -108,6 +155,7 @@ extern ubyte can_error_cnt;
extern ubyte can_error_flg; extern ubyte can_error_flg;
extern UnInfCanKGFOutput un_inf_can_kgf_output1;//kgf<67><66><EFBFBD><EFBFBD> extern UnInfCanKGFOutput un_inf_can_kgf_output1;//kgf<67><66><EFBFBD><EFBFBD>
extern UnInfCanKGFOutput un_inf_can_kgf_output2;//kgf<67><66><EFBFBD><EFBFBD>
void CanRXTX(void); void CanRXTX(void);
void SwSample(void); void SwSample(void);