嵌入式状态监测与故障诊断装置的设计
1 引 言
传统的状态监测与故障诊断装置通常采用现场总线方式,但此方式具有很大局限性:现场总线类型多样,相互之间差异较大,不能实现互操作,彼此连接困难,系统的信息共享和实时性不尽如人意。为了更好地搭起终端设备和远程监控系统通信的桥梁,本文提出并设计了基于工业以太网的嵌入式状态监测与故障诊断装置,和传统装置相比,它有以下优势:实现了系统的高效、统一;用户可以通过Internet随时随地监控大范围的终端设备,取代了大量前置PC,具有更好的实时、实效性[1,2]。本装置将现场采集到的实时数据通过以太网直接传送到内嵌的Web服务器上,服务器生成用于远程监测和远程故障诊断的web页面,用户通过键入设备的IP地址,就可以随时浏览到被监测设备的现场运行情况、数据采集信息以及报警信息等。
2 装置结构与特点
目前,机电设备的状态监测与故障诊断的整个系统结构如图1所示:
图1 嵌入式状态监测与故障诊断系统结构
本文设计开发了此体系的核心装置——嵌入式机电设备监控装置,主要分为3个模块:
(1)数据采集模块:包括多个现场数据采集单元。主要完成现场数据的检测、采集。
(2)数据存储与处理模块:包括嵌入式现场总线/以太网监控工控机和数据库。它通过EtherNet/IP协议,和现场总线数据采集单元进行通信,实现灵敏检测和数据存储。
(3)在线监测模块:包括嵌入式Web服务器和监测网站。服务器生成用于远程监测和故障诊断的web页面。网络用户可以随时掌握现场运转情况,使远程监控真正实现。
本装置拥有以下三个先进的特征:
1)应用工业以太网,使Ethernet/IP设备和现场设备能够通信。为了实现这个功能,我们将以太网协议移植进嵌入式Linux。
2)通过浏览器支持机电设备状态的监控。我们在嵌入式Linux中移植了BOA,设计了动态网页实时监控机电设备。
3)支持大容量数据存储,用一个黑匣子对设备的实时数据资源进行监控。通过大容量IDE总线的扩展,连接IDE系统硬盘,存储大量数据[3]。
3 装置的硬件设计
AT91RM9200是ATMEL针对系统控制及通信领域推出的基于ARM920T内核的新微型控制器。它具有独立的16KB指令和16KB数据 cache、全功能的MMU虚拟内存管理单元、16KB SRAM和128KB ROM、64MB NAND Flash 存储器、LCD控制器、EBI 接口控制器、4个32位的PIO控制器、20通道的外设数据控制器(DMA)、3个同步串行控制器(SSC)、4个通用同步/异步接收/发送器(USART)、主/从串行设备接口SPI、16路12位ADC、1通道16位DAC、多媒体卡接口(MCI)、以太网10/100 Base-T 以太网媒体访问控制器(MAC)、触摸屏接口、IDE接口等。
在处理器丰富资源的基础上,本装置对其进行了相关的配置和扩展,将处理器通过16路12位ADC接口对机电设备的电压或电流信号进行采集,IDE接口外挂大容量IDE硬盘,用于存储web、采集的数据等。通过DM9161芯片,该微处理器把EMAC接口外扩为以太网接口RJ45,与工业以太网连接 [4]。AT91RM9200通过SPI接口连接CAN控制器SJA1000,CAN控制器与CAN收发器PCA82C250相连,用于连接 DeviceNet。硬件结构如图2所示:
图2 硬件结构图
4 装置的软件架构
软件结构如图3所示:
图3 软件架构图
4.1移植工业以太网协议
工业以太网EtherNet/IP,是一种适用于工业环境的通讯体系,能够在广阔的区域中支持大量现场设备的连接。它采用通用工业协议(CIP)作为其应用层协议。CIP协议支持各种控制、配置和信息处理服务,包括显式报文(用于信息传输,灵活的报文交换)以及隐式报文(用于控制和实时I/O数据的传输),支持轮询、周期和状态改变数据传输触发机制,点对点单播和广播数据传输方式[5,6]。OE服务的设计简化了EtherNet/IP的移植,只需要修改操作环境文件来适合ARM Linux操作体系。
4.2 移植BOA
从www.boa.org下载一个主流版本的BOA源码包,本系统用的是boa-0.94.13.tar.gz。
第一步:修改Makefile文件,编译BOA源码,生成BOA可执行文件。
修改Makefile文件,因为我们要编译的是基于ARM的二进制代码,所以必须修改Makefile中的CC和CPP,分别将其改为交叉编译器安装的路径:CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc
CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc -E
然后运行make进行编译,得到可执行程序boa。
第二步:配置BOA。
BOA启动时将加载一个配置文件boa.conf,在boa程序运行前,必须首先编辑该文件。在Boa源码目录下已有一个示例boa.conf,可以在其基础上修改。配置好的主要内容如下:
User nobody
Group 0
ServerName AT91RM9200
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
DocumentRoot /var/www
MimeTypes /etc/mime.types
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
据此配置,需要创建日志文件目录/var/log/boa,HTML文档的主目录/var/www,将静态网页存入该目录下,CGI脚本所在目录/var/www/cgi-bin,将cgi的脚本存放在该目录下。
4.3 CGI网页设计
CGI(通用网关接口)提供Web服务器一个执行外部程序的通道,这种服务端技术建立了Web浏览器与Web服务器之间的交互。首先,浏览器将远程客户端发送的请求送到Web服务器,Web服务器将数据使用STDIN送给CGI程序,执行CGI程序后获得缓冲区中的设备信息,最后,使用STDOUT输出包含工业设备信息的HTML形式的结构文件,经Web服务器送回浏览器,显示给远程客户端。
CGI程序可以用C语言编写,并且能够嵌入HTML脚本。它使用ARM-GCC编译。CGI程序可以使用GET、POST或直接的URL参数传递方法与远程客户端通信。以下是将采集到的设备数据显示到网页上的一段CGI程序,其中用到的数据库是SQLite。SQLite是用一个小型C库实现的一种强有力的嵌入式关系数据库管理体制,它在体积与功能之间做到了较好的平衡,是理想的嵌入式数据库。
#include
#include "sqlite3.h"
main(){
…
sqlite3* p_db;
sqlite3_open("mydb", &p_db);/*打开数据库*/
/*执行SQL语句选择alarm表中的所有记录,并在查询结果的每一行上执行回调函*/
ret=sqlite3_exe c(p_db, "sel ect * from alarm;", callback,0, &errmsg);
…
sqlite3_close(p_db); /* 关闭数据库*/
}
int callback(void *p_data, int n_columns, char **column_names, char **column_values){ /*回调函数*/
int i;
for(i=0; i < n_columns; i++)
printf("%s=%s\n",column_names[i],column_values[i]? column_values[i]:"NULL");/*打印出查询结果*/
return 0;
}
4.4动态网页技术
服务器端为嵌入式ARM,只能运行基于TCP/IP协议的ARM-GCC编译的Linux下的C++服务程序,本文使用嵌入式C++实现的 UDP socket技术与客户端通信。客户端使用flash或Java Applet和服务程序通信,提供动态网页。本文使用flash完成动态刷新,动态刷新采用线程机制,后台数据通过UDP socket技术与服务器端通信来获取。
服务器端和客户端间的通信采用先进B/S结构,用户不需要在客户机一端安装诊断软件即可以在远程进行设备的监测与故障诊断,形成一个开放式的远程监测与故障诊断系统。基于UDP协议的Socket通信B/S架构如图4所示:
图4 UDP Socket通信B/S架构
系统动态页面如图5所示:
图5 状态监测与故障诊断系统主界面
5 结束语
本文作者创新点:将工业以太网技术、嵌入式Web Server技术、CGI技术、动态网页技术应用于嵌入式状态监测与故障诊断装置中,用户通过 URL就可以随时查看现场设备的运行情况和报警信息,与传统监控装置相比,提高了监控的实时性,缩短了检修时间,节省了检修费用,真正实现了维修制度从事故维修、定期维修向视情维修的转变。
文章版权归西部工控xbgk所有,未经许可不得转载。