电信毕业论文多串口多线程的数据管理系统的设计_第1页
电信毕业论文多串口多线程的数据管理系统的设计_第2页
电信毕业论文多串口多线程的数据管理系统的设计_第3页
电信毕业论文多串口多线程的数据管理系统的设计_第4页
电信毕业论文多串口多线程的数据管理系统的设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉纺织大学2011届毕业设计论文武汉纺织大学毕业设计(论文)任务书课题名称: 多串口多线程的数据管理系统的设计 完成期限: 2011年3月2日至 2011年 5 月20日院系名称 电子信息工程学院 指导教师 专业班级 电信071 指导教师职称 学生姓名 院系毕业设计(论文)工作领导小组组长签字 一、课题训练内容(1) 让学生通过查阅收集相关课题的资料,来提高学生文献检索的能力及自学的能力。 (3)锻炼学生综合运用所学专业知识、理论,解决实际工程问题的能力;(4)锻炼学生提出问题-分析问题-解决问题的逻辑思维及自我创新能力;(5) 在书写论文的过程中,培养学生撰写文档的能力,从而提高熟练运用办

2、公软件的能力。二、设计(论文)任务和要求(包括说明书、论文、译文、计算程序、图纸、作品等数量和质量等具体要求)在该课题的整个设计过程中,主要任务和基本要求包括:(1) 查阅课题相关参考文献、技术资料,为撰写论文做好准备。并学习多串口的唯一性,设计模式之单例模式等相关知识。(2) 第四周前上交毕业设计开题报告一份。开题报告内容与学校模板要求一致,字数不少于2000字;经指导教师检查合格后进行后续工作;(3) 完成系统的总体结构的设计(由上位机和下位机构成)及通信程序的编写,运用多串口多线程的通信方法,从而实现对能量管理系统的研究。完成硬件电路板的制作和软件的编写。(4) 完成毕业设计论文,字数不

3、少于15000字。论文应包括中文摘要、英文摘要、目录、正文、参考文献、附录(可无)、致谢7个部分;具体每一部分的格式严格按照学校教务处模板的规定。三、毕业设计(论文)主要参数及主要参考资料系统功能及其参数:1)pc机通过串口来控制单片机进行数据采集,并监控其他设备的运行。2)单片机将采集的数据再通过串口回传给pc机以供存储数据分析,以实现集中管理和最优控制。3)单片机和pc机设置相同的波特率、起始位、停止位、奇偶校验位。主要参考资料:1 康灿, 王万玉. 基于串口的信号源与解调器微机控制系统m.微计算机信息, 2005,10,4-6 2 尹德春

4、. 多线程技术在串口通信中的应用m. 微计算机信息, 2005,8,129-130 3李现勇. visual c+串口通信技术与工程实践m北京: 人民邮电版社, 2002,152-160 4谭思亮. visual c+串口通信工程开发实例导航m. 北京: 人民邮电版社, 2003,130-1335郝文化. windows多线程编程技术与实例 m .北京:中国水利水电出版社,2005.6王苓,苏维均. 基于多线程技术的多串口通信 j. 微计算机信息,2006(3s):253 -

5、 255.7 马忠梅,籍顺心 等.单片机的c语言应用程序设计(第3版).北京:北京航空航天大学出版社,2003.11 isbn7-81077-368-28 李广弟等编著.单片机基础(修订版).北京:北京航空航天大学出版社,2001.7 isbn7-81077-082-99denver a. serial communications in win32, microsoft windows developer supportz. microsoft, 1995.10caitao, ju shiguang, qian zhenjin, et al. implement of a web2based

6、 and serial port agent remote demonstrating systems 11 gallagher m j, narsi mhan v l. adtest: a test data gen2 erati on suite for ada s oft ware systemsj . ieee transactions on soft2ware engineering, 1997, 23: 473 - 454.四、毕业设计(论文)进度表武汉纺织大学毕业设计(论文)进度表序号起止日期计划完成内容实际完成情况检查人签名检查日期1323.14查阅资料,开始撰写开题报告23.

7、153.25进行系统思路设计33.264.15查找多串口,通信线程及相应的通信软件的资料,44164.22完成系统的硬件设计54.235.2完成通信程序软件的设计65.35.12撰写论文75135.16整理并完善论文85.175.20完成论文,并交给指导老师评阅95.215.25进行论文答辩注:1.本任务书一式两份,一份院(系)留存,一份发给学生,任务完成后附在说明书内。2.“实际完成情况”和“检查人签名”由教师用笔填写,其余各项均要求打印,打印字体和字号按照武汉科技学院毕业设计(论文)规范执行。武汉纺织大学毕业设计(论文)开题报告课题名称多串口多线程的数据管理系统的设计院系名称电子与电气工程

