新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 模式在主控机软件中的应用与研究

模式在主控机软件中的应用与研究

作者:时间:2012-01-19来源:网络收藏

1 引言

目前采用PC机与多台单片机构成的分布式系统、工业控制系统、数据传输系统等得到广泛应用。它既利用了单片机价格低、功能强、抗干扰能力好以及面向控制等优点来构建适宜分布于工业现场、使用方便灵活的监控站或下位机,又结合PC机丰富的软硬件资源,提供管理功能强大、人机界面友好的操作平台。

随着社会经济发展,个人和单位的贵重物品、重要文件、有价单证等日益增多,迫切需要安全保管。银行开设保管箱租赁业务把专用保管箱出租给客户满足了客户需求。银行保管箱系统由软件部分和硬件部分构成:软件部分支持客户管理、保管箱状态监视等;硬件部分包括PC机与单片机通信、单片机与单片机通信等。

由PC机与多个单片机组成的应用系统,一方面需要稳定可靠的数据通信,另一方面PC机端也需要一个可靠、易维护、可复用的软件管理系统。在采用面向对象的软件设计与分析过程中模式技术起着越来越重要的作用。模式是对特定上下文中遇到的一般性问题的可重用解决方案的概要。模式可以分为三个抽象层次[1]:体系结构模式,,实现模式。体系结构模式表示软件系统基础的结构组织方案,例如,分层应用程序模式。描述了特定场景下用来解决一般设计问题的类和相互通信的对象[2]. 实现模式是与特定的编程语言相关的模式。每个下层模式都是对上一层的优化。使用模式技术能够设计出一个满足可靠、易维护、可复用系统的需要。文中将依保管箱系统为例阐述模式在PC机与多个单片机组成系统中的应用。

2 系统总体结构及业务流程

保管箱系统总体结构图如图1所示。系统由一台主控计算机(PC机)与五台下位机(基于8051的单片机)通过RS485总线组成网络。由于RS485串行通信具有距离长、抗噪声能力强的优点[3],所以在PC机与多台单片机构成的系统中常采用RS485技术。图1中每个保险箱内嵌入一个单片机组成一个嵌入式系统。每个钥匙也由单片机构成,它与对应的下位机点对点相连,我们称下位机为钥匙架。

图1 系统总体结构图

系统业务流程:在银行的营业前台客户在上进行身份验证后,被分配一把钥匙,客户从钥匙架上取走此钥匙,然后带着钥匙与自己租用的保险箱中的单片机进行点对点通信打开箱子。客户处理完业务后,用钥匙锁上保管箱并把它带回到前台放回原地,这时获得此下位机的最新状态。

3 软件的体系结构模式

分层是软件设计中解决复杂问题的最常用技术。高层使用低层提供的各种服务,而低层并不关注高层的存在。一般情况下采用层技术可以使各类开发者更专注于本层的工作而不需要知道其它层的情况。采用分层技术并根据分层应用程序模式[1]可把主控机软件设计为三层:表示层、业务层与。表示层处理用户与软件系统之间的交互;业务层处理问题域中的各种业务;负责向业务层提供通信支持,并保证向上层提供信息的可靠性和及时性。一般当系统需要数据库支持永久保存数据时,可以增加数据存取层作为与同处一层的层,如图2所示。

图2 主控机软件的三层体系结构模式

保管箱系统中,主控机与下位机之间的通信封装在通信层中,业务层上需要钥匙时,它只要向通信层提出请求,由通信层判断哪一台下位机可以提供钥匙,并在获取下位机信息后提供给业务层,通信层要保证提供信息的可靠性和及时性。通信层是整个软件系统的基础,使用可以满足此层所需的高可靠性要求。

4 通信层与下位机的通信原理

通信层发送被呼叫的下位机地址,等待下位机的应答,若应答信号正确则发送控制命令;若应答信号不正确则再发送被呼叫的地址,并等待接收应答信息。对同一下位机多次呼叫而在规定时间内无应答信号或应答信号不正确,则提示出错。

5 通信层中的设计模式

根据设计模式的目的,设计模式可分为创建型、结构型和行为型三类[2]。结构模式和行为模式被用来组织类或对象之间的关系和职责,形成应用程序的构架;创建型模式用于生成和管理对象[4],包括单件模式、等,其中是利用单件模式发展而成的。使用创建型模式把对象的使用与对象的生成和管理分离,使类的职责更加单一、明确,可以提高软件的可维护性。通信层采用隐藏了PC机与单片机之间通信,提高了业务层的可测试性。如果通信层接口比较复杂,则可以在通信层上采用外观模式(Facade Pattern)[2]为上层提供一个简单接口以简化对通信层的使用。保管箱系统中通信层利用对象池模式生成下位机对象供业务层使用,使得业务层只专注于业务实现而不再关注对象的生成方式。

5.1单件模式

单件模式(Singleton Pattern)[2]属于创建型模式,它让类自身负责创建自己的实例,并保证这个实例是此类的唯一实例,而且它提供一个全局获取点来获取此实例。用C#描述的算法框架如下:

class Singleton{
private static Singleton instance;

private Singleton() {} // 保证此类在类外部不被实例化
public static Singleton Instance(){ //提供一个全局获取点
if (instance == null){ // 保证此实例的唯一性

instance = new Singleton(); //类自身创建自己的实例
}
return instance;
}

}

5.2对象池模式

