跟随步骤,执行相应的逻辑

文章描述了一个关于VspInStruct结构的函数,根据FanRunStruct的跟随步骤执行不同逻辑,包括检查启动周期、周期时间,以及根据指令码变化更新状态和步骤。
摘要由CSDN通过智能技术生成
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;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值