0 概述
核子秤是利用物质对γ射线的吸收原理制成的,是当前最新一代散装物料在线计量及监控设备。它在与传输带不直接接触的情况下,可以实现多种型式输送机输送物料的在线连续计量与控制,适用于各种工业现场环境。
工控PC核子秤计量与监控系统的核心硬件系统由工业控制PC机,配以12位的A/D转换器、16路开关量输入、16路开关量输出等接口电路组成。核子秤计量与监控系统的核心软件系统是在Windows98/WindowsNT环境下,采用Visual C++6.0编制、开发的通用计量与监控系统。可以实现单秤计控、4秤计量、4秤计量与配料、8秤计量、8秤计量与配料、16秤计量、16秤计量与配料等多种功能。具体的用户,可以通过安装引导程序进行定义,或者根据系统设置选项自己定义,灵活选择,适应性广泛。
1 总体结构方案
由于该系统的各个子系统都有着相似的功能,各个子系统之间的不同只是秤体个数的不同,或者是增加、减少某个功能而已。为此,这里为该系统设计了1个3个层次的总体结构方案,其原理如图1所示。

图中各层的功能及实现方法如下:
(1)底层,又称为虚拟设备驱动层VxD,完成从各个通道采集信号。
在实时控制系统中,系统分为前台和后台。后台即是底层,完成信号的采集,这里采用虚拟设备技术VxD,截取系统8号中断,每秒钟采集18次信号,然后对采集的信号进行数字滤波(求平均值),将其存储在缓冲区中。这样可以确保在上层应用程序出现短时间死机的情况下,仍能完好地保存采集信号,待上层重新恢复运行时,能保证生产的顺利进行,从而体现出系统良好的可靠性,稳定性与安全性。
(2)最上层为应用程序界面层,在实时控制系统中为前台。前台非常重要的功能是从底层VxD的缓冲区中获得数据,并定时送到文档中。本系统应用程序界面层包括主界面控制台、流量曲线显示、各种参数设置、无物料输出校对、自动标定、清除产量、系统配置、产量运算、图表显示、报表打印、曲线打印、记录查询、网络通信、流量输出、485通信、催款加密等功能。其中的计控和配料系统还需完成PID运算和控制信号输出功能,以及完成数据的计算存储、显示等,可以在主界面上实时显示系统的信号情况、工作状态、产量报表和流量曲线等,显示的内容和显示的方式与系统主界面保持一致。
(3)中间层为接口层,主要完成上、下两层的数据通信。它通过Microsoft提供的API接口函数De-viceIoControl(),由应用层中的AcquireDate()函数调用把底层VxD采集的数据送到上层,以备上层进行各种运算、处理、判断,从而实现对整个系统的控制和显示。
2 辅助线程函数的设计
AfxBeginThread (AcquireData, this, THRE-AD-PRIORITY_HIGHEST)辅助线程函数的主要功能是通过调用线程函数AcquireData从底层VxD的缓冲区循环队列中取出采集的数据,以提供上层各个模块进行数据处理时对瞬时值的需要。
支持多线程是VC++的一个特色。所谓线程就是一个独立进程包含的多条执行路径,它由操作系统管理,且拥有自己的堆栈。
2.1 编写辅助线程函数和启动线程
线程函数一般声明为全局函数,其形式如下:

