项目复盘261007

1. 关于轮询发生三次同种类故障,三种故障分别计时,锁定运行,强制关机

//枚举和数组协作实现故障分类计数发生次数和发生时间
//故障状态设置------首先
typedef enum
{
    ERR_NOLOAD,
    ERR_OVERLOAD_8A,
    ERR_OVERLOAD_1_5,
    ERR_LIGHTLOAD,
    ERR_MAX_NUM
}ERR_INDEX;

//故障分路计时
// [故障类型][0]=计数  [故障类型][1]=计时
// over_time_buf[i][0] = 当前故障累计次数
// over_time_buf[i][1] = 从第一次故障开始累计的毫秒计时---故障x计时tick
unsigned int over_time_buf[ERR_MAX_NUM][2]={{0}};


for(i=0;i<ERR_MAX_NUM;i++)
{
    //有故障才计时
    if(over_time_buf[i][0] > 0)
    {
        over_time_buf[i][1]++;
        if(over_time_buf[i][1] >= FAULT_WINDOW_TICK)
        {
            over_time_buf[i][0] = 0;
            over_time_buf[i][1] = 0;
        }
    }
}


void Fault_Record(ERR_INDEX fault_id)
{
    if(motor_stop_flag) return;

    over_time_buf[fault_id][0]++;//次数+1

    //出发第一次故障计时,如果是其他故障触发则从此清零计时,0→180s
    if(over_time_buf[fault_id][0] == 1)
    {
        over_time_buf[fault_id][1] = 0;
    }

    //窗口内累计满3次,电机停机自锁
    if(over_time_buf[fault_id][0] >= 3)
    {
        motor_stop_flag = 1;//180s窗口内自锁
        //电机停止
        sys_state = S_FAULT;
        
    }
}

运用数组来区分故障类型,用定时器来计时。

2. 关于单一错误的计数

// [0]:故障累计次数
// [1]:从第一次故障开始的毫秒计时
unsigned int overload_time_buf[2] = {0};

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值