8、学院专 业电子信息工程班 级电信071学生姓名高艳翠课题的意义: 随着计算机技术的不断发展 ,在线监控在现代工业企业中的需求日趋上升 ,采用串口通信实现计算机与其他设备通信具有实现简单 ,使用灵活 ,数据传输可靠等优点 ,因此在工业监控、数据采集和实时监控系统中得到了广泛应用。同时多线程也不是一个全新的概念,它是数据流计算机研究的继续。多线程技术通过隐藏时延,提供完全用户级软件兼容,以此来达到整体性能和效率的提高,为高性能和高可用性这一对矛盾的解决展现了希望,因此这几年形成了多线程计算机研究与开发的高潮。大多数的pc机都有rs-232接口。它的优势就是仅需三根线便可在两个数字设备之间实现全双工

9、通信。而单片机已体积小,价格低,抗干扰性能好,在一些简单的控制系统中得到很好的应用。例如:pc机通过串口控制单片机进行数据采集,以监控其他设备运行情况,单片机将采集的数据再通过串口传回pc机已供存储分析,已实现集中管理和最优控制。其中,各单片机独立完成数据采集、处理和控制。由于pc机与单片机之间的通信的普遍,才使得研究多串口多线程技术下能量管理系统的重要性更加突出。 能量管理系统(energy management system)是以计算机技术和电力系统应用软件技术。为支撑的现代电力系统综合自动化系统,也是能量系统和信息系统的一体化或集成。“管理”指的是对不同自动化系统的综合管理,它是以数字计

10、算技术代替模拟计算技术,以软件实现大部分功能替代用硬件实现为特征。狭义的能量管理专指发电控制和发电计划。一般的 ems应包括数据收集、能量管理和网络分析三大功能。广义的 ems 还应包括调度员培训系统 dts功能。ems 主要面向发电和输电系统即大区级电网和省级电网的调度中心,而面向配电和用电系统的综合自动化系统称为配电管理系统。 所属领域的发展状况:随着通信行业的发展,计算机通信技术的发展也越来越迅速。而由于与计算机监控设备的增多 ,仅用 pc机提的两个串口已不能满足通信数量的要求 ,因此我们可以借助多用户卡 ,扩展出八个串口 ,由于多路串行通信在实际的编程中比较复杂。而串口通信实现计算机与

11、其他设备通信具有实现简单 ,使用灵活 ,数据传输可靠等优点 ,因此在工业监控、数据采集和实时监控系统中得到了广泛应用。ems 是以调度自动化为核心内容。随着计算机技术和计算技术的发展,ems 使传统的调度自动化向广义的调度功能一体化乃至全网的综合自动化方向发展。 最初的 ems系统是在 20世纪 70 年代中期产生的。它在数据收集和监控系统 scada 的基础上,将自动发电控制 agc(automatic generation control)和部分网络分析软件功能集成一体,用数字计算机系统实现其全部功能。 计算机硬件系统经历了从初期采用专用控制型计算机到全部采用通用计算机的过程。ems 的计

12、算机软件经历了从专门设计控制程序到采用通用控制系统、专门开发数据库和画面编译系统及形成专门的 ems 支持平台的过程。随着电力系统模型与算法的发展,ems的高级应用软件也逐步完善和丰富。尤其是面向电力市场的环境,电网管理由垄断走向开放,ems 的功能将面临新的改造和更新。 我国的 ems 经历了 70 年代基于专用计算机和专用操作系统的 scada 系统的第一代;80年代基于通用计算机的第二代;90 年代基于 risc/unix 的开放式分布式的第三代。第四代的主要特征是采用 java、因特网、面向对象等技术并综合考虑电力市场环境中的安全运行及商业化运营要求,它将在本世纪诞生。本课题的研究内容

13、: 本文着重探讨用多线程并行的方式通过多个串口进行并行通信。使用多线程进行串行通信的文献已有一些,但都没涉及到多个串口的情况。本文介绍的多串口多线程通信方法,使多个串口并行通信,从而实现多串口多线程的数据采集和能量管理系统操作。研究方法: 1. 查阅多串口多线程技术的相关资料,了解能量管理系统的有关信息,从而明确多串口多线程能量管理系统研究的意义及发展前景。2. 分析多线程技术,及能量管理系统的目前状况,并对该课题的系统结构有深刻的认识,了解每个模块的具体功能。3. 编写多串口多线程能量管理系统的软件程序,了解上位机通信协议和单片机的串行通信方式,并设置相同的参数,从而实现该课题的研究。 研究