其中辅助线程函数AfxBeginThread会立即返回一个指向新创建的线程对象的指针。可以用这个指针挂起线程(CwinThread::SuspendThread)或恢复线程运行(Re-sumeThread),但线程对象没有成员函数可用来终止线程。辅助线程函数有3个参数,其中第一个参数是调用线程函数AcquireData()。第2个参数是一个32位值,用来传给全局函数;第3个参数是线程优先权码。一旦辅助线程被启动,它就独立运行,在本系统中,它的优先权设为最高,以确保CPU最优先运行辅助线程函数。
2.2 用事件使线程同步
事件(Event)是一种Windows为线程同步提供的核心对象。一个事件用进程里唯一的32位句柄标识。一个事件可为:有信号状态(或为true)与无信号状态(或为false)。事件有两种类型:手工重置和自动重置。可调用Cevent::SetEvent来设置事件为有信号状态。
辅助线程必须监视这两个事件,当某个事件为有信号状态时,就需作出响应,可使用Win32的WaitForsingleObject函数挂起线程,直到特定的对象变成有信号状态。该函数的第1个参数为事件句柄,可用1个Cevent对象作为第1个参数。第2个参数是超时间隔,设置为INFINITE,则函数将直至相应事件变成有信号状态才返回;若设置为0,则WaitForSingleObject会立即返回,此时若事件为有信号状态,返回值为WAIT_OBJECT_0。
3 面向对象的程序设计
传统的结构化语言,例如C、Pascal等,都采用面向过程的方法进行程序设计,在结构化程序中,通常有一个主过程和若干个子过程,每一个子过程处理某个小问题,主过程自顶向下调用各个子过程,逐个解决整个问题。在这种结构化程序设计中,其代码和数据是分离的,从而使程序的通用性、灵活性和可维护性差。这里,采用了面向对象的程序设计方法,其主要思想是将数据(数据成员)及处理这些数据的相应函数(成员函数)封装到类中,并使用类的变量(类对象)。在对象内,只有属于该对象的成员函数才可以存取该对象的数据成员,从而可对数据进行保护和隐藏。面向对象的程序设计提出并具有如类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)及多态性(Polymorphism)等一些新的概念和特点。
其中,类是一种用户自定义的数据类型,是对象的抽象与描述,是具有统一属性和操作的多个对象的统一描述体。在类中心须给出生成一个对象的具体方法。
在类的语法结构中包含3种类型:私有类型、公有类型和保护类型。在设计面向对象的程序中,首先要以类的方式设计实际待解决的问题,即将问题所要处理的数据定义为公有或私有类数据,同时将处理问题的方法定义成类的公有或私有成员函数。对象是类的实例,是按照封装的方法构造的与客观世界具体成分对应的软件模块。对象中封装的是描述这些客观世界具体成分的1组数据及对这些数据上的1组操作。
在本系统的设计中,首先在应用层利用VC++的支持多线程技术设计了1个线程函数AcquireDa-ta(),它负责获取底层存储在环行队列中的信号值,每秒取得1个。应用层中的核心是文档类,它负责与系统的其它各部分的联系。视图类负责程序界面的刷新。而系统最主要的数据处理是由秤类CBalance完成的,在这个类中,封装了各个秤的参数,并提供了公有函数接口,以负责数据交换。CBalance类说明的主要内容如下:


根据面向对象的程序设计思想,类中的变量尽量设为私有类型,并为每个变量提供“读取”、“存储”两个公有函数,作为与其它类的接口。例如:

4 结束语
由于工控PC核子秤计量与监控系统是在Win-dows98环境下,利用可视化开发工具Visual C++,采用面向对象技术进行设计与开发的,故界面友好,操作方便。该系统可随时提供各生产环节的数据分析及其报告,并提供一段时间内的生产曲线图,而且能够保证在前台死机的情况下,仍能高效,准确地采集并保存信号,实现了生产中计量、输料控制、配比控制的微机自动化管理,使工业误差保证到最小范围之内,同时也降低了资源消耗,提高了生产效率。
综上所述,该系统是核子秤的核心软件系统,也是工业中较为典型的直接数字控制系统——DDC控制系统的核心软件系统,具有功能齐全,可靠高效,界面友好,操作方便等一系列特点。这种面向对象的设计方法可以广泛地应用于机械工业、化工、冶金、矿山、建材、电力、轻工、食品等各种工业控制系统中,随着数字计算机处理速度的提高,自动控制技术的发展及人们对自动控制技术要求的提高,面向对象的设计技术将更加广泛地应用于各种控制系统中。
[参 考 文 献]
[1] DAVID J K,潘爱民,王国印译.Visual C++技术内幕(第4版)[M].北京:清华大学出版社.
[2] 张宇河,金钰.计算机控制系统[M].北京:北京理工大学出版社,1996.
[3] 张国峰.面向对象的程序设计与C++教程[M].北京:电子工业出版社.
[作者简介]金钰(1941-),女,北京理工大学自动控制系副教授,研究方向:自动控制理论与工程计算机控制系统。




