C++开发新能源汽车车身域控制器软件
概要
C++面相对象方式开发新能源汽车车身域控制器软件
整体架构流程
`依据新能源汽车车身域控制器的EEA架构,原理图,功能规范将车身域控的信号进行划分为:硬线信号,CAN总线信号,诊断信号,控制输出信号几个部分。每个部分将信号封装成类,定义对象,直接调用属性。根据功能规范写出逻辑代码。
技术名词解释
VCU 整车控制器
BCM 车身域控制器
PEPS 无钥匙系统
SSB 一键启动开关
IMMO 天线
技术细节
`
BCM 满足下面任一条件将关闭后除霜功能:
1、 在后除霜功能被激活时, BCM 收到 CAN 消息(0x51A) “RearDfstReq”=0。
2、 工作时间达到 15min ± 5s 后。
3、 钥匙从 IGN-ON 打至 ACC 或 OFF。
4、 IGN-CRANK 时, 除霜功能将会暂停, 此时 BCM 保持 CAN 消息(0x392) “RARDfst
Cmd”=1, 内部计时器 Theater 保持有效, CRANK 后, 除霜功能恢复。 (如果此时收到 C
AN 消息(0x51A) “RearDfstReq”=0, BCM 将关断除霜输出。 )
注意:
1、 当电压小于 11.5V 超过 5s±10%, 除霜功能将被暂时关闭, 暂时关闭时间不计入除霜
时间, BCM 保持 CAN 消息(0x392) “RARDfstCmd”=1, 如果电压大于 12.5V 超过 15s±
10%BCM 将会重新恢复除霜功能, 完成剩余的除霜时间。
2、 后除霜带有诊断功能。
小结
`C++面向对象方式编程,将各种信号封装,便于直接调用,且不容易出错。
//----------定义VCU_111类------------------
class Ha01_Can_Matirx_VCU_111 {
public:
int m_Id; //定义了ID
string m_MsgName; //定义了报文名称
int m_VCU_WorkingMode; //VCU工作模式
int m_VCU_DriveMode; //指示车辆驾驶模式
int m_VCU_PTReadyInd; //指示动力系统READY状态
int m_VCU_GearsFlickerRemind; //档位闪烁提示(换挡操作错误指示)
int m_VCU_PTSysElecPwrInd; //动力系统电功率
int m_VCU_GearPositionInd; //目标档位(档杆的实际档位)
int m_VCU_GearPositionSys; //系统档位
int m_VCU_PTMode; //动力系统实际运行模式
int m_VCU_VehicleSysErrorLevel; //整车故障等级
int m_VCU_GearPositionIndValid; //目标档位有效性(档杆的实际档位)
int m_VCU_111_Counter; //报文计数器(从0至15单向循环自增)
};
class Ha01_Can_Matrix_VCU_112 {
public:
int m_Id; //定义了ID
string m_MsgName; //定义了报文名称
float m_VCU_AcceleratorPedalPosition; //加速踏板位置
float m_VCU_BrakePedalPosition; //刹车踏板位置
int m_VCU_BrakSwitchSts; //制动开关状态
int m_VCU_AcceleratorPedalPositionValid; //加速踏板位置信号有效
int m_VCU_BrakePedalPositionValid; //刹车踏板位置信号有效
int m_VCU_BrakSwitchStsValid; //制动开关状态信号有效
int m_VCU_VehicleSpdValid; //车速信号有效标志(待定)
int m_VCU_VehicleSpd; //车速(待定)
int m_VCU_VehicleSmartChargeAllowed; //整车允许智能充电状态
int m_VCU_DriverReminder; //驾驶员提示信息
int m_VCU_112_Counter; //报文计数器(从0至15单向循环自增)
void rearDefrost() { //后除霜功能
Ha01_Signal_Input hsi; //定义硬线信号输入对象
hsi.m_OFF = 1; //初始状态整车电源档位OFF
hsi.m_ACC = 0;
hsi.m_ON = 0;
hsi.m_Defrost_Sw = 0; //初始状态后除霜开关关闭
Ha01_Bcm_Signal_Output hbso;
hbso.m_REAR_DEFROST = 0;
Ha01_Can_Matrix_BCM_PEPS_338 hcmbp338;
hcmbp338.m_BCM_RearDefrostSts = 0; //后除霜状态关闭
hcmbp338.m_BCM_RearDefrostStsValid = 0; //后除霜状态无效
if (hsi.m_ON == 1 && hsi.m_Defrost_Sw == 1) { //后除霜激活条件
hbso.m_REAR_DEFROST = 1; //后除霜工作
std::cout << "后除霜工作" << std::endl;
hcmbp338.m_BCM_RearDefrostStsValid = 1; //BCM反馈后除霜有效
hcmbp338.m_BCM_RearDefrostSts = 1; //BCM反馈后除霜工作状态
}
else if (hsi.m_ACC == 1 || hsi.m_OFF == 1 ) { //后除霜关闭条件
hbso.m_REAR_DEFROST = 0; //后除霜停止
std::cout << "后除霜停止" << std::endl;
hcmbp338.m_BCM_RearDefrostStsValid = 0; //BCM反馈后除霜无效
hcmbp338.m_BCM_RearDefrostSts = 0; //BCM反馈后除霜停止状态
}
}