CAN信号坡度处理函数:slope_vOutput()详解

本代码片段展示了一个名为slope_vOutput()的函数,该函数负责根据CAN信号PitchAngPitchAngleSign的值来设置坡度方向、坡度角度和坡度单位。

以下是slope_vOutput()函数的详细解析:

/*slope output function */
void slope_vOutput(void) {
	// 1. 判断CAN信号PitchAng是否为0,如果是,则将坡度方向值、坡度角度值、坡度单位值都设为0。
	if (SYN__u8PitchAng() == 0) {
		DIF_stSlopeDpoolData.DIF_u8SlopeDirectionValue = 0;
		DIF_stSlopeDpoolData.DIF_u8SlopeAngleValue = 0;
		DIF_stSlopeDpoolData.DIF_u8SlopeUnit = 1;
	}
	// 2. 如果CAN信号PitchAng大于0且小于等于90,则判断CAN信号PitchAngleSign是否为0,如果是,则将坡度方向值设为1,否则设为2。将坡度角度值设为CAN信号PitchAng的值,将坡度单位值设为1。
	else if (SYN__u8PitchAng() > 0 && SYN__u8PitchAng() <= 90) {
		if (SYN__u8PitchAngleSign() == 0) {
			DIF_stSlopeDpoolData.DIF_u8SlopeDirectionValue = 1;
		}
		else DIF_stSlopeDpoolData.DIF_u8SlopeDirectionValue = 2;
		DIF_stSlopeDpoolData.DIF_u8SlopeAngleValue = SYN__u8PitchAng();
		DIF_stSlopeDpoolData.DIF_u8SlopeUnit = 1;
	}
	// 3. 如果CAN信号PitchAng大于127且PitchAngSign和PitchAng都没有超时,则将坡度方向值、坡度角度值、坡度单位值都设为0。
	else if (Flg_PitchAngSign_tmout() == False && Flg_PitchAng_tmout == False && SYN__u8PitchAng() > 127) {
		DIF_stSlopeDpoolData.DIF_u8SlopeDirectionValue = 0;
		DIF_stSlopeDpoolData.DIF_u8SlopeAngleValue = 0;
		DIF_stSlopeDpoolData.DIF_u8SlopeUnit = 1;
	}
	// 4. 如果以上条件都不满足,则什么都不做。
	else {
		// do nothing
	}
	// 5. 返回。
	return;
}

函数逻辑概述

该函数主要根据PitchAngPitchAngleSign两个CAN信号的值来判断坡度信息:

  1. 水平状态: 当PitchAng为0时,说明车辆处于水平状态,此时坡度方向、坡度角度和坡度单位都设为0。
  2. 倾斜状态: 当PitchAng大于0且小于等于90时,说明车辆处于倾斜状态。根据PitchAngleSign的值来判断是上坡还是下坡。
    • PitchAngleSign为0,表示上坡,坡度方向设置为1。
    • PitchAngleSign为非0,表示下坡,坡度方向设置为2。
    • 坡度角度设置为PitchAng的值,坡度单位设置为1(度)。
  3. 超时状态: 当PitchAng大于127且PitchAngSignPitchAng都没有超时时,说明这两个信号可能出现了异常,此时将坡度信息重置为水平状态。
  4. 其他情况: 如果以上条件都不满足,则什么都不做。

总结

slope_vOutput()函数通过分析CAN信号PitchAngPitchAngleSign,并将结果映射到坡度方向、坡度角度和坡度单位,实现对车辆坡度状态的判断和输出。

注意

  • 代码中使用了False来表示逻辑假,建议使用false来保持代码风格一致。
  • 代码中存在一些逻辑冗余,例如在else if语句中判断PitchAng大于127,而实际判断逻辑可能需要根据具体的场景和需求进行调整。
  • 代码缺少对SYN__u8PitchAng()SYN__u8PitchAngleSign()函数的定义和说明,建议提供完整代码或注释以方便理解。
  • 代码中使用了Delay(TimeCnt())来进行延时操作,建议使用更明确的延时方式,例如DelayMs(10)
  • 代码中缺少对DIF_stSlopeDpoolData结构体的解释和说明,建议提供相关注释或文档以方便理解。

建议对代码进行进一步优化,以提高代码的可读性和可维护性。

CAN信号坡度处理函数:slope_vOutput()详解

原文地址: https://www.cveoy.top/t/topic/oQyR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录