14、步骤:首先确定此课题的可研究性,由于多线程技术的运用愈加广泛,而且串口通信实现计算机与其他设备通信具有实现简单 ,使用灵活 ,数据传输可靠等优点,使得此课题的研究更有意义。其次,查找关于多串口、多线程等技术的相关知识,对基于多串口多线程的数据采集和实时监控进行详细的研究,从而达到对整个多线程多串口的能量管理的研究。然后,理清思路,将所有的资料以及自己的认识连贯起来。最后开始写报告。参考文献:1 康灿, 王万玉. 基于串口的信号源与解调器微机控制系统m.微计算机信息, 2005,10,4-6 2 尹德春. 多线程技术在串口通信中的应用m

15、. 微计算机信息, 2005,8,129-130 3 李现勇. visual c+串口通信技术与工程实践m北京: 人民邮电版社, 2002,152-160 4 谭思亮. visual c+串口通信工程开发实例导航m. 北京: 人民邮电版社, 2003,130-1335 郝文化. windows多线程编程技术与实例 m .北京:中国水利水电出版社,2005.6 王苓,苏维均. 基于多线程技术的多串口通信 j. 微计算机信息,2006(3s):253 - 255.7 马忠梅,籍顺心 等.单

16、片机的c语言应用程序设计(第3版).北京:北京航空航天大学出版社,2003.11 isbn7-81077-368-28 李广弟等编著.单片机基础(修订版).北京:北京航空航天大学出版社,2001.7 isbn7-81077-082-99 denver a. serial communications in win32, microsoft windows developer supportz. microsoft, 1995.10 caitao, ju shiguang, qian zhenjin, et al. implement of a web2based and serial port

17、 agent remote demonstrating systems11 gallagher m j, narsi mhan v l. adtest: a test data gen2 erati on suite for ada s oft ware systemsj . ieee transactions on soft2ware engineering, 1997, 23: 473 - 454.指导教师签名: 年 月 日摘 要本论文首先简要介绍了多串口多线程能量管理系统的现状及发展前景,基于串口通信实现计算机与其他设备通信具有实现简单,使用灵活,数据传输可靠等优点,本文从系统的总体结构

18、(由上位机和下位机构成)的设计,分析各部分系统的功能,上位机通过串口控制单片机进行数据采集,以监控其他设备运行情况。下位机将采集的数据再通过串口传回上位机以供存储分析,以实现集中管理和最优控制。然后是通信程序的编写(包括上位机通信程序和下位机通信程序的设计)两个方面,着重介绍实现多串口通信的基本方法,采用vc+6并结合定时器和多线程技术编写,提出了实现多串口通信的方法,使用多个串口并行通信,从而实现大规模的数据采集与高速数据传输操作。该课题的研究在实际运用中也有重大意义,在工业监控数据采集和实时监控系统中得到了广泛的应用。故使得pc机和单片机之间的通信更重要。关键词:多串口;多线程;串口通信;

19、vc+abstract this paper firstly introduces the multi-serial port multi- threading energy management system based on the current situ- ation and development prospect realizes serial communication, computer and other equipment communication is easier, use agile, data transmission and reliable, this art

20、icle from the general structure of the system and by pc (a agencies into) the design, analysis of the parts system function, pc through a serial port control scm in data collection, to monitor the other equipment operation. lower place machine will of the data collected through serial again returned

21、 pc for storage ana- lysis, in order to realize the centralized management and optimal control. then is the communication program written (including pc communication procedures and lower level comp- uter communication program design) two aspects, introduced emphatically realize the basic method of s

22、erial communication more, using vc+ 6 and combined with timer and multi-thread technology, this paper points out many written, the method of serial communication serial parallel communication, use more so as to realize the large-scale data acquisition and the high-speed data trans- mission operation

23、. this topic research in actual use also was significant, in industrial monitoring data acquisition and real-time monitoring system has been widely used. so make pcs and of communication between the microcontroller is more important. key words: multi-serial ; multithread; serial communication; vc +

