张 营, 李驹光, 唐东明
(西南科技大学 信息工程学院,四川 绵阳 621010)
随着计算机与微电子技术的飞速发展及后PC时代的到来,嵌入式芯片被广泛的运用到消费、电子、微控制、无线通信、网络设备等各个领域。嵌入式产品在全球范围内得到了突飞猛进的发展,并且嵌入式产品越来趋向于智能化,功能及应用环境多样化,小型化。嵌入式产品正在以越来越快的速度改变着人们的生活、工作和娱乐[1]。智能控制领域当然少不了她的身影,该智能控制台系统比其他控制系统更加智能化,功能更加多样化,且具有一些独特的功能。
本智能控制台系统是应用于危险恶劣环境下环境监测,数据采集,远程控制等智能感知控制系统,主要由前端设备、ARM控制台组成,后台PC可辅助控制前端设备。前端主要有采集模块、报警模块、通信模块、控制器模块构成,负责数据采集与环境探测、信号传输、声光告警、无线传输。ARM控制台主要由ARM核心处理器模块、数据通信模块、液晶显示模块、按键处理模块等组成。现主要研究与设计ARM控制台部分,系统总体结构示意图如图1所示。
ARM 控制台设计上采用较新的配置方案:ARM9+Linux2.6内核,采用MiniGui实现系统需要的显示功能及按键处理,实现接收前端数据、处理数据、界面显示、向后台 PC上传数据、向下转发PC的数据及向前端下发控制指令等。
具体所实现的基本功能是根据无线通信节点之间的无线通信协议,封装接收数据的特定函数,并分析前端采集的现场信息;封装向前端发送控制信息的函数模块,根据通信协议,调用该函数模块,向前端发送诸如:前端温湿度采集、前端压力采集等控制指令;通过大屏幕液晶显示屏和自定义键盘实现简洁的控制菜单;同步进行声光报警,且保存所有前端设备的报警记录;实现跟后台 PC端的数据通信,网络数据的组包与解包[2]等。
ARM 控制台所实现的功能完全满足了实际的需求,其核心工作是及时响应前端的信号并在控制台显示界面上作出正确的响应;满足用户对前端的参数设置及相关数据的管理功能,并满足后台 PC端对控制台数据的读取要求。
采用 Atmel的工业环保级 ARM9处理器AT91SAM9263,它整合了 ARM926EJ-S™ 高性能内核,处理器的最高时钟频率为240 MHz,32位高速ARM926EJ-S处理器,支持DSP指令扩展及JAVA加速、10/100M以太网MAC、USB2.0、SSC、USART以及其它丰富的片内外围部件[3],是一款高性能、低功耗、低成本的嵌入式 ARM 微处理器,同时也是最适合于工业控制ARM9处理器之一。
该系统中的AT91SAM9263处理器配有64 MB的SDRAM 存储器,8 MB的NOR Flash,128 MB的NAND Flash,完全满足系统硬件要求。对 WSN(Wireless Sensor Network)网络端提供1路485接口,1路232接口[4],1个USB接口,1个10 M/100 Mb/s以太网接口以方便进行网络功能扩展或其他功能扩展。
2.2.1 多进程间通信设计
本控制台系统在Linux2.6+MiniGui上完成系统的应用软件开发。其软件中的关键问题之一是多进程间数据通信问题。使用多个进程,进程间通信的方式采用共享内存方式[5],共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次数据拷贝,而共享内存只拷贝两次数据: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件[5]。因此,采用共享内存的通信方式效率是非常高的。但共享内存创建后,由于多个进程共享同一块内存区域,必然需要某种同步机制,比如System V的信号灯或Posix的互斥锁来同步对于共享内存区域的访问[6]。
软件整体结构上拟采用3个进程来实现:GuiMg进程(显示界面进程),Serialdata进程 (串口数据处理进程),Netdata进程 (网络数据处理进程),根据系统实现需要创建了3个共享内存表:①前端信息表:共享于Serialdata进程、Netdata进程和GuiMg进程,其数据来源:前端节点串口信息;设置前端设备的一些指令;控制台界面上对前端的控制指令;②串口数据发送表:共享于Serialdata进程、Netdata进程和GuiMg进程。根据控制台跟前端的串行通信协议设定,用于发送控制台和后台 PC端到前端的前端设备控制指令,GuiMg进程和 Netdata进程完成写,Serialdata进程完成取数并发送;③网络数据发送表:共享于Netdata进程和Serialdata进程。根据控制台和后台 PC端的网络通信协议设定,用于发送后台 PC端需要的数据信息,具体数据来源于串口收到的前端数据。Serialdata进程完成写,Netdata进程完成取数并发送。
2.2.2 系统Gui进程的具体实现
MiniGUI是面向实时嵌入式系统的轻量级图形用户界面支持系统,提供了完备的多窗口机制,实现了类win32的消息事件传递及驱动机制;能够支持多字符集和多字体;可以支持常见的图像文件;还支持Windows的资源文件,如位图、图标、光标等,MiniGUI还具有小巧、可配置、移植性好等优点[7]。
MiniGUI是基于事件驱动的,程序的流程不再是只有一个入口和若干个出口的串行执行线路;相反,程序会一直处于一个循环状态,在这个循环当中,程序不断从外部或内部获取某些事件[8],该系统中的按键消息循环流程图如图2所示,当有相应的按键被按下时,从消息循环就会捕获到按键消息,进而进行按键事件部分的处理。
MiniGUI中定时器消息的处理比较特殊,在实现上和Linux 的信号机制类似。当一次定时器消息尚未处理而又出现一次新的定时器消息时,系统将忽略这个新的定时器消息,而且定时器消息是优先级最低的消息类型,只有消息队列中不存在其它类型的消息时,系统才会去检查是否有定时器到期[9]。当设定的定时器频率很高时,就有可能出现定时器消息丢失或者间隔不均匀的情况,为避免出现上述问题该系统使用的定时器经过了多次测试,合理的设置了定时器时间。
本系统 MiniGUI中的定时器定时器消息事件流程图如图3所示,当定时时间到时不断地读取前端共享内存表数据,并及时的更新主工作界面上的信息。
系统的Gui进程采用MiniGui实现了系统需要的显示功能及按键和数据处理等功能,提供了友好的人机交互接口。
2.2.3 串口数据处理进程及网络数据处理进程
串口数据处理进程及网络数据处理进程使得本控制台具有解析处理通信数据包功能,以提供 Gui进程所需的数据及此两个进程本身进行数据处理,另外,其重新组织数据,转发数据的网关功能,使得数据在不同的平台上方便数据处理与共享,并使得系统能够具有处理更复杂问题的功能。
Serialdata进程的功能:完成和前端的串行数据收发;接收前端采集的现场信息,向前端发送控制指令;保存所有前端设备的报警记录。
Netdata的功能:完成和后台PC间的网络数据收发,使用UDP方式完成。
串口数据处理及网络数据处理部分也是主要通过相关的通信协议来设计,具体代码不再详述。其串口处理流程图如图4所示。
其中,UDP网络通信中为了保证通信的稳定可靠性,加入了命令操作确认部分[10],控制台给前端设备发生指令时,要求前端设备正常收到后,回复一个确认信号。
随着众多带有危险环境的行业的发展,如电力,核工业等,生产及工作安全问题显得越来越重要,安全监控设备也越来越显得迫切需要。这里设计的智能控制台系统配合前端感知设备满足了上述行业的需要,缓解了生产及工作中的安全问题。采用的较新的ARM9 + Linux2.6内核 + MiniGui方案,实现了系统需要的功能,设计较为人性化,符合在实际作业中的应用,另外,该控制台创新点是具有解析处理数据,重新组织数据,转发数据的网关功能,使得该控制台具有很强的实用性,是安全与监控行业的发展方向之一,该系统主要应用在带有危险环境的众多行业中也可用于一般的非危险作业环境的智能监控安防场合,将具有广阔的应用前景和市场。
[1] 陈文智,王总辉. 嵌入式系统原理与设计[M].北京:清华大学出版社,2011.
[2] 甘刚. Linux/UNIX网络编程[M].北京:中国水利水电出版社,2006.
[3] 李广军. 微处理器系统结构与嵌入式系统设计[M].北京:电子工业出版社,2009.
[4] 蔡祥,江冰. 基于 485的耐压绝缘测试系统设计[J].通信技术,2011,44(03):23-34.
[5] KURT W. GNU/Linux编程指南[M].第2版.北京:清华大学出版社,2002.
[6] 史蒂文斯,拉戈. UNIX环境高级编程[M].北京:人民邮电出版社,2006.
[7] 韩超.嵌入式GUI开发设计——基于MiniGUI[M].北京:电子工业出版社,2009.
[8] 邹瑛.基于多级链表实现MinGUI属性页控件设计[J].通信技术,2011,44(07):135-137.
[9] 魏永明.嵌入式软件开发及C语言实--MiniGUI剖析[M].北京:电子工业出版社,2008.
[10] 史蒂文斯.TCP/IP详解卷1:协议[M].北京:机械工业出版社,2000.