void f_Vsp_Follow_Run_State(FanRunStruct *fan, VspInStruct *vsp, int vspFollowStartPeriod, int vspFollowCyclePeriod) {
// 根据当前的跟随步骤,执行相应的逻辑
switch (fan->Follow_Step) {
case 1:
// 第一步:检查是否超过启动周期,然后重置时间,准备进入下一步
if (fan->Follow_Time > vspFollowStartPeriod) {
fan->Follow_Time = 0;
vsp->Prev_Code = vsp->Inst_Code; // 更新前一个指令码
fan->Follow_Step = 2; // 进入下一个步骤
}
break;
case 2:
case 3:
case 4:
case 5:
case 6:
// 从第二步到最后一步:检查是否达到周期时间
if (fan->Follow_Time >= vspFollowCyclePeriod) {
fan->Follow_Time = 0; // 重置时间
vsp->Run_Code = vsp->Inst_Code; // 更新当前运行指令码
int temp_x1 = vsp->Inst_Code - vsp->Prev_Code; // 计算指令码变化量
// 根据当前步骤和指令码变化,更新状态或调整步骤
if (fan->Follow_Step == 2 || fan->Follow_Step == 3 || fan->Follow_Step == 5) {
if (temp_x1 > 0) { // 如果指令码在增加
vsp->Max_Code = vsp->Inst_Code; // 更新最大指令码
if (fan->Follow_Step != 2) fan->Follow_Step = 3; // 非启动步骤则跳转到上升步骤
} else { // 如果指令码没有增加
vsp->Med_Code = (vsp->Max_Code + vsp->Min_Code) >> 1; // 计算中值指令码
vsp->Run_Code = vsp->Med_Code; // 更新运行指令码为中值
vsp->Max_Code = vsp->Min_Code = vsp->Inst_Code; // 重置最大最小指令码
fan->Follow_Step = (fan->Follow_Step == 3) ? 6 : 5; // 根据当前步骤调整后续步骤
}
} else if (fan->Follow_Step == 4 || fan->Follow_Step == 6) {
if (temp_x1 < 0) { // 如果指令码在减少
vsp->Min_Code = vsp->Inst_Code; // 更新最小指令码
if (fan->Follow_Step != 4) fan->Follow_Step = 4; // 非启动步骤则跳转到下降步骤
} else { // 如果指令码没有减少
vsp->Med_Code = (vsp->Max_Code + vsp->Min_Code) >> 1; // 计算中值指令码
vsp->Run_Code = vsp->Med_Code; // 更新运行指令码为中值
vsp->Max_Code = vsp->Min_Code = vsp->Inst_Code; // 重置最大最小指令码
fan->Follow_Step = 5; // 跳转到中间步骤
}
}
vsp->Prev_Code = vsp->Inst_Code; // 更新前一个指令码
}
break;
default:
// 默认情况下不做任何处理
break;
}
}
跟随步骤,执行相应的逻辑
最新推荐文章于 2024-08-22 17:27:46 发布
文章描述了一个关于VspInStruct结构的函数,根据FanRunStruct的跟随步骤执行不同逻辑,包括检查启动周期、周期时间,以及根据指令码变化更新状态和步骤。
摘要由CSDN通过智能技术生成