(计算机应用技术专业论文)工控领域中通用gprs通讯接口的研究与实现.pdf_第1页
(计算机应用技术专业论文)工控领域中通用gprs通讯接口的研究与实现.pdf_第2页
(计算机应用技术专业论文)工控领域中通用gprs通讯接口的研究与实现.pdf_第3页
(计算机应用技术专业论文)工控领域中通用gprs通讯接口的研究与实现.pdf_第4页
(计算机应用技术专业论文)工控领域中通用gprs通讯接口的研究与实现.pdf_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

摘要 随着工业自动化的发展,基于g p r s 的城市内集中监控系统得到广泛的应用。g p r s 模 块通讯的设计和开发成为主要的闯题。 本文分析了当前g p p , s 通讯模块开发中存在的若干问题,并针对这些问题进行了开发 需求的分析。 在需求分析的基础上,本文提炼出了通用g p r s 通讯接口的框架结构,并详细介绍了 通用g p r s 通讯接口的设计和实现 另外本文探讨了提高可靠性和稳定性的几个关键问题,并研究、实现了内部的调度、 匹配、注册管理等算法。 本文在详细介绍接口实现的过程中分析、解决了如下几个关键问题:1 ) 驱动框架的 通用性设计2 ) 数据采集的优化;3 ) 通讯稳定性的加强;4 ) g p r s 模块的匹配和调度;5 ) 多线程的同步 本文同样描述了如何在此通用接口的基础上做快速二次开发,并描述了接口的测试方 案,同时介绍了本课题成果的推广情况 在本文最后对所做的工作进行了总结,并提出了进一步的研究方向和目标。 关键词:g p r s ,通用通讯接口,监控系统,驱动 w i t ht h ed e v e l o p m e n to fi n d u s t r ya u t o m a t i z a t i o n s u p e r v i s o r yc o n t r o ls y s t e m b a s e dg r p si sa p p l i e db r o a d l y h o wt od e s i g na n dd e v e l o p m e n t6 r p sd t up r o g r a m s i sc o m i n gi n t ob e e no n eo ft h em o s tc r i t i c a lp r o b l e m s t h i sa r t i c l eh a sa n a l y z e dt h eq u e s t i o nw h i c hi nt h ec u r r e n t6 p r $ m o d u l e c o m m u n i c a t i o nd e v e l o p m e n t ,a n dc a r r i e do nt h ed e v e l o p m e n td e m a n da n a l y s i sb a s e d t h e s eq u e s t i o n s t o i nt h ed e m a n da n a l y s i sf o u n d a t i o n ,t h i sa r t i c l er e f i n e dt h eg e n e r a lg p r s c o m m u n i c a t i o ni n t e r f a c ef r a m ec o n s t r u c t i o n , a n di nd e t a i li n t r o d u c e dt h eg e n e r a l g p r sc o m m u n i c a t i o ni n t e r f a c ed e s i g na n dt h er e a l i z a t i o n m o r e o v e rt h i sa r t i c l ed i s c u s s e de n h a n c e dt h er e l i a b i l i t ya n dt h es t a b l e s e v e r a lk e yq u e s t i o n ,a n dr e s e a r c ha l g o r i t h m a n ds oo ni n t e r n a ld i s p a t c h , m a t c h , r e g i s t r a t i o nm a n a g e m e n t t h i sa r t i c l ea n a l y z e dt h ef o l l o w i n gs e v e r a lk e yq u e s t i o ni nt h ed e t a i l e d :1 ) f r a m ev e r s a t i l ed e s i g n 2 ) t h ed a t aa c q u i s i t i o no p t i m i z a t i o n :3 ) c o m m u n i c a t i o n s t a b l es t r e n g t h e n i n g ;4 ) g p r sm o d u l em a t c ha n dd i s p a t c h ;5 ) m u l t i t h r e a d s y n c h r o n i z a t i o n t h i sa r t i c l ed e s c r i b e dh a sm a d et h ef a s td e v e l o p m e n tb a s e dt h i si n t e r f a c ea n d d e s c r i b e dt h et e s tp l a n f i n a l l y ,t h ep a p e rc a r r i e do nt h es u m m a r y ,a n dp r o p o s e dt h ef u r t h e rr e s e a r c h a n dt h eg o a l k e y w o r & :g r p s g e n e r a ld a t ac o m m u n i c a t i o ni n t e r f a c e ,s u p e r v i s o r yc o n t r o l s y s t e m n 第一章绪论 1 1 课题的目的和意义 第一章绪论 随着计算机科学技术、工业控制等方面的新技术的迅速发展,城市内集中监控系统对 通讯技术提出特殊要求:无线远程接入方式;连接大量现有通用设备;满足稳定性,速率, 带宽均衡方面的要求。采用g p r s 通讯方式,能较好的满足这些要求。d t u 的接入方式解决了 下位采集的问题,但是在上位端,对于不同g p r s 模块生产厂家的通讯支持方面,还存在着很 多问题。 首先,不同厂家的g p r s 模块实际通讯协议是不同的,使用一个厂家的g p r s 模块,就要 单独为它开发套通讯系统,重复做了很多工作,毫无通用性可言。 其次,要单独实现和某个g p r si ) t u 模块通讯的话,要用到的技术点非常多,实现起来比 较复杂,开发周期比较长。 再次,对于通讯可靠性有较高的要求:断线重连,超时控制。 本文研究的内容有助于解决上面的这几个问题,因此开展此课题有重大的现实意义。 1 2g p r s 在过程控制领域中的应用 1 2 1g p r s 在电信行业的应用现状 g p r s 在电信行业应用比较广泛。在电信行业已经存在很多采用g p r s 网络通讯的设备。 这方面的应用模式也已经比较成熟。 1 2 2g p r s 在城市内集中监控系统中的应用现状 目前来讲,g p r s 通讯应用于城市内集中监控系统只是才开始,使用g p r s 通讯方式满足 城市内集中监控系统所要求的通讯功能上还有很多缺陷。 目前国内支持g p r s 通讯的模块厂家仅有两家( 宏电和桑荣) 提供相应的模块开发包, 可以在此基础上做二次开发。在这些开发包的基础上如果做6 p r s 应用的话还存在一些问 题,这些缺陷如前边所说: 不通用性。 独立开发难度大。 不容易达到一定的可靠性。 目前市场上还没有出现支持通用g p r s 模块的通讯接口。 3 第一章绪论 总的来看。随着环保和城市治理工作的展开和被重视,国内的应用趋势是这方面的社 会需求会出现较大的增长。 1 3 课题目标和主要研究内容 1 3 1 课题的总体目标 本课题的目标是,实现一个工控领域中通用g p r s 通讯接口,采用此接口可以快速开发 出支持不同g p r sd t u 模块的驱动此接口在公用g p r s 通讯平台上,能比较理想的实现通讯 可靠性和较高的效率 1 3 2 研究的主要内容 下面就本课题所做工作的主要内容,进行一下简要说明: ( 1 )分析g p r s 通讯特性:无线传输、永久在线、传输距离远、有适当通讯延迟。 ( 2 )基于这些通讯特性,设计一套能适应不同g p r s 模块厂家的系统,来实现城市集 中监控系统对数据采集的可靠性,效率方面的要求。 i 一个用于实现调度核心算法的g p 赂服务器。 “ 系统的可靠性,带宽的充分利用。 i 1 i 用于适配不同d t u 的d r u 适配器。 i v 与监控系统连接的数据交换接口。 ( 3 ) 具体考察有代表性的d t u 设备和现场监控设备,实现一套可以用于城市监控系 统评估的g p i l s 通讯系统。 本论文的章节安排如下: 第二章,提出了g p r s 通用通讯接口的总体研究思路;第三章,g p r s 通用通讯接口 的具体设计与实现;第四章,讲解如何在此基础上进行二次开发,第五章,提出接口的测 试方案;第六章,针对本文的工作进行了总结。 4 第二章通用o - p r s 通讯接口框架的总体设计 第二章通用g p r s 通讯接口框架的总体设计 本章首先分析和总结了目前通信及设备驱动开发中存在的不足和希望改进之处,形成 开发需求,然后根据需求,形成了本接口的总体设计思路,并给出g p r sd t u 模块与组态 软件阃通信接口的功能、性能等各方面的最终目标描述 2 1 对现有g p r s 模块厂家提供的开发包的分析 2 1 。1 一些术语 ;j ;繁鬻纂蕤翳蔷萋豢;羔j :i 嚣蘩鬻嚣溪蒸攀 d t ud a t at e r m i n a lu n i t ,数据终端单元,通常泛指下位机 d s c d a t as e t w i c ec e n t e r ,数据业务中心,通常泛指服务器 g p r sg e n e r a lp a c k e tr a d i os e r v i c e ,通用分组无线业务 c d m ac o d ed i v i s i o nm u l t i p l e a c c e s s ,码分多址 数据中心介于m c g s 组态软件与d t u 终端之前的通信处理模块 d s c 开发包是d d t u 模块生产厂商提供给上位机处理软件的通信模 块,它实现了对下位d t u 的服务管理,数据发送和接收 2 1 2 关于现有g p r s 模块厂家提供的d s c 开发包的调研 目前市面上仅有2 家d t u 厂商( 宏电和桑荣) 提供d s c 开发包,并且他们的实现方 法是类似的,现在总结于下: 1 开发包对不同型号的d t u 是透明的。 2 都提供2 类主要的服务接口:启动关闭服务,发送接收数据。 3 启动服务以端口号为主要参数。 4 均是s i m u i m 卡号作为d t u 标识。 5 宏电和桑荣都推荐t c p 方式,并且在d s c 开发包的启动服务接口中没有对网络 类型的选择,如果要使用u d p 协议,他们都会提供一个同名的d s c 开发包,用 于支持u d p 6 提供异步方式读数据接口。 7 都没有提供透明地识别d t u 身分,即不需要传递d t u 标识,所以会有可能发生 不需要的d 1 r l j 串入服务器。 第二章通用g p r s 通讯接口框架的总体设计 2 1 3 现有g p r s 模块d s c 开发包存在的问题和需求分析 存在的问题: 一、从现有g p r s 模块厂家提供的d s c 开发包的调查中可以看出,现在只有两个厂 家提供开发包,如果要支持其他厂家的模块,需要再次开发一套通讯系统系统,重复 做了很多工作,毫无通用型可言。 二、要单独实现和某个g p r sd t u 模块通讯的话,要用到的技术点非常多,实现起来比 较复杂,开发周期比较长。 三、对于通讯可靠性有较高的要求:断线重连,超时控制。即使在现有的开发包的基 础上做开发,也有大量的工作要做。 从上边的问题分析可以看出,迫切需要开发一套通用的g p r s 通讯接口,以解决现有 的问题。 需求分析: 性。 根据如上的市场情况调研和现存的问题,形成了需求分析结果: ( i ) 接口要兼容目前市场上已经存在的d s c 开发包。 ( 2 ) 接口要方便的适应各厂家的不提供开发包的g p r s 模块,即,要有良好的通用 ( 3 ) 接口要有高可靠性,对于一些例外情况能正确的处理。 ( 4 ) 能快速开发,即,在接口的基础上做新模块的通讯开发,要能快速开发出最终 产品。这就要求接口要封装除了具体通讯协议数据包打包和解包外的其他所有工作。 2 2 通用g p r s 通讯接口的总体设计思路 2 2 1 接口形式 根据接口的需求分析可以看出,接口应该主要是以服务函数的形式对外提供一些功 能,并应当容易的被应用层的程序调用。另外接口本身不需要对外提供窗口界面。 因此,接口最好的形式应该是用动态链接库d l l 来提供。 如果把所有的这些功能都放到一个动态库中来实现,在使用上存在很大的不便。 首先,不容易兼容现有厂商提供的d s c 开发包,如何把现有厂商的d s c 开发包加入 第二章通用g p r s 通讯接口框架的总体设计 到接口中是一个难题。 其次,这样的接口形式过于混乱,容易造成d l l 本身的管理混乱,形成的接口不清晰, 给二次开发人员造成使用不便。 所以,我想比较好的办法使用两级动态链接库m l 来实现。一级d l l 提供对外统一的接 口,其管理二级d l l ;二级m l 傲更具体的工作,对外提供接口函数供一级m l 调用。这样现 有厂商提供的d s c 开发包可以放到二级锄这一层来实现。这样接口也比较清晰。 第三章会对此做更具体的讲解。 2 2 2 开发环境 硬件环境:包括p c 机一台( 可拨号上网) ,通讯设备( 尉普g p r sd t u 等厂商模块, 及通讯所需的通讯电缆。) 软件环境:操作系统w i n 2 0 0 0 + 印4 ( 以上补丁) 。m c g s 组态环境、运行环境的d e b u g 版本,用于设备驱动调试。 开发工具:使用v i 斗+ 6 0 进行开发。v c 6 0 0 + s p 5 。 开发出的接口框架由一系列头文件、库文件和一个样例驱动框架组成。 2 2 3 接口最终目标描述 通用g p r s 通讯接口的的目标用户是二次开发人员,使他们可以降低开发难度,提高 开发效率。系统框架主要的功能目标说明如下: 通用性设计 框架将g p r s 通讯中大部分功能进行封装,二次开发人员只需要关注于具体通讯协议 的分析和实现,只需要花极少的时间和精力就可以开发出新的不同协议的g p r s 模块通讯 驱动。 封装通信过程 接口封装了整个s o c k e t 通讯;内部实现了d t u 模块注册管理;d t u 的匹配和调度; 多线程的同步;连接管理。这些都以接口函数的方式对外提供。 其他目标 易用性: 第二章通用g p r s 通讯接口框槊的总体设计 提供的接口函数简单明了,容易理解和使用,便于开发人员调用。 兼容性: 兼容已有的g p r s 模块厂家提供的开发包。 日志信息管理: 需要提供一定的日志记录,便于开发人员进行调试。 健壮性: 系统需要对一些例外的情况做处理,比如掉线、超时。 速度: 系统对采集速度无特殊要求。g p r s 无线通讯方式本身决定了通讯要有一定延迟。 资源: 系统对g p r s 模块数量本身不做限制,可以支持的模块数量由硬件系统的环境决定。 2 3 本章小结 本章主要提出了g p r s 通用通讯接口的总体设计思路分析并总结目前g p r s 驱动方 面存在的问题,提炼出开发需求,然后据此提出了总体设计思路,并给出了接口的功能, 性能方面的最终日标描述。 第四章g p r sd t u 模块通讯接口的实现 第三章g p r sd t u 模块通讯接口的实现 前一章讲述了接口的总体设计,本章将详细讲解接口的具体设计与实现。概述部分给 出程序总体结构和主要数据结构、类的设计然后依次详细说明接口函数和主要功能的实 现。在这个过程中分析了我采用如此设计的原因。 3 1 概述 3 1 1 程序结构 根据第二章的“接口形式”一节的进行的分析,图3 1 给出了一个系统应用的总体功 能图,主要有以下几个部分组成: 图3 i 总体应用框图 整个系统是两级结构,数据中心( 6 p r sc e n t e r ) 和d s c 适配器( g p r sd s c ) 他们都 是以d l l 动态库的形式的( 如图蓝色部分) 数据中心是一个d l l 模块,作为g p r s 应用模块与d t i j 通讯之间的桥梁,其完成以下 几个功能: 1 管理各种不同的d s c 模块,提供统一配置和调度的接口。 2 针对所有的通讯操作进行详细的日志记录,便于二次开发人员调试系统。 3 屏蔽不同类型的d s c 的差异,提供一致性通讯接口。 第四章( 3 p r sd t u 模块通讯接口的实现 d s c 适配器为删形式的适配器。用于提供一套统一的接口来隔离各d s c 开发包的差 异性,在这块我要做的就是实现一个适配器框架,在此基础上,用户在此基础上可以快速实现 不同厂家d t u 的通讯应用。 由于要在数据中心中转发各类请求到d s c 开发包中,且各个厂家提供的d s c 开发包的 接口调用形式差别较多,为了减小复杂性,因此需要抽象出各厂商d s c 开发包的使用共性, 并定义出一套通用的接口。然后针对各厂商,编写不同的d l l ( 适配器) 来进行数据中心代 码到各厂商d s c 开发包之间的调用连接。 由于d s c 开发包的数量可能会不断增长,准备引入命名服务来解决查找特定d s c 开发 包的问题。通过查询d s c 适配器的信息接口,可以得到d t u 厂商,g p r s 或者c d m a 类型,t c p 或者u d p 类型信息。 图3 2 为应用模式图,如下所示: 图3 2 应用模式图 对每一家d t u 厂商制作一个d l l 适配器,这些适配器拥有完全相同的接口。 这个图例只画了两家d s c 适配器的调用,如果有更多厂家模块的调用,加入新的d s c 适配器就可以了。 3 1 2 接口设计 本系统中的接口设计共有两处: 第一,与m c g s 的接口实现。由g p r s c e n t e r 的实现d l l 程序对外提供接口函数, 第四章g p r sd t u 模块通讯接口的实现 这些函数实现了系统对外提供的各种功能,其很多功能实际上是调用了d s cd 1 1 的接口函 数来实现的,在下面会详细讲解。 第二,底层服务功能的实现。由d s c 的实现m l 提供接口函数,这些函数是供g p r s c e n t e rd u 调用,用来实现一些具体的服务。 3 2g p r sc e n t e r 的设计与实现 此d n 提供了系统对外的接口函数,这些函数实现了系统对外提供的各种功能,这个 d l l 作为通讯的桥梁,一旦完成之后不应当变动。数据中心是一个d l l 模块,它的主要功能 按前边的需求分析,则应该包括如下四方面内容: 1 提供一个稳定完各的使用接口。 2 按瑚m 标识进行分类缓冲数据包。 3 日志记录( 供调试系统用) 4 有效隔离各个d s c 开发包之间的差异性 3 。2 1 配置项 既然设计为两级d l l 结构,一级为对外接口,二级为具体d s c 功能实现,采用一对多 的调用模式,因此对于管理d s c 要建立配置方面的要求。固定了配置之后可以方便的在接 口中实现d t u 模块匹配算法。 在数据中心这一层,配置如下: 数据中心的名称:c o m m c e n t 茂d l l ,具有唯一性。 日志文件名称:c o m m d a t a 1 0 9 ,可选择是否开启这个功能。 在d s c 这一层,配置如下: d s ct 作目录:m c g s 主程序目录下的d t l d s c 目录。 3 2 2 数据中心应提供的接口 这些接口函数是在需求分析的基础y - 铂t 出的,目前来看,可以满足接口完备性的要求: s m l c ts e r v i c c p 盯 w o r dw p 毗 端口号 c h a r s d t u m a l ( 哑2 5 6 】; d t u 厂商名 b y t eb y s e r v i 耐聪p e ; ,服务类型,o p r s = 0 , c d m a = 1 b y t e b y n e f r y p e ;,网络类型,t c p = o , u d p = 1 ) ; s t r u c td t u s t a t u s c h a ri d 3 2 ; d t u 标识 血地tc o n n e c t t i m e ; 登录时间 第四章g p l 强d t u 模块通讯接口的实现 t i m e _ tu p d a t e t t m e ; ; t y p e d e f s t r u c t c h a rv e n d o r n a m e 2 5 6 ; c h a rs u m m a r y 2 5 6 ; c h a rm o d u l e t y p e ; c h a rp r o t o c o l t y p e ; 最近一次数据包的更新时间 厂商名字符串:如宏电,桑荣 模块的说明字符串 第1 位表示为支持g p r s ,第2 位表示为支持c a m a 第1 位为支持t 印标志位,第2 位为支持u d p 标志位 u n s i g n e ds h o r tm a x b l o c k s i z e ;最大支持的块长度 隧裂鳖猫趱譬霪戮覆篓翌= 翟藏鬻篓懑 s t a r t s e r v i c 启动服务 设备通信参数s e r v c e p a r返回操作句柄,成 功句柄不空则成功 s t o p s e r v i c e停止服务 启动服务时返回的句柄返回0 成功,否受u l c o m m d t u w r i t发送数据到指定d t uc m n 倒a n d l e 启动服务成功返回0 ,否则 e 时申请的句柄返回1 d t u 标识,c h a r * i d 表示卡 号字符串 b y t e p b u 数据地址 d w o r dd w l e n 数据长度 c o m m g e t d m s返回指定的d t u 连接 c o m m h a n d l e 句柄成功返回0 ,否则 t a m s状态返回1 d t u 标识c h a r * i d d t u s t a t u s + 状态结构指针 c o m m d m r e a d指定的d m 接收数据 c o m m h a n d l e 句柄返回接收的数据长 度,如果为0 ,表 d t u 标识c h a r * i d 示没有可读数据, b y t e + p b u f , 数据地址小于0 则表示需要 d w o r dd w l e n 数据长度 的数据缓冲区长度 的负数。 g e t d t u m a l 【e r l取得数据中心支持的 d i n f o + p b u f成功返回读取的描 i s td t u 模块的列表字符 用户分配的模块描述结构缓 述结构个数 串,所有的模块名字都 冲区指针 用回车换行分隔。 如果用户传空指针则只返回 需要的结构个数 i n t l e n ;用户缓冲区的长度 r e s t a r t s e r v i c e重启服务无 成功返回0 ,否则 第四章g p r s d t u 模块通讯接口的实现 在数据中心不稳定的 返回1 , 时候,需要重新启动 d s c 以及数据中心的 所有服务 e n a b l e l o g 设置打开关闭日志功b o o l 是否启用日志功能成功返回0 ,否则 能 返回1 g e t d t u c o u n t返回系统内所有的连返回数量 接上的的d t u 数量 g e t a l l d t u s t a t u返回所有的d t u 状态 d t u s t a t u s + 指针返回实际读取的 s列表 d t u 状态数量 用户分配的用来读取 d t u s t a t u s 的数组的首地址 h a ts i z e ,用户分配的空间的 大小 3 2 3d t u 匹配算法 为了管理各类d s c 适配器,初始化系统时编历d m d s c 目录下所有的动态库文件,使 用d s c 模块的命名服务接口g e t l v l o d u l e l n f o 来确定该动态库是否是一个d s c 模块,如果 是的话,则取出该模块的描述信息,构建d s c 适配器队列( g e t m o d u l e i n f o 接口:实际上 是取模块信息,然后根据返回的信息填写d s c i n f o 结构,然后根据此参数来构建d s c 适配 器队列,来进行d t u 的匹配。后边会具体讲解命名服务接口g e t m o d u l e i n f o ) 。 如图3 3 所示: 璐c 适配翻队列 l 。i 职船弛豫s 毫宏电融鳓舒鼹瞄獬 - - d u 职强弛豫驶桑荣孤稚翻翻 动态库 u 现镪觇娥纽苴它融鲥翻戢际0 态摩 3 2 4 日志 图3 3 唧的匹配 日志功能主要可以作为系统系统用。日志功能打开后,每次用户发送数据和接收数据 时都应该保存到日志文件中。日志中应记录的信息字段包括:d t u 标识,事件类型( 读, 写) ,事件发生的时间,数据包长度。所有数据以字符串方式记录。 第四章g p r s d t u 模块通讯接口的实现 日志文件可以放到可执行文件目录下,单独生成一个独立的文件,名字由前边配置项 定为o o m m c - m t e r 1 0 9 ,其大小限制为1 m ,日志满后清空重写。 日志存盘的策略: 方案一:一条记录一存盘。 方案二:记录日志时先记录在缓冲区中,如果记录的条目超过一定数目时或退出日志 时再进行刷盘。 开始我采用的是方案一,实际使用发现此方案影响效率,后来改成方案二。 3 2 5 数据中心类定义 抽象出类,是为了接口的实现。根据提炼出来的数据中心的接口,我抽象出了如下五 个类: d s c 适配器类、适配器管理类、日志记录类,日志记录的事件管理类、通用全局类。 这五个类分别提供相关的功能函数和数据接口,通过类的交互,可以实现数据中心的接口。 下边大概的讲解一下这些类应该提供的功能函数。 i d t u a d a p t e r 适配器接口规定了,所有的适配器应该提供的功能,适配器用于封装对不同类型d s c 开发包的访问,使d l l 接口在实现功能接口时能够一致。 该类的实例和d $ c 适配器d 1 1 是一对一的,有多少个d s c 适配器就有多少个该类的实 例。例如,d m d s c 中有:宏电 ,宏电t c p d l i ,桑荣d l l ,桑荣d n ,则就有_ u d p d l l u d p_ t o p 4 个i d t u a d a p t = 实例分别对应这些d n 。 类型定义 t y p e d e f s t m c t c h a ri d 3 2 1 ; t i m e _ tc o n n e c t t i m e ;登录时间 t i m e _ tu p d a t e t n n e ;最近一次数据包的更新时间 d m s t a m s ; 成员变量 麓黧黼攀辫鬻黼辫鬟l 鬟鬻l 纂囊;鬻鬻囊鬻黼纛黼瓣翻鬻粼l ms t r f i l e p a t h c s t r i n g 私有d s c 适配器文件名 r n _ d s c l n f o d s c h l f o私有 d s c 开发包的信息 mh d uh m o d u l e 私有已经打开的d s c d l l 旬柄 第四章g p r sd t u 模块通讯接口的实现 m i r e i c o u n t i n t 私有对本适配器使用的引用计 数 mw p o r tw o r d 私有服务端口 mf u n c o e t m o d u l e l n f o f u n c g c t m o d u l e i n f o私有 函数指针 取得d s c 模块信息 m _ f u n c s t a r t m _ f u n c s t a r t 私有函数指针 启动d s c 服务 m _ f u n c s t o p mf u n c s t o p私有函数指针 停止d s c 服务 mf u n c r e a d m f u n c r c a d 私有函数指针 读数据 m _ f u n c w r i t e m f u n c w r i t e 私有函数指针 发送数据 m _ f u n c s t a t u sm f i m c s t a t u s 私有函数指针 取d t u 工作状态 1 1 1f u n c g e t c o u n t m f u n c g c t c o u n t 私有函数指针 取在线d t u 个数 m j m c g e t a j l d t i l s t a t 邺m _ f u n c g e t a l l d m s t a t u s私有函数指针 取得所有d t u 的状态 m _ f u n c o e t l a s t e r r o rm _ f u n 删r r o r 私有函数指针 。 取得d s c 错误报告 成员函数 熏攀;鎏l 纂蘩i 警攀鬻攀i i;骥蘩黧簟麓熊 一i d t u a d a p t e r公有无 无释放所有资源 s t a r t s e r v i c e 公有w o r d i n t 启动d s c 服务 d a p t e r l o g :l o g s t a r t 调用d s c 的s t a r t s e r v i c e s t o p s c r v i c 圮 公有无 i n t停止d s c 的服务 c d t u a d a p t e r l o g :l o g s t o p 第四章甜r s l r u 模块通讯接口筋宴现 调用d s c 的s t o p s c r v i c e w r i t e 公有 c h a r i di n t向指定的d t u 发送数据 b y t e + p b u fc d t u a d a p t e r l o g :l o g w d t c d w o r dd w l c n调用d s c 的w r i t e r e a d 公有 c h a r i dh a t读一条d t u 数据 b y t e * p b u f c d t u a d a p t e r l o g :l o g r e a d d w o r dd w l e n调用d s c 的r e a d g e t j d t u s t a t t m 公有 c h a r + i d , i n t返回指定d t u 的状态 d m s m m s p s t a t l l s c r c a t o公有,o i n t登记对d s c 的一个引用 若初始引用计数为0 ,则调用 s t a r t s c r v i c e 启动服务 c l o s e 公有无 i n t释放对d s c 的一个引用 若当前引用计数为0 ,则调用 s t o p s e r v i c e 关闭服务 c 1 0 s e d l l 公有无 h a t关闭d s c 适配器d l l g e t a l l 【m u s t a t u s公有 d t u s t a t u s p s , h a t获取所有的d t u 状态 d w o r dd w l e n g e t d s c l n f o公有 d s c l n f o * h a t 取得d s c 开发包的信息 g 既d t u c o u n t 公有 无 h a t 取得在线d t u 个数 g c t l a s t e r r o r公有 c s t r i n g i n t 取得错误描述 a t r e r r o r g e t l v l o d u l e l n f o 私有 d s e l n f o *i n t取得d s c d l l 的信息 i n i t a d a p t e r 公有 c s t r i n g & b o o l检查是否是一个合法d s c 适配 器 l o a d d i i公有无b o o l载入d l l r 0 s t a r t s e r v i e e 公有无 h a t 重新启动服务 c d t u a d a p t e r m g r 在本级d l i 中,保留了一个全局的d t u a d a p t e r l i s t 对象。 t y p e d e f c m a p d t u a d a p t e r l i s t ; 这个管理类,封装d t u 标识到i d t u a d a p t e r 指针的映射,用来管理适配器。 这个管理类,本身应该只能有一个唯一的实例,所有的适配器都应该由它来管理。 第四章g p r sd i u 模块通讯接口的实现 成员变量 j 纂震瓣纛蘩纛纂嚣j 。爹| | i 誊誉攀: :懑黍黉攀i ;一嚣j 銎添誉7 i r aa r r a d a p t e r 私有 c a r r a y m _ p s i n g l e o b j 私有 s t a t i c本类的唯一实例指针 c d t u a d a p t e r m g r + 成员函数 震鬣麟鬓剽熏纂鬻霪 鬻鬃鬻遂l 鬓鬟鬓燮攀黪 a l l o c a d a p t e r 公有 s e r v i c e p a rc o m f h n d分配一个服务,并返回服务句柄 &l e c d t u a d a p t g l m g私有 无无 初始化所有的 t i ,a d a p t 盯原型, r每一个d s c 适配器对应一个 i i 批t e r - c d t u a d a p t e r m公有 无无适放所有i d t u a d a p t e r 实例 g r g e t a d a p t e r 公有 c 0 心缸i a i d t u a d a p t e r *根据服务句柄返回对应的 n d l e d t u a d a p t e r 指针 g e t a l l d t u s t a t u s 公有 d t u s t a t u s *i n t返回所有的在线d t u 状态 d w o r d g e t d t u c o u n t公有无i n t返回在线d t u 的数量 g e t d t u m a k e r l i s公有d s c l n f o * i n t 返回d t u 厂商列表 t d w d r d g e t l n s t a n c e 公有无 c d t u a d a p t e r m返回本类唯一实例指针 g r * r e l e a s e a d a p t e r 公有 c o m 哦i ai n t释放一个服务 n d l e r e s t a r t a i l 公有无 i n t重新启动所有d s c 服务 c d t u a d a p t e r l o g 本类用于解决日志记录,同样它应该存在一个唯一性的实例,这里用静态指针来实现。 另外日志功能应该提供是否启动此功能的函数,毕竟很多时候是不需要日志功能的。 第四章g p r sd t u 模块通讯接口的实现 成员变量 j 籀麟蒸瓣鬻i 豢二嚣辫嚣鬻;i ;l 霪戮筏獭錾囊l 瓣i 露瓣爱萋滋蒸纛鬻鬻鬻;鬻鬻鬻i 鬟蠹 m _ b e n a b l e l o g 私有b o o l 静态,记录是否启用日志 默认为f a l s e m _ e v e n t m g r 私有 c e v e n t m g r 日志输出对象 m _ _ p s i n g l e o b j 私有 s t a t i c 本类唯一实例指针 c i m u a d a p t e r l o g 成员函数 黧鬻震蓊藤謦麓 l o g s t a r t 公有c o n s t 无生成启动服务的内容 s e r v i c e p a r & 包括:端口号,d t u 厂商 l o g s t o p 公有无无停止服务 l o g r e a d 公有 c o n s t 无记录读取数据的动作 c d t u ) & d a t a u n i t & l o g w d m 公有 c o n s t 无记录发送数据的动作 c d t i l 丑) & d a t a u n i t , e n a b l e l o g 公有 b o o l 无禁止启用日志功能 c d t u a d a p t e r l o g 公有无无设置默认为禁止日志功能 - c d t u a d a p t e r l o g公有 无无析构函数 g e t l n s t a n c e 公有无 c i ) m a d a p t e r l o g +返回本类唯一实侧指针 c e v e n t m g r 管理通信事件,记录成日志。 类型定义 t y p e d e f c l i s t l o g l i 8 t ; 成员变量 第四章g p r s 阴m 模块通讯接口的实现 iml i s 曲gl o g l i s t私有日志队列,缓冲用 i lm 锵l o g c c r i t i c a l s e c t i o n 私有锁 成员函数 纂鬻蒸鬻; 蒸霪壤蒸鬻寨翮鬻鹾i 镤熏。蘩i 纛 囊豸畿:囊髯篓端,。、i ,麓 a 攀溅黔蓦,j 墓篓簇熏黪鬻;鞭嚣 。_ 鬻。薯 | 。1 a d d l t e m公有c o n s t 无记录一个日志项 c s t r i n g & 当l o g , l i s t 长度满l o 个时再记录 f l u s h 公有 无 无刷新当前缓冲的日志到文件中 c e v e n t m g r 公有无无 计算日志文件名 - c e v e n t m g r公有无无把剩余的日志记录写到文件中 c c o m m c e n t e r a p p 负责释放c d l a x a d a p t e r m g r 矛1 1c d t u a d a p t e r l o g 的唯一实例。 成员函数 l 黪蘩鬻鬃i 鬻i 蘩餐 ,灞镕i 疆黪蘩 爹襞黪i 爹鬻黎孵爹i 鬻瀵爹l i i 攀簿 - ,蠢爨、鹱 黼 ic 岫 公有无无负责释放c d t u a d a p t e r m g r 和 c d m a d a p t e r l o g 的唯一实例。 类关系 3 2 6 数据中心接口实现 s t a r t s e r v i c e 第四章g p p 。sd t u 模块通讯接口的实现 实现的功能和流程如下: :工c o - :直仕e r:a m u 山衄8 r k r r:i d t m d 曩叶:c d t i 】 d t e r l o f:a 打e n t k r i 乳砒瓤。o 根据d t 广商,透信方式,网络类型 c l l o c h 驾吐叱o 、找刭对应i e t u a d a l y t e r c r e a t e 0 、s t 缸s e nr i c e o 一一 l o l s t _ r t - d d i t e s o 。 、 s t o p s e r v i c e 一2 0 - 第四章g p r sd t u 模块通讯接口的实现 囤囤 c o m m d t u w r i t e :e o k k l l t - - 0 :i c m w c s t t e c:( ) t 妇e r l r c , r :n l t l l b 廿t e r:口h t l 醴猷e f t o n;啦 c m a i ) t u l b c i _ t e 0 ! c 武址a 耻e r o 、 棚皴一娥、返回娥 一, t :t e l o r i t e o 埘l i t , = o 一2 t 第四章g p r si y i u 模块通讯接口的实现 c o m m d t u r e a d - i c c n t e r:c g t u a i d t r x e f: d t u _ , t - 9 ( e r:c d t 氇d - w t r l o l :c 趣 d 呻t n t h d 0i j 1 “t j ( f p t x l l 、 如d z o z z h t 4 0 a d ( l t - 0 r e s t a r t s e r v i c e l :叨t “d t 。一f i g e t d t u m a k e r l i s t :i c o s a c e n t e t :c ) t u x d t e z l m r:1 1 ) 士u d 柚t e r i t d t 1 矗e z l i s t 0 l g e t 蜘t

温馨提示

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

评论

0/150

提交评论