对象池模式(Object Pool Pattern)是由单件模式发展而来的创建型模式[4]。当创建一个对象的代价很高或使用的某个类的对象数目固定时,可以用对象池模式复用这些对象。这些对象的产生和管理必须遵守一些明确的规则,例如如何管理一个对象、多少对象被产生、当这些对象完成它们当前任务后如何复用它们等等。保管箱系统中,每个下位机是一个对象,下位机对象的数目是固定,因此在通信层中可以引入对象池模式生成和管理这些对象。引入对象池模式后通信层的结构如图3所示。

图3 引入对象池模式后通信层的结构图

对象池模式由下位机类KeyRack和类的管理者KeyRackManager类组成,此模式不仅包括下位机对象的产生,而且包括对下位机对象的管理。KeyRackManager处理成单件模式,它是唯一的可以产生KeyRack对象的类。它的数据域中有一个私有数组racks,用来存贮 KeyRack对象,在KeyRackManager的构造函数中初始化racks。方法acquireKeyRack用来获取一个有钥匙的下位机对象,实现算法如下:

public KeyRack acquireKeyRack(){

int i=0;

while (i MAX){ //MAX是一个表示下位机个数的常数

if (racks[i].Status.Equals(KeyRackState.有钥匙)){

 break;

}

i++;

}

if (i>= MAX){

throw new Exception("当前没有可用钥匙");

}

return racks[i];

}

以上算法说明当业务层需要一个KeyRack对象时,只需要调用通信层上的方法acquireKeyRack即可获得,而不需要知道此对象的产生方式。开发者根据需要也可以指定具体需要哪一个下位机对象。方法releaseKeyRack用来从racks中释放一个钥匙架对象。 statisticalState用来统计下位机对象的当前状态。

类KeyRack包含的属性有:下位机标识符ID、当前下位机状态Status(有钥匙、无钥匙或损坏)。方法getMCUState用来与编号为 id的下位机通信,并把获取的状态信息赋给属性Status;此方法被类的构造函数调用;在Windows系统下实现与下位机串行通信的方便途径是采用专门处理串行通信的控件。

为了保证通信的可靠性,一方面在设计下位机软件时采用状态重复检测、关键字重发等措施,另一方面在主控机软件的通信层中采用双重检测。

在类KeyRack中对标识符为pID的下位机状态进行定时检测,算法如下:

public KeyRack(int pID)

{ …

ID=pID;

  System.Timers.Timer aTimer=new System.Timers.Timer();//检测初始化

aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);

aTimer.Interval=1000; //1秒检测一次编号为ID下位机

aTimer.Enabled=true;

}

private void OnTimedEvent(object source, ElapsedEventArgs e){ 

getMCUState( ID ); //与编号为ID的下位机进行通信

}

在类KeyRackManager中对所有下位机状态进行定时巡察,算法如下:

private KeyRackManager( ){

System.Timers.Timer aTimer=new System.Timers.Timer(); //巡察初始化

aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);

aTimer.Interval=2000; //2秒钟巡察一次

aTimer.Enabled=true;

}

private void OnTimedEvent(object source, ElapsedEventArgs e){ //巡察

int i;

for (i=0;i MAX;i++){

racks[i].Status=racks[i].currentState(i);

}

}

以上通过KeyRack和KeyRackManager实现双重检测,保证了通信层向业务层提供高可靠性的信息。

6 结束语

文中介绍了在PC机与多个单片机构成的应用系统中主控机管理软件的三层体系结构模式和通信层中采用对象池模式及双重检测技术。我们使用这些技术开发了银行保管箱系统,实际运行证明,该系统稳定、可靠、易维护。同时,文中提出的带有通信层的三层体系结构模式及在通信层中采用对象池模式和双重检测方法可以推广到其它相似的应用系统中。

本文作者创新点:明确提出主控机软件的三层体系结构,使得主控机软件设计更加清晰;对通信层的设计首次提出使用对象池模式和双重检测方法,保证此层具有高可靠性和较好的可维护性。

作者简介:

沈峰,男,1976年生,安徽蒙城人,硕士研究生,主要研究领域为面向对象的系统模型和设计方法、计算机自动控制。电子邮件:shenfeng@aiofm.ac.cn,

通信地址:安徽合肥市1125信箱网络中心 230031;

李晓风,男,1966年生,安徽砀山人,研究员,硕士生导师,主要研究领域为计算机自动控制、现代软件工程方法等。

SHEN Feng,Male, born in 1976,graduate student,His research interests include object-oriented system model and design methods , computer autocontrol.

LI Xiao-Feng,Male, born in 1966, professor,advisor of graduate students , His research interests includ computer autocontrol and modern software engineering methods.

参考文献

1  Microsoft Corporation.Enterprise Solution Patterns Using Microsoft.Net version 1.0[M/OL]. http://msdn.microsoft.com/architecture/

2 Gamma, Helm, Johnson, et al. Design Patterns: Elements of Reusable Object-Oriented Software[M]. Boston:Addison-Wesley Publishing Company Inc, 1995.

3 李光明、李研、李茜.用VB实现S7-300PLC与PC机的普通串口通信[J]. 微计算机信息,2005,21卷(7-1期):35

4  Alan Shalloway,James R.Trott. Design Patterns Explained A New Perspective on Object-Oriented Design,Second Edition[M]. Boston: Addison-Wesley Publishing Company Inc, 2004.



评论


相关推荐

技术专区

关闭