用单片机系统实现故障诊断
扫描二维码
随时随地手机看文章
0.引言
现代工矿企业设备日益朝向大型化、复杂化、智能化发展,迫切要求对其运行状态进行多参数监测和故障诊断。随着芯片技术的发展及智能技术的应用,诊断技术已开始进入一个新阶段,即智能化阶段,这是一种基于人工智能技术的诊断方法。该方法对复杂大系统的诊断尤其有效,可充分利用现有的经验知识,构造智能模型,进行快速诊断。智能诊断系统的性能取决于所采用的智能模型。
本文用人工神经网络综合实现凝汽器运行状态的诊断判断。其原理是:设备的各种运行状态与其各种物理参数如温度、压力、振动频率等有一定关联。这种关联难以用确定的数学表达式来表达,但可以用神经网络来逼近该模型。
1.基于神经网络的故障诊断
人工神经网络(Artificial Neural Networks 简称ANN)[1]是由大量简单处理单元广泛连接而成的复杂的非线性系统,具有学习能力、自适应能力、非线性逼近能力等。实际应用研究中,大多使用的是 BP网络(Back-Propagation network)即反向传播网络。BP网络因具有较强的非线性逼近能力,能进行故障模式识别,还能进行故障严重程度评估和故障预测,因此,应用最广。但是,由于BP算法在迭代时采用梯度下降法,存在着收敛缓慢、振荡和局部极小等问题,一些改进的BP算法在这些方面有些改善。BP网络属于多层结构,前馈式,它是继Hopfield 网络之后,Rumelhart提出的又一重实用网络模型,其学习算法采用的是反向传播算法,基本思想是构造一个类似于感知机的非线性系统,并让该系统的决策能力与最小误差函数和梯度下降联系起来,从而解决了普遍存在的多层神经网络的学习不易收敛问题。
1989年Robert Hesht Nielson证明了对于任何在闭区间内的一个连续函数,都可以用一个隐含层的BP网络来逼近,因而一个3层BP网络可以完成任意的n维空间到m维的映射,故本文采用的网络是3层网络,中间只有一层隐含层,网络结构如下图所示。
2.系统总体方案介绍
表1为该系统使用的凝汽器11种典型故障的征兆集[2][3]。在征兆集中,“1”表示征兆存在,“0”表示征兆不存在。BP网络的目标输出对应各故障的隶属函数,即为:
q, l-1, 2, …, 11
为了说明起见,仍采用文献[2]中给出的故障征兆来对网络进行训练。
该系统实现的功能有上述17种信号的采集与放大滤波、压力温度信号的补偿、键盘输入、LCD显示输出、与上位机的通信。
注:故障征兆序号的含义为:1.真空急剧下降;2.真空缓慢下降;3.循环水泵电动机电流降至零;4.循环水泵出口压力降至零;5.汽轮机低压胀差为负值;6.凝结水泵出口压力增加;7.凝结水泵出口压力下降;8.凝结水泵电动机电流增加;9.凝结水泵电动机电流减小; 10 .凝结水导电度增加; 11 .低压加热器水位升高; 12 .循环水温升增加; 13 .循环水温升减小; 14.凝汽器端差增加;15.凝结水过冷度增加;16 .抽气器抽出的空气温度与冷却水入口温度之差增加;17.凝汽器抽气口至抽气器入口之间的压差减小。
3.硬件实现
为了硬件系统的小型化,这里选用带有A/D转换、4K ROM和256字节RAM的83C552 CPU。可编程放大器同时具有采样保持的功能。
4.软件实现
用Franklin C51[4]编制BP程序关键部分如下:
uchar data i,j;
float xdata show[17]; //故障征兆
float xdata fault[11]; //故障类型
float xdata weight[10][17]; //输入层与隐含层间的权重
float xdata vweight[11][10]; //隐含层与输出层间的权重
//这两种权重已在PC机中训练好,烧录在EPROM中。
float xdata Inet[10];
…… //初始化,从采集滤波保存的信号中读取show[17]
for(i=0; i<10; i++)
for(j=0; j<17; j++)
Inet[i] += weight[i][j]*show[j];
for(i=0; i<11; i++)
for(j=0; j<10; j++)
fault[i] += vweight[i][j] / (1.0 + exp(-Inet[j]));
for(i=0; i<11; i++)
{ if(fault[i] > 0.1)
…… // 显示出故障并调用通信程序上位机
// 进行通信告知故障
}
实现通信功能的主要程序如下:
//这里略去了中断服务程序的初始化
uchar idata transmit_buf[8] = "fault1";
uchar idata receive_buf[8];
void transmit_data(void)
{ uchar p, i;
transmit_ready = 0;
do{ p = 0; //清校验和
for(i=0; i<8; i++)
{ SBUF = transmit_buf[i];//发送一数据
p += transmit_buf;
while(TI != 1);
TI = 0;
}
SBUF = p; //发送校验和
while(TI == 0); TI = 0;
while(RI == 0); RI = 0;
}while (SBUF != 0)//接收不正确,重新发送
SM2 = 1; //设置监听状态
ES = 1; //开串行口中断
}
void receive_data(void)
{
uchar p, i;
receive_ready = 0;
while(1)
{
p=0; //清校验和
for(i=0; i<8; i++)
{
while(RI != 1); RI = 0;
receive_buf[i] = SBUF; //接收一数据
p += receive_buf[i];
}
while(RI != 1); RI = 0;
if(SBUF==p) {SBUF=0x00; break;}
//校验和相同,发"00"
else{
SBUF=0xff; //校验和不同,发"0FF"
while(TI == 0); TI = 0;}
}
SM2 = 1;
ES = 1;
}
5.实验结果及对比
重庆电厂机组凝汽器运行过程中表现出的故障征兆:(0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0),将其对应的电信号分别输入各个压力温度电导仪传感器,经过采集滤波,进入上述已训练好的BP网络中,网络即输出该征兆相对于各故障的隶属度,如表2 所示。
为了比较起见,这里将文献[2]中的模糊诊断方法简单说明如下:
设故障论域中有m个模糊子集 A1,A2,…,Am,它们分别代表m种故障。对于该论域中的任意一个元素u0,若有
μAi(u0) = max{μA1(u0),μA2(u0), …,μAm(u0)}
则称u0相对属于Ai,其中μAi(u0)是u0相对Ai的隶属度函数。
设凝汽器系统中有n种故障征兆S1,S2,…,Sn,每种故障所表现出的征兆论域为:
u(i) =S1(i),S2(i),…,Sn(i)),i=1,2,…,m
对于实际运行中的任意故障征兆u=(S1,S2,…,Sn)
则其相对于各故障Ai (i=1,2,…,m)的隶属度为:
μAi(u) =
根据最大隶属度的原则,便可以诊断出该凝汽器存在的故障。这种诊断方法实质上是一种基于欧氏距离的诊断方法,适用于对线性可分的故障类别进行诊断。其诊断结果如表2所示。
从表2看出,把诊断门限值取为0.1时,据BP网络输出值判断为5、10、6、11号,此结论与文献[2]中给出的结论是相符的。同时计算得出的值之间的差别比文献[2]中由模糊诊断得出的值之间得出的差别更加明显,从而可更为准确的得到故障集。
6.结束语
在今天大力提倡智能仪表的形势下,采用微机实现智能化,使微计算机技术应用前进了一大步,尤其是采用了单片微机,大大简化硬件电路,也就减小了仪表体积,降低了仪表的成本。体积的缩小,使智能仪表的安装更加容易;通信的应用,使整个系统分布式的实现也更加容易。如果完善设计的功能,扩大应用范围,可使本设计在故障检测方面发挥更大作用。
参考文献:
[1] 赵林明等 多层前向人工神经网络 黄河水利出版社 1999.7
[2] 李录平 凝汽器低真空运行的原因及模糊诊断,汽轮机技术,1993(5):45~48
[3] 汽轮机运行规程 重庆电厂内部资料 2001
[4] 徐爱钧,彭秀华 单片机高级语言C51 Windows环境编程与应用 电子工业出版社 2001.7