当前位置:首页>家电维修>洗衣机>

洗衣机错误码怎么解决(洗衣机故障代码图解)

洗衣机错误码怎么解决(洗衣机故障代码图解)

更新时间:2022-03-12 16:44:28
前言

日常生活中绝大部分家电,比如电压力锅,洗衣机,空调,电磁炉,冰箱等等,没发生故障还好,发生故障时必然会有一个故障码出现;由于现在这些家的质量越来越好,发生故障的情况比较少,虽然故障码不常见,但是其又不能缺少,必然作为一个产品的必要组成部分。故障码因为产品类型的不同其设计不同,每家企业又会自定义一个故障码,或者同一个企业,不同产品其故障码设计也不同。现在介绍使用链表技术实现一个故障码的设计,关于链表的内容请点击《keil实现C语言的通用双向链表》查看链表的相关内容,本文着重介绍故障码的设计。

作者从事嵌入式开发多年,主要从事医疗美容设备行业,总结分享个人设计经验,关注作者可以了解更多这方面的信息。作者其他文章也很不错,欢迎查阅,谢谢。

假设

为了使得大家有个具体的目标感,而不过于抽象,现在假设有一台目标设备“二氧化碳激光”(故障码用于表征这台设备的故障信息);为了让大家对这台设备有个大概了解,这里简单介绍一下这个激光设备的主要部件组成:

A、激光系统:封离型玻璃管激光器,激光电源,7关节导管臂,650nm瞄准激光,激光阀门(光阀);

B、冷却系统:水箱,水泵,水位传感器,水温传感器,冷凝器,调速散热风扇,水流开关/水流量传感器;

C、排气系统:气泵,气路流量传感器;

D、主控系统:主控板,显示屏,

F、辅助系统:急停开关,钥匙开关,触发信号开关,声光发射提示器;水泵开关,气泵开关

故障码定义

当设备发生故障时我们需要通过一个技术手段描述这个故障,我们要求描述:故障状态(激活/冻结),故障类型(软件/硬件),故障子类型(可定义为发生故障的子板卡),故障值及故障发生的时间;其中故障值要求具有唯一性,能够通过查表能知道此值表示故障含义及故障修复方法;这里定义使用一个64位变量来描述这些信息,定义如下图所示:

由上图可见,定义了故障码的状态(激活/冻结),其目的是为了能保存故障码到一个持久存储器,这样可查看历史故障记录。注:冻结的故障表示此故障已经经过维护修复,激活的故障码表示此故障是需要解决的故障。

定义故障码结构体