24、; 目 录1. 绪论111课题的意义112 能量管理系统的发展历史113 多串口多线程技术发展现状及前景22. 系统结构设计22. 1 硬件结构设计2211上位机的工作原理4212下位机的工作原理43.通信软件程序设计53. 1串行通信实现的方法532上位机通信软件的设计12321通信的主程序1532. 2子通信线程1633下位机通信软件的设计184. 串口通信协议1941 单片机的参数设置1942 pc机的串口协议225. 结语25参考文献:15381 绪论1.1课题的意义随着计算机技术的不断发展 ,在线监控在现代工业企业中的需求日趋上升 ,采用串口通信实现计算机与其他设备通信具有实现简单

25、,使用灵活 ,数据传输可靠等优点 ,因此在工业监控、数据采集和实时监控系统中得到了广泛应用。由于监控设备的增多 ,仅用 pc机提的两个串口已不能满足通信数量的要求 ,因此我们可以借助多用户卡 ,扩展出八个串口 ,由于多路串行通信在实际的编程中比较复杂。目前 ,大部分资料在解决多串口通信问题时 几乎都采用多线程编程 ,本文在此基础上提出了解决多路串行通信的方法同时,在一些典型的实时系统和规模较大的数据采集系统中多任务的要求比较普遍。这时系统中需要有线程专门负责数据采集,以实现实时多任务并行的需要。线程是windows9x/2000 的基本执行单位,是window 为程序分配c

26、pu 时间的基本实体。每个进程由一个或多个线程组成,同一进程中的多个线程,可以共享地址空间和所有的处理器资源,避免了用多进程实现并行性的缺陷。1.2能量管理系统的发展历史能量管理系统(energy management system)是以计算机技术和电力系统应用软件技术。为支撑的现代电力系统综合自动化系统,也是能量系统和信息系统的一体化或集成。ems 是以调度自动化为核心内容。随着计算机技术和计算技术的发展,ems 使传统的调度自动化向广义的调度功能一体化乃至全网的综合自动化方向发展。 最初的 ems系统是在 20世纪 70 年代中期产生的。它在数据收集和监控系统 scada 的基础

27、上,将自动发电控制 agc(automatic generation control)和部分网络分析软件功能集成一体,用数字计算机系统实现其全部功能。 计算机硬件系统经历了从初期采用专用控制型计算机到全部采用通用计算机的过程。ems 的计算机软件经历了从专门设计控制程序到采用通用控制系统、专门开发数据库和画面编译系统及形成专门的 ems 支持平台的过程。随着电力系统模型与算法的发展,ems的高级应用软件也逐步完善和丰富。尤其是面向电力市场的环境,电网管理由垄断走向开放,ems 的功能将面临新的改造和更新。 我国的 ems 经历了 70 年代基于专用计算机和专用操作系统的 scada 系统的第一

28、代;80年代基于通用计算机的第二代;90 年代基于 risc/unix 的开放式分布式的第三代。第四代的主要特征是采用 java、因特网、面向对象等技术并综合考虑电力市场环境中的安全运行及商业化运营要求,它将在本世纪诞生。1.3多串口多线程发展现状及前景线程可以定义为进程中的异步代码路径。在支持多线程技术的操作系统中,进程可以包含多个线程,这些线程可以按照与多用户操作系统同时支持多进程相同的方式同时运行。从本质上讲,多线程可以在一个进程内同时运行。在目前的工控系统中,工控仪器如何把可靠数据成功传送给计算机终端已经是一个至关重要的环节,而串行通信以其方便易行,信道成本比较低廉的优势,常常作为计算

29、机与外部串行设备之间的首选数据传输通道,又因为许多设备和计算机都可以通过串口对外设进行控制、检测,串口通讯日益成为计算机和外设进行通讯、获取由外设采集到的监测数据的一个非常重要的手段。而采用单线程进行多串口通信 ,接收数据、显示数据、发送数据串行执行 ,此种方法进行程序设计简单 ,易于调试 ,系统便于管理 ,但系统等待时间长 ,执行效率比较低 ,实时性差 ,适用对实时性要求不高的场合。而开启读写两个线程进行多串口通信 ,数据接收、数据显示、发送数据三者同时执行 ,减少了系统的等待时间 ,使系统具有更好的响应性和高效性。为每个串口开启一个监视线程进行多串口通信 ,使得系统对于多路串行通信进行同时

30、控制 ,这种方法适用于对于多路通信接收所耗费的时间差别较大的情况 ,这时可以减少对某一路接收信息的等待时间 ,如果接收耗费时间相当 。由于串口通信实现计算机与其他设备通信具有实现简单 ,使用灵活 ,数据传输可靠等优点,从而促进了对多串口多线程技术的研究,因此在工业监控、数据采集和实时监控系统中得到了广泛应用。2 系统结构设计分块的系统结构对整个系统来说是相当重要的,而层次结构能将一个复杂的问题分解成若干个简单的问题,然后逐个解决。2.1硬件结构设计该多路串行通信系统由上位机和下位机构成 ,如图 1所示 , pc机多用户卡转换板转换板单片机单片机目标控制器数据采集器数据采集器目标控制器 图1 多

