基于VC++串口通信的设计及实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程论文首页院、系(部)电子信息工程系专业通信工程班级092学号姓名任课教师林元模课程名称软件开发技术论文题目基于VC++串口通信的设计与实现成绩评语签字:年月日复核人意见签字:年月日2基于VC++串口通信的设计与实现陈建福中文摘要:随着现代信息技术的发展以及计算机网络的广泛应用,计算机通信技术已经日趋成熟,串口通信作为一种灵活、方便、可靠的通信方式,被广泛应用于工业控制中,用PC机对工程实现实时监控,通常要求PC机能在用户界面上具有数据采集、数据处理以及控制信号的产生与传输等功能。同时串行通信还应用于交通控制、分布数据采集系统、通信距离扩展、电力系统数据采集与控制系统、高速公路收费系统、远程控制、保密通信系统和教学实验等等。在实践中,使用VisualC++串口控件MSComm实现通信的方法比调用API动态链接库的方法更加方便、快捷,而且用较少的代码可以实现相同的功能,从而大大提高了编程效率,也减少了因编程不当而导致的系统不稳定。采用C++的MFC思路的方法较为繁琐,不仅要了解Win32串行通信的API函数,还要掌握多线程编程,但控制灵活,既涉及到底层编程、纠错能力强,又有C++风格,一般多为专业C++开发人员所采用。关键词:串行通信单线程多线程c++1.引言串口通信在工业中应用十分广泛。现在尽管有很多速度更快、效率更高的端口(如USB接口)的出现,但是这些新的端口可以通过转换电路实现与传统串口通信的转换,从而灵活的满足工业生产多方面的需求。因此串口通信的未来会更加美好。在本论文中,讨论了使用VC++的开发环境实现两台PC机间的串口通信。就是通过一个MSComm控件,用一个串口线将两台机子间的串口连接起来,从而建立物理连接进行字符仿真终端的测试。而使用WinAPI进行串口通信不像使用MSComm控件那么容易,需要设置多个参数。2.串行接口串行接口一般包括RS232/422/485,其技术简单成熟,性能可靠,价格低廉,所要求的软硬件环境或条件都很低,广泛应用于计算机及相关领域,遍及调制解调器(Modem)、串行打印机、各种监控模块、PLC、摄像头云台、数控机床、单片机及相关智能设备,甚至路由器也不例外(通过串口设置参数)。2.11串口通信的基本概念终端与其他设备(例如,其他终端、计算机和外部设备)通过数据传输进行通信。数据传输可以通过两种方式进行,即并行通信和串行通信。(1)并行通信。在计算机和终端之间的数据传输通常是靠电缆或信道上的电流或电压变化实现的。如果一组数据的各数据位在多条线上同时被传送,这种传输方式称为并行通信(2)串行通信。3串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制的0、1为最小单位逐位进行传输。2.12串行通信的工作模式通过单线传输信息是串行数据通信的基础。数据通常是在两个站(点对点)之间进行传送,按照数据流的方向可分成3种传送模式:单工、半双工和全双工。2.13异步传输和同步传输串行传输中,数据是一位一位按照到达的顺序依次传输的,每位数据的发送和接收都需要时钟来控制。发送端通过发送时钟确定数据位的开始和结束,接收端需要在适当的时间间隔对数据流进行采样来正确地识别数据。接收端和发送端必须保持步调一致,否则就会在数据传输中出现差错。为了解决以上问题,串行传输可采用以下两种方法:异步传输和同步传输。3.RS-232C串口通信标准目前RS-232C已成为数据终端设备(DataTerminalEquipment,简称DTE,如计算机)和数据通信设备(DataCommunicationEquipment,简称DCE,如Modem)的接口标准。RS-232C是PC与通信工业中应用最广泛的一种串行接口,在PC上的COM1、COM2接口,就是RS-232C接口。利用RS-232C串行通信接口可实现两台个人计算机的点对点的通信;通过RS-232C接口可与其他外设(如打印机、逻辑分析仪、智能调节仪、PLC等)近距离串行连接;通过RS-232C接口连接调制解调器可远距离地与其他计算机通信;将RS-232C接口转换为RS-422或RS-485接口,可实现一台个人计算机与多台现场设备之间的通信。3.1接口连接器由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25和DB-9各种类型的连接器,其引脚的定义也各不相同。现在计算机上一般只提供DB-9连接器,都为公头。相应的连接线上的串口连接器也有公头和母头之分,如图3.1所示。公头母头图3.1公头与母头串口连接器3.2串口电气特性有两点需要进行说明。首先,RS-232-C标准最初是为远程通信数据终端设备DTE(DataTerminalEquipment)与数据通信设备DCE(DataCommunicationEquipment)而制定的,因此这个标准的制定,并未考虑计算机系统的应用要求。但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口)与终端或外设之间的近端连接标准。显然,这个标准的有些规定和计算机系统是不一致的,甚至是相矛盾的。有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。4EIA-RS-232C对电气特性、逻辑电平和各种信号线功能都作了规定。在TXD和RXD上:逻辑1为-3V~-15V,逻辑0为+3V~+15V。在RTS、CTS、DSR、DTR和DCD等控制线上:信号有效(接通,ON状态,正电压)为+3V~+15V;信号无效(断开,OFF状态,负电压)为-3V~-15V。以上规定说明了RS-232C标准对逻辑电平的定义。4.串行通信控件MSCommMSComm控件全称为MicrosoftCommunicationsControl,是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它既可以用来提供简单的串行端口通信功能,也可以用来创建功能完备的、事件驱动的高级通信工具。MSComm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API函数,而且在VisualBasic、VisualC++、Delphi等语言中均可使用。MSComm控件提供了一系列标准通信命令的使用接口,使用它可以建立与串行端口的连接,通过串行端口连接到其他通信设备(例如调制解调器),发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。利用它可以进行诸如拨打电话、监视串行端口的输入数据乃至创建功能完备的终端程序等。4.1MSComm控件处理通信的方式MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通信功能。它提供下列两种处理通信的方式。(1)事件驱动方式该方式相当于一般程序设计中的中断方式。当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。它是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时程序会希望得到通知,例如,在串口接收缓冲区中有一个字符到达或一个变化发生时,程序都可以利用MSComm控件的OnComm事件捕获并处理这些通信事件;OnComm事件还可以检查和处理通信错误。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。在程序设计中,可以在OnComm事件处理函数中加入自己的处理代码,一旦事件发生即可自动执行该段程序。这种方法的优点是程序响应及时,可靠性高。(2)查询方式在程序的每个关键功能之后,在用户程序中设计定时或不定时的查询,通过检查CommEvent属性的值来查询事件和错误,从而作出相应的处理。在进行简单应用程序设计时可采用这种方法。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为惟一等待接收的字符是调制解调器的“OK”响应。4.2MSComm控件的通信步骤通常我们以下面的步骤来使用VisualC++的MSComm控件进行串口编程。(1)在建立的程序工程中插入MicrosoftCommunicationControl控件。(2)添加MSComm控件ID的控制变量(或者对象)。(3)对串口进行初始化,设置MSComm控件的属性。(4)打开串行端口,打开通信资源。(5)编写串口发送等其他代码,将要发送的信息写入串口。(6)添加串口事件的消息处理函数OnComm()函数,在函数中根据应用需要,编写数据处理代码。(7)读取串行端口信息,当串口发生EV_RXCHAR(接收到字符并放入了输入缓冲区)消息后读取串口,数据传输错误处理,字符串处理如回车符、空格并相应转化成数据等。5(8)使用完MSComm通信对象后,将通信端口关闭,即关闭事件,清除通信事件,丢弃通信资源并关闭。遵循以上的步骤,可以构建自己的串行通信传输系统5.利用MSComm控件的串口通信程序设计5.1建立支持串口控件的对话框应用程序MSConnTest(1)启动VC++6.0编程环境,建立一个基于对话框的MFC应用程序“MSCommTest”,在项目中插入“MSComm”控件。(2)选择“Project”“AddToProject”“CommponentsandControls”菜单命令,在弹出的对话框中双击“RegisteredActiveXControls”项,则所有注册过的ActiveX控件出现在列表框中,如图5.1所示。图5.1插入MSComm控件对象(3)选择“MicrosoftCommunicationsControl,version6.0”,单机“Insert”按钮将其插入到项目中来,接受默认的选项。这时在“ClassView”视窗中就可以看到“CMSComm”类了,并且在控件工具栏Controls中出现了电话图标,即MSComm控件图标,如图5.2所示。图5.2具有MSComm控件的工具栏图5.3添加了MSComm控件的对话框资源(4)在“ResourceView”选项卡中切换到IDD_MSCOMMTEST_DIALOG对话框,将MSComm控件利用鼠标拖放到对话框的资源中,如图5.3所示。(5)下面我们利用“ClassWizard”定义CMSCommTestDlg类,为IDD_MSCOMM1添加控制变量m_ctrComm,这时将会在MSCommTestDlg。h头文件中自动加入如下内容:(6)接着向对话框中添加两个编辑框,一个用于接收显示数据,IDC_EDIT_RXDATA;另一个用于输入发送数据,ID为IDC_EDIT_TXDATA。再添加另一个按钮将其ID设为IDC_BTN_SEND。同时修改接收编辑框的“PropertiesStyles”,选择“Multiline”和“VerticalScroll”选项。之后,打开“ClassWizard”“MemberViariables”选项卡,选择“CMSCommTestDlg”类,为IDC_EDIT_RXDATA添加Cstring变量m_strTXData。m_strRXData变量和m_strTXData变量分别用来存放接收和发送的字符数据。此时程序运行结果如图5.4所示。6图5.4具有MSComm控件的程序运行结果5.2具有串口消息处理函数的应用程序在5.1的基础上,我们继续添加串口事件消息函数OnComm()。首先,打开“ClassWizard”“MessageMaps”,选择类“CMSCommTestDlg”,选择“IDC_MSCOMM1”。双击事件OnComm,在弹出的对话框中将函数名修改为OnMSComm,此时打开MSCommTestDlg.cpp文件,在OnMSComm函数中添加事件响应代码。如代码5.1所示是用来处理串口消息事件的。当串口接收到数据时,就会产生一个串口接收数据缓冲区中字符的消息事件,OnMSComm函数就会执行。我们可以在OnMSComm函数

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功