#include "app_config.h" //定义并初始化 BrakeSystem brake_system = { .brake_timer = {0, 0, 0, 0, 0}, // 初始化 Timer 结构体 .brake_command = 0, .brake_motor_state = 0, .brake_command_in_progress = 0, .emergency_stop_switch = 0, .remote_emergency_stop = 0, .remote_fault = 0, .can_bus_fault = 0, .ethernet_fault = 0, .mode_signal = 0 }; // 处理所有输入信号的函数 static void processInputSignals(void *signal_id) { (void)signal_id; // 标记变量为已使用,避免编译器警告 // 如果当前有刹车命令在执行,忽略新的输入信号 if (brake_system.brake_command_in_progress) { return; } if (brake_system.emergency_stop_switch || brake_system.remote_emergency_stop || (brake_system.mode_signal == 0 && brake_system.remote_fault) || // 手动模式下的遥控器故障 (brake_system.mode_signal == 1 && (brake_system.can_bus_fault || brake_system.ethernet_fault))) // 自动模式下的CAN总线或以太网通信故障 { brake_system.brake_command = 1; // 发送刹车指令 publishMessage(&brake_system.brake_command, 1); brake_system.brake_command_in_progress = 1; // 标记刹车命令正在执行 } else { brake_system.brake_command = 2; // 发送释放刹车指令 publishMessage(&brake_system.brake_command, 1); brake_system.brake_command_in_progress = 1; // 标记释放命令正在执行 } } // 刹车信号处理函数 static void brakeProcess(void *signal_id) { (void)signal_id; // 标记变量为已使用,避免编译器警告 int signal = *(int *)signal_id; if (signal == 1) // 刹车 { brake_system.brake_motor_state = 1; publishMessage(&brake_system.brake_motor_state, 1); // 状态改变时发送刹车电机状态信号 timerInit(&brake_system.brake_timer, 1500); // 控制刹车电机前进,保持1.5秒 } else if (signal == 2) // 释放刹车 { brake_system.brake_motor_state = 2; publishMessage(&brake_system.brake_motor_state, 1); // 状态改变时发送刹车电机状态信号 timerInit(&brake_system.brake_timer, 800); // 控制刹车电机后退,保持0.8秒 } timerStart(&brake_system.brake_timer); } // 定时器信号处理函数 static void brakeTimerProcess(void *signal_id) { (void)signal_id; // 标记变量为已使用,避免编译器警告 brake_system.brake_motor_state = 0; brake_system.brake_command_in_progress = 0; // 刹车命令执行完成,重置状态 publishMessage(&brake_system.brake_motor_state, 1); // 状态改变时发送刹车电机状态信号 } // 输出处理函数 static void outputProcess(void *signal_id) { (void)signal_id; // 标记变量为已使用,避免编译器警告 //根据电机状态,填充发送数据结构,发送信号 switch (brake_system.brake_motor_state) { case 1: // 电机前进状态 UnHBridgeOutput.brake_motor1 = 0; UnHBridgeOutput.brake_motor2 = 1; UnHBridgeOutput.sleep_01 = 0; break; case 2: // 电机后退状态 UnHBridgeOutput.brake_motor1 = 1; UnHBridgeOutput.brake_motor2 = 0; UnHBridgeOutput.sleep_01 = 0; break; default: UnHBridgeOutput.brake_motor1 = 0; UnHBridgeOutput.brake_motor2 = 0; UnHBridgeOutput.sleep_01 = 0; break; } publishMessage(&UnHBridgeOutput, 1); } // APP模块的初始化 void brakeAppInit(void) { // 初始化定时器,使用 brake_timer 的地址作为信号ID timerInit(&brake_system.brake_timer, 0); // 订阅刹车命令 subscribe(&brake_system.brake_command, brakeProcess); // 订阅定时器信号,用于停止电机 subscribe(&brake_system.brake_timer, brakeTimerProcess); // 订阅电机状态 subscribe(&brake_system.brake_motor_state, outputProcess); // 订阅输入信号,处理刹车逻辑 subscribe(&UnSwSample, processInputSignals); subscribe(&UnRemoteControlInput, processInputSignals); subscribe(&brake_system.remote_fault, processInputSignals); subscribe(&brake_system.can_bus_fault, processInputSignals); subscribe(&brake_system.ethernet_fault, processInputSignals); subscribe(&brake_system.mode_signal, processInputSignals); }