31、串口通信模型上位机为 pc 机,内部加一个moxa 的多串口卡,可扩展出 32 个串口。下位机为单片机构成的监测和数据采集系统。二者通过调制解调器和电话网进行通信连接该框图中,起着重要作用的是rs-232c通信接口电路(即图1中的转换版)。它是上位机和下位机之间信息传递的枢纽,一切数据的传输必需由它完成,上位机直接利用它的rs-232串行口,为此,采用了rs-232串行通信来接收或上传数据和指令。但rs-232信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换。在此电路中,采用max232实现ttl逻辑电平和rs-232电平之间的相互转换。 max232由单一的+5v电源供电,

32、只需配接5个高精度10f/50v的钽电容即可完成电平转换。因此,避免了用1488和1489时必需两路电源的麻烦。转换后的串行信号txd、rxd直接与pc机的串行口连接。如此设计,既可发挥出pc机的强大的计算和显示功能,又可以体现出单片机灵活的控制功能,有利于对现场信号的实时采集、处理和监控。下位机的主要功能是定时采集传感器上的信息并临时保存, 以及根据上位机发出的控制命令执行控制操作和上报数据。一个下位机可以对多个数据点进行监测和控制。通常pc机和单片机之间的通信是通过串行总线rs-232实现的。因此采用一种以max232为核心的通信接口电路。该接口电路适用于由一台pc机与多个8051单片机串

33、行通信的设计,其原理和方法同样适用于pc机与其它单片机之间的串行数据通信2.1.1 上位机的工作原理上位机为 pc机 , pc机通过多用户卡可扩展出八个串口。上位机直接利用rs-232串行口,为此,采用了rs-232串行通信来接收或上传数据和指令.下位机为单片机。与传统的 ttl等数字电路的逻辑电平不同 , rs-232串行通信是美国电气工业协会(eia)与bell公司等一起开发的一种标准通信协议,现在它在终端、外设与计算机中被广泛采用,该标准规定了21个信号和25个引脚,它采用双极性的逻辑信号,0逻辑信号为+3v+12v,1逻辑信号为- 12v - 3v,它的传输速率最大为20kbps,传输

34、距离仅为15m 。由于rs-232主要完成电平移位、转换和信号的反相等,所以它有自己的电平转换和驱动芯片。在系统结构中, rs-232c通信接口电路,它是上位机和下位机之间信息传递的枢纽,一切数据的传输必需由它完成。此电路中,采用max232实现ttl逻辑电平和rs-232电平之间的相互转换。 max232由单一的+5v电源供电,只需配接5个高精度10f/50v的钽电容即可完成电平转换后的串行信号txd、rxd直接与pc机的串行口连接。如此设计,既可发挥出pc机的强大的计算和显示功能,又可以体现出单片机灵活的控制功能,有利于对现场信号的实时采集、处理和监控。rs2232标准规定信号电压在 -

35、12 - 3v和 312v,传号和空号之间至少有 6v的电压差 ,提高了数据传输的可靠性和抗干扰能力。因此 ,单片机与 pc机需要用一个电平转换板 ,要用 max232芯片实现 ttl 电平和 rs-232电平相互转换。因为max232本身带有电源电压变换器,可以把+5v和-5v电压变换成rs-232输出电平所需的+10v和-10v电压,实现rs-232的技术指标,并只需要+5v电源,为串行通信带来好性能。二者通过调制解调器和电话网进行通信连接。2.1.2 下位机的工作原理下位机的作用是将传感器采集到的模拟信号进行 a/d转换并临时保存 ,然后向上位机发送采集到的数字量 ,同时根据上位机发来的

36、控制指令控制目标控制器执行相应的操作;上位机的作用是利用多串口多线程的通信软件,接收下位机采集的数据 ;在 pc机上实时地显示控制变量的状态 ,同时针对发生的情况 ,向下位机发送控制指令;根据系统的不同要求,通过通信软件调整下位机的各种参数。 上位机和下位机这样配合,一起构成一个能实现遥控、遥测、遥调功能的远程控制测量系统。 该系统硬件连接简单,稳定可靠。通信软件采用vc实现,将收集到的各种数据信息保存到数据库中,为后续的数据处理提供了极大的方便。数据库系统采用ms sql server,vc通过odbc 接口对其进行访问。 3 通信软件程序设计3.1 串口通信实

