工控应用已遍及各行各业,特别是随着计算机的普遍降价、由PC机建构的控制系统也越来越多,该类控制系统的优点是开发人员可以用高级语言及大量的现有软件快速建构成自己的软件系统。本文主要介绍了这类应用的一种实现方法:该方法是将所有硬件I/O部分按类型分类。将他们各自的读写过程全部函数化。经数学抽象后归一化为流对象统一处理:传感器→流→(初始化函数,流读,流写,关闭)→应用软件读写线程→用户消息→主窗口。经这样的抽象后,无论控制系统多么复杂,硬件传感器是什么形式,在这种软件架构下全使用统一的软件方法处理。?
2控制系统硬件结构
设想一类控制系统是如下结构建成的,主控台完成同5个测量站的通信并指挥测量站按确定 方程运动。主控台通过与网络与中心站完成双向I/O、主控台可以单独遥控某一测量站设备单独工作。大的硬件控制如图1所示。
主控台与测量站用RS 232通信,经Modem接连,与其他测量设备由A/D、D/A连接卡连接,与中心机通信由网络连接。
在构建此控制系统软件时,不妨将问题扩展,假定不考虑具体的设备控制对象,不考虑具体的应用类型,考虑一种更复杂的控制系统:设想控制系统如图2所示。
控制计算机使用P4 2.8或P4 2.4 GHz处理器,具体的控制对象设想为抽象传感器即可。
3控制系统软件构架
本文提供的软件构架为:对每类控制硬件设备而言,访问该类硬件无非对应如下几个函数:
(1) 硬件初始化函数。
(2) 硬件读函数。
(3) 硬件写函数。
(4) 硬件刷新及关闭函数。
这样,经过数学抽象后,每类硬件访问不超过这5条函数。无论控制系统由什么硬件传感器 搭建,对一类传感器而言。访问他仅需要几条语句而已。假设按类型编制了相关的I/O函数。
该软件系统的主要思路为:任一控制对象(传感器)均可设想为流设备、线程完成流读 写,读写时序由中断或其他设备事件决定。一旦硬件设备I/O完成,用临界区锁住数据,导入软设备缓冲区。用户交互部分仅同软设备缓冲区打交道,与设备硬件无关。控制函数只负责设备缓冲区填写。这一函数仅与通讯协议有关,与硬设备无关。这样任一硬件设备同计算机通讯都可以将其视为一串流信息的交换。更简单的看法为:任一硬设备不妨直接视为一定长的十六进制字符串。这样,任一控制系统在该软件构架下是若干个十六 进制字符串。而软件主框架将其流已分成几大类(串行通讯类,网络类等)。添加或删除某些硬件对软件系统就是关闭几条条件编译项。况且对每类应用,I/O函数是4、5句,所有的同硬件打交道部分都在线程级完成,且读写线程机构完全一致。
前台用户交互部分已完全独立于后台,后台与相关事件通知有关,与前台几乎没有其他关联,所以前台将所有缓冲填好后,只需调一句事件通知即可,这样后台将会自动等到该通知后转入自己的I/O操作。
读线程完成一具体硬件读,读时序由读事件驱动,读线程一旦读到数据,数据先进入用户设计的临界区,锁住数据,将硬件缓冲区读到的数据放入软件缓冲区,发用户读完成消息给前台,实现软硬件隔离。
写线程完成一具体硬件写,写时序由写事件驱动,写线程一旦要写数据,首先调用控制函数完成设备缓冲区填写,进入用户设计的临界区锁住数据,将软件缓冲区的写数据放到硬件缓冲区,发用户定制的写完成消息给前台,实现软硬件隔离。
读完成用户处理消息为:完成数据转换,供显示用。
写完成用户处理消息为:先告知用户状态计数器,表示写已完成,再做其他显示处理。对各硬件的访问全部分开,但读写线程结构完全相同。
控制函数的形式也完全相同,无论是用PID算法或其他算法,均与此函数结构无关。因为该 控制函数的本质为:根据控制字,完成抽象软件缓冲区填写。与控制算法无关。因为这种算法仅在该控制函数中作为子函数调用。
控制函数的功能为:根据控制字完成写出缓冲区填写,并置写出长度,填写缓冲区为软设备缓冲区,控制函数对设备而言结构是完全统一的。形式为:
其中k为控制方式字。例如:0为待机,1为手动,2为理论弹道,3为正弦弹道……
控制时序由标准的时钟设备提供,例如B码或其他设备,他产生的同步脉冲作为中断源接入 系统。中断处理程序一旦检测到该中断,设置各自硬件读写事件为有信号(硬件读写事件由用户在初始化时建立为手工复位的事件)。在读写线程中一旦完成读写操作,复位这些事件。
对应于上述复杂的硬件控制系统,该控制软件架构如图3所示。
读设备线程:
(1) 判断线程是否退出,如退出则转(8),否则转(2)。
(2) 等待读事件,永远等(该事件为手工复位)。
对异步串行设备或网络设备而言该步可省略。
(3) ReadFileDevice()调设备硬件读函数完成读操作。
(4) 判断读是否成功,如不成功,则转(1),如成功转(5)。
(5) 进入临界区,将硬件读缓冲区复制到软设备缓冲区,退出临界区。
(6) 发用户消息到前台,复位读事件,为下一次读做准备。
(7) 转(1)。
(8) 结束。
写设备线程:
(1) 判断线程是否退出,如退出则转(9),否则转(2)。
(2) 等待写事件,永远等(该事件为手工复位)。
(3) 调控制函数完成设备缓冲区填写。
(4) 进入临界区,将软设备写缓冲区复制到硬件写缓冲区,退出临界区。
(5) WriteFileDeivce()调设备写函数完成写操作。
(6) 判断写成功否,如不成功转(1),如成功转(7)。
(7) 发用户消息到前台,复位写事件,为下一次写做准备。
(8) 转(1)。
(9) 结束。
4结语
在这样一种软件架构下,控制系统硬件接口部分从软件角度看仅是4、5条函数,通过Window s 2000的内核同步对象(事件和临界区)将软硬件缓冲区实行了隔离及同步。通过中断置事 件达到控制时序设置。经过这一系列步骤后,整个控制系统的计算机实现软件结构清晰明了 ,调试方便。该软件系统架构与开发工具无关,作者运用这一软件架构已设计多套控制系统 ,这些控制软件目前正成功运行于我国几个基地。
参考文献
[1]曹国钧,王键.深入Windows 2000应用[M].北京:北京科海集团 出版社,2001.
[2]飞思科技产品研发中心?Delphi下深入Windows核心编程[M].北京:电子 工业出版社,2003.
[3][美]William Boswell?Windows 2000 Server 技术内幕[M].北京:清 华大学出版社,2001.
[4]陈平,褚华.软件设计师教程[M].北京:清华大学出版社,2004.
编辑:何世平