基于ARM—Linux大型试验设备监测系统的构建研讨
高校的分析测试实验室拥有众多先进、精密的大型仪器设备,是高校实验室的重要组成部分。
有别于基础教学实验室分析测试实验室主要面向科研,为科学研究提供可靠的测试数据和试验数据。
长期以来,实验室的大型仪器大部分使用率都比较低,为提高投资效益,最大限度地利用现有实验室资源,更好地为科研教学服务,实验室加大了开放的力度。
试验设备利用率提高以后,管理人员的工作大大增加。
为此,迫切需要获得每台试验设备的详细使用数据,以用于设备的日常保养和检修。
随着网络技术和嵌入式技术的发展,基于TCP/IP协议和B/S(Browser/Server)架构的分布式监控技术已日趋成熟。
借助以太网和Internet技术,把嵌入式监控设备[1,2]连接到Internet上,用户只需要使用普通的Web浏览器就可以对设备进行监视和控制,操作界面简洁,数据传输量也可以降到最低。
实现远程监控后,技术人员无须亲临现场,就可以监视并控制生产系统和现场设备的运行状态和参数。
特别是当现场地理位置比较偏僻或环境比较恶劣时,这一点的优势尤为突出。
本研究设计了基于ARM—Linux的嵌入式远程监测系统,实现了观测站现场大型试验设备信息的采集与监测。
1 远程监测系统总体设计 远程监测系统采用B/S结构,分为前方监测终端和后方监视终端两部分。
系统主要设计集中在前方监测终端,后方监视终端只需一台安装Web浏览器的PC即可。
远程监控系统结构如图1所示。
每个需要监测的大型试验设备需安装一个监测终端,每个终端分配一个独立的IP地址,所有的监测终端连接到路由器上。
数据采集模块由传感器和嵌入式终端设备组成,主要负责采集试验设备工作时的光电信息,并转换为有效的模拟信号输入。
数据处理模块与数据采集模块共用一个嵌入式终端设备,另外搭载了数据库服务器及应用程序。
嵌入式终端设备本身是一个完整的嵌入式设备,包括CPU、存储器、GPIO(General Purpose Input /Output Ports)、网络接口等[1]。
后方监视终端(一般为PC或智能设备)需要安装Web浏览器,输入前方监测终端相应的IP地址便可直接访问它。
在客户端,由HTML负责表示逻辑,根据特定终端的URL(统一资源定位符)提出的服务请求,前方监测终端上安装的网络服务器会把数据文件返回给客户端。
2 前方监测终端的硬件设计 前方监测终端由数据采集模块和数据处理模块组成。
由于试验设备价格昂贵,为避免破坏设备,数据采集模块使用电流互感器和光敏电阻两种传感器。
传感器可根据试验设备的特征及检测终端的安装方便程度进行选择。
数据处理模块采用Samsung公司基于ARM9核心的S3C2440处理器。
其中,SDRAM主要功能是存放运行代码、系统和用户数据、堆栈等;FLASH主要功能是存储嵌入式Linux镜像、根文件系统和应用程序等;GPIO主要功能是提供电流互感器和光敏电阻的模拟输入接口;RS232是系统[(专业提供论文代写和发表的服务,欢迎光临]的调试接口;USB接口用于外部扩展,例如连接外部存储器;以太网控制器中的接口芯片采用DM9000,它可自适应10 M/100 M网络。
3 前方监测终端的软件设计 系统采用B/S模式设计,主要软件设计集中在前方监测终端,前方监测终端的软件结构如图3所示。
当前方监测终端加电运行时,首先启动系统引导程序Bootloader,在Bootloader的引导下启动嵌入式Linux,Linux的内核版本为2.6.29[3]。
然后Linux内核启动,依次加载各设备的驱动程序,最后运行监测应用程序[4]。
其中Web服务器使用BOA服务器,其优点是不仅能够支持静态Web页面,还可以配合CGI支持动态页面,实现与用户的动态交互。
图形界面采用QT,它具有优良的跨平台特性,同时还提供了丰富的API函数,使用非常方便。
3.1 A/D驱动开发 嵌入式Linux设备文件主要分为字符设备、块设备、网络设备和混合设备四种类型。
其中,混合设备是在嵌入式系统中用得比较多的一种设备,特指不能严格划分的设备类型。
系统中,A/D设备的主要用途是将电流互感器和光敏电阻采集到的模拟信号转换为数字信号,并输入嵌入式设备的GPIO接口,系统在实现时,将A/D设备作为一种混合设备来处理。
A/D设备驱动程序主要功能是提供设备的注册与注销,设备的打开与关闭,设备的读、写操作以及设备的控制操作,设备的中断服务响应等[5]。
Linux内核通过file_operation数据结构提供文件系统的入口点函数,该函数是定义在中的函数指针表,结构中的每个成员的名字对应着一个系统调用。
file_operation数据结构定义及主要功能描述如下: struct file_operations { struct module* owner; int(*open) (struct inode*,struct file*); //打开I/O设备并初始化 int (*release)(struct inode*,struct file*); //关闭I/O设备 ssize_t(*read)(struct file*,char_user*,size_t, loff_t *); //读I/O设备 ssize_t(*write)(struct file*,const char__user *, size_t,loff_t*); //写I/O设备 [(专业提供论文代写和发表的服务,欢迎光临] int(*ioctl)(struct inode*,struct file*,unsigned int, unsigned long); //控制I/O设备 }; A/D设备驱动在初始化时通过misc_register()函数注册混合设备;在释放模块时通过misc_deregister()注销设备驱动。
系统调用部分实际上是对设备的操作,如open、read、write、ioctl等操作。
在编译2.6版本的驱动程序时需要把驱动程序的源代码加入内核代码树,并做相应的配置,然后在Linux源代码根目录位置执行make modules,就可以生成所需要的内核模块文件,通过nfs将编译出的内核模块文件下载至下位机,然后使用#insmod命令装载驱动程序。
3.2 BOA服务器的设计 由于嵌入式设备资源都非常有限,一般不会使用Linux下最普遍的服务器,如Apache等,而需要使用一些专门为嵌入式设备设计的Web服务器,比较典型的嵌入式W。