typedef union { u64 Data; struct { u64 Second:6; //0---63秒 u64 Minutes:6; //0---63分 u64 Hour:5; //0---31时 u64 Day:5; //0---31日 u64 Month:4; //0---15月 u64 Year:6; //0---63年 u64 Num:24; //0---16777215 错误编号(0无效故障号) u64 SubType:6; //0---63子类型 u64 Type:1; //0---1错误类型:0软件故障,1硬件故障 u64 Status:1; //0---1错误状态:0冻结(Inactive),1激活(Active) }F; }FaultInfo_t;故障码操作函数

二氧化碳激光故障码定义

为了讲解及仿真的需要这里简要定义几个故障码,如下图所示

故障码解码

为了仿真演示方便这里,演示解码及打印对应定义信息,如下

void PrintFaultInfo(FaultInfo_t *FaultInfo,u16 NodeNum) { printf(" NodeNum %d--- 错误码信息 --- ",NodeNum); if(FaultInfo->F.Status==ERROR_STATUS_ACTIVE) { printf(" 状态->激活 "); } else { printf(" 状态->冻结 "); } printf(" Type =%d SubType=%d Num=%XH ",FaultInfo->F.Type,FaultInfo->F.SubType,FaultInfo->F.Num); printf(" %d-%d-%d %d:%d:%d ",FaultParaBaseYear FaultInfo->F.Year,FaultInfo->F.Month,FaultInfo->F.Day,FaultInfo->F.Hour,FaultInfo->F.Minutes,FaultInfo->F.Second); }

解码及打印故障信息

void printDecodeFaultInfo(FaultInfo_t *pFaultInfo) { printf(" --- 错误码信息 --- "); if(pFaultInfo->F.Status==ERROR_STATUS_ACTIVE) { printf(" 状态->激活 "); } else { printf(" 状态->冻结 "); } if(pFaultInfo->F.Type==0) { printf(" 类型->软件故障 "); } else { printf(" 类型->硬件故障 "); } if(pFaultInfo->F.SubType==0) { printf(" 子类型->未定义 "); } else if(pFaultInfo->F.SubType==1) { printf(" 子类型->电源故障 "); } else if(pFaultInfo->F.SubType==2) { printf(" 子类型->主控板故障 "); } switch(pFaultInfo->F.Num) { case 1: printf("FaultVal=%d 水位量低于阈值,请加水 ",pFaultInfo->F.Num); break; case 2: printf("FaultVal=%d 水流量低于阈值,请加水检查水泵 ",pFaultInfo->F.Num); break; case 3: printf("FaultVal=%d 光阀打开失败,请检查光阀电机 ",pFaultInfo->F.Num); break; case 4: printf("FaultVal=%d 光阀关闭失败,请检查光阀电机 ",pFaultInfo->F.Num); break; case 5: printf("FaultVal=%d 650nm瞄准光无效,请检查650激光器 ",pFaultInfo->F.Num); break; case 6: printf("FaultVal=%d 水温高于阈值,请检查制冷系统 ",pFaultInfo->F.Num); break; case 7: printf("FaultVal=%d 调试风扇故障,请检查调试风扇 ",pFaultInfo->F.Num); break; case 8: printf("FaultVal=%d 气流量低于阈值,请检查气泵 ",pFaultInfo->F.Num); break; default:printf(" 未定义故障值 "); break; } printf(" %d-%d-%d %d:%d:%d ",GetFaultInfoBaseYear() pFaultInfo->F.Year,pFaultInfo->F.Month,pFaultInfo->F.Day,pFaultInfo->F.Hour,pFaultInfo->F.Minutes,pFaultInfo->F.Second); }仿真测试

为了仿真效果,我们定义发生了上面所有预定义的故障信息,

/******************************************************************** 函数功能:仿真测试故障码 入口参数:无。 返 回:无。 备 注:无。 ********************************************************************/ List_t *FaultCodelist; //定义故障码链表指针 void ErrListTest1(void) { int i; u16 NodeNum=0; u8 minutes=20,second=10; FaultInfo_t *pFaultInfo; //定义故障信息指针 FaultCodelist = ListCreate(); //创建链表 #if 1 // -------- 添加节点(故障码) -------- for(i=0; i<8; i ) { pFaultInfo=malloc(sizeof(FaultInfo_t)); //申请内存 SetFaultInfoTime(pFaultInfo,20 ,7 ,12 ,17,minutes i,second i); //设置故障码时间:年月日时分秒 SetFaultInfoStatus(pFaultInfo,ERROR_STATUS_ACTIVE); //设置故障状态:激活 SetFaultInfoPara(pFaultInfo ,0,2,i 1); //设置故障码:类型,子类型,故障值1--8 ListBackAddNode(FaultCodelist, pFaultInfo,NodeNum ); //将故障信息添加到链表中 } #endif #if 1 // -------- 输出链表信息 -------- NodeNum=0; for(i=0; i<10; i ) { pFaultInfo=listFindNodeFromBegin2(FaultCodelist,NodeNum); if(pFaultInfo!=NULL) { PrintFaultInfo(pFaultInfo,NodeNum); //打印故障信息 } else { printf(" Node %d Not Exist ",NodeNum); } NodeNum ; } #endif #if 1 // -------- 输出链表信息 -------- NodeNum=0; for(i=0; i<10; i ) { pFaultInfo=listFindNodeFromBegin2(FaultCodelist,NodeNum); if(pFaultInfo!=NULL) { printDecodeFaultInfo(pFaultInfo); } else { printf(" Node %d Not Exist ",NodeNum); } NodeNum ; } #endif }仿真测试效果

按照以上设计思路,在KEIL中实现代码,仿真效果如下图:

总结:以上就是作者设计的故障码系统,介绍了其定义,解码方式,并以一个具体的例子进行说明;故障码系统很重要,对不同产品的设计自主性强,难以面面俱到,希望大家交流不同看法,谢谢。

,