(电路与系统专业论文)远程测控系统开发及软件设计.pdf_第1页
(电路与系统专业论文)远程测控系统开发及软件设计.pdf_第2页
(电路与系统专业论文)远程测控系统开发及软件设计.pdf_第3页
(电路与系统专业论文)远程测控系统开发及软件设计.pdf_第4页
(电路与系统专业论文)远程测控系统开发及软件设计.pdf_第5页
已阅读5页,还剩58页未读 继续免费阅读

(电路与系统专业论文)远程测控系统开发及软件设计.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

l 程i m d 空 系统软川设i a b 9 l r a c t p c a n d m c u a r e p o p u l a r l y u s e d i n t h e f i e l d o f r e m o t e c o n t r o l a n d m e a s u r e m e n t w i t h t h e m e t h o d o f d i r e c t u s e o f p c o r e m b e d i n g t h e m c u c h i p i n t h e s y s t e m b e c a u s e o f t h e d i f f e r e n t r e q u i r e m e n t a n d c o n d i t i o n , t h e s y s t e m u s u a l l y c a n n o t b e u s e d u n i v e r s a l l y t h u s p e o p l e u s u a l l y h a v e t o d e v e l o p t h e s y s t e m i n a c c o r d i n g t o t h e s p e c i f i c r e q u i s i t e . t h e a r t i c l e m a i n l y i n t r o d u c e d t h e s o f t w a r e d e s ig n o f t h e c o n t r o l s y s t e m a n d s i m p l y i n t r o d u c e d t h e w h o l e s y s t e m d e s i g n i n c l u d e h a r d w a r e , c o m m u n i c a t i o n p r o t o c o l t h e s o ft w a r e h a s t h e f o l l o w i n g f e a t u r e s f u l f i l l t h e o b j e c t o f e n c a p s u l i n g a l l o f t h e d e v i c e a n d i n s t r u m e n t b y t h e w a y o f u s i n g a a b s t r a c t c l a s s o f c + +, t h u s t h e w h o l e s y s t e m c a n b e e a s i l y e x p a n d e d . y o u n e e d n o t m o d i f y t h e s o u r c e c o d e o f t h e p r o g r a m i f y o u w a n t t o a p p e n d o r d e c r e a s e t h e q u a n t i t y o f t h e d e v i c e a n d i n s t r u m e n t f u l f i l l t h e b i - d i r e c t i o n a l c o mmu n i c a t i o n b e t we e n t h e p c wh i c h b a s e d o n w i n d o w s 9 8 o p e r a t i o n s y s t e m a n d t h e m c u s y s t e m w h i c h w e d e v e l o p e d t h e s o ft w a r e u s e t h e c o m m u n i c a t io n p r o t o c o l w h ic h f it s t h e s p e c i a l n e e d o f t h e s y s t e m t h e s o ft w a r e c a n b e e a s i l y t r a n s p l a n t e d f r o m t h e s y s t e m w e d e v e l o p e d t o a n o t h e r s i m i l a r c o n t r o l s y s t e m b a s e d o n t h e s a m e c o m m u n i c a t i o n p r o t o c o l t h e s o ft w a r e h a s a p e r f e c t h e lp - s y s t e m a n d a s i m p l e s p e c i a l i s t - s y s t e m w h i c h c a n h e l p u s e r t o o p e r a t e t h e w h o l e s y s t e m u s e r c a n m a k e t h e s y s t e m a u t o m a t i c w o r k a c c o r d i n g t h e r u l e w h i c h h a s b e e n s e t b e f o r e h a n d i f i t i s n e c e s s a ry u s e r c a n u s e t h e s o f t w a r e t o p r o d u c e a l a y o u t s h e e t c o n v e n i e n t l y j u s t a s u s e p r ot e l t o ma k e a s c h e m s h e e t k e y w o r d s : c o n t r o l a n d m e a s u r i n g s y s t e m, mc u, o o p , c o m m u n i c a t i o n p r o t o c o l c + + p m g r a m , w i n d o w s p r o g r a m 卜电 远程测拧系统软什设u 第一章前言 1 - i 向向对象程序设计的发展及核心概念 1 - i - 1 血向对象程序设计的发展 面向对象程序设计相对 i . 传统的顺序模块程序设计是一 个全新的编程思路, 八传统的顺序模块程序设计中,人们将 一 个功能复杂的人系统分为若 i 个r 系 统, 侮个子 系统就叫做一个模块, 每个模块完成不同的功能, 采i f 从 i 几 到 卜 的设 计,也就是说需要确定总的功能后, 再细分为不同的模块来实现,当程序很人的 时候, 模块太多, 模块之问的接l 1 也 就很复杂, 必然导致编程困难,为了 解决这 fi ll 题, 我们需要种系统的各个子系统之间相互 独;y ir l, 史强, 更容易维护的程 序设计力式,7 = 是面向对象程序设计方法也 就应运而生了。1 9 6 7年,发明了 第 种正 式将in 向对象概念作为语言成分的s i m u l a 6 7语言,引入了 类、 对象、 继 承、 共行i - 程序等概念:8 0年代以后,s m a l l t a l k语言 的的问世标志作ia向对象 语六研究的一个新的起点;而向对象程序设计的真正盛行是 a t : 的其他部分访ili 1j 多态 多态是 种性质,他允许 个名字川 1 几 两个或im个以卜 的技术 截然不同的 i 的,史般的训,多态就足 “ 个接曰,多种为 法” ,函数的f 载,运算算 j 几 的.i! : 4 戈 都足多态性的农现,沪 继承 继承是 种处理方 泥 、 ,通过这 一 种方 法,个对象1 .丁 以获得另个 对象的特 i d ,史专 业化的讲, 个对象可以继承 组般特征, j 川 1 f 自己 特有的f特征 加到般特i ll _ 之 1 1 - z 单 片机技术在远程测控系统f 1 1 的应川 随着计算机技术的发展,测拧系统几手, 无例外的要w1 月 微机技术,尤其是 % i c u 1 术史是得到i 泛的应川,f i 前, 8 位机f l l 3 2 位机在单) 机i li 场, t i 据 i .: 流 1 l i ,i. . i n t e l . m o t o r o la . m ic r o c h ip 等公 1 均推, i i r r j 的m c u .r 列, i ll ) ; t 仃 泛的选抒机会,3 2机以j 七 强人的功能在国外市场所占份额越来越人,但 8 位$ ) l 1 7 样具有强人的生命力,8 位m c u价廉、灵i、功能弧人,使川简单,i k 1 而在, ! , 日 仍然产 ; 据mc u i l i 场的人部分份额 1 - 3 本论文完成的 i 一 作 本论文基1 : 为某外协单位研制的远程测控系统,详细介绍了 1 则 控系统的软件 设计,门 ! j 几 系 统是一个v体,简单介绍了 测拧系 统的优化,通信协议的规定等。 木论文1 : 要分为两部分,第 部分包括 】 一 3 帝 ,介 绍论文中所月 到技术的 f t 币要原p i !第 二 部分包括第4章 ,j 训卞 介 绍如何实现系 统。 匹程测t : : 系 统软什设1 第二章 基于w i n d o ws 9 5 / 9 8 操作系统的m f c程序设计 2 - 1 wi n d o ws 程序设计概述 2 - 1 - 1 wi n ma i n 过程 丫 何 一 个 wi n d o ws应川程序都必须子 i一 个 w i n m a i n q 函数和个窗i i 函 数,w i n m a i n ( ) 函数的名称不能更改,d li 窗1 1 函数 i 1 1 1 户自l fb 名,w in m a i n ( ) 函数是1 : 程t y- , ir 窗11函数是wi n d o ws 1 v . 用程1 y- 的工作核心。 通常w i n m a i n ( ) 函数具有如卜 的形式: i n t p a s c a l wi n m a i n ( h a n d l e h l n s t a n c e , h a n d l e h p r e l n s t a n c e , l p s t r 1 p s z c m d p a r a m, i n t n c m d s h o w) 在w in m a i n ( ) w l 数, 1i , 般要做r 面的 _ 作: 如果是程序的第一个 运行实例,则注册窗日 类。 创建一个窗口,即应用程序的主窗口,然后显示该窗日。 创建消息循环,对应n 1 程序中得到的消息进行翻译、发送的处理,将消息 发给w i n d o ws 操作系 统. 由wi n d o w s 操作系统保存此消息,直 到操作系 统 将消息作为参数之一调川应用程序的窗日函数。 当 接收到w m 一u i t 消息时, 结束 应用程序的 运行。 2 - 1 - 2 消息处理结构 w i n d o ws 应用程序采用的是消息驱动机制, 应用程序的人部分i _ 作是在进 寸 1 i 肖 息的循环处理,用户进行程序设计 的卜 要l _ 作就是编写消息处理函数。在 wi n d o ws 操作系 统f , 定义了 一个消息结构体: l y p e d e f s t r u c t t a g m s g i iw n d h w n d ; u i n t m e s s a g e ; w p a r a m l p a r a m w p a r a m i p a r a m u w o r d l i m e p o i n t p t l h t 测拧系统软什设i m s g ; 在 血的结构体中, 包含j 如卜 的信以: 接收到消息的窗i -1 i ii 栖 ( h w n d ) , 消 t !. 的代码俏( m e s s a g e ) , 辅iij j 参数( w p a r a m , i p a r a m ) , 接收到消(l l, 的时in( l i m e ) , 收到消息1讨光标 i : 屏慕 i 几 所处的位青 ( p l ) 、 石 ; wi n d o ws 、 ,有如卜 几 种刁 、 动 类)v 的消息: 标m 1; 的wi n d o ws消息 本类消 息以w m _ 为 前 缀 ( w m _ c o m m a n d除外) ,如 :窗i 移 动消 息,窗 尺、 变化的消息, 此外, 还包括程序的启动或退出, 窗 ! 的创建或关闭, 鼠标, 避盘的消息等 控件通知消息 山编辑框、列表枢、等拧件或 f 窗i 1 发给其父窗r i 的信息,本类消息以 wm 工o mm a n d命名, 消ll j i 含育 控件通知代码, 以ix 分具体的控件通知消息 命令消息 命令消息来源 1 .种接1 j 川户对象:菜单、i 具栏、加速键。本类消息也是 i i i wm 一 c o m m a n d命名,f i ll 在7 1 1 1 t i i 包含命i d ,以ix 分只体的命令 。 2 - 1 - 3 永久及临时句柄映射 在wi n d o ws 1 1 1 , 采川的是句柄来标i! 11 4 l1 象, 句柄就是川来唯的标识 个 对象的数字, 只有分配句 钠的系 统才厂 解这个数字的具体含义, 对1 几 操作系统内 部而.丫 ,句柄可能是 个指针或索弓 卜wi n d o ws a p i 函数就是使用句 柄 ( i : me c t,使) 1 1 的却j 足wi n d o ws 的( 1 柄,in 是c + 十 l ii f. il l ilf lj ,我们 需要严靛 种方 法用 i 几 指针和句柄之n d 的相互 转换。这种方法就是句柄映射, mf c 为 两个用户界角 i 对象 ( 窗日、菜单) 和 匕 个图形输出对象 ( 位图、11111 刷、 设备 _ f 文、字体、调色板、110 1 笔、区域)建立句柄映4 1 m f c建立如卜 两种句柄映射: 水久句柄映射 通过mf c类创建的wi n d o ws a p i 对象均5 i r i 永久f ij 柄映射表,i ii 以使 i n a t t a c h ( ) 和d e t a c h ( ) 来将句柄条i ! 加入到水久句柄映射表或从水久句 柄映q 1 表 件 , 册 9 除句柄条日。 永久 j ( 闻 映射表的 i 命周期是整个应用程序的生命周期, 在应 用程序退出以前.系统不会自 动清除它。 远程测i 系统软什设计 临时句柄映射 k 1 1 - 1 f 0 通过mf c类创建的刘象, mf c具备一个临时句柄映射. m f c为必须 临时创建以包装 wi n d o ws对象的对象在临时句柄映射表中创建个条日。临 时句柄映则表中的条1 1 在空闲时间会被个部清除,所以这种对象的寿命足很知 的, 需要长期保存的句柄映射小能放在临时f j 柄映射表中。 2 - 2 n 1 f c程序设计 2 - 2 - 1 mf c的设计原理 m f c 是微软推h 的名为 m i c r o s o ft f o u n d a t i o n c la s s e s ( 微软基础类 14 ) 的c + + 类集的缩写形式,mf c提供面向对象框架,程序人员可以使川这 一 框架开发 w i n d o ws 应用程序, m f c儿个高 层的类提供一般功能,而低层的类 提供更具 体的行为, 每个低层类都是从高层类中派生出来的, 因而继承了 高层类的行为, m f c同时 提供一个应川程序开 发模型, 此模型成为文档 一视模型, 可以 将数 据和川户界面分离开, 它允许两部分程序同时存在, 这样, 程序员在更改其中 部分程序时不会影响另一部分。 2 - 2 - 2 mf c的特性 mf c提供的 ! v 特性0 u - f 所,i : 文 档 /于 见 体系 结构 多文档界面 ( md i 打印及打印预览支持 使用并创建a c t i v e x控件 o d b c及a c c e s s 数据支持 i n t e r n e t ( t c p / i p ) 编程支 持 w in d o w s 9 5 / w in d o w s 9 8 / w i n d o w s n t常用控件支持 多线程支持 2 - 2 - 3 mf c层次设计 mf c 的对象层次非常类似 11 录结构的组织形式,mf c 包含 一 个根x ,1 象 c o b j e c t ,其他大多数对象都是从这个根对象派生而 来,相似类v的对象被组织 在相同类别中。 m f c 包括了1 0 0 种以上的类, 但很多类之间有继承关系, 通常, _ f 7 iii g i _:,: 系统4 y 1 ) r u i i , 以将这系列类分为如 卜比人部分: 文件服务类 提f ll 常规文件支 持,从( o b j e c t x 1 1 接派1 1 . 110 k , sr: 件这 术语在这9 1 0 f 1, i x为包括w e b 0 1 巾j ib 、内有映 4 文 件、 1 c p / i p ( : 3 k- 字 窗i ( i : m f c i ,提f j ! j 多种i i ; p j 的窗i 1 类:f 1 1- v-窗i 1 ,视图窗日、又 寸 话框、控 件。协 利 , 类都提供小卜 的功能,们它们都代表某 一 类窗1 1 , iru 月 _ 都足从c wn d 派 而来 图) (: 在m f c i ,图形处理类是 很ir g- 4 的 个系 列, 这个类x 包括两个类别: 没备 几 卜 文 图形 卜卜义。 设各 卜卜 文 代农图形容器,诸如i ll 以在其中 歹 入文 本或绘制图形的窗i 1 或文 件, 所台设 备卜卜 文 类是从c d c类 派 i几 ifi) 来, 向c d c类又 从c o b j e c t 类 派生in 来 图 形设 备 是 川j .绘图 操 作1,1,j个 对象, 19 i f l ic i 形设 备类 都 足 从c g d i o b j e c t 类 派 是 而来 的 , 而c g d io b j e c t 又 是从c o b j e c t 类派生而来 。图形设 备类 有 点象实 际的绘图设备,如111 11 笔类、v ii i 刷类、调色板类、1x - 域、位图、字体等。 数据库支持 m f c框架支 持两种类n j a 勺 数据库: o d b c类数据! 布 mi c r o s o ft a c c e s s 类数据m t o d b c j 2 提供对很多客) ilk 务器数据w,1 台的支 0,如:o r a c le , s y b a s e . i n f o r m i x , s q l s e v e r 等。 数据1 r1= j允许使) 1 l 被称为 数据0 j f j k 1 象 ( d a t a a c c e s s o b j e c t s ) i ij 对象类i ) , 2 - 2 - 4 mf c应用程序的布局结构 ( 1 : v c + + 6 环境, 1 1 ,提供 p i, h式i l j 文 f ,! 介 刀 j .击 结构: 从 几 对话框的结构 基j 几 单文档的结构模)l? ( s d i ) 基 卜 多文档界肉的结构模型 ( m d i ) 远程测拎系统软设计 前血两种结构川 1 几 实现较简单的应川程序结构,为节省篇幅,我们才 、 做介 绍,而着或介绍 一 f 本系统设l 十 中f 吏 少 月 的多文档界面模型 ( m d ! ) .在多文档界 i n i o t i t i , , 应川程序和单文 档界11 3 ) 模型一样, 使i a 一个l - 框架来客纳菜 p ,1 其 f, 状态t , 但在md i wi n i , c m a i n f r a m e 类是从c md i f r a m e wn d 类派 : 的, n ,v i i j 程序对象结构的基本布局如1.1钊 所示: 图2 - 1 m f c牛 , 儿 个基木类 之间关系图 2 - 2 - 5 mf c程序设计的文档/ 视模型 mf c的文 档/ 视体系结构将文档,视图进行分 卜 ,文档 仁 要进行数据存储方 面的操作, 而视图则主要进行屏幕显 示方面的操作, 这样,可以在显卜 和数据操 作 l 有更人的灵活性, 可以支持多文档, 多视图。 使得用户可以有吏灵活的界肉 结构。文档/ 视结构的关键是如下四个关键类: c d o c u m e n t 类,应用程序用来存储或控制其数据的对象,还为与文 档相关 联的视图提供数据。 c v i e w . iiti l ll 程序i ii 来5 v ,1 1- 数据, 提供a 1 1 , 和数据1y 1 交n : , u ir ,s i i i f u m 作也是在该类中实现。 ; _ c f 7 测拧系统软川设i 1 - c f r a m e wn d类,该 -1 象提f r1 f , 1 1 4 x档的个或名个v a ! le i 的枢架窗i 1 , ( i : md i 应i l j 程l i, 4 1 ,至少包含ii i 个窗 i ,个包含 应川程1 资( 没有文档类 , 之关 联) , 一 个或多个窗日川j 几 显示存储( i 个 或多个文 档类的应) 程i 济 - c d o c t e m p l a t e 类,x 档模板l ,该类k i 象f a l l 协a 给定类型的 一 个或多个 文 档少 竹a l 基础的文档操作, 竹理们 1 架窗,文 档.干 见 图的配合, 将这il l 对象统 i ; , 理。 2 - 2 - g a i f c应用程序的 基本流程 在wi n d o ws 操作系统 , ,采川的是消息机制,根据不卜 的消息,如窗i i 消息, 川户产生的消息, 来源j 几 硬件端 ! 的消l . 等不同的消息触发相应的消息响 应程i f ,只需要i l l 鼠标点d i l l l l w 的菜单,就! i1 以完成需要的操i t 。 一 个 j 1 1 mf c ) 发的wi n d o ws 应川# i a f 的流程4 n 图2 - 2 1j i t : : 程序入 i 应川程i y h1 1 始化 1 1 1 女 台 化例程 消息i ll, 环 空闲处理 退出例程 图2 - 2 mf c i , v 川程) 卜 的1 ;l 水 流于 , m0 # 11 4 , 系统to设i l 2 - 3 多线程技术 2 - 3 - 1 线程的概念 在多任务操作系统中, 线程是程序运行占 据c p u时问片的最小单位, 操作 系统为侮个线程分配 c p u时0 01 ,多仔务操作系统的另个很ir v的概念足进 程,通常我们可以认为进程是系统资源分配的最小单位,c p u为i fj 个进程分 配诸如内存等系统资源, 而线程是运行时间分配的最小单位, 操作系统按照线程 来分配c p u时间的占m, p l : 单 任务系统中 如:d o s )其一个进程其实就相当 1 f l 多仟务系统中的只包含 一 个线程的进程, j 以看作是 一 种特例。在 wi n 3 2 环境中, 征个运行的应i l l 程序都建立一 个进程, 侮个进程由 一 个或多个线程组成. 一 个线程是一条经过进程代码的执行路径。 同一个进程, l , 的所有线程共享操作系 统为进程分配的所有资源, x 叼月 相同的内存段. 因而在线程间切换的时候可以避 免使1 1 1 - # i : h 文,具有比进程问切换小得多的开销,wi n d o ws操作系 统是 抢先式多任务操作系统, wi n d o ws 在竞争线程中分配p i 得到的c p u时间,山 1 = 侮个时间片很小, 给人的感觉就是多任务同时完成。 线程有不同的优先级, 操 作系统正是依据线程的优先级来分配c p u时间,达到抢先多下 l 务的日的。 抢先多任务及多线程提高了 系统的响应能力及平 滑的后台处理。多线程带 来的好处是:程序员能够完个控制程序片段的执行.从而提高程序执行效率 2 - 3 - 2 线程的优先级 w i n d o w s 9 1 9 8 5 操作系 统依据线程的不同优先级进行调度, 即选抒优先级 最高的线程获得 卜一 c p u时间片,相同优先级以轮循的方 式依次执行,只有当 没有较高优先级线程的时候,较低优先级的线程才能获得处理。 w i n d o w s 9 5 / 9 8 将线程的优先级分为。 - 3 1 共3 2 级,其 1 1 3 1 级为 最.高优 光 级。可以 将他们分为两大类: 。 实时优先级 0 1 变优先级 实时优先级从 1 6 - 3 1 级,是实时程序所拥有的高优先级线程,例如系 统监 拧程序。 可变优先级从 卜1 5 级 ( 0 级为系统保留) , 绝大部分应j 月 程序的优先级 都是可变优先级。所谓司变是指在运亨 1 过程中可以 动态的改变共优先级。 线程的优先级由两个方面决定: 匹程测i 系统软件设计 所属进程的优先级,这足相对1 几 其他进程的优先级而言 的。 线程的相对优先级,这是相对 于 所属进程的优先级而言的。是进程内部 各个线程之i旬的优先级。 线程的优先级川以通过调t i l 相应的函数进行设w. 2 - 3 - 3 线程的创建 线程的创建有 中 , 方 法: wi n d o ws 9 5 操作系统的a p i 函数: c r e a t e t h r e a d q . m f c 的全局函数a f k b e g i n t h r e a d ( ) o mf c的c w i n t h r e a d 类的成员a数c w i n t h r e a d : : c r e a t e t h r e a d q . 如果使川后两种方 法, 所创建的线程还有l 作者线程和用户接f i 线程之分, j 二 作者线程没有收发消息的功能, 仪仪是支 持后台操作, 用户无法改变其运行状 况,而) ! j 户接日线程具有收发消 l 的功能,) f 仕 对消l a 进行处理。 2 - 3 - 4 线程的挂起和恢复 为厂 灵活的控制线程, 我们s 对线程的扑起和恢复操作,当程序运行i 付 , 如果个线程只在某些条件h rr n , 要, 而不足直在发挥作川, 我们就可以将线程 抖起, 以避免c p u时间的浪费, 而在条们满足时再恢复线程, 使其完成起 1 作, 这样,可以得到 史t y i 的 c p u 运1 j 效率。f 吏 川 wi n d o ws 9 5 a p i函数 s u s p e n d t h r e a d q , r e s u m e t li r e a d q 或c w i n t h r e a d 类 成员 函 数 均可 达 到企 一个 线 程中挂起和恢复另一 个线程的目 的。 s u s p e n cl t h r e a d q 函数将当前线( ,! 的f 1: 起次数加,当 挂起次数的值人i . 。 时该线程不运行。r e s m e t h r e a d q lf i 数将线程的挂起次数减一,当 挂起次数为零 时,线程恢复运行,杳则,线程处于 挂起状态。 如果将线程创建在打起状态,那么6 : a川 r e s u m e t h r e a d ( ) 恢复执行之前j it 以完成对线程状态的初始化 曰乍 。 另 外, 可以 调用s le e p ( ) 或s ie e p e x ( ) 将线程挂起指定的 一 段时间, 自 常用i . 川厂 和线程的交互 中, 通过延退执行线程足够长 的时间让 用户观察其结果, 在睡 眠期间线程不会被执行。 远程测控系统软件设计 2 - 3 - 5 线程的终止 有三 种方式终i1- 线程: 调用e x it t h r e a d q 函数: 终止线程, 并将所有附属d l l 的入l 7 点函数川f - 指示d l l 解脱的代码激活。 调用t e r m in a t e t h r e a d q ia 数:直接终i l 线程,不做任何清除i 作。 使用m f c全局函数a f x e n d t h r e a d ( , 只能终止本线程, 如果v 想终止本 线程以外的其他线程,则必须在两个线程之间设置 通信方式。 2 - 3 - 6 线程的同步 由卜 各个线程之间是独立的运行,这必然需要在不同线程之间建立一种同 步机制,以避免线程之间相互 影响造成混乱,最常见的需要同步的原因有两个: 当两个或多个线程要同时访问共享资源,而资源在同一时刻只能被一个 线程访问或有限个线程同时访问, 这时就控制线程对资源的访问, 也就是需要在 各个线程之间建立一种同步机制。 当两个线程的执行有先后顺序时,为了 保证这两个相互依赖的线程能按 照正确的顺序执行而采用同步。 常用的同步方式有四种:临界区、信号 灯、互斥,事件。 在此对四种同步方式做简要介绍: 信号灯方式 允许一定数量的线程同时访问某个共享资源,当访问资源的线程少f 设定 值时, 信号 灯为有信号 状态, 当访问共享资源的线程数已达到设定值时, 信号 灯 就变成无信号状态, 线程在访问共享资源之前需要先访问信号灯对象, 只有在信 号灯对象处于有信号状态时才能访问共享资源, 否则等待, 直到信号 灯对象变成 有信号 为止。 信号 灯状态的控制方法:当 一 个线程访问共享资源时,就将信号 灯的计数 值加一, 当加到计数器值等于设定值时, 将信号灯设定为无信号;当 一 个线程退 出使用共享资源时, 将信号灯的计数值减一,当小于设定值时, 就将信号 灯恢复 为有信号 状态,此时允许线程访问资源。 在m f c中, 封装信号 灯属性的类是: c s e m a p h o r e o 我们可以使用此类的对 + l 程测j 空 系统软什设计 象来方便的实现信a ; 灯机制,信号 幻 一 也同样用 f 进程问的同步。 互斥 川t 顺序地对某 一 对象访问,即:同时刻只允许一个线程访fi ll 资源,任 何线程想访问共享资源,h 先要访问il i 斥对象, 只有在互斥对象有信号 时才能访 问共享资源,当有线程ih 问资源时,il 斥对象就变为无信号 态, 此时表明资源已 经被占 用, 其他线程只有等待此时访问资源的线程退出访问 后, 才能访问该资源n 当 个线程访问完毕时, 需要 将互 斥对象恢复为有信号 状态, 以保证其他的线程 对资源的正常访问。 封装互 斥的mf c类是: c m u t e x o , 斥机制也可以 用1 - 进程间的同步。 临界区 川 j 几 对 一 段可执行代码进行访问,: 刁 以 将 一 段if要代码放在临界区中,同 一时刻只允许个线程访问临界区中的代码, 临界区有点象互 斥, 但临界区只使 用于同一进程中, 当我们要对某此资源进行访问, 而这种资源只允许同一时刻只 有个用户访问i讨 , 我们就司以 将访问这此资源的代码放入到临界区中, 程序执 行进入临界区中代码时, 首先要 检查 是否满足 进入临界区的条件, 只有当 满足的 时候才进入,否则需要等待条件满足才能进入。临界区不能川f 进程间的同步。 因为不同的进程拥有不同资源, i t : 代码运行在各自 的内存区域, 封装互斥的mf c 类是: c c r it i c a l s e c t io n , 事件 允许 一 个线程通知i t 他线程个事 件已经发产 卜 ,也川用 卜 封锁对某资源 的访问直 到线程将它设为有信号 为i 1 : , 如果事件对象为一 个线程所私有, 那么其 他线程无法为其设定信号, 就川能会发 t _ 错误, 所以一 个事件对象不可能属于 个线程,可被不同进程中的线程ij i 问。 在 m f c 1 1 1 , c e v e n t 类封装了 事件同步方式的所有属性,有手 l . 位和自 动复位两种类型,构造函数如 卜 : c e v e n t ( b o o l b i n i t i a l l y o w n = f a l s e , b o o l b m a n u a l r e s e t二 f a l s e , l p c t s t r lp s z n a me = n u l l , l p s e c u r i t y _ a t t r i b u t e s ip s a a t t r i b u t e 二 n u l l) ; 远程测 控系统软件设计 参数b m a n u a l r e s e t 指明该对象是手工类型( t r u e ) 还是自 动类型( f a l s e ) , 参数b l n i t ia ll y o w n为t r u e 表明事件对象有信号, f a l s e 表明无信号 。 2 - 3 - 7 重叠i / o操作 重叠i / o操作是指将文件读写工作在后台完成, 而主线程可以继续执1 i 其他 任务。即利用并行操作来提高程序执行效率。在 wi n d o ws a p i函数 1 1 , r e a d f il e ( ) , w r it e f i le ( ) , r e a d f il e e x ( ) , w r it e f i l e e x ( ) , w a i tc o m m e v e n t q 等函数 都具有重叠操作的能力, 所有具有重叠操作能力的函数都具有重叠操作结构,up 叠操作结构如下: t y p e d e f s t r u c t o v e r l a p p e d d wo r d i n t e rn a l ;/ 与 系统有关的 状态 d wo r d i n t e r n a fig h , / / 传送的 数据长 度 d wo r d o ff s e t , / / 指出一个文件位置以启动传送 d w o r d o ff s e t h ig h ; / / * 送开 始 处字 节 偏 移量高 位 值 h a n d l e h e v e n t ; 1 1 1/ 0完成后标识设置为有信号 的事 件 o v e r l a p p e d ; 当调用了 重叠i / 0操作函数以后, 如果函数返回时1/ o操作己经完成, 则返 回值为 t r u e ,同时 li e v e n t 事件被设置为有信号态,此时给人的感觉就是操作 是同步完成的, 但实际仁 是异步执行的;如果函数返回时1/ o操作未完成,则返 回值为f a l s e , h e v e n t 事件处于无信号状态,直到操作系统完成时,操作系统 将其设置为有信号 状态。 远程测控系统软们设i 1 第三章:与本文相关的通信协议简介 3 - 1 通信协议 3 - 1 - 1 通信协议简介 . 基本概念及o s i 参考模型 协议是通信规则的集合,要达到可靠的通信,需要通信的双方都遵守这些 规则,j 几 足, 就有了协议, 日 于 齐个厂家在发展通信产品的时候都是按照各自的 思路进f l ,造成通信协议很多,i ll 大家所熟悉的 t c p / i p , n e t b e u i, i p x / s p x 等,山于 不同的厂商提供的协议各不相同, 为了 有一个统一的协议标准, 国际标 准化组织i s o在 1 9 8 3 年推出了一个开放系统参考模型o s i , o s i 采用七层结构, 如 下图所示: 应 用 进 程 a 应 用 进 程 b i* 1 3 - 1 o s l 协议模! i 现在我们分别就各层进布 i 说明: 物理层:解决建立、保持、断) l 一条物理电路并提供时钟信号,以便透明 远程测控系统软件设计 地传输比特流,确保比 特无误 传输。 物理层是 o s i 协议模型中直接和硬件打交 道的层,解决诸如传输信道,硬件接口 等问题。涉及的是位流的正 确传输。 链路层:解决在相临接点间帧传输的问题,帧包括地址、序号、校验等控 制信息, 可以进行差错控制, 流量控制等。 链路层的主要任务就是加强物理层传 输原始比特的功能,使之对网络层显现为一条无错线路。 网络层:解决网络之间的分组传输问题,使分组通过多段数据链路传到网 络另一端。 网络层关系到子网的控制, 其中一个关键的问 题就是如何确定从传输 层来的数据包从源端到目 的端如何在网络中选径,也就是通常所说的路由问题, 路由既可以采用网络中固定选径表, 也可以在每次会话开始时确定( 通过端对端 对话决定) ,还可以根据当前网络的负载情况,高度灵活的为每一个分组决定路 径, 如果在子网中同时出现过多的分组, 就有可能相互阻塞通路, 因而还需要山 网络层来防止这种现象。 同时分组可能要经过多个不同结构, 采用不同协议的网 络,网络必需解决异种网 络互连的问 题。 在t c p / i p 协议中, 对应于网络层的是 i p层。 传输层:在网络层提供的服务的基础上,为用户提供端一端服务,解决报 文的传输问题。 传输层协议仅存在于用户计算机中, 在网络交换机中没有传输层 协议。 传输层的根本目的是保证端一端的数据传输, 其基本功能是从会话层接收 数据, 并根据需要将他们划分为比较小的单元, 加上端口 一端口 传输所需要的报 头,然后将其送给网络层。 会话层:管理和协调两个计算机之间的信息交互,提供建立和使用连接的 方法。如单/ 双工的选择等。允许不同机器上的用户之间建立会话关系,会话层 允许进行类似传输层的普通数据传输, 在某些场合还提供了一些有用的增强型服 务, 或则在两台机器间传递文件。 会话层服务之一是管理对话, 会话层允许信息 同时双向传输, 或则任一时刻只能单向 传输, 如果属于后者, 会话层就需要记 录 该哪一方传输, 令牌管理就是一种对话控制方式。 会话服务之二是同步, 会话层 在数据流中插入检查点, 如果由于网络故障或其他原因导致数据传输中断, 不需 要重传所有的数据,而只需要重新传输最后一个检查点之后的数据。 表示层: 解决用户的语法问 题, 如:有哪些数据类型,每种类型如何编码, 数据如何进行加密解密等。 表示层以下的各层只关心在通信实体间可靠的传输数 一 i在收端,则只能按顺序接收到达的帧,如果某帧出 错,则其后的各 帧均抛弃,发方必须t : 发出错帕及其以后的各帧。 假设帧序号川n 表示,发送方在未收到a c k时可连续发送的帧的序号范 川 称为发送窗i i , 川wt表/ j c 其大小。 接收方可以接收的序号 范围称为接收窗u, 川 wr表示,一般地,wr + w丁 簇2 n, 且 wr - 线程处理模块 模块的处理流程如 卜 所示 变缺定义及初始化, 建 心 个重肴操作结构 ove rl ap p e d o s ; 为 c s对象设置一个句柄, 调用 a p i 函数c r e a t e v e n t ( ) 设置通信事件触发方式为在接 收缓冲队列有数据和发送缓冲 区了 f 数据待发送时触发 no丽 有通信q 计 触 发否, 事件 类型为发 送还呆1 9 收? r ecei v e 向 l 窗口发送有接收数据到消 息: 调1 1 l : :p o s t m e s s a g e q vk 1 数 向土窗口发送有接收数据到消 息: 调用: : p o s t m e s s a g e q 函数 图4 . 1 通信线程处理 远程测拎系统软件设计 2 数据接收模块 负责正确的接收山串口 接收到的数据, 从串日读数据的接收处理子程序的流 程图如 卜 所示: 初始化:设定接收字长, 头尾,校验字符等 接收w 字, 判断首字是否 帧头 ( c c或 a a) 接收到设定字长的字 i i 否? i n 是否超时? 最后一个字节是否为设 定的帧结束符 ( f f ) 舍弃本帧并通知重发 本帧, 校验是否正确? 清零接收缓冲队列,调用 数据处理、显示功能模块 等待下一次接收 图4 . 2 数据接收流程图 3 数据发送模块 在本系统中, 数据通信是全双工的,当鼠标点击或右击控制组件时位图时 开或关该控制组件的指令将被发送出去, 但被控设备的开关状态由 接收到的回答 信号 控制, 只有在判断回答信号值范围, 并确认已正确打开或关闭后, 刁改变状 态显示,发送功能模块的实现是按如下流程图进行的: 远程测控系统软件设计 获取待操作的控制 组i t d号码 装配待发信q . 帧,并将装配 好的发送信息帧送到发送缓 冲区 发送 已装 配好

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论