欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

使用KML实现多细节层次技术

时间:2023-09-23 09:24:09 其他范文 收藏本文 下载本文

下面是小编帮大家整理的使用KML实现多细节层次技术,本文共8篇,希望对大家有所帮助。

使用KML实现多细节层次技术

篇1:使用KML实现多细节层次技术

使用KML实现多细节层次技术

介绍了KML的`功能和LOD技术原理及其优势,论述使用KML实现多细节层次(level of detail,LOD)技术.避免了复杂算法的实现,提高了数据在Google Eagh中的加载速度.同时把LOD技术应用到数字九寨沟演示系统中.

作 者:袁俊超 苗放 李玉林 YUAN Junchao MIA0 Fang LI Yulin  作者单位:成都理工大学信息工程学院,四川省地球探测与信息技术重点实验室,四川,成都,610059 刊 名:地理空间信息 英文刊名:GEOSPATIAL INFORMATION 年,卷(期): 7(4) 分类号:P208 关键词:Google   Each   KML   LOD   数字旅游  

篇2:多 USB 接口的局域网接入技术的实现

多 USB 接口的局域网接入技术的实现

摘要:提出了一种全新的计算机接入局域网的方案,使多台计算机可以方便地使用各自的USB接口接入局域网,并提供了该方案的实现方法。

关键词:通用串行总线(USB) 局域网

目前,在局域网内部,计算机接入局域网的传统方法是通过在计算机主板上安装以太网卡来实现网络的互联。这种接入方式需要计算机主板上有闲置的ISA或者PCI插槽,还需要上级网络设备有足够的接口支持。当上级网络设备的下行接口数量不够时,必须在这个网络设备下面添加集线器(HUB)或者交换机(Switcher)。

针对这种情况,本文提出了一种多通用串行总线(USB)接口的局域网接入适配器。它将传统意义上的多块以太网卡和集线器的功能集于一身,使多台计算机可以用各自的USB接口连接到上级网络设备的一个下行接口,并在内部采用了比集线器功能更为更强大交换控制器,对各接口的数据流量加以控制,保证可靠地运行。

与传统的通过以太网卡的局域网接入方式相比较,这种通过USB接口的局域网接入方式具有很多优点:安装简便,支持热插拔,而且不需要在计算机内部安装以太网卡,尤其在主板插槽紧张时节省了资源。

(本网网收集整理)

1 系统硬件组成

本文所述的系统实现了对四路USB接口的局域网接入。图1是整个系统的硬件组成框图。

1.1 物理层

物理层芯片连接上级网络设备的下行RJ45接口和交换控制器。本文所述系统用台湾REALTEK公司的RTL8204芯片实现。这块芯片是一块高度集成的10BASE-T/100BASE-TX/FX的以太网收发芯片。RTL8204包括了四个独立的通道,可以同时收发四路以太网信号,每路通道都集成了4B5B编解码器、曼彻斯特编解码器、加扰器、解扰器、输出驱动、输出波形形成、滤波、数字自适应均衡和锁相环模块。但在本系统中只用了一路连接外部局域网。与普通物理层芯片所具有的质独立(MII)接口相比较,RTL8204使用了相对简单的简化介质独立(RMII)接口向上与MAC层进行连接。这种RMII接口省掉了MII接口中的许多控制信号和数据信号,将15位信号减到了7位,简化了硬件的设计工作[3]。

1.2 交换控制器

本系统采用的交换控制器是台湾REALTEK公司的RTL8308B芯片。这是一块具有8端口10Mbps/100Mbps的交换控制器。它对各个端口的数据进行处理并交换,并对各端口的流量加以控制。RTL8308B每个端口都能够处理10Mbps或者100Mbps的数据,可以工作在全双工或者半双工模式下。与RTL8204一样,RTL8308B的接口也是RMII接口,硬件设计非常方便。

RTL8308B片内集成有2MB的DRAM。可以用作数据包的缓存。RTL8308B支持IEEE802.3x全双工流量控制和半双工后退压力算法、地址学习算法、广播风暴控制和环路测试功能。RTL8308B片外用一片串行EEPROM 24LC02B实现对芯片的配置[4]。

1.3 USB转换芯片

USB转换芯片对USB接口的数据、控制信号和RMII接口的数据、控制信号进行转换。本系统采用台湾ASIX公司的AX88170作为USB协议转换芯片。这块芯片片内5KB×16bit的SRAM,内部对数据进行USB协议和网络协议转换。它支持USB1.1标准,并可连接基于IEEE 702.3或IEEE 802.3u以太网协议下的10Mbps/100Mbps网络,而且在支持MII接口的同时,还支持简单的RMII接口,方便硬件的设计。

AX88170片外用一片串行EEPROM 93LC56实现对芯片的'配置[5]。

1.4 通用串行总线(USB)接口

通用串行总线(USB)设备在即插即用的特性上能够较好地满足用户使用方便的要求。USB规范目前有两个版本:1.1和2.0。目前,绝大多数计算机主板还只是支持USB 1.1规范的最高12Mbps速率,所以本系统是针对USB 1.1规范进行的[1]。

2 硬件配置

2.1 RTL8308B的配置

交换控制器RTL8308B的配合是通过芯片在上电时读取串行EEPROM 24LC02B及某些控制引脚的电平实现的。这其中包括广播控制使能、半双工后退压力函数使能、全双工流量控制、环路监测函数使能位、CRC校验允许位、Hash算法使能位等。对这些控制位的使能,本系统视需要而定,这里不再一一叙述。

此外,非常重要的是选择好RTL8308B的物理端口,并设置好其对应的物理地址。如果物理地址没有设置正确,交换控制器将能正常地从连接端口交换数据。在本系统中,根据芯片手册要求及实际需要,选取C端口连接RTL8204的C端口,E、F、G、H分别连接4片USB转换芯片AX88170。在EEPROM 24LC02B内设置好物理端口对应的物理地址,使RTL8308B的A端口到H端口对应着物理地址08H~0FH。

2.2 RTL8204的配置

RTL8204的系统配置通过读取某些控制引脚上电时刻的电平实现。RTL8204在上电时读取对应的引脚电平,并将其状态写入自己的内部寄存器中。这些控制引脚包括速率的选择(10Mbps/100Mbps)、全双工/半双工的选择以及自动协商的使能。本系统选择了自动协商工作方式,使RTL8204可以自动地与传输方式未知的上级网络设备协商物理层信号的传输方式。

降此以外,对RTL8204最重要的配置是其端口的物理地址的设备。本系统用RTL8204的C端口连接RTL8308B的C端口,要求这两个端口的物理地址一致。前文所述,RTL8308B的C端口地址应为0AH,所以,应该将该RTL8204的C端口地址设置成为0AH,具体设备方法可以参考文献[3]。

2.3 AX88170的系统配置

USB转换芯片AX88170的数据接口可以选择MII接口或者RMII接口,本系统选择了设计较为简单的RMII接口。AX88170还可以工作在PHY模式或者MAC模式下,在本系统中,RTL8308B工作在MAC层,对其他芯片的传输方式进行控制。所以,这里需要将MX88170设置为工作在PHY模式下。

和前所述的REL8204、RTL8308B一样,AX88170的物理地址的设置也要与RTL8308B的设置相一致。本文中的4片AX88170分别与RTL8308B的E、F、G、H端口连接,所以对应的物理端口地址应该分别设置为0CH、0DH、0E和0FH。

除此之外,在存储AX88170控制信息的EEPROM93LC56中,还存储这个端口的MAC地址。这里4个MAC地址和RTL8308B的MAC地址的选择应该避免自身的重复,并且不应与现有局域网里的MAC地址重复。

2.4 其它控制信号

整个系统的复位信号的重要性不言而喻,除了每片芯片都有各自最小时间的要求外,交换控制器RTL8308B还要求在复位后完成重新配置的时间不能早于其他物理层芯片(即RTL8204和4片MX88170)的配置暗。也就是说,RTL8308B的复位时间不能短于其他物理层芯片的复位时间。所以本系统还采用了MAXIM的MAX809芯片用作所有芯片的复位信号,既保证了复位信号的单稳的可靠性,也保证了RTL8308B和其他物理层芯片的复位时间是相等的。

在本系统中,时钟信号成为重要,特别是50MHz的时钟信号。50MHz时钟信号需要连接到RTL8308B、RTL8204和4片MX88170的RMII接口,需要足够的驱动能力,并且它们之间的相位差要足够小才可以保证传输的可靠性。本系统采用了IDT公司的49FCT3805(1:5时钟驱动芯片)对时钟信号增加了驱动力,并增大了扇出。

3 测试程序和驱动程序

为了方便硬件的调试,还需要编写简单的测试程序来调试系统。除标准USB指令外,AX88170厂家提供了关于MX88170的特殊指令,包括读写EEPROM、读写片内收发存储器、读写内部其他控制寄存器等,方便了系统的调试。由于MX88170芯片的厂商免费提供了其在Windows 98、Windows 和Windows Me下的驱动程序,所以本系统仅仅编写了简单的USB设备的测试程序,主要用来调试AX88170的工作状态。图2给出了程序的流程图。程序初始化后打开目标设备,然后读取设备标识和配置标识并判断。如果正确,则继续读取设备标识和配置标识并判断。如果正确,则继续读取EEPROM里的MAC地址和物理端口地址,之后向MX88170的片内发送SRAM和接收SRAM读写数据,如果结果正确即证明AX88170已经能够正常工作。MX88170完整的驱动程序由芯片厂端免费提供。

经过测试,本系统工作性能稳定。

本系统用于办公室或实验室环境下的计算机组网,支持IEEE 802.3的10Mbps/100Mbps以太网标准,兼容全双工和半双工网络。图3为它的应用实例,它可以将4台电脑通过USB接口连接在一起,并与局域网相连,从而实现多台计算机的信息交换、资源共享。各用户终端可以通过本设备连接至局域网,进而与Internet网络相连。

系统下一步的改进主要针对两个方面:一是高速的USB 2.0协议;二是增加USB接口数量,使其能适应更高速更复杂的网络。

与传统的用以太网卡的局域网接入方式相比较,利用本文的USB接口以太网适配器接入较为灵活、方便,而且成本低廉,具有良好的市场前景。

篇3:多USB接口的局域网接入技术的实现

多USB接口的局域网接入技术的实现

摘要:提出了一种全新的计算机接入局域网的方案,使多台计算机可以方便地使用各自的USB接口接入局域网,并提供了该方案的实现方法。

关键词:通用串行总线(USB) 局域网

目前,在局域网内部,计算机接入局域网的传统方法是通过在计算机主板上安装以太网卡来实现网络的互联。这种接入方式需要计算机主板上有闲置的ISA或者PCI插槽,还需要上级网络设备有足够的接口支持。当上级网络设备的下行接口数量不够时,必须在这个网络设备下面添加集线器(HUB)或者交换机(Switcher)。

针对这种情况,本文提出了一种多通用串行总线(USB)接口的局域网接入适配器。它将传统意义上的'多块以太网卡和集线器的功能集于一身,使多台计算机可以用各自的USB接口连接到上级网络设备的一个下行接口,并在内部采用了比集线器功能更为更强大交换控制器,对各接口的数据流量加以控制,保证可靠地运行。

与传统的通过以太网卡的局域网接入方式相比较,这种通过USB接口的局域网接入方式具有很多优点:安装简便,支持热插拔,而且不需要在计算机内部安装以太网卡,尤其在主板插槽紧张时节省了资源。

1 系统硬件组成

本文所述的系统实现了对四路USB接口的局域网接入。图1是整个系统的硬件组成框图。

1.1 物理层

物理层芯片连接上级网络设备的下行RJ45接口和交换控制器。本文所述系统用台湾REALTEK公司的RTL8204芯片实现。这块芯片是一块高度集成的10BASE-T/100BASE-TX/FX的以太网收发芯片。RTL8204包括了四个独立的通道,可以同时收发四路以太网信号,每路通道都集成了4B5B编解码器、曼彻斯特编解码器、加扰器、解扰器、输出驱动、输出波形形成、滤波、数字自适应均衡和锁相环模块。但在本系统中只用了一路连接外部局域网。与普通物理层芯片所具有的质独立(MII)接口相比较,RTL8204使用了相对简单的简化介质独立(RMII)接口向上与MAC层进行连接。这种RMII接口省掉了MII接口中的许多控制信号和数据信号,将15位信号减到了7位,简化了硬件的设计工作[3]。

1.2 交换控制器

本系统采用的交换控制器是台湾REALTEK公司的RTL8308B芯片。这是一块具有8端口10Mbps/100Mbps的交换控制器。它对各个端口的数据进行处理并交换,并对各端口的流量加以控制。RTL8308B每个端口都能够处理10Mbps或者100Mbps的数据,可以工作在全双工或者半双工模式下。与RTL8204一样,RTL8308B的接口也是RMII接口,硬件设计非常方便。

RTL8308B片内集成有

[1] [2] [3] [4]

篇4:采用多框架技术实现在线考场恢复系统

采用多框架技术实现在线考场恢复系统

?

邵曙君   吉  逸?

(东南大学计算机系网络实验室)??

摘要  分析了当前一些基于WEB的在线考试系统在考场恢复方面的不足,提出一种基于多框架的在线考场结构,并通过框架之间的通信机制和后台提交页面方式来实现即时考生答案的提交工作,从而完成了服务器端的在线考场恢复机制,进一步完善网络考场的功能。?

关键词    在线考场  多框架结构  考场恢复  WEB?

随着INTERNET的普及和相关技术的以展,传统基于课堂的教育模式也受到了前所未有的冲击。基于WEB的在线远程教育正以它无可比拟的优点,逐渐被老师和学生接纳。作为一项非常系统化的工程,远程教学也是多项技术的结合体,考试是教育中不可缺少的环节,在线考场也已经作为替代传统考试的网络模式被很多远程教育学校所采纳,随机抽取试题,即时生成考卷,即时评阅分数,是大部分在线考试所能实现的功能。虽然网络技术日趋完善,但是在很多方面,基于WEB形式的远程考试仍然没有办法完全替代传统的考试模式。?

大部分基于WEB的在线考试虽然带来了快捷,方便性,但是大多只能应付非正规的考试,因为在传统的考试中有很多环节是它们还不能很完善实现的。考场恢复就是其中一个有待解决的问题,那么什么是考场恢复呢?当因为意外情况,比如网络中断或者机器发生故障,学生意外退出考场后,学生再次登陆考场继续参加考试时,考试系统是否已经保留了学生已经完成的答案数据,并把它们从新调用并和考卷组织起来,这样考生就可以继续进行考试,而不要重新开始考试,可见考场恢复是在线考试中非常重要的一环节,否则学生就要重新参加考试,那样就会给学生带来时间和精力的巨大浪费。?

本文具体探讨了实现考场恢复的技术关键,提出了一个利用多框架的考场结构,通过框架之间的通信机制来实现考生答案数据的提交,从而实现考场恢复。?

1.考场恢复的关键技术

>1.1 在哪一端实现恢复机制的探讨?

考生开始答卷后,每次完成一道考题,答案必须要在系统中进行储存,以免意外中断后,当学生再次进入考场后,学生的答案数据不能恢复。那么答案信息是驻留在学生端还是服务器端呢?恢复机制的实现驻留在哪里是非常关键的问题,如果是采用存储在学生端,那么可以通过采取cookie技术来实现,这样优势是非常明显的,不用向服务器数据库一方提交数据,从速度上说一定要更快捷,而且用cookie技术来实现的话,也比较简单,但是cookie所能存储的数据容量是非常有限的,如果只是针对选择题,那么它不打失为一个较好的解决办法。但是笔者设计的考试系统是一个针对众多题型的考试系统,考卷是根据数据库中试卷结构表在线生成的,每一张试卷都可能会包括选择题,填空题,问答题等。对于一张包含很多问答题的试卷,用cookie来存储学生的答案,从存储容量的角度讲是不可能的。另外存储在浏览器端还有一个更大的不利就是当机器发生故障,比如存储设备损坏而中断考试后,考生的所有答案数据将全部丢失,那么驻留在浏览器端的数据恢复就无法实现了。所以在考虑到上述一些问题后,学生的答案信息存储到服务器端就成为必然。?

1.2 为什么采用多框架结构?

既然答案数据存储到数据库服务器是肯定的,那么学生就必须要在答完一道题后,提交答案到服务器进行处理。页面的提交带来一个最大的问题就是时间的延迟,如果在线考场的网络速度并不理想的话,学生要花费很长时间来提交一次答案,这样的后果就是完成一次考试要花费很长的时间。有什么方法能做到学生既可以不中断考试,同时又能完成答案的提交呢?笔者采用了框架之间的通信技术来实现在前台不中断学生考试的情况下后台提交答案。下面描述一下多框架结构的定义和框架之间的通讯机制。?

1.3 框架的定义和通讯机制?

框架Frame最主要功用是“分割”视窗,使每个“小视窗”能显示不同的HTML文件,不同框架之间可以互动,也就是说不同框架之间可以交换讯息与资料。当加载一个一般的HTML文档到浏览器,创建浏览器中的'一个模型,这个浏览器始于窗口对象和它包含的文档,层次模型顶部地位相当简单。如果是框架设置(framesetting)文档加载到一个浏览器,这个浏览器就会建立一个稍微不同的层次模型。该模型的精确结构完全依靠子框架设置文档中定义的框架结构。?

框架可以将屏幕分割成不同的区域,每个区域有自己的URL,通过Frames数组对象来实现不同框架之间的访问通讯。实际上框架对象本身也是一个窗口,它继承了窗口对象的所有特征,并拥有所有的属性和方法。框架设置建立一个集中框架间的关系。由于是从面向对象功能的编程领域借用的术语,这个框架设置文档加载到Parent窗口,定义为父窗口文档的每个框架是child框架。可以给每个frame一个“名字”(name)。frame的名字在JavaScript语法中的地位非常重要。一个script引用需要有三个可能的路程之一,这也是框架之间的通讯路径,它们是到目前为止所描述的两代层次:父到子,子到父或子到子。?

这些窗口间的通讯路径需要不同的引用风格。下面就描述一下不同路径之间的script引用脚本。?

? ⑴ 父到子引用?

从父方看,它包括两个以上的框架,这些框架作为框架对象数组也被存在模型中。可以通过数组语法或者通过在

[window.]frames[n].ObjName?

[window.]framename.ObjName?

框架的索引值基于出现在框架设置文档的

? ⑵ 子到父引用?

从子的角度看,下一层升个层次被称为parent。因此,引用到那层的项是简单的:?

parent.ObjName?

? ⑶ 子到子引用?

任何窗口或者框架的属性之一就是它的parent,因此必须引用这个属性来处理框架之间通信的方法,因此,从一个子到它的同属之一时,就可以引用下面的格式。?

Parent.frames[n].ObjName?

Parent.frame.ObjName?

现在我们都已经基本了解了多框架结构的工作方式,下面就具体说明现场恢复系统的原理和实现方法。?

篇5:多业务IP城域网的技术选择与实现

多业务IP城域网的技术选择与实现

目前国内运营商均已完成了电信级IP承载网络的建设,IP城域网作为多业务承载的启始与终结点成为运营商的.关注重点.以海南铁通城域网优化建设为例,详细阐述城域网路由化、网络扁平化、质量差异化、业务多样化的技术选择与实现.

作 者:刘健 Liu Jian  作者单位:中国铁通集团有限公司,100032,北京 刊 名:铁道通信信号 英文刊名:RAILWAY SIGNALLING & COMMUNICATION 年,卷(期): 45(3) 分类号:U2 关键词:IP城域网   路由   业务  

篇6:多波束测深的异常数据编辑技术和实现

多波束测深的异常数据编辑技术和实现

因为海况、仪器噪声、海水中浮游生物等因素存在,测深数据中含有大量的异常数据和噪声,由于数据量大,如何有效定位异常数据和噪声是目前国际上的.研究热点.本文详细介绍了手工交互式编辑和常用的几种自动编辑方法,并重点介绍了基于测点密度的图像滤波方法,阐述了多波束测深数据编辑软件的实现,对多波束测深数据的快速编辑有一定的参考意义.

作 者:阳凡林 郑作亚 郭金运 刘智敏 YANG Fan-lin ZHENG Zuo-ya GUO Jin-yun LIU Zhi-min  作者单位:阳凡林,郑作亚,郭金运,YANG Fan-lin,ZHENG Zuo-ya,GUO Jin-yun(海岛(礁)测绘技术国家测绘局重点实验室,山东,青岛,266510;山东科技大学测绘科学与工程学院,山东,青岛,266510)

刘智敏,LIU Zhi-min(山东科技大学测绘科学与工程学院,山东,青岛,266510)

刊 名:测绘科学  ISTIC PKU英文刊名:SCIENCE OF SURVEYING AND MAPPING 年,卷(期):2009 34(6) 分类号:P229 关键词:多波束声纳   异常数据   编辑   multibeam sonar   outlier   editing  

篇7:Go语言使用组合的方式实现多继承的方法

作者:books1958 字体:[增加 减小] 类型:

这篇文章主要介绍了Go语言使用组合的方式实现多继承的方法,实例分析了多继承的原理与使用组合方式来实现多继承的技巧,需要的朋友可以参考下

本文实例讲述了Go语言使用组合的方式实现多继承的方法,分享给大家供大家参考。具体实现方法如下:

在大多数面向对象的编程语言中多继承都是不支持的。因为在基于class的体系中,多继承极大地增加了编译器的复杂性。

Go语言使用组合的方式实现继承,因此也可以很简单的实现多继承。

代码如下:

//使用组合的方式实现多继承

type Phone struct{}

func (p *Phone) Call string {

return “Ring Ring”

}

type Camera struct{}

func (c *Camera) TakeAPicture() string {

return “Click”

}

//多继承

type CameraPhone struct {

Camera

Phone

}

func structTest0803() {

cp := new(CameraPhone)

fmt.Println(“Our new CameraPhone exhibits multiple behaviors ...”)

fmt.Println(“It exhibits behavior. of a Camera: ”, cp.TakeAPicture())

fmt.Println(“It works like a Phone too: ”, cp.Call())

/*Output:

Our new CameraPhone exhibits multiple behaviors ...

It exhibits behavior. of a Camera: Click

It works like a Phone too: Ring Ring

*/

}

希望本文所述对大家的Go语言程序设计有所帮助,

篇8:金刚石合成控制系统中多串口通信技术的设计与实现

金刚石合成控制系统中多串口通信技术的设计与实现

摘要:通过多串口通信技术在金刚石合成控制系统中的应用,讨论了32位Windows操作系统下,VC多串口通信技术的设计与实现方法,并运用面向对象方法和多线程技术设计了一个比较完善的串口通信类。阐述了用VC开发上位机与PLC之间的串口通信程序设计方法和实现技术。

关键词:串口通信;面向对象方法;多线程;PLC

1引言

传统的金刚石合成机控制系统是由一个PLC和一个可显示终端构成。这种传统的控制系统一般具有如下缺点:

(1)系统所有的工作都由PLC完成,其控制精度较差,致使合成的金刚石质量较差;

(2)显示终端的平面尺寸过小,这一方面使得操作人员观察系统的状态很不方便,另一方面?也常常会引起误操作;

(3)金刚石合成工艺复杂,需控制的参数很多,但原控制系统不能对参数进行保存,这样在根据不同产品和工艺要求对部分参数进行调整时,每次都必须重新设置所有的参数,操作非常麻烦;

(4)界面不友好;

(5)不能通过控制系统自动考核操作人员的工作质量。

为了提高控制精度、方便操作,开发新的控制系统迫在眉睫。笔者针对以上问题,将IPC与PLC有机结合在一起,开发了一套新的控制系统。通过该系统可在上位机(IPC)和PLC之间通过RS-232与RS-485进行大量串口通信。

2VC串口通信分析

在32位Windows系统下使用VC开发串口通信程序通常有如下4种方法:

(1)使用Microsoft公司提供的名为MSCOMM的通信控件;

(2)直接使用Windows应用程序接口(API);

(3)自行设计一个串口通信类;

(4)通过开发一个ActiveX控件来实现串口通信功能。

在上述几种方法中,实际上还是使用WindowsAPI函数,然后把串口通信的细节给封装起来,同时提供给用户几个简单的接口函数。上述几种方法各有优缺点,但在实际情况下,大多数编程人员喜欢使用API函数自行设计串口通信类。

用WindowsAPI函数进行串口通信的编程流程如图1所示。其中打开串口是确定串口号与串口的打开方式;初始化串口用于配置通讯的波特率、每字节位数、校验位、停止位和读写超时等;读写串口用于向串口进行发送数据和从串口接收数据;关闭串口用于将串口关闭并释放串口资源(Windows系统下串口是系统资源)。

由于绝大多数控制系统中串口通信是比较费时的,而且监控系统还要进行数据处理和显示等,所以一般采用多线程技术,并用AfxBeginThread()函数创建辅助线程来管理串口通信,这样,主进程就能在进行串口读写的同时,处理数据并完成用户指令的响应,但是设计时一定要处理好数据的共享问题。

串口读写既可以选择同步、异步方式,也可以选择查询、定时读写和事件驱动方式。由于同步方式容易造成线程阻塞,所以一般采用异步方式;而查询方式要占用大量的CPU时间,所以一般采用定时读写或者事件驱动方式,事件驱动方式相关文献较多,故此重点讨论定时读写方式。定时读写方式就是上位机向下位机发送固定格式的数据,在下位机收到后向上位机返回状态信息数据。由于数据的传输需要时间,所有上位机发送数据后就调用_sleep()函数进行休眠,休眠的时间可根据需要进行不同的设置。这样,可以节省CPU时间,以使系统能够很好地进行监控工作和处理其它事务。

3VC串口通信的设计与实现

笔者在Windows系统下,采用面向对象的方法和多线程技术,并使用VisualC6.0作为编程工具开发了一个通用串口通信类CSerialPort,该CSerialPort类封装了串口通信的基本数据和方法,下面给出CSerialPort类的简单介绍。

CSerialPort类头文件中的主要成员变量和成员函数如下:

ClassCSerialPort

{

private:

HANDELm_hPort;

DCBm_Dcb;

COMMTIMEOUTSm_TimeOuts;

DWORDm_Error;

Public:

CSerialPort();??//构造函数

virtual~CSerialPort();??//析构函数

//InitPort()函数实现初始化串口

BOOLInitPort(

char*str=“com1”,

UINTBaudRate=9600,

UINTParity=0,

UINTByteSize=8,

UINTStopBits=1,

UINTReadMultiplier=0,

UINTReadConstant=0,

UINTWriteMultiplier=10,

UINTWriteConstant=1000);

DCBGetDCB();?//获得DCB参数

//SetDCB()函数实现设置DCB参数

BOOLSetDCB(

UINTBaudRate=9600,

UINTParity=0,

UNITByteSize=8,

UINTStopBits=1);

//GetTimeOuts()函数获得超时参数

COMMTIMEOUTSGetTimeOuts();

//SetTimeOuts()函数设置超时参数

BOOLSetTimeOuts(

UINTReadMultiplier=0,

UINTReadConstant=0,

UINTWriteMultiplier=10,

UINTWriteConstant=1000);

//WritePort()函数实现写串口操作

voidWritePort(HANDLEport,CString);

CStringReadPort(HANDLEport);//读串口操作

BOOLClosePort();?//关闭串口

};

下面对该类的重要函数作以说明:

(1)在构造函数CSerialPort()中已对该类的数据成员进行了初始化操作。

(2)初始化串口函数InitPort()函数用于完成串口的初始化工作,包括打开串口、设置DCB参数、设置通信的超时时间等。

打开串口使用CreateFile()函数,其中InitPort()函数中的第一个参数为要打开的串口,通常将该参数赋给CreateFile()函数中的第一个参数;设置DCB参数应调用该类中的SetDCB()函数,并将InitPort()函数中的第2至第5参数赋给SetDCB()函数;设置通信的超时时间应调用该类中的SetTimeOuts()函数,并将InitPort()函数中的第6至第9参数赋给SetTimeOuts()函数。另外,该串口是系统资源,应该根据不同要求对其安全属性进行设置。

(3)SetDCB()函数用于设置DCB参数,包括传输的波特率、是否进行奇偶校验、每字节长度以及停止位等。

(4)SetTimeOuts()函数用于设定访问的超时值,根据设置的值可以计算出总的超时间隔。前面两个参数用来设置读操作总的超时值,后面两个参数用来设置写操作总的超时值。

(5)WritePort()函数用来完成向串口写数据。由于该系统需要对多个串口进行通信,所以首先应把串口号作为参数传递给该函数;接着该函数把按参数传递过来的、要发送的数据进行编码(也就是加入校验,这样能减少误码率),然后再调用WindowsAPI函数WriteFile()并把数据发送到串口。

(6)ReadPort()函数用来完成从串口读数据,由于有多个串口,所以应把串口作为参数传递进来,然后调用API函数ReadFile(),并把下位机发送到串口,数据读出来放到缓存里面,接着对数据进行处理以将其变换成字符串

(CString)类型并返回。

(7)GetDCB()函数主要用于获得串口的当前配置,可通过调用API函数GetCommState()来实现,然后再进行相应的处理。

(8)GetTimeOuts()函数用于获得访问超时值。

(9)ClosePort()函数可用来关闭串口。因为在Windows系统中串口是系统资源,因而在不用时,应将其释放掉,以便于其它进程对该资源的使用。

4基于串口通信的金刚石合成控制

金刚石合成控制系统采用主从式控制方式,上位机为微机、下位机为PLC。上位机的主要功能是对系统进行实时监控,下位机的主要功能是对系统进行实时控制。上位机采用Windows98操作系统,其监控程序可用VC开发,上、下位机之间通过RS-232与RS-485串口进行通信,它们之间采用的通信波特率为9600bps,无奇偶校验,每字节8位,并有1位停止位。上、下位机之间传送的数据格式可自己定义。由于传输数据时可能会引起错误,所以加入了校验算法。该系统通过上位机向下位机发送数据,下位机收到后就把当前系统的状态参数返回给上位机。由于该系统中所控制的参数具有迟滞性,所以应采用定时发送数据的方法来采集现场状态信息。

上位机编程时,可用VC6.0生成一个对话框类型的`程序框架,然后将自己编写的CSerialPort类加入到该工程中,并在主界面类?CCrystal?中添加一个CSerialPort类的成员变量serial。当监控系统开始工作时,可用AfxBeginThread??函数创建辅助线程来管理串口通信,当调用CSerialPort类中的WritePort??函数向串口发送数据后,可调用_sleep??函数使辅助线程休眠一段时间,以便使PLC有充分的时间返回数据;接着再调用CSerialPort类中的ReadPort()函数并从串口读数据,然后再调用_sleep()函数使辅助线程再休眠一定的时间。这样设计后,当进行串口通信时,主线程就能继续完成监控功能和处理其他事务。辅助线程函数的主要代码如下:

UINTSerialPro(void*param)

{

Ccrystal*mdlg=(Ccrystal*)param?

CStringstr;

intflag=1;

//如果初始化串口失败返回

if(!InitPort(“com2”))

{AfxMessageBox(“打开串口2失败”);

return0;

}

//循环读写串口,直到结束

while(flag)

{

//这里把要发送的数据传送给变量str

……

//向串口写数据

mdlg->serial.WritePort(hport,str);

//让辅助线程休眠100ms

_sleep(100);

//从串口读数据并赋给变量str

str=mdlg->serial.ReadPort(hport);

//这里把从串口得到的数据进行处理

……

5结束语

运用面向对象方法和多线程技术设计的通用串口通信类CSerialPort类,通过对WindowsAPI函数的封装使串口通信变得简单方便、容易维护。目前,该软件系统已成功地应用于金刚石合成控制系统,并成功解决了RS-232与RS-485两种串口通信的问题。经过几个月的运行表明,该串口通信软件工作稳定,出色地完成了系统的实时监控和显示任务。此外,由于采用了面向对象的方法和模块化设计,该软件的维护和升级十分方便;同时该系统具有很好的移植性,按照不同需求稍微改动一些代码就可以应用于其它控制系统中。

多USB接口的局域网接入技术的实现

护士分层次使用管理模式论文

铁路车号自动识别系统ATIS实现技术

技术实现的远程交通信息通信

Android图像处理技术(实现Android中的PS)

基于3DGIS技术的信息系统的研究与实现

Win10系统使用人脸识别技术及条件

技术非排它性使用协议书模版

使用Python的Django框架实现事务交易管理的教程

基于ActiveForm技术的企业B/S模式管理信息系统的实现

《使用KML实现多细节层次技术(整理8篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

最新推荐
猜你喜欢
点击下载本文文档