37、现方法开发串口通信软件 可以利用vc+6. 0 , vc+运行时标准通信函数、mscomm 控件、windowsapi函数、第三方类实现串行通信。1) 用vc+运行时标准通信函数实现串口编程利用 c进行异步通信编程 ,其实是对 uart内部寄存器的读出或写入操作。由于运用标准通信函数需要对硬件电路的结构原理非常了解 ,编程比较复杂。2) 用 mscomm控件进行串口编程mscomm控件是微软公司提供的 windows环境下实现串行通信的 activex控件 ,利用它可以非常简单地实现串行通信。它提供了两种处理通信问题的方法:事件驱动方法和查询法。mscomm控件虽然简单易用 ,但在实际测试中也

38、发现了其本身的一些缺点 ,如实时性不高、高速通信时准确率较差和处理速度较慢等缺点;另外 ,由于其本身存在一定的内存泄露 ,在长期运行的系统中有时会造成系统崩溃 。3) 用 windowsapi函数实现串口编程利用 windowsapi函数进行串口程序设计 ,具有很强的灵活性 ,但需要用户详细了解串口程序开发过程和一些复杂的 api函数。在 windows系统中 ,串口和其他通信设备是作为文件处理的。串口的打开、关闭、读取和写入所用的函数和操作文件的函数完全一致。对于不同的应用程序,虽然界面不同,但是如果采用串口与主机之间的通信,对串口的处理方式大致相似,无非就是通过串口收发数据,对于通过串口接

39、收到的数据,交给上层软件处理显示,对于上层要发给串口的数据,进行转发。但在实际编程中,由于采用的通信方式和流控不同,串口设置也不同,这就涉及到 dcb的初始化问题和读写串口等细节问题。串口通信应用程序设计的总体思路(即操作过程)是:首先,确定要打开的串口名、波特率、奇偶校验方式、数据位、停止位,传递给createfile()函数打开特定串口;其次,为了保护系统对串口的初始设置,调用 getcommtimeouts()得到串口的原始超时设置;然后,初始化dcb对象,调用setcommstate() 设置dcb,调用setcommtimeouts()设置串口超时控制;再次,调用setupcomm(

40、)设置串口接收发送数据的缓冲区大小,串口的设置就基本完成,之后就可以启动读写线程了。一般来说,串口的读写由串口读写线程完成,这样可以避免读写阻塞时主程序死锁。对于全双工的串口读写,应该分别开启读线程和写线程;对于半双工和单工的,建议只需开启一个线程即可。在线程中,按照预定好的通信握手方式,正确检测串口状态,读取发送串口数据。在读线程中调用 createevent函数创建一个事件 ,然后调用函数waitcommevent等待窗口事件 , 当检测到 ev rxchar事件时 ,调用 readfile函数将数据读入缓冲区内然后将缓冲区的数据进行处理显示。因为在写线程创建的时候被挂起 ,故要调用写线程

41、函数须要先调用 resumethread 函数恢复线程 , 然后调用writefile函数向串口写入数据。当数据发送成功后 ,调用suspendthread函数挂起写线程。创建读写线程 ,实现串行通信如图 2所示 :打开串口配置串口监视串口状态创建读线程创建写线程数据显示关闭串口接受事件发生数据接收保存通信是否结束终止线程是否结束否否是是否主线程是读线程 图2多线程实现多串口通信打开并配置完串口后 ,开启两个线程 ,一个读线程和一个写线程 ,主线程主要负责将所有串口接收到的数据进行处理显示以及各个子线程的调度和管理 ,读线程负责读取八个串口的数据 ,写线程负责向需要控制的串口中写入数据。在实际

42、应用中向串口写入数据的操作并不频繁 ,所以写线程在刚开始创建时即被挂起 ,当需要向串口发送数据时才激活写线程;当写操作完成后 ,又被挂起 ,以减少系统开销,提高程序的执行效率。串口状态:(1)通信事件:用setcommmask()函数设置想要得到的通信事件的掩码,再调用waitcommevent()函数检测通信事件的发生。可设置的通信事件标志(即setcommmask()函数所设置的掩码)可以有ev_break、ev_cts、ev_dsr、 ev_err、ev_ring、ev_rlsd、ev_rxchar、ev_rxflag、ev_txempty。注意:1对于ev_ring标志的设置,win9

