#include "CAN_CH0_CAN_Communication_Matrix.h" // #include "CAN_APP.h" //#include "Services_Mileage.h" #include "Data_AverageSpeed.h" #include "g_includes.h" extern uint32_t Data_MileageRolling_Counte; /*** 平均车速 ***/ #pragma ghs section bss = ".myNonInitArea" _AvgSpeed_Struct AvgSpeed; _DriverTime DriverTime; uint32_t IGOFFDriverTime; _AvgPower_Struct AvgPower; uint32_t AvgSpeed_Buf[7] = {0}; INT8U k = 0; #pragma ghs section bss = default uint16_t AvgSpeedDisTime; uint8_t EngSpeed_Start_Flag = 0; void Data_AverageSpeed_KL30_Init(void) { AvgSpeed.Mileage = 0; AvgSpeed.DrTime = 0; AvgSpeed.Val = 0; AvgSpeed.Dis = 0; AvgSpeedDisTime = 100; AvgSpeed.Valid = 0; EngSpeed_Start_Flag = 0; AvgSpeed.Speed = 0; } /*void Data_AverageSpeed_KL15_Init(void) { AvgSpeed.Mileage = 0; AvgSpeed.DrTime = 0; AvgSpeed.Val = 0; AvgSpeed.Dis = 0; AvgSpeedDisTime = 100 + 1; AvgSpeed.Valid = 0; EngSpeed_Start_Flag = 0; }*/ void Data_Avg_Speed_Reset(void) { AvgSpeed.Mileage = 0; AvgSpeed.DrTime = 0; AvgSpeed.Val = 0; AvgSpeed.Dis = 0; AvgSpeedDisTime = 100; AvgSpeed.Speed = 0; } /****************************************************************************** 函数名:Data_Avg_Speed_Processing 功 能: 平均车速数据处理 参 数: 无 返回值:无 ******************************************************************************/ void Data_Avg_Speed_Processing(void) { INT8U i = 0; INT8U j = 0; INT8U temp = 0; if(SYS_OPR_STAT_IGN_ON) { if((CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0A18A006_Msg_Count) == CAN_SIG_NORMAL)&& (Get_CAN_CH0_ID_0A18A006_Sig_VehSpeedFail_ESP() != 1)&& (Get_CAN_CH0_ID_0A18A006_Sig_VehSpeed_ESP( ) <= 0x1FFF)&&(CanReceive.Can_0A18A006 == 1)&& (CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0CF00400_Msg_Count) == CAN_SIG_NORMAL)&& (Get_CAN_CH0_ID_0CF00400_Sig_EngSpeed() <= 0xFAFF)&&(CanReceive.Can_0CF00400 == 1)) { if ( AvgSpeed.Mileage >= 10 ) { AvgSpeed.Valid = 1; } if ( AvgSpeedDisTime < 10 ) { AvgSpeedDisTime++; } else { AvgSpeedDisTime = 0; if ( AvgSpeed.DrTime ) { AvgSpeed.Val = (AvgSpeed.Speed) / AvgSpeed.DrTime; } else { AvgSpeed.Val = 0; } if ( (AvgSpeed.Val % 10) >= 5 ) { AvgSpeed.Val += 5; } AvgSpeed.Val /= 10; if ( AvgSpeed.Val >= 180 ) { AvgSpeed.Val = 180; } AvgSpeed.Dis = AvgSpeed.Val; } } } } void AvgSpeed_DriTime_Add(uint32_t Inc) { if(SYS_OPR_STAT_IGN_ON) { if((CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0CF00400_Msg_Count) == CAN_SIG_NORMAL)&&(CanReceive.Can_0CF00400 == 1)&& (Get_CAN_CH0_ID_0CF00400_Sig_EngSpeed() <= 0xFAFF)&&(Get_DataESpeedValid() == 1)) { if(Get_CAN_CH0_ID_0CF00400_Sig_EngSpeed() >= 0xC81) { EngSpeed_Start_Flag = 1; } else { if(Get_CAN_CH0_ID_0CF00400_Sig_EngSpeed() <= 0x960) { EngSpeed_Start_Flag = 0; } } } else { EngSpeed_Start_Flag = 0; } if((CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0A18A006_Msg_Count) == CAN_SIG_NORMAL)&&(CanReceive.Can_0A18A006 == 1)&& (Get_CAN_CH0_ID_0A18A006_Sig_VehSpeedFail_ESP() != 1)&&(Get_CAN_CH0_ID_0A18A006_Sig_VehSpeed_ESP( ) <= 0x1FFF)&& (CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0CF00400_Msg_Count) == CAN_SIG_NORMAL)&& (CanReceive.Can_0CF00400 == 1)&& (Get_CAN_CH0_ID_0CF00400_Sig_EngSpeed() <= 0xFAFF)&&(Get_DataESpeedValid() == 1)) { if ( AvgSpeed.DrTime >= 0x7FFFFFFF ) { if (AvgSpeed.DrTime % 2 == 1) { AvgSpeed.DrTime = (AvgSpeed.DrTime / 2) + 1; } else { AvgSpeed.DrTime = AvgSpeed.DrTime / 2; } } if (EngSpeed_Start_Flag == 1) { AvgSpeed.DrTime += Inc; } } } } void Safety_Belt_DriTime_Add(uint32_t Inc) { if(SYS_OPR_STAT_IGN_ON) { if((CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0A18A006_Msg_Count) == CAN_SIG_NORMAL)&& (Get_CAN_CH0_ID_0A18A006_Sig_VehSpeedFail_ESP() != 1)&& (Get_CAN_CH0_ID_0A18A006_Sig_VehSpeed_ESP( ) <= 0x1FFF)&&(CanReceive.Can_0A18A006 == 1)&& (Common_Get_Act_V_Speed() != 0)) { if ( AvgSpeed.Safety_Belt_DrTime >= 0x7FFFFFFF ) { AvgSpeed.Safety_Belt_DrTime = 0; } AvgSpeed.Safety_Belt_DrTime += Inc; } else { AvgSpeed.Safety_Belt_DrTime = 0; } } } void AvgSpeed_Milleage_Add(uint32_t Inc) { if(SYS_OPR_STAT_IGN_ON) { if((CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0A18A006_Msg_Count) == CAN_SIG_NORMAL)&&(CanReceive.Can_0A18A006 == 1)&& (Get_CAN_CH0_ID_0A18A006_Sig_VehSpeedFail_ESP() != 1)&&(Get_CAN_CH0_ID_0A18A006_Sig_VehSpeed_ESP( ) <= 0x1FFF)&& (CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0CF00400_Msg_Count) == CAN_SIG_NORMAL)&& (CanReceive.Can_0CF00400 == 1)&& (Get_CAN_CH0_ID_0CF00400_Sig_EngSpeed() <= 0xFAFF)&&(Get_DataESpeedValid() == 1)) { if(EngSpeed_Start_Flag == 1) { if ( AvgSpeed.Mileage >= 0x7FFFFFFF ) { AvgSpeed.Mileage = 0; } AvgSpeed.Mileage += Inc; } } } } void AvgSpeed_Speed_Add(uint32_t Inc) { if(SYS_OPR_STAT_IGN_ON) { if((CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0A18A006_Msg_Count) == CAN_SIG_NORMAL)&&(CanReceive.Can_0A18A006 == 1)&& (Get_CAN_CH0_ID_0A18A006_Sig_VehSpeedFail_ESP() != 1)&&(Get_CAN_CH0_ID_0A18A006_Sig_VehSpeed_ESP( ) <= 0x1FFF)&& (CAN_MSG_Status(CAN_CH0, CAN_CH0_ID_can0CF00400_Msg_Count) == CAN_SIG_NORMAL)&& (CanReceive.Can_0CF00400 == 1)&& (Get_CAN_CH0_ID_0CF00400_Sig_EngSpeed() <= 0xFAFF)&&(Get_DataESpeedValid() == 1)) { if(EngSpeed_Start_Flag == 1) { if ( AvgSpeed.Speed >= 0x7FFFFFFF ) { if (AvgSpeed.Speed % 2 == 1) { AvgSpeed.Speed = (AvgSpeed.Speed / 2) + 1; } else { AvgSpeed.Speed = AvgSpeed.Speed / 2; } } AvgSpeed.Speed += Inc; } } } } uint8_t Get_EngSpeed_Start_Flag(void) { return EngSpeed_Start_Flag; } uint8_t GetAvgSpeed_Valid(void) { return AvgSpeed.Valid; } /* 获取行驶时间 100ms */ uint32_t GetDriverTime(void) { return AvgSpeed.DrTime; } /* 获取行驶公里 系数0.1*/ uint32_t GetDriverMilleage(void) { return AvgSpeed.Mileage; } /* 获取平均车速 系数:1*/ uint16_t GetAvgSpeed(void) { return AvgSpeed.Dis; }