修复清扫部件初始化bug

This commit is contained in:
lyq 2026-01-26 15:17:36 +08:00
parent 5211cd55dc
commit 86871a4ab8

View File

@ -35,31 +35,16 @@ void epsTimerTask(CANDriver& canctl)
// 修改timer_tasks.cpp中的vcuTimerTask函数 // 修改timer_tasks.cpp中的vcuTimerTask函数
void vcuTimerTask(CANDriver& canctl) void vcuTimerTask(CANDriver& canctl)
{ {
static bool vcu_initialized = false;
static bool last_sweep_state = false; // 记录上一次清扫状态
auto msg = get_safe_control(); auto msg = get_safe_control();
// 首次运行时初始化VCU控制
if (!vcu_initialized)
{
// 发送CAN使能指令
vcu_enable_cmd.setCANEnable(true);
canctl.sendFrame(vcu_enable_cmd.toFrame());
// LOG_INFO("mcuTimerTask");
vcu_initialized = true;
LOG_INFO("[VCU] CAN control enabled");
}
// 检查清扫状态是否变化
bool sweep_state_changed = (msg.sweep != last_sweep_state);
if (sweep_state_changed)
{
// 根据清扫状态设置所有部件 // 根据清扫状态设置所有部件
int8_t target_value = msg.sweep ? 100 : 0; // 100表示启动0表示停止 int8_t target_value = msg.sweep ? 100 : 0; // 100表示启动0表示停止
int8_t target_value2 = msg.sweep ? -100 : 100; // -100表示下沉100表示抬升 int8_t target_value2 = msg.sweep ? -100 : 100; // -100表示下沉100表示抬升
// 发送CAN使能指令
vcu_enable_cmd.setCANEnable(true);
canctl.sendFrame(vcu_enable_cmd.toFrame());
// ===== 控制0x211报文 (电机M1-M7) ===== // ===== 控制0x211报文 (电机M1-M7) =====
vcu_motor1_cmd.setByte0(msg.sweep ? 1 : 0); // 1表示正向运行0表示停止 vcu_motor1_cmd.setByte0(msg.sweep ? 1 : 0); // 1表示正向运行0表示停止
vcu_motor1_cmd.setByte1(target_value); vcu_motor1_cmd.setByte1(target_value);
@ -70,7 +55,6 @@ void vcuTimerTask(CANDriver& canctl)
vcu_motor1_cmd.setByte6(target_value); vcu_motor1_cmd.setByte6(target_value);
vcu_motor1_cmd.setByte7(target_value); vcu_motor1_cmd.setByte7(target_value);
canctl.sendFrame(vcu_motor1_cmd.toFrame()); canctl.sendFrame(vcu_motor1_cmd.toFrame());
// LOG_INFO("vcuTimerTask1");
// ===== 控制0x212报文 (电机M8和LED输出) ===== // ===== 控制0x212报文 (电机M8和LED输出) =====
vcu_motor2_cmd.setByte0(target_value); vcu_motor2_cmd.setByte0(target_value);
@ -82,13 +66,8 @@ void vcuTimerTask(CANDriver& canctl)
vcu_motor2_cmd.setByte6(target_value); vcu_motor2_cmd.setByte6(target_value);
vcu_motor2_cmd.setByte7(target_value); vcu_motor2_cmd.setByte7(target_value);
canctl.sendFrame(vcu_motor2_cmd.toFrame()); canctl.sendFrame(vcu_motor2_cmd.toFrame());
// LOG_INFO("vcuTimerTask2");
// LOG_INFO("[VCU] Sweep mode %s", msg.sweep ? "activated" : "deactivated"); LOG_INFO_THROTTLE(1000, "[VCU] Sweep? %s", msg.sweep ? "Yes" : "No");
// 更新状态记录
last_sweep_state = msg.sweep;
}
} }
// 定时器回调BMS 查询任务 // 定时器回调BMS 查询任务