43、5是不会返回ev_ring事件的,因为win95不检测该事件。2设置ev_rxchar,可以检测到字符到达,但是在绑定此事件和readfile()函数一起读取串口接收数据时,可能会出现错误,造成少读字节数,具体原因查看msdn帮助。可以采用循环读的办法,另外一个比较好的解决办法是调用clearcommerror()函数,确定在一次读操作中在缓冲区中等待被读的字节数。(2)错误处理和通信状态:在串口通信中,可能会产生很多的错误,使用clearcommerror()函数可以检测错误并且清除错误条件。(3)modem状态:用setcommmask()可以包含很多事件标志,但是这些事件标志只指示在串口

44、线路上的电压变化情况。而调用 getcommmodemstatus()函数可以获得线路上真正的电压状态。 扩展函数:如果应用程序想用自己的流控,可以使用 escapecommfunction()函数设置dtr和rts线路的电平。通信超时:在通信中,超时是个很重要的考虑因素,因为如果在数据接收过程中由于某种原因突然中断或停止,如果不采取超时控制机制,将会使得i/o线程被挂起或无限阻塞。串口通信中的超时设置分为两步,首先设置 commtimeouts结构的五个变量,然后调用setcommtimeouts()设置超时值。对于使用异步方式读写的操作,如果操作挂起后,异步成功完成了读写,waitfors

45、ingleobject()或 waitformultipleobjects()函数将返回wait_object_0,getoverlappedresult()返回true。其实还可以用getcommtimeouts()得到系统初始值。关闭串口:程序结束或需要释放串口资源时,应该正确关闭串口,关闭串口比较简单,使用api调用closehandle()关闭串口的句柄就可以了。调用方法为:closehandle(hcomm);但是值得注意的是在关闭串口之前必须保证读写串口线程已经退出,否则会引起误操作,一般采用的办法是使用事件驱动机制,启动一事件,通知串口读写线程强制退出,在线程退出之前,通知主线程

46、可以关闭串口。以下是用 windows api函数编写的关键部分的代码:1)添加全局变量。handle hcom8 ;dcb dcb8 ;bool m_createflag;handle m_hthreadread;handle m_hthreadwrite;2)添加按钮打开配置串口 ,并创建读写线程。在按钮单击响应函数中添加以下代码:int n index;cstring strcom8 = "com1" , "com2" , "com3" , "com"com5" , "com6"

47、 , "com7" , "com8"if (!m_createflag) for (n index = 0; n i ndex < 8; n i ndex+ + ) hcom n index = createfile (strcom n i ndex, gener i c_read |gener i c_wr ite, 0, null,open_existi ng,fi le_attr i bute_normal |fi le_flag_overlapped,null) ;/ /设置发送和接收缓冲区setupcomm (hcom n i ndex,

48、 1024, 1024) ;/ /设置串口信息dcb n index . baudrate = 9600;dcb n index . f binary = true;dcb n index . fparity = true;dcb n index . bytesize = 8;dcb n index . parity =oddpar ity;dcb n index . stopbits =onestopb it;setcommstate (hcom n i ndex,&dcb n index) ;setcommmask (hcom n index, ev_rxchar | ev_txe

49、mpty) ;/ /创建读线程m_hthreadread = createthread (null, 0, (lpthread_start_routi ne) threadread, null, 0, null) ;/ /创建写线程m_hthreadwrite = createthread (null, 0, (lpthread_start_routi ne)threadwrite,null, create_suspended,null) ;if (m _ hthreadread = = i nval i d _ handle _value | | m _hthreadwrite = = i

50、nval i d_handle_value)messagebox("读或写线程创建失败! " ) ;return;messagebox("串口已成功打开! " ) ;m_createflag = true;为每个串口创建一个监视线程 ,分别对八个串口进行监视 ,每个通信子线程主要负责对串口进行读操作 ,主线程负责各个子线程的调度和管理以及对串口接收数据的显示 ,并向串口发送数据。windows ce的串口输出 w ritefile函数不能异步操作 ,只有当所有的数据都发送完毕或超过一定时间后 ,w ritefile函数才返回。为保证串口通讯的可靠 ,建议

51、一次发送数据的长度不应大于串口 i/o缓冲区长度的一半。串口输入同计算机其它 i/o相似 ,有 2种方式 2 ,即查询和中断。所谓查询方式是指定时读取串口数据 ,然后对数据进行处理;所谓中断方式是指调用 waitcommevent函数 ,监测 ev _rxchar 事件 ,只有当收到数据时才读取串口 ,否则通信线程挂起。在某些情况下 ,查询方式可以替代中断方式 ,但不能完全替代 ,并且这种替代需要付出一定的代价。一般而言 ,中断方式比较适合下位机与上位机的通信 ,下位机只是响应上位机的指令。而查询方式则适合各种应用模式 ,但某些情况下占用 cpu的时间可能比中断方式多。读取串口数据一般是调用

