修改接收为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

223
User.c
View File

@@ -2,14 +2,14 @@
#include "RTC.H"
#include "temperature.H"
#include <string.h>
//can<EFBFBD><EFBFBD>Ϣ
//can信息
UnInfCan UnInfCan_1 = {0};
UnSwOut UnSwOut_1 = {0};
//CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//CAN发送周期
uword CntCan_1 = 0;
bit FlgCan_1 = 0;
//<EFBFBD><EFBFBD>һ<EFBFBD>βɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ
//第一次采集到有效数据指示
bit FlgOneTime = 0;
uword RgCanPerid = 1000;
@@ -17,41 +17,45 @@ uword RgCanPerid = 1000;
UnTimeOutput sleeptime = {0};
UnTimeOutput waketime = {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 un_time_output1 = {0};//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨ʱ<EFBFBD><EFBFBD>
UnInfCanKGFOutput un_inf_can_kgf_output2 = {0};//kgf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnInfCanKGFOutput un_inf_can_kgf_output1 = {0};//kgf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnTimeOutput inittime = {00,1,1,0,0,0,0,0};// 默认设置 2000年1月1日 周日0000
UnTimeOutput un_time_output1 = {0};//接收设定时间
UnInfCanKGFOutput un_inf_can_kgf_output2 = {0};//kgf输出
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 wake_time_10min = {0};
SystemState sleepstate = STATE_INIT;
//PWM 20181227
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_last = 0; // ֡<EFBFBD>ۼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥֵ
bool flg_wake_ecu = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>־
bool flg_KGF = 0;//KGF<EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>־
ubyte vcu_can_cnt = 0; // 帧累加器
ubyte vcu_can_last = 0; // 帧累加器过去值
bool flg_wake_ecu = 0; //控制器唤醒标志
bool flg_KGF = 0;//KGF唤醒标志
ubyte can_error_cnt = 0;
ubyte can_error_flg = 0;
//-----------------------------------------------------------------------
//RTC<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
//RTC定时器
//-----------------------------------------------------------------------
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;}
//************************************************************************
}
//can<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//can错误处理
void CanErrorProcess(void)
{
ubyte ubNSRL;
@@ -91,10 +95,10 @@ void CanErrorProcess(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_vTransmit(DF_SwTx);
}
@@ -112,12 +116,12 @@ void canSendTo(ubyte index,ubyte *buf)
CanTransmitbuf[4] = buf[6];
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_vLoadData(index, (ulong *)CanTransmitbuf);// װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAN_waitTransmit(index);//发送前等待上一帧发送完毕,这样不会丢帧
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// 装载数据
CAN_vTransmit(index);
}
//CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡
//CAN发送一帧
void CanTX(void)
{
//-----------------------------------
@@ -133,7 +137,7 @@ void CanTX(void)
CanTransmit();
}
//<EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//休眠处理函数
//------------------------------------------------------------------
void SystemStateMachine(SystemState *RgSTT)
{
@@ -142,9 +146,9 @@ void SystemStateMachine(SystemState *RgSTT)
{
//-------------------------------------------
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));
*RgSTT = STATE_ON;
}
@@ -155,52 +159,52 @@ void SystemStateMachine(SystemState *RgSTT)
break;
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>
bm8563SetAlarm(&sleeptime);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
KGF_PIN = 0; //KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_INIT; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>״̬
PS_vSetPowerDown();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bm8563SetTime(&inittime);//20250802 初始化时间 解决因为时间不对导致无法休眠问题
bm8563SetAlarm(&sleeptime);//设置休眠时间
KGF_PIN = 0; //KGF休眠
CAN_PIN = 1; //can芯片休眠
BATTERY_PIN = 0;//电池休眠
*RgSTT = STATE_INIT; // 初始化状态
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));
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
{
*RgSTT = STATE_ON; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_ON; // 保持
}
break;
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);
KGF_PIN = 0; //KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_INIT; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
KGF_PIN = 0; //KGF休眠
CAN_PIN = 1; //can芯片休眠
BATTERY_PIN = 0;//电池休眠
*RgSTT = STATE_INIT; // 保持状态(唤醒后由中断处理)
PS_vSetPowerDown();//休眠
}
else
{
*RgSTT = STATE_ON2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_ON2; // 保持
}
break;
default:;
}
}
//CAN<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD>
//CAN发送接收
void CanRXTX(void)
{
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);
@@ -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);
un_inf_can_kgf_output1.arr[2] = StrCanRx.ulDATAL.ubDB[0];
un_inf_can_kgf_output1.arr[3] = StrCanRx.ulDATAL.ubDB[1];
un_inf_can_kgf_output1.arr[0] = StrCanRx.ulDATAL.ubDB[2];
un_inf_can_kgf_output1.arr[1] = StrCanRx.ulDATAL.ubDB[3];
un_inf_can_kgf_output1.arr[6] = StrCanRx.ulDATAH.ubDB[0];
un_inf_can_kgf_output1.arr[7] = StrCanRx.ulDATAH.ubDB[1];
un_inf_can_kgf_output1.arr[4] = StrCanRx.ulDATAH.ubDB[2];
un_inf_can_kgf_output1.arr[5] = StrCanRx.ulDATAH.ubDB[3];
un_sample_kgf_command.arr[2] = StrCanRx.ulDATAL.ubDB[0];
un_sample_kgf_command.arr[3] = StrCanRx.ulDATAL.ubDB[1];
un_sample_kgf_command.arr[0] = StrCanRx.ulDATAL.ubDB[2];
un_sample_kgf_command.arr[1] = StrCanRx.ulDATAL.ubDB[3];
un_sample_kgf_command.arr[6] = StrCanRx.ulDATAH.ubDB[0];
un_sample_kgf_command.arr[7] = StrCanRx.ulDATAH.ubDB[1];
un_sample_kgf_command.arr[4] = StrCanRx.ulDATAH.ubDB[2];
un_sample_kgf_command.arr[5] = StrCanRx.ulDATAH.ubDB[3];
CAN_vReleaseObj(DF_SwZFKGF1);
}
@@ -278,25 +282,25 @@ void CanRXTX(void)
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>
if(TimeTemp >= MAX_TIME)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>30<EFBFBD><EFBFBD>
//设定休眠时间
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][0] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][1] << 8) ;//唤醒时间
if(TimeTemp >= MAX_TIME)//最大限制值30天
{
TimeTemp = MAX_TIME;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Сʱ
// 分钟 → 小时
HoursTemp = TimeTemp / 60;
sleeptime.bit_data.minute = TimeTemp % 60;
// Сʱ <20><> <20><>
// 小时 → 天
DaysTemp = 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;
}
@@ -305,21 +309,21 @@ void CanRXTX(void)
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>
if(TimeTemp > MAX_TIME)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>30<EFBFBD><EFBFBD>
//设定唤醒时间
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][2] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][3] << 8);//唤醒时间
if(TimeTemp > MAX_TIME)//最大限制值30天
{
TimeTemp = MAX_TIME;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Сʱ
// 分钟 → 小时
HoursTemp = TimeTemp / 60;
waketime.bit_data.minute = TimeTemp % 60;
// Сʱ <20><> <20><>
// 小时 → 天
DaysTemp = 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;
}
@@ -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)
{
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));
// <EFBFBD><EFBFBD>ȡСʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ0x04<EFBFBD><EFBFBD>
UnSwSample_1.arr[2] = (BM8563_ReadReg(BM8563_ALARM_HOUR)); // 24Сʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit6-7
// 读取小时(地址0x04
UnSwSample_1.arr[2] = (BM8563_ReadReg(BM8563_ALARM_HOUR)); // 24小时制需屏蔽Bit6-7
// <EFBFBD><EFBFBD>ȡ<EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD>ַ0x05<EFBFBD><EFBFBD>
UnSwSample_1.arr[1] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>λ
// 读取日(地址0x05
UnSwSample_1.arr[1] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // 屏蔽控制位
// <EFBFBD><EFBFBD>ȡ<EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD>ַ0x05<EFBFBD><EFBFBD>
UnSwSample_1.arr[5] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>λ
// 读取日(地址0x05
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>
UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 读取周(地址0x06BM8563周值为0x01-0x07无需BCD转换
UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // 仅保留低3位
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;
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]);
canSendTo(DF_SwTxKGF1,(ubyte *)&un_inf_can_kgf_output1.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;
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
{
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.High_voltage_switch = 1;
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_vInit();