




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
山东建筑大学实验报告学院: 信电学院 班级:电信112 姓名: 王丙全 学号: 2011081245 课程:应用软件综合实验 实验日期:2014年 12月25日 成绩: 摘要串口叫做串行接口,也称串行通信接口,按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。USB是近几年发展起来的新型接口标准,主要应用于高速数据传输领域。串口通讯因具有简单,组网方便的特点,在设备通讯中广泛使用。普通计算机中采用的是RS232通用通讯接口,通过此接口,计算机简单方便地与外围设备进行通讯。在单片机控制领域,设备与设备之间的通讯常用串行通讯方式,常采用的硬件通讯网络为RS485/RS422/RS232等。在设备开发或设备维护过程中,常常需要对设备通讯过程进行数据检测,用于判断通讯是否正常。实现这个调试过程,需要计算机通讯软件对通讯过程进行监控,数据采集,进行数据分析。关键词: 串行通信,串口调试,SerialPort类1 设计目的和要求设计目的现在的产品若要自动化,一定要提供通道与计算机进行通信,而最简单的方式就是在产品内部少上一颗单芯片,利用单芯片上的串行通信功能进行自动化的工作,由于计算机中的串口是必备的通道,且以价格及技术上来说是最能被厂商所接受的,因此,市面上很多自动化产品也都加上了串行通信的功能,从而扩大产品的使用领域,使实现技术变得简单化。与任何一个自动化设备进行联机,最好是先对该系统的通信功能先进行测试。通过串行通信的控制,通常可以将产品内部开放的功能做一个先期的测试工作,确定没有问题了,然后再对系统进行程序的实现,这是一个比较保险的做法,免得在系统设计到设计到一半的时候发现最重要的通信功能有问题,浪费了大量的宝贵时间。设计要求本题目要求完成一个RS232串口的调试软件。1可实时显示收到的字节,可以文本和16进制两种方式现实。2可以发送任意数值的数据。3可设置串口的工作方式。4其他功能。2 设计内容2.1串口容器设计串口容器组件主要提供了一个统一管理已经创建的串口的空间,并提供了多线程缓冲处理机制,能够应对多个串口的高速数据收发工作。包括的主要功能有:(1) 提供了创建、更改和释放RS232串口的接口函数(2) 对多个串口的数据接收并赋值相同的回调函数(3) 接收数据的多线程缓冲功能,并提供线程数量设置接口(4) 数据流量侦测功能2.2串口创建管理界面设计主要功能包括:(1) 计算机可用串口自动侦测(2) 新建串口功能(串口名、波特率、数据位、停止位、奇偶校验)(3) 单独控制串口停止运行(4) 单独修改串口配置(5) 删除串口2.3数据发送接收界面设计数据发送接收界面分为两部分内容:数据接收界面和发送界面。系统采用大比例的接收现实区和发送区,这种设计方式不仅有效地增加了显示区的可视区域,也符合用户常规软件的操作习惯。包括的主要功能有:(1) 显示接收时间(2) 显示接收数据的通讯标识(3) 十六进制显示接收数据(4) 可单独或同时向多个串口发送数据(5) 十六进制发送数据(6) 发送数据自动记录(7) 自动发送功能2.4数据存储设计主要功能有:(1) 数据保存缓冲功能(2) 自动建立存储目录结构(3) 自动保存接收数据(4) 数据另存功能2.5串行通信协议在串行通信过程中,数据和联络信号时使用同一根信号线来传送的,所以收发双方必须考虑解决一下问题:1)双方约定以何种速率进行数据的发送和接收(波特率);2)约定采用何种数据格式(帧格式),如果包含控制信息,那么它的定义是什么;3)接收方如何得知一批数据的开始和结束(帧同步);4)接收方如何从位流中正确地采样到位数据(位同步);5)接收方如何判断收到数据的正确性(数据校验);6)收发出错时如何进行处理。显然,收发双方必须遵守一些共同的通信协议5(或称为通信控制规程),才能解决以上问题。在传输数字信号时接收端必须有与数据位脉冲具有相同频率的时钟脉冲来逐位将数据读入寄存器,这种在接收端使数据位与时钟脉冲在频率和相位上保持一致的机制称为同步。根据在接收端获取同步信号的方法不同,同步方式可分为位同步方式和字符同步方式,也称为同步传输方式和异步传输方式。2.5.1同步通信同步通信即位同步方式,同步通信即位同步方式,是利用编码机制把时钟信息和数据放在一起发送给接收端,以保证每一位的正确性,但这种同步方式没有办法来区分字符之间的界限,从一个二进制位串中提取正确的字符信息。为此,在位同步的基础上,需要发送方在一组数据前附加一个或两个称为同步字符的特殊约定代码,去通知接收器串行数据第一位到达的时间。为了确保正确提取字符,字符之间不能有类似于异步传输那样的间隙,必须以连续的形式发送,每个时钟周期发送一位数据,数据信息后是两个错误校验字符。接收方在收到同步字符后,立即开始按事先约定的长度(5、6、7或者8位)从位串中逐个提出字符。同步通信采用的同步手段和同步字符的个数不同,字符的数据格式叫做单同步数据格式,数据格式。存在着不同的格式结构,具有一个同步有两个同步字符的数据格式叫做双同步异步通信中按字符成帧(从起始位到停止位)进行传送,而同步传送则采用数据块或帧进行传送6。图中所示为某同步协议的帧格式,在帧开头有同步字符SYNC,同步字符的格式和个数根据需要确定,其作用是通知接收器“消息到达”,并且接收器和发送器需要开始同步。同步字符后的第一个数据是消息头或称为报头,它包含有助于接收器如何处理后续数据的控制信息,如一帧内的字符计数等,再以后是以字符或者比特为单位的消息编码,也称为报文,最后是校验字符,常用CRC循环冗余校验码,校验字的作用是检测整个数据块在传送过程中是否有差错。同步通信的数据传输效率较异步通信高,传输速率也较高但是同步传送不仅要保持每个数据字符内各位以预定的固定时钟频率传送,而且还要求整个数据块内的位都按照预定的固定时钟频率传送,此外数据块之间不允许有间隙,若有间隙必须用同步字符填充。收发双方时钟严格同步是同步通信的基本要求,在技术上,这种要求必须用硬件从接收到的数据中分离出同步时钟来实现,所以硬件电路复杂是同步通信的缺点。2.5.2异步通信串行异步通信即异步传输方式是以字符为单位进行传输,其通信协议是起止式异步通信协议。一个字符正式发送之前,先发送一个起始位,宽度为1位的低电平;结束时发送一个宽度为l位,15位或者2位的高电平作为停止位;数据位为5-8位,可在数据位内设1位奇偶校验位,字符之间可以有空闲位,它们都是高电平。异步传输过程中的起始位和停止位起着重要的作用:起始位标志着每一个字符的开始,停止位标志着每一个字符的结束。由于串行通信采用起始位为同步信号,接收端总是在每个字符的头部即起始位处进行一次重新定位,保证每次采样对应一个数据位。所以异步传送的发送器和接收器不必用同一个时钟,而是各有自己的局部时钟,只要同一标称频率即可。异步传送以字符为单位,当接收方收到起始位之后,只要在一个字符的传输时问内能和发送器保持同步,就能完成正确的接收。如果接收器和发送器的时钟略有误差,两个字符之间的停止间隔将为这种误差提供一种缓冲,因此,异步通信方式允许有一定的频率漂移,一般发送器和接收器双方各自用晶振产生时钟即可满足要求,收发双方系统时钟的误差容限为5对时钟同步的要求不太严格,这是异步通信的突出优点,但是异步通信要求每个字符传送都有起始位和停止位,因此控制信息至少占总信息的20,这部分的额外开销使得传送效率相对比较低。2.6串行通信的基本参数串口的通信方式是将字节拆分成一个接着一个的位后再进行传输。接到此电位信号的一方将此一个一个的位组合成原来的字节,如此形成一个字节的完整传输。在传输进行过程中,双方明确传输信息的具体方式,否则双方就会没有一套共同的译码方式,从而无法了解对方所传输过来的信息的意义。因此双方为了进行通信规则,这个共同的规则就是串口的初始化9。串口的初始化必须对以下几项参数进行设置。2.6.1 波特率串行通信的传输受到通信双方设备性能及通信线路的特性所控制,收发双方必须按照同样的速率进行串行通信,即收发双方采用同样的波特率。我们通常将传输速度称为波特率,指的是串行通信中每秒所传输的数据位数。单位是“波特每秒”(bps)。国际上规定了标准波特率系列值,最常用的标准波特率有110,300,600。1200,2400,4800,9600和19200。在进行串行通信时,根据传送的波特率来确定发送时钟和接收时钟的频率。异步传送过程中,每发送一位数据的时间长度由发送时钟决定,每接收一位数据的时间长度由接收时钟测定,它们和波特率有如下关系:时钟频率=n*波特率;式中n为波特率系数或者波特率因子,它的取值可以为l,16,32或64。2.6.2数据的传输单位一般串口所传输的数据时字符型,若用来传输文件,则会使用二进制的数据形式。当使用字符型时,工业界使用到的ASCII字符及JIS字符;ASCII码使用了8位形成一个字符,而JIS码则以7位形成一个字符。欧美的设备多使用8位的字节,而日本的设备多使用7位为一个字节。因此只要7位就可以将ASCII码的0127码表达出来(27=128,共有128种组合方式),所有的可见字符也在此范围内,所以只要7个数据位就够了。不同的情形下(根据所使用的协议),会使用到不同的传输单位。使用多少位合成一个字节必须先行确定。2.6.3 起始位与停止位由于异步串行传输中没有使用同步时钟作为基准,因此接收端不知道发送端何时将进行数据的传输。而当发送端准备要开始传送数据时,发送端会在所送出的字符前后分别加上高电位的起始位(逻辑0)及低电位的停止位(逻辑1),它们称为起始位和停止位。当发送端要开始传送数据时,便将传输线上的电压由低电位提升至高电位,而当传送结束后,再将电压降至低电位。接收端会因为起始位的触发(因电压由低电位升至高电位)而开始接收数据,并因停止位的通知(因电压维持在低电位)而确切知道数据的字符信号已经结束。加入了起始位及停止位也比较容易达到多字符的接收能力,起始位固定为一位,而停止位则有1、1.5、2位等多种选择,由通信双方共同遵守的通信协议来控制和识别。2.6.4 校验位为了防止传输过程中的干扰造成数据错误,数据帧中可以加入奇偶校验位作为检查机制,校验位是用来检查所传输数据正确性的一种核对码,其中又分为奇校验(Odd Parity)和偶校验(Even Parity)两种,分别是检查字符码中1的数目是奇数或是偶数以偶校验为例,A的ASCII码是41H,即01000001x,其中1的数目是2,因此校验位是0,使1的数目保持偶数。同样的,采用奇校验时,A的校验位是1,使l的数目保持为奇数。将传送字符按照上述说明组合起来之后,就形成了传输时每个字符的数据格式,串行通信字符的数据格式如下所示:起始位+传送字符+校验位+停止位。3串口调试软件的实现3.1串口调试软件的编程实现过程 在本节中将介绍在Visual Studio 2005环境下,使用C#语言编程实现串口调试软件的过程,在前文中我们介绍过了使用SerialPort类实现串口通信的一般流程是设置通讯端口号及波特率、数据位、停止位和校验位,再打开端口连接,发送数据,接收数据,最后关闭端口连接这样几个步骤。数据接收的设计方法在这里比较重要,采用轮询的方法比较浪费时间,在Visual Basic中的延时方法中一般会调用API并用DOEvents方法来处理,但程序不易控制,所以采用DataReceived事件触发的方法,合理的设置ReceivedBytesThreshold的值,若接收的是定长的数据,则将Received Bytes Threshold设为接收数据的长度,若接收数据的结尾是固定的字符或字符串则可采用ReadTo的方法或在DataReceived事件中判断接收的字符是否满足条件,符合条件的就进行接收。SerialPort类读取数据的许多方法是同步阻塞调用,尽量避免在主线程中调用,可以使用异步处理或线程间处理调用这些读取数据的方法。由于Data Received事件在辅线程被引发,当收到完整的一条数据,返回主线程处理或在窗体上显示时,要注意跨线程的处理,C#可采用控件异步委托的方法Control.BeginInvoke及同步委托的方法Invoke。图5.1示出了串口调试软件编程实现的流程图。程序开始初始化串口输入设定数据有数据返回吗向串口发送数据触发Data Received事件,处理数据返回数据正确?程序结束是是否否显示错误信息提示打开串口关闭串口图5.1 串口调试软件算法流程图附录给出了串口调试软件的C#编程实现的源代码,这里就不再赘述。3.2串口调试软件界面的设计串口调试软件界面是在Visual Studio 2005(以下简称VS2005)编程环境下设计的。VS2005是微软公司开发的面向对象、高度封装的跨平台C#图形用户界面开发平台,它能提供一个开发商业级别,多平台应用的软件环境。首先新建一个项目,然后生成一个Form面板,调整到适当的大小,再在其上放置Label控件、Button控件、TextBox控件、ComboBox控件、RadioButton控件、RichTextBox控件、CheckBox控件等。Label控件实现对TextBox控件和ComboBox控件的注释说明。Button控件通过鼠标点击发出命令,计算机执行相应的动作;ComboBox控件通过鼠标点击弹出选择的项目列表,用户选择当前需要的选项,在这里是主要实现串口号、波特率、数据位、停止位、奇偶校验位的选择;TextBox控件和RichTextBox控件实现读写字符串,也就是输入用户需要发送的信息以及接收对方发送的信息。界面编写完成后,点击VS2005工具栏中的【调试】,然后在下拉菜单中选择【启动调试】便进入调试过程,调试通过后便会在项目中生成.exe应用程序文件。3.3 串口调试软件的测试当串口调试软件设计好之后,接下来就进入了软件测试阶段,主要是对该软件的功能进行测试,看是否达到了预期的要求。单机测试方式如果单机仅仅拥有一个RS232串口,可以将RS232串口的第2引脚(RD)与第3引脚(TD)短路,那么由第3引脚的输出信号就会被发送到第2引脚而送到同一串行端口的输入缓冲区,即可将数据读入,进入测试过程。如果单机拥有COM1和COM2两个RS232串口,那么就以全握手连接方式将两个串口连接,进入测试过程。如果单机上一个串口也没有,或者串口被其他设备所用,由于串口具有独占性,如果被其他设备占用,那么就不能由我们编写的程序来控制。这时可以使用第三方软件提供的虚拟串口,来解决这个问题。近距离两台设备测试方式如果要在两台PC计算机之间,一个嵌入式系统主控机和一台PC计算机之间,或者上位机和下位机之间进行串口通信,那么就选择全握手方式将两个RS232串口连接,进入测试过程。远距离两台通信测试方式RS232标准规定,若不使用Modem,在码元畸变小于4%的情况下,DTE和DCE通信端之间最大传输距离为15m,如距离较远,须附加调制解调器(Medom),其连接方式如图5.2所示。图5.2 远距离串口通信连接方式当调试时,用户根据实际情况选择相应的串行端口,设定所需的波特率(在此选用9600),再设置奇偶校验位、数据位、停止位;点击“打开串口”按钮便可以进行数据的发送和接收,当在发送文本框中输入数据,点击“发送”按钮便可以将数据发送到接收方;或者对方发送数据,可以在接收文本框中看到接收到的数据。可以通过“清空接收区”按钮清除接收的数据。此外,还可以在“自动发送周期”文本框中输入自动发送的周期(单位是毫秒),然后勾选“自动发送”按钮,则该软件就可以按照事先设定好的发送周期,自动向接收方发送数据。实践证明,本软件具有以下特点:1操作简单,界面友好,使用者完成参数设置后,即可进行串口调试。2功能全面。软件可以读串口数据,可以按照周期自动发送数据或者只发送一次数据。此外软件还有完善的显示方式,包括二进制,十六进制等,以及在接收区内换行显示,和一键清空接收区等功能。3可扩展性强。在VS2005中可以对本软件进行功能上扩展,例如添加新的功能按钮以实现新的功能16山东建筑大学实验报告学院: 信息与电气工程学院 班级:电信112 姓名: 王丙全 学号: 2011081245 课程:应用软件综合实验 实验日期:2014年 12月 25 日 成绩: 总结与致谢本文以串行通信技术和串口工作原理为基础,进行了串行数据传输协议设计的研究,在此基础上,结合了C#SerialPort类使用方法和Visual Studio 20005开发工具,设计串口调试软件,并研究了通用串口通信程序的设计方法,以期解决工程实践中存在的串行通信协议不可见和相对阻戴所带来的问题。文中详细介阐述了在Visual Studio 2005编程环境下串口调试软件的具体实现方法。通过这次综合实验,我发现自己学到很多有用的东西。从整个程序流程图到C#编程再到Windows应用程序界面设计,以及上下位机的通讯,所有这些让我真正的了解到了一个产品设计的实现过程。为了使串口调试软件更加人性化,我还在原先的基础上添加了清空接收区数据和换行显示的功能,使得整体的方案得到了新的提高。虽然整个过程相当艰辛,但是总的来说,看到实物的效果时,还是很开心的,庆幸自己曾经的付出,是种别样的幸福!当然,实验还有很多需要改进与提高的地方,比如在发送字符串数据的基础上增加发送中文汉字的功能,这样串口调试软件就具备了一个聊天的程序的功能,此外还可扩展它的数据接收功能,将数据保存为.xls或.txt文件,这样可以方便用户对数据的查看、分析和处理。附录串口调试软件的C#源代码Private Sub Form_Load() MSComm1.Settings = 9600,n,8,1 波特率9600bit/s,无校验,8位数据,1位停止位 MSComm1.CommPort = 4 设定串口,1为com1,这里根据自己对应的com序号 MSComm1.InBufferSize = 8 设定返回接收缓冲区的大小,以字符为单位 MSComm1.OutBufferSize = 2 If MSComm1.PortOpen = True Then MSComm1.PortOpen = False 关串口 MSComm1.RThreshold = 4 设置并返回产生oncomm 事件的字符数,以字符为单位 MSComm1.SThreshold = 1 为1,传输缓冲区(发送)的每一个字符都会使MSCOMM控件产生OnComm事件 MSComm1.InputLen = 0 设置从接收缓冲区读取的字数,为0读取整个缓冲区 MSComm1.InputMode = comInputModeText 以文本方度接收 If MSComm1.PortOpen = False Then MSComm1.PortOpen = True MSComm1.InBufferCount = 0 Me.Caption = 温度Text1.Text = 00.0End SubPrivate Sub MSComm1_OnComm() Dim rec As String Select Case MSComm1.CommEvent Case comEvReceive rec = MSComm1.Input Text1.Text = rec MSComm1.InBufferCount = 0 清空接收缓存区 End SelectEnd SubOption Explicit Dim a As Integer Dim BytReceived() As Byte Dim strData As String Dim lenInput As Integer Dim bytSendByte() As Byte 发送二进制数据 Dim strSendText As String 发送文本数据 Dim blnAutoSendFlag As Boolean Dim openFlag As BooleanPrivate Sub cmdOpen_Click() 打开关闭端口 If openFlag Then cmdOpen.Caption = 打开串口 MSComm1.PortOpen = False 打开端口 Shape1.FillColor = vbRed Label1 = COM & a & 关闭 Else OpenPortNum cmdOpen.Caption = 关闭串口 Shape1.FillColor = vbGreen Label1 = COM & a & 打开 End If openFlag = Not openFlagEnd SubPrivate Sub cmdSendASc_Click() 文本发送 Dim sj_Txt As String sj_Txt = TxtSend If MSComm1.PortOpen = True Then MSComm1.Output = sj_Txt End IfEnd SubPrivate Sub cmdSendHex_Click() 16进制发送 Dim sj() As Byte Dim sj_Txt As String Dim i As Integer sj_Txt = TxtSend If Len(TxtSend) Mod 2 = 0 And Len(TxtSend) 0 Then 检验16进制字符串长 ReDim sj(Len(sj_Txt) / 2 - 1) For i = 0 To Len(sj_Txt) - 1 Step 2 sj(i / 2) = Val(&H & Mid(sj_Txt, i + 1, 2) Next If MSComm1.PortOpen = True Then MSComm1.Output = sj Else MSComm1.PortOpen = True Shape1.FillColor = vbGreen MSComm1.Output = sj End If Else MsgBox (格式不对!) End IfEnd Sub字符串表示的十六进制数据转化为相应的字节串,返回转化后的字节数Private Sub OpenPort
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能切割设备创新创业项目商业计划书
- 政务体育管理系统创新创业项目商业计划书
- 智慧检察解决方案创新创业项目商业计划书
- 桃花酿制酒创新创业项目商业计划书
- 家政人员薪酬与福利方案创新创业项目商业计划书
- 岗前安全培训心得
- 医院年终工作总结情况
- 偏(均)三甲苯装置操作工国庆节后复工安全考核试卷含答案
- 安利代理合同(标准版)
- 天猫店租赁合同(标准版)
- 第5课 森さんは七時に起きます 课件高中日语新版标准日本语初级上册
- 2024年共青团入团积极分子考试题库(附答案)
- 质量管理五大工具之一SPC
- (正式版)JBT 14587-2024 胶体铅酸蓄电池 技术规范
- 医疗健康知识科普活动总结
- 武汉过早文化研究报告
- 微生物室臭氧灭菌验证方案与报告
- 专卖店店长工作手册知识点梳理汇总
- 企业车辆管理系统解决方案
- 部编小学语文《口语交际》解读
- 医院培训课件:《医务人员职业暴露与防护》
评论
0/150
提交评论