52、readfile函数。如果简单地直接调用该函数 ,则效率很低。readfile函数的原型如下:bool readfile (handle hfile, / /设备句柄 , nlpvo i d l pbuffer, / /存放读取数据的地址指针 ,outdword nnumber of bytestoread, / /欲读取数据长度的字节数 , nlpdword l pnumber of bytesread, / /读取到的数据长度字节数 ,outlpoverlapped l poverlapped, / /保留,windows ce不支持, i n) ;如果要读取的数据长度小于串口缓冲区中接收

53、到的数据长度 ,则该函数需要延时一定时间 (根据设置而定 )后 ,或串口收到指定长度的数据后才返由以上设计方法比较可知: 采用单线程进行多串口通信 ,接收数据、 显示数据、 发送数据串行执行 ,此种方法进行程序设计简单 ,易于调试 ,系统便于管理 ,但系统等待时间长 ,执行效率比较低 ,实时性差 ,适用对实时性要求不高的场合。开启读写两个线程进行多串口通信 ,数据接收、 数据显示、 发送数据三者同时执行 ,减少了系统的等待时间 ,使系统具有更好的响应性和高效性。为每个串口开启一个监视线程进行多串口通信 ,使得系统对于多路串行通信进行同时控制 ,这种方法适用于对于多路通信接收所耗费的时间差别较大

54、的情况 ,这时可以减少对某一路接收信息的等待时间 ,如果接收耗费时间相当 ,采用第二种方法更好。 在进行多线程编程的时候 ,对于公用变量的访问 ,可能会导致访问冲突 ,严重时还有可能导致死结 ,因此必须解决好线程同步问题 ,用以来协调各个线程的执行次序 ,让某个线程等待某个线程。windows系统提供了四种同步化机制 ,来实现线程间同步: critical section (关键区域 )、semaphore (信号量 )、 mutex (互斥量 )、 event (事件 )。在单 cpu条件下 ,不可能真正实现并行执行 ,线程是一种系统资源 ,不是无代价的 ,建议在使用多线程时要保持理智和谨慎

55、。只有在多线程确实能给用户的应用程序设计带来好处时才使用 ,如果串行的操作可以达到同样的效果 ,则不要使用。 硬件流控:串口通信中的硬件流控有两种,dte/dsr方式和rts/cts方式,这与dcb结构的初始化有关系,dcb结构中的 outxctsflow、 foutxdsrflow、fdsrsensitivity、frtscontrol、fdtrcontrol几个成员的初始值很关键,不同的值代表不同流控,也可以自己设置流控,但建议采用标准流行的流控方式。采用硬件流控时,dte、dsr、rts、cts的逻辑位直接影响到数据的读写及收发数据的缓冲区控制。 软件流控:串口通信中采用特殊字符xon和

56、xoff作为控制串口数据的收发。与此相关的dcb成员是:fout、finx、xoffchar、xonchar、 xofflim和xonlim。具体含义参见msdn帮助。串口读写操作:串口读写有两种方式:同步方式(nonoverlapped)和异步方式(overlapped)。同步方式是指必须完成了读写操作,函数才返回,这可能造成程序死掉,因为如果在读写时发生了错误,永远不返回就会出错,可能线程将永远等待在那儿。而异步方式则灵活得多,一旦读写不成功,就将读写挂起,函数直接返回,可以通过getlasterror函数得知读写未成功的原因,所以常常采用异步方式操作。32 上位机通信软件的实现 win3

57、2 应用程序中的线程有两种类型。一种是工作线程,它不处理窗口消息,常用于后台执行任务。另一种是用户接口线程,主要用来处理用户输入和响应由用户产生的消息与事件。 本系统编写的工作线程用于后台的数据采集和通信。微软基本类库(microsoft foundation class  mfc) 为多线程提供了三个全局函数afxbeginthread() , afxendthread() 和 afxgetthread()对线程进行操作,分别用来创建工作线程,结束工作线程,获得当前线程的指针。因为同一进程的所有线程共享进程的虚拟地址空间,进程中的线程是并行执行的,每个线程占用 cpu 的时间由系统来

温馨提示

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

评论

0/150

提交评论