论利用OOP设计思想的通讯接口类的设计与应用
0 引言
随着电子技术的发展,嵌入式控制系统进入了各个行业,而友善的人机交互决定了台式机和控制系统的结合不可避免。同时,随着虚拟仪器技术的发展,硬件软件化的趋势愈加明显,在测控系统中,一般的系统构架都采用前端是数据采集系统,然后将采集到的数据通过传输协议传输到后台台式机中进行更加灵活的处理和显示,比方说现在TI的CVS或者LabVIEW 就是专门用于方便地设计虚拟仪器的开发工具。这个一方面是降低成本的方式;另一方面,系统的构架上灵活,适应性得到了加强。
1 硬件构架
嵌入式的测控系统,结合台式机灵活的软件设计,可以提供给用户多样的虚拟仪器的人机交互界面,以及复杂的数据管理功能。图1就是一个典型的测控系统的基于虚拟仪器构架的抽象系统框图。
整个系统,分成了3 个逻辑部分:第一部分就是待测控的系统,可能是某个系统的温度,或者是某个工业控制过程的流量等;第2部分是数据采集和控制执行单元,这个部分负责了数据的采样和来自工控机的命令的执行,关于数据采集单元,可以简单的由传感器加A/D转换电路组成,也可以是诸如频谱仪等专门的测量仪器。由于有些系统是开环系统,所以未必有控制执行单元,所以这个单元在图中用了虚线的方式表示,负责工控机经过某些算法运算之后,执行控制命令;第3部分就是工控机所在的仪器界面的部分,这个部分可以使对原始数据的形象图形化表示(即虚拟仪器,完成人机交互),也可以负责执行诸如一些特殊的信号处理功能,然后将处理结构进行显示或者将处理结果作为算法控制的输入,进行产生控制信号,一边对被控对象进行及时的控制。
系统的工作过程,首先是由被测控系统的需要检测的数据决定了所需要的数据采用硬件进行采用原始的数据,然后又采用系统将数据直接转换为原始数据信号,如果采样后需要立即进行必要的数据处理,就可以使用DSP对数据进行一次加工,然后作为初始数据,通过标准的传输协议(如串口,网口,蓝牙,或者USB等),将数据传输给工控PC,然后通过编写工控软件,将数据进一步进行深层次的处理,显示,存储,如果需要对系统进行控制,就可以在工控机上对信号使用如滤波,变换或者控制PID 等的各种算法,然后通过标准协议,将处理的控制信号传输到控制执行单元,对测控系统中所关心的参数进行控制。
本文关注的就是各种传输协议在工控PC上的编程时代码的适应性,扩展性以及代码的复用性。
2 接口类的设计
2.1 基于面向对象的接口类的设计
本文利用了面向对象的设计思想,将图1中的各种标准工业传输协议进行抽象,提供统一的接口,这样设计的接口类,不但可以保证数据的安全性,使用的灵活性,还能实现良好的可扩充性。图2就是依照面向对象的设计思路,利用UML表示的类族的关系[7].
在图2的UML表示类的关系中,是对图1的系统的在传输观点来看的一个抽象,其中,Device类是对设备的抽象,COM类是对通讯接口的抽象,这两个类都是抽象类,在应用软件看来,一个具体的测量设备,只关注设备打开,传输数据,和关闭,其他的细节,不需要应用程序知道太多。而面向对象的程序的设计思想,可以很好地满足这样的需求,基于此,Device类是一个用于后续实现多态机制的虚类,这个抽象类,是任何具体测量设备的父类,而派生自这个Device的任何类,都需要实现父类中的4 个基本操作方法Open,Close,SendCmd 和RecvData;至于是否需要其他的接口方法,用户可以根据需要进行添加。抽象类COM和Device是一种聚合的关系,任何一个Device 都有一个用于传输数据的通讯口,一个抽象的通讯类,需要提供的接口方法有Open,Close,Write 和Read,其中,Open 主要用于打开通讯口,包含了对通讯口的初始化,之后,就可以进行数据的传输了。Close用于释放通讯口所占用的资源,如果可能,包含了对通讯口的下电操作。而Read 和Write 就是完成数据缓冲区数据的接受和发送,其中,方法签名中的*pBuff是指向待发送或者接受到数据的缓冲区,iCount-ToWrite和iCountToRead分别是要发送或者接受的数据的字节数,这两个方法的返回值,是实际发送或者接受到的数据的字节数。如果出错,则返回小于0 的错误代码。
对于具体的通讯协议接口,比如串口、网口或者GPIB,甚至其他的芯片的接口[8-9]等,都是继承自通讯类COM 的,在COM 类中,各个接口方法可以定义成虚方法,这样,有利于在具体的派生类中对其进行重载,从而有利于动态多态机制的实现,而具体的差异统统放到每个具体类的扩展部分。例如,对于串口,关注的是串口名称,串口数据传输速率,有
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)