4_7d`/j,PX+~!v F446061 引言电子园51单片机学习网,@8q}f2? L
电子园51单片机学习网6\ f9dj0e目前采用PC机与多台单片机构成的分布式系统、工业控制系统、数据传输系统等得到广泛应用。它既利用了单片机价格低、功能强、抗干扰能力好以及面向控制等优点来构建适宜分布于工业现场、使用方便灵活的监控站或下位机,又结合PC机丰富的软硬件资源,提供管理功能强大、人机界面友好的操作平台。电子园51单片机学习网 xs&?b"B K
电子园51单片机学习网W7ptO5`+x随着社会经济发展,个人和单位的贵重物品、重要文件、有价单证等日益增多,迫切需要安全保管。银行开设保管箱租赁业务把专用保管箱出租给客户满足了客户需求。银行保管箱系统由软件部分和硬件部分构成:软件部分支持客户管理、保管箱状态监视等;硬件部分包括PC机与单片机通信、单片机与单片机通信等。
e{2i-}1NB{9a446064](? r H,J8VxQ+OTl44606由PC机与多个单片机组成的应用系统,一方面需要稳定可靠的数据通信,另一方面PC机端也需要一个可靠、易维护、可复用的软件管理系统。在采用面向对象的软件设计与分析过程中模式技术起着越来越重要的作用。模式是对特定上下文中遇到的一般性问题的可重用解决方案的概要。模式可以分为三个抽象层次[1]:体系结构模式,设计模式,实现模式。体系结构模式表示软件系统基础的结构组织方案,例如,分层应用程序模式。设计模式描述了特定场景下用来解决一般设计问题的类和相互通信的对象[2]. 实现模式是与特定的编程语言相关的模式。每个下层模式都是对上一层的优化。使用模式技术能够设计出一个满足可靠、易维护、可复用系统的需要。文中将依保管箱系统为例阐述模式在PC机与多个单片机组成系统中的应用。
?/R1lZ1by ] {\44606 电子园51单片机学习网:KiZ:?4`.Z2 系统总体结构及业务流程
6r E{P m3y44606 电子园51单片机学习网&J M!x UG d&~+Pa保管箱系统总体结构图如图1所示。系统由一台主控计算机(PC机)与五台下位机(基于8051的单片机)通过RS485总线组成网络。由于RS485串行通信具有距离长、抗噪声能力强的优点[3],所以在PC机与多台单片机构成的系统中常采用RS485技术。图1中每个保险箱内嵌入一个单片机组成一个嵌入式系统。每个钥匙也由单片机构成,它与对应的下位机点对点相连,我们称下位机为钥匙架。
&?3SU;h@44606 电子园51单片机学习网)z,|#a{zuAp电子园51单片机学习网_ARt'WAd5X
;f$mV#| P]44606电子园51单片机学习网4ZV8h5nc;Q \K
L4`\'Qw3l/|&[]p44606图1 系统总体结构图
N,~ WP(J44606 电子园51单片机学习网;~Fs"a:sIT&@3Y e系统业务流程:在银行的营业前台客户在主控机上进行身份验证后,被分配一把钥匙,客户从钥匙架上取走此钥匙,然后带着钥匙与自己租用的保险箱中的单片机进行点对点通信打开箱子。客户处理完业务后,用钥匙锁上保管箱并把它带回到前台放回原地,这时主控机获得此下位机的最新状态。
F,M V$b s2_44606 电子园51单片机学习网y!oX wO(cl }3 主控机软件的体系结构模式电子园51单片机学习网 ]*md Ztp
9@ rY"d-w$K5{ P_l44606分层是软件设计中解决复杂问题的最常用技术。高层使用低层提供的各种服务,而低层并不关注高层的存在。一般情况下采用层技术可以使各类开发者更专注于本层的工作而不需要知道其它层的情况。采用分层技术并根据分层应用程序模式[1]可把主控机软件设计为三层:表示层、业务层与通信层。表示层处理用户与软件系统之间的交互;业务层处理问题域中的各种业务;通信层负责向业务层提供通信支持,并保证向上层提供信息的可靠性和及时性。一般当系统需要数据库支持永久保存数据时,可以增加数据存取层作为与通信层同处一层的层,如图2所示。电子园51单片机学习网%cD-K$XTEyB J i
电子园51单片机学习网CJ-o Y o"O,h6P电子园51单片机学习网-{2q#M6rU
电子园51单片机学习网)fO&bit V电子园51单片机学习网Y*kLLX8T0k
电子园51单片机学习网 qmc#C;J3x-_1iS|'z图2 主控机软件的三层体系结构模式
@(t S&[m/rtnf4ZO44606(d5c ~0Ww0F"FM9r5h{44606保管箱系统中,主控机与下位机之间的通信封装在通信层中,业务层上需要钥匙时,它只要向通信层提出请求,由通信层判断哪一台下位机可以提供钥匙,并在获取下位机信息后提供给业务层,通信层要保证提供信息的可靠性和及时性。通信层是整个软件系统的基础,使用设计模式可以满足此层所需的高可靠性要求。
:Q3^H%IJwe/@44606$D-me `"C,f4^L446064 通信层与下位机的通信原理
?-K@\O#U44606 电子园51单片机学习网&Lj ?-Y}G#y~通信层发送被呼叫的下位机地址,等待下位机的应答,若应答信号正确则发送控制命令;若应答信号不正确则再发送被呼叫的地址,并等待接收应答信息。对同一下位机多次呼叫而在规定时间内无应答信号或应答信号不正确,则提示出错。
2b R._s4|Z44606G$Ia3c3o?i|W9Q)I446065 通信层中的设计模式
#rY n(nJ(W)|K5X44606Y uC9l2B8b'aH44606根据设计模式的目的,设计模式可分为创建型、结构型和行为型三类[2]。结构模式和行为模式被用来组织类或对象之间的关系和职责,形成应用程序的构架;创建型模式用于生成和管理对象[4],包括单件模式、对象池模式等,其中对象池模式是利用单件模式发展而成的。使用创建型模式把对象的使用与对象的生成和管理分离,使类的职责更加单一、明确,可以提高软件的可维护性。通信层采用对象池模式隐藏了PC机与单片机之间通信,提高了业务层的可测试性。如果通信层接口比较复杂,则可以在通信层上采用外观模式(Facade Pattern)[2]为上层提供一个简单接口以简化对通信层的使用。保管箱系统中通信层利用对象池模式生成下位机对象供业务层使用,使得业务层只专注于业务实现而不再关注对象的生成方式。
X2l)___rk44606 电子园51单片机学习网$PCoEl&p5dI5.1单件模式电子园51单片机学习网 x(IB4G$?qNn#?hM
电子园51单片机学习网m"I2c;w!y(cYP2F7n$i单件模式(Singleton Pattern)[2]属于创建型模式,它让类自身负责创建自己的实例,并保证这个实例是此类的唯一实例,而且它提供一个全局获取点来获取此实例。用C#描述的算法框架如下:
[$O6G*f { e9VL44606/S!@Q]q44606class Singleton {
.`/GhiK l44606 private static Singleton instance;电子园51单片机学习网z,] B lyYGt
x8tv]]9Ms nB/l44606 private Singleton() { } // 保证此类在类外部不被实例化
I9r!r`2F"Sux44606 public static Singleton Instance(){ //提供一个全局获取点
0Af9@}0|4nc)Pc_,q44606 if (instance == null) { // 保证此实例的唯一性电子园51单片机学习网!jW DQZ
instance = new Singleton(); //类自身创建自己的实例
D.t2LLq9d;w!W44606 }
!K Pj#^#DX9v44606 return instance;
i6?}7{l3R44606 }电子园51单片机学习网V!]]^V:C
}电子园51单片机学习网;hP&D*i?0Q
E6m2L&J RN(b446065.2对象池模式
%g2?aD O/E!zWC5^446065O/i3QG0T2LX44606对象池模式(Object Pool Pattern)是由单件模式发展而来的创建型模式[4]。当创建一个对象的代价很高或使用的某个类的对象数目固定时,可以用对象池模式复用这些对象。这些对象的产生和管理必须遵守一些明确的规则,例如如何管理一个对象、多少对象被产生、当这些对象完成它们当前任务后如何复用它们等等。保管箱系统中,每个下位机是一个对象,下位机对象的数目是固定,因此在通信层中可以引入对象池模式生成和管理这些对象。引入对象池模式后通信层的结构如图3所示。
hT`soPhC44606 电子园51单片机学习网(MmEnE ^MdI0] b电子园51单片机学习网#a4HJVA5yLUCE
wI-}$D%x0X44606
]n_ZW E [44606 电子园51单片机学习网|Y2Uow de{图3 引入对象池模式后通信层的结构图
w+{7gHN44606o5~lJd+C Y;~jh44606对象池模式由下位机类KeyRack和类的管理者KeyRackManager类组成,此模式不仅包括下位机对象的产生,而且包括对下位机对象的管理。KeyRackManager处理成单件模式,它是唯一的可以产生KeyRack对象的类。它的数据域中有一个私有数组racks,用来存贮KeyRack对象,在KeyRackManager的构造函数中初始化racks。方法acquireKeyRack用来获取一个有钥匙的下位机对象,实现算法如下:
,m`t9b8G0_kQvLL}44606U7n4eX.^dG3@0nBr44606public KeyRack acquireKeyRack(){电子园51单片机学习网3D j k,xx:wHX
2^y C9x3J`EQom1f44606int i="0";电子园51单片机学习网c8Jo8{ i)MWX
6C~!Zc0c44606while (i< MAX){ //MAX是一个表示下位机个数的常数电子园51单片机学习网K6U9pKWR&YD J B
电子园51单片机学习网Fh7pr,@if (racks.Status.Equals(KeyRackState.有钥匙)){
%f!D ]0N$Lci44606f)w2w+G#^ lC/U.\a:]?44606 break;电子园51单片机学习网CVh;i5SC ^M
Z(A P5_-WY44606 }电子园51单片机学习网2Wk.oe\)R0c1` ^
)R0kRP(N:FZ/BM44606 i++;
Vj9UGH oF44606 电子园51单片机学习网%L6h8zlc!pvIC3X%[}
nU }p#X9hF8]Q8i44606 电子园51单片机学习网!Re9H|Xp"vq \f Y Nif (i>= MAX){
/RLs$n ]9c2TpS44606 电子园51单片机学习网?-e:wB-yz+Hthrow new Exception("当前没有可用钥匙");
)f%j2Lh*s YM\]44606)['~(uDm7j5`1j%?44606}
K;MU[U s @ y{446060vbBA0L9|2lO1J"C44606return racks;电子园51单片机学习网EB1z!n!DY"b6?-^
电子园51单片机学习网)X Wh9|JG}
4t:` } ef?44606 电子园51单片机学习网@S}sM,k%Kn+G以上算法说明当业务层需要一个KeyRack对象时,只需要调用通信层上的方法acquireKeyRack即可获得,而不需要知道此对象的产生方式。开发者根据需要也可以指定具体需要哪一个下位机对象。方法releaseKeyRack用来从racks中释放一个钥匙架对象。statisticalState用来统计下位机对象的当前状态。
fu E$DhzJ!ma'S44606 电子园51单片机学习网2W~^L?}|/u类KeyRack包含的属性有:下位机标识符ID、当前下位机状态Status(有钥匙、无钥匙或损坏)。方法getMCUState用来与编号为id的下位机通信,并把获取的状态信息赋给属性Status;此方法被类的构造函数调用;在Windows系统下实现与下位机串行通信的方便途径是采用专门处理串行通信的控件。电子园51单片机学习网p&` yJ2[I
q6RCXd2c44606为了保证通信的可靠性,一方面在设计下位机软件时采用状态重复检测、关键字重发等措施,另一方面在主控机软件的通信层中采用双重检测。
B.d%d%{kzP-}/W44606_-a\5V0lbkA;d44606在类KeyRack中对标识符为pID的下位机状态进行定时检测,算法如下:
^)@ xkyK44606r?[T%G Z44606public KeyRack(int pID)
.uf%n/b$Cjm44606bEjYx]dE44606{ …
e-]:FJ z446062d!CG(t A44606 ID="pID";电子园51单片机学习网5Nx?k \"e-L Eh#~Q
电子园51单片机学习网 V S"@o8_Q}System.Timers.Timer aTimer="new" System.Timers.Timer();//检测初始化
l%^^2Fo"[^pU44606 电子园51单片机学习网F3t\2H(~ L{UaTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);电子园51单片机学习网dwCy4f%s7ri
电子园51单片机学习网3Yr} E] Q{CPaTimer.Interval=1000; //1秒检测一次编号为ID下位机电子园51单片机学习网mtU8V8[Ji
电子园51单片机学习网f0}3TY1WaTimer.Enabled=true;电子园51单片机学习网 r1IY _&QG
电子园51单片机学习网#^^n#TESS(o}电子园51单片机学习网;{ m!tm9k8zc]U O c
:v v1U1L}G6yS7z&m qU44606private void OnTimedEvent(object source, ElapsedEventArgs e){ 电子园51单片机学习网tmrik3cZ)z
L m5Eb-BQ+P&J8b$?E44606 getMCUState( ID ); //与编号为ID的下位机进行通信
+fzs dc44606j ^1S M;V3Ny44606 }
9\gF"uo44606 电子园51单片机学习网U4x4B'Ki"}}^k~在类KeyRackManager中对所有下位机状态进行定时巡察,算法如下:电子园51单片机学习网2I8N'Zg8n4P9tc] Qj
电子园51单片机学习网*azms5x;@O#y5Fh,}Dprivate KeyRackManager( ){ 电子园51单片机学习网v:f+Kbn7^O'K J/e
电子园51单片机学习网+qKiAvk5zea nESystem.Timers.Timer aTimer="new" System.Timers.Timer(); //巡察初始化电子园51单片机学习网:TU gD'h`A
电子园51单片机学习网/@~K+U!waTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);电子园51单片机学习网1AV,~H%[M"V
g3F1Jy-X Cx,]M44606aTimer.Interval=2000; //2秒钟巡察一次电子园51单片机学习网3O2\9T']{]D X;XZ.i
+o#F/X/n{cfR+qT44606aTimer.Enabled=true;电子园51单片机学习网%z#]1E1U:rG|
电子园51单片机学习网{:}/ozIs4_"o}
6o:TJ:Ncka%waX jD44606&f/R%iP\T~44606private void OnTimedEvent(object source, ElapsedEventArgs e){ //巡察电子园51单片机学习网8J/u;q6{Ep
电子园51单片机学习网fp!xXl#aint i;电子园51单片机学习网 @9`_ I'b%r Z!Q
^(l*z}`44606for (i=0;i< MAX;i++){
U'Yp/HuH8v:v s44606'I(t&|"k/D:x i-\)T]44606racks.Status=racks.currentState(i);电子园51单片机学习网EVIs5pGm
2g8{6fl7@IZ NnM44606}电子园51单片机学习网4ku X d6Og B
s;g|c;Epn8q44606}
@ oX8D4_.w yZ44606 电子园51单片机学习网#D@r$O0P#?以上通过KeyRack和KeyRackManager实现双重检测,保证了通信层向业务层提供高可靠性的信息。电子园51单片机学习网I-b6gR:M.}+})MhM
1H*c8qo K&Q446066 结束语电子园51单片机学习网|P-g%i5s2kJ%c
电子园51单片机学习网 GA2YL2Scpz文中介绍了在PC机与多个单片机构成的应用系统中主控机管理软件的三层体系结构模式和通信层中采用对象池模式及双重检测技术。我们使用这些技术开发了银行保管箱系统,实际运行证明,该系统稳定、可靠、易维护。同时,文中提出的带有通信层的三层体系结构模式及在通信层中采用对象池模式和双重检测方法可以推广到其它相似的应用系统中。
0W8Z9i-u:^aT:R446061Du0Be'KN"Ku44606本文作者创新点:明确提出主控机软件的三层体系结构,使得主控机软件设计更加清晰;对通信层的设计首次提出使用对象池模式和双重检测方法,保证此层具有高可靠性和较好的可维护性。电子园51单片机学习网$On(S#xK
电子园51单片机学习网N3J V/m#d8R Lt作者简介:
5a.Xd ["hz R44606 电子园51单片机学习网"X1a;\ck5Ezo+D4d沈峰,男,1976年生,安徽蒙城人,硕士研究生,主要研究领域为面向对象的系统模型和设计方法、计算机自动控制。电子邮件:shenfeng@aiofm.ac.cn,
!Se"L ?.Y:O-?d'_6d$tc44606 电子园51单片机学习网Ydvy j通信地址:安徽合肥市1125信箱网络中心 230031;
Y3@$V5k0Y{5@8|%{$J44606 电子园51单片机学习网p,tvt V{f李晓风,男,1966年生,安徽砀山人,研究员,硕士生导师,主要研究领域为计算机自动控制、现代软件工程方法等。电子园51单片机学习网;{N]7QH CR*W
电子园51单片机学习网k h&l4vyL'yn9cSHEN Feng,Male, born in 1976,graduate student,His research interests include object-oriented system model and design methods , computer autocontrol.
,u/YfZb+}$cW44606 电子园51单片机学习网c:@T1Sp*K:S7iLLI Xiao-Feng,Male, born in 1966, professor,advisor of graduate students , His research interests includ computer autocontrol and modern software engineering methods.电子园51单片机学习网VG#G9O,kP
HHK2LFR[}$XP44606参考文献电子园51单片机学习网 R,_;NZ{!mvO8\
电子园51单片机学习网K]$EGS&y(u8g?:D1 Microsoft Corporation.Enterprise Solution Patterns Using Microsoft.Net version 1.0[M/OL]. http://msdn.microsoft.com/architecture/电子园51单片机学习网X K)d~B
P*bc1N#W#y!z:M446062 Gamma, Helm, Johnson, et al. Design Patterns: Elements of Reusable Object-Oriented Software[M]. Boston:Addison-Wesley Publishing Company Inc, 1995.电子园51单片机学习网;@8hj{3r
hx_:DcQ'|446063 李光明、李研、李茜.用VB实现S7-300PLC与PC机的普通串口通信[J]. 微计算机信息,2005,21卷(7-1期):35
!F B0\Mi!D:n44606 电子园51单片机学习网+tr$o1~-J4 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.电子园51单片机学习网'p1SS} e{Ib+U1U
文章评论(0条评论)
登录后参与讨论