毕业设计(论文)-基于VB6.0的MSComm通信方法研究.doc_第1页
毕业设计(论文)-基于VB6.0的MSComm通信方法研究.doc_第2页
毕业设计(论文)-基于VB6.0的MSComm通信方法研究.doc_第3页
毕业设计(论文)-基于VB6.0的MSComm通信方法研究.doc_第4页
毕业设计(论文)-基于VB6.0的MSComm通信方法研究.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

毕毕业业设设计(论计(论文)文)设计设计(论文论文)题目:基于题目:基于VB6.0VB6.0的的MSCommMSComm通信方法研究通信方法研究2008年6月15日I目目录录摘要.IIAbstract.IV第一章引言.1第2章串口通信及MSComm控件简介.32.1串口通信简介.32.2串口通信的参数及RS-232标准接口.3第3章利用MSComm控件对数据进行处理.73.1MSComm控件.73.1.1MSComm控件的属性.73.1.2CommEvent属性.83.2使用MSComm控件进行数据处理.93.2.1定长数据的处理.93.2.2不定长数据的处理.113.3.3使用MSComm发送数据包.13第4章利用MSComm控件进行通信研究及实例.154.1网络传输协议的介绍.154.1.1网间协议IP.154.1.2传输控制协议TCP.154.1.3UDP(UserDatagramProtocol)用户数据报协议.164.2使用MSComm控件进行通信的步骤和方法.184.3用MSComm实现双机通信.254.4利用MSComm控件实现PC机和单片机的串口通信的研究.29总结.33参考文献.35致谢.37II基于VB6.0的MSComm通信方法研究摘要串口通信因其通信线路简单、使用灵活方便,在许多领域应用广泛。本文从计算机的多种通信协议和串口通信的概念入手,详细介绍了利用VB6.0的通信控件MSComm进行串行通信的原理。VB6.0功能强大且易于掌握,它提供了一种优秀的可视化编程环境,本文主要使用了VB60中的MSComm控件实现了对数据的处理,PC机和Modem的通信,双机通信,PC机和单片机的通信。通过实际例子说明了如何实现PC机之间数据的串行通信。使用PC机和单片机之间进行了简单通信。介绍了使用MSComm控件发送数据、文本文件等多方式串口通信的方法,并给出了具体程序和解释。关键词:RS一232,VisualBasic6.0(VB6.0),MSComm控件,串口通信,单片机IIIIVCommunicationResearchBasedontheMSCommVB6.0AbstractBecausetheserialportcorrespondenceitscommunicationlinkissimpleusenimbleconvenientiswidespreadinmanydomainapplications.ThisarticleobtainsfromcomputersmanykindsofcommunicationprotocolandtheserialportcorrespondencesconceptintroducedindetailcontrolsMSCommusingtheVB6.0correspondencetocarryontheserialcommunicationtheprinciple.TheVB6.0functionidableandeasytograspitprovidedonekindofoutstandingvisualizationprogrammingenvironmentthisarticlehasmainlyusedinVB6.0MSCommtocontroltorealizetothedataprocessingPCmachineandtheModemcorrespondencecorrespondencePCmachineandmonolithicintegratedcircuitscorrespondence.ExplainedthroughtheactualexamplehowtorealizebetweenthePCmachinedataserialcommunication.UsedbetweenPCmachineandthemonolithicintegratedcircuithascarriedonthesimplecorrespondence.IntroducedusesMSCommtocontrolthetransmissiondatathetextdocumentandsoonmulti-wayserialportcorrespondenceandhasgiventheconcreteprogramandtheexplanation.Keywords:RS一232,VisualBasic60,MSCommcontrol,multimode,serialcommunicationprogram,single-chipcomputer-1-第1章引言随着计算机技术特别是单片机技术的发展,串口通信在诸多领域得到了广泛的应用计算机可以通过串口来获取设备的各种数据,然后利用计算机强大的功能进行处理,再根据处理的结果发送数据来控制设备。在串口的几种编程方式中,利用嵌入式汇编语言编写计算机的串口通信程序需要程序员对低级语言的了解和底层硬件的掌握:WindowsAPI串口编程虽然实现了设备无关性,但是编程过于繁琐。Mrciosoft公司提供了MSComm控件,使得开发串口程序变得十分简单。VisualBasic是近年来发展最快的一种计算机语言,其简洁和实用性已经受到了众多计算机用户和程序员的欢迎,尤其是其6.0版本功能强大,且易于掌握,是一种优秀的可视化开发环境,在VB应用程序中调用MSComm控件也十分容易。一般用VB开发串行通信程序有两种方法:一是利用Windows的通信API函数:另一种是采用VB标准控件MSComm来实现。利用API编写串口通信程序较为复杂,需要掌握大量通信知识,其优点是可实现的功能更丰富、应用面更广泛,更适合于编写较为复杂的低层次通信程序。MSComm控件的通信功能实现,实际上是调用了API函数,而API函数是由Commdrv解释并传给设备驱动程序执行的,对于VB程序开发者只需知道MSComm控件的属性和事件的用法即可以实现串口的操作。VB中的MSComm通信控件提供了一系列标准通信命令接口它允许建立串口连接可连接到其他通信设备、可发送命令、进行数据交换及监视和响应通信过程中可能发生的各种错误和事件从而可以创建全双工的、事件驱动的、高效实用的通信程序。-2-3-第2章串口通信及MSComm控件简介2.1串口通信简介计算机中的串行通信就是一种典型的串口通信,它指的是数据在传输过程中是一位一位的进行传输,每一位数据占据一个固定的时间长度。串口通信协议是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS-232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB(General-PurposeInterfaceBus通用接口总线)兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。2.2串口通信的参数及RS-232标准接口串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:(1),波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。(2),数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0127(7位)。扩展的ASCII码是0255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。(3),停止位:用于表示单个-4-包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。(4),奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。RS-232(ANSIEIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。一般说来,计算机都提供一个或多个符合RS一232标准的串行端口,它们依次为Coml、Com2.,这些串口提供了外部设备与PC间进行数据传输和通信的通道,并在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU。通过对串口芯片进行编程,可以使串口具有不同的工作方式、不同的波特率和不同的数据位数等.目前,计算机上常见的是9针RS一232串行口,常用的只有其中4针(2、3、5、7针)。如下图所示:图2.1RS-232串口-5-一条9针RS-232电缆的两个接头在正常情况下,都是一一对应的,但如果是使用单串口或双串口直接连接测试时,就必须将电缆的某些针对接,才能满足串口通信的要求。单串口测试时,需将2针和3针(收发针)对接;对于双串口直接连接测试,则需将两个端口的2针和3针(收发针)相互对接。各个接口含义具体如表2.1所示:表2.1RS-232接口含义9芯信号方向来自缩写描述1调制解调器CD载波检测2调制解调器RXD接受数据3PCTXD发送数据4PCDTR数据终端准备好5GND信号地6调制解调器DSR通行设备准备好7PCRTS请求发送8调制解调器CTS允许发送9调制解调器RI响铃指示器RS-232串行接口属于个人计算机(Pc)及电信应用领域中最为成功的串行数据标准。它被定义为一种在低速率串行通信中增加通信距离的单端标准,是目前PC机与通信工业中应用最广泛的一种串行接口。-6-7-第3章利用MSComm控件对数据进行处理3.1MSComm控件3.1.1MSComm控件的属性MSComm控件是在VB中设计的通信控件。它是PC机通过串行端口与其他设备实现轻松连接的通用工具。通过使用MSComm通信控件,可以简单高效地实现设备之间的通信,从而使编程效率大大提高,也减少了因编程不当导致系统不稳定。下面是MSComm控件的主要属性:CommPort属性语法:MSC1.CommPort=Value;作用:设置或返回连接MODEM的串口编号值:用1、2表示串口COM1COM2Settings属性语法:MSC1.Settings=Value;作用:设置或返回通信参数;值:String型。Handshaking属性语法:MSC1.Handshaking=Value;作用:设置或返回硬件握手协议;值:0没有握手协议。不考虑流量控制。PortOpen属性语法:MSC1.PortOpen=Value;作用:打开或关闭端口;值:Boolean型。OutBufferSize属性语法:MSC1.OutBufferSize=Value;作用:设置或返回传输缓冲区大小;值:Integer型。传输缓冲区的字节数。OutPut属性语法:MSC1.OutPut=Variant;作用:向传输缓冲区写数据流;值:Variant型变量。InBufferSize属性语法:MSC1.InBufferSize=Value;作用:设置或返回接收缓冲区大小;值:Integer型。接收缓冲区的字节数。Mode属性-8-语法:MSC1.Mode=Value;作用:设置或返回接收数据的数据类型;值:Boolean型。InBufferCount属性语法:MSC1.BufferCount=Value;作用:返回接收缓冲区中已到但还未取字符个数;值:Integer型。属性语法:MSC1.=Variant;作用:将接收缓冲区中收到的数据读入变量;值:Variant型变量。3.1.2CommEvent属性CommEvent属性为通信事件或错误返回下列值之一(详见表1、表2)。在该控件的对象库中也可以找到这些常量。表3.1CommEvent通信事件代码常数含义1ComEvReceive接受到Rthreshold个字符。该事件将持续产生,直到用属性从接受缓冲区中读取并删除字符。2ComEvSend发送缓冲区中数据少于Sthreshold个,说明串口已经发送了一些数据,程序可以用Output属性继续发送数据。3ComEvCTSClearToSend信号线状态发生变化。4ComEvDSRDataSetReady信号线状态发生改变当DSR从1到0改变时,该事件发生。5ComEvCDCD(CarrierDetect)线改变ComEvRing6检测到响铃信号。一些UART(UniversalAsynchronousReciverTransmitters通用异步收发器)不支持该事件。6ComEvRing检测到振铃信号。7ComEvEOF接受到文件结束符。-9-表3.2CommEvent通信错误代码常数含义1001ComEvntBreak接受到一个中断信号。1002ComEvntCTSTOClearToSend信号超时。ClearToSendTimeout。在发送字符时,在系统指定的事1件内,CTS(ClearToSend)线是低电平1003ComEvntDSRTODataSetReady信号超时。DataSetReadyTimeout。在发送字符时,在系统指定的事件内,DSR(DataSetReady)线是低电平1004ComEvntFrame帧错误。硬件检测到一个数据帧错误1006ComEvntOverrun串口超速,端口溢出。硬件中的字符尚未读,下一个字符又到达,并且丢失1007ComEvntCDTO载波检测超时。CarrierDetectTime。在发送字符时,在系统指定的事件内,CD(CarrierDetect)线是低电平。CD也称为RLSD(ReceiveLineSingalDetect,接收线信号检测)1008ComEvntRxOver接受缓冲区溢出,缓冲区中已没有空间。1009ComEvntRxParity奇偶校验错。硬件检测到奇偶校验错误1010ComEvntTxFull发送缓冲区溢出,缓冲区中已没有空间。3.2使用MSComm控件进行数据处理3.2.1定长数据的处理MSComm提供了两种处理通信问题的方法,一是事件驱动方法,一是查询法。(1)事件驱动法在使用事件驱动法设计程序时,每当有新字符到达或端口状态改变,或发生错误时,MSComm控件将触发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。这种方法的优点是程序响应及时,可靠性高。(2)查询法-10-查询法适合于较小的应用程序,在这种情况下,每当应用程序执行完某一串行口操作后,将不断检查MSComm控件的CommEvent属性,以检查执行结果或检查某一事件是否发生。串行通信的两种格式进行串行通信时有两种传输方式:字符形式:通常以小于ASCII码128的字符码来传递,通常用于传送指令。二进制形式:将数据以二进制编码的方式传递,它可能含有ASCII码128以上的字符码,通常用来传送数据,以提高速度。VB程序MSComm控件VB解释WindowsAPI设备串行端口串口通信图3.1串行通信通信程序的执行过程事件驱动法能够自动判断通信的发生并触发中断响应是通过设置MScomm控件的Rthreshold属性来实现的。当Rthreshold=n时,则接收缓冲区中收到n个字节的数据就触发OnComm事件。只要设置Rthreshold为接受数据的固定长度,Len属性设置为0,在OnComm事件中编写处理过程即可。可见,对于仪表发送定长数据的处理很方便。程序如下:PrivateSubMSCommlOnComm0DimReceivedata0AsByteDimbytDataAsVariant用来从接收缓冲区读取数据OnErrorResumeNextSelectCaseCommEventCasecomEvReceive-11-bytData=MSComm1.RedimReceivedata(Ub0und(b)rtData)AsByteFori=0ToUbound(bytData)Receivedata(i)=bytOata(i)NextiEndSe1ectEndSub3.2.2不定长数据的处理标志F地址A控制C信息Info帧校验序列FCS标志F校验区间透明传输区间图3.2串行通信数据帧结构在某些串口通讯中,发送的数据帧是不定长,在使用事件驱动法响应时,为了实现实时监测功能,接收数据的读取要尽可能的快速,则在程序开始运行时设置MSComml的属性Rthreshold1,接收缓冲区收到1字节产生OnComm事件,Len=1(每次读取一个字节)等到程序接收到一帧完整数据后,计算出当前帧数据长度,再将Rthreshold属性修改为帧长度,则接收缓冲区在收到一帧数据后,MSComm控件才会触发一个OnComm事件,这样就会有更多的时间进行数据的计算和处理。比如数据帧最大长度为26,帧格式首字节为02H,第二个字节表示状态,反映了发送的字节数Len,之后为3到24个所采集需处理数据,无结束标志。先设置Rthreshold=l,然后计算实际长度Len。下面以文件的发送为例,给出具体的流程图,并有对数据发送过程中OnComm事件的处理程序。-12-开始检测发送文件标识发送文件标识=1?传送文件返回初始化端口文件结束标识=1?NN图3.3文件发送框图OnComm事件部分处理程序如下:DimtenAsImergerDimReceivedata(4)AsByte根据具体需要设定数组大小DimbytDataAsVariant用来从接收缓冲区读取数据PrivateSubMSComml_OnComm0SeletCaseCommEvent判断MSComml通讯事件CasecomEvReceive收到Rthreshold个字节产生接收事件bytData=MSComm1读取一个接收字节Receivedata(1)=bytData(o)转换保存到字节数据类型数组IfReeeivedata(0)=2Then判断是否为数据开始标志02H-13-RthreshoM=0关闭OnComm事件接收bytData=MSComm1读取一个接收字节Receivedata(1)=bytData(0)转换保存到字节数据类型数Len=4.在此写计算实际字节数nbytData=MSComm1PrivateSubMSCommlOnComm0DimReceivedata0AsByteDimbytDataAsVariant用来从接收缓冲区读取数据OnErrorResumeNextSelectCaseCommEventCasecomEvReceivebytData=MSComm1RedimReceivedata(Ub0und(b)rtData)AsByteFori=0ToUbound(bytData)Receivedata(i)=bytOata(i)NextiEndSe1ect数据处理程序Rthreshold=len+2打开MSComml事件接收,按完整数据帧触发事件ElseRthreshold=lEndSeletEndSub3.3.3使用MSComm发送数据包启动发送端程序以后,首先初始化串口,在这里除串口端口号自己定义外,其它的参数均采用MSComm控件的默认设置当发送端检测到发送文件标识为1时,发送端先是发送接收文件标识给接收端程序,若接收端程序正常工作,发送端软件就进入了“串口输入管理模块”,开始一帧一帧的往-14-接收端发送数据。当发送程序发送完最后一帧数据后就令结束文件标识为1,同时结束文件的发送,返回到程序的初始状态,等待下一个传送指令的到来。这是一个VB通用串口事件驱动接收程序。一次性接收一个数据包,数据包可以为任意字节:PrivateSubMSComm_OnComm()DimS()AsByteDimSS(1024)AsByteStaticNAsLongStaticTAsVariantIf(MSComm.CommEvent=comEvReceive)ThenS=MSComm.只要有数据就收进来,哪怕只是一个If(Timer-T0.01)Then间隔10MS以上就认为是一个新的包text1=“”text1用于搜集和显示接收(HEX格式)N=0EndIfT=TimerFori=0ToUBound(S)一个数据包可能产生若干个oncomm事件Text1.Text=Text1.Text&Right(“0”&Hex(S(i)&“H”3)+“”SS(N+i)=S(i)接收数据包缓存于SS()N=N+UBound(S)NextiEndIfEndSub在计算机与程控电子设备构成的测试控制系统中,串口通信的情况各有所异,使用-15-合适的通信方法,才能保证数据采集的实时性、正确性。第4章利用MSComm控件进行通信研究及实例4.1网络传输协议的介绍4.1.1网间协议IPInternet上使用的一个关键的底层协议是网际协议,通常称IP协议。我们利用一个共同遵守的通信协议,从而使Internet成为一个允许连接不同类型的计算机和不同操作系统的网络。要使两台计算机彼此之间进行通信,必须使两台计算机使用同一种“语言”。通信协议正像两台计算机交换信息所使用的共同语言,它规定了通信双方在通信中所应共同遵守的约定。计算机的通信协议精确地定义了计算机在彼此通信过程的所有细节。例如,每台计算机发送的信息格式和含义,在什么情况下应发送规定的特殊信息,以及接收方的计算机应做出哪些应答等等。网际协议IP协议提供了能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另一个地点传送二进制数据,就可以使用IP协议加入Internet了。如果希望能在Internet上进行交流和通信,则每台连上Internet的计算机都必须遵守IP协议。为此使用Internet的每台计算机都必须运行IP软件,以便时刻准备发送或接收信息。IP协议对于网络通信有着重要的意义:网络中的计算机通过安装IP软件,使许许多多的局域网络构成了一个庞大而又严密的通信系统。从而使Internet看起来好像是真实存在的,但实际上它是一种并不存在的虚拟网络,只不过是利用IP协议把全世界上所有愿意接入Internet的计算机局域网络连接起来,使得它们彼此之间都能够通信。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序-16-发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。4.1.2传输控制协议TCP尽管计算机通过安装IP软件,从而保证了计算机之间可以发送和接收资料,但IP协议还不能解决资料分组在传输过程中可能出现的问题。因此,若要解决可能出现的问题,连上Internet的计算机还需要安装TCP协议来提供可靠的并且无差错的通信服务。TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收资料以及终止连接。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。传输控制协议TCP协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。即使在Internet暂时出现堵塞的情况下,TCP也能够保证通信的可靠。众所周知,Internet是一个庞大的国际性网络,网络上的拥挤和空闲时间总是交替不定的,加上传送的距离也远近不同,所以传输资料所用时间也会变化不定。TCP协议具有自动调整“超时值”的功能,能很好地适应Internet上各种各样的变化,确保传输数值的正确。因此,从上面我们可以了解到:IP协议只保证计算机能发送和接收分组资料,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。综上所述,虽然IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,并且在功能上也是互补的。只有两者的结合,才能保证Internet在复杂的环境下正常运行。凡是要连接到Internet的计算机,都必须同时安装和使用这两个协议,因此在实际中常把这两个协议统称作TCPIP协议。4.1.3UDP(UserDatagramProtocol)用户数据报协议用户数据报协议(UDP)是OSI参考模型中一种无连接的传输层协议,提供面向事-17-务的简单不可靠信息传送服务。UDP协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用UDP的“端口号”完成的。例如,如果一个工作站希望在工作站上使用域名服务系统,它就会给数据包一个目的地址,并在UDP头插入目标端口号53。源端口号标识了请求域名服务的本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于UDP比较简单,UDP头包含很少的字节,比TCP负载消耗少。UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。协议结构SourcePort16位。源端口是可选字段。当使用时,它表示发送程序的端口,同时它还被认为是没有其它信息的情况下需要被寻址的答复端口。如果不使用,设置值为0。DestinationPort16位。目标端口在特殊因特网目标地址的情况下具有意义。Length16位。该用户数据报的八位长度,包括协议头和数据。长度最小值为8。Checksum16位。IP协议头、UDP协议头和数据位,最后用0填补的信息假协议头总和。如果必要的话,可以由两个八位复合而成。UDP的特点:UDP协议使用IP层提供的服务把从应用层得到的数据从一台主机的某个应用程序传给网络上另一台主机上的某一个应用程序。UDP协议有如下的特点:1.UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。2.UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。3.UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也-18-不会重发数据。4.UDP传送数据较TCP快速,系统开销也少。从以上特点可知,UDP提供的是无连接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。4.2使用MSComm控件进行通信的步骤和方法实例1:电话拨号在一些实际应用中经常需要使用计算机拨号。下面这个例子利用MSComm控件操作Modem进行拨号,实现串口通信。具体实现步骤如下:1.建窗体(1)添加一个MSComm控件,用来建立与串口的连接;(2)添加一个Text控件,Name属性为Txttel,用来输入电话号码;(3)添加3个CommandButton控件,Name属性分别为DialButton、CancellButton、QuitButton,分别用来实现拨号、中止拨号、中止程序;(4)添加一个Label控件,用来显示所有与拨号有关的信息。窗体见图1。2.设置MSComm控件属性InBufferSize=1024len=0Mode=0Rthreshold=2RTSEnable=TrueSettings=“9600N81”;Sthreshold=0因为每一台计算机的串口使用状态都不会一样。为使程序具有通用性,在窗体的Load方法中首先进行串口测试,找到第一个可用串口后再进行设置。3程序功能程序根据输入的电话号码进行拨号,Modem正常拨号后,提示用户摘机,准备通话。-19-图4.1电话拨号实例4主要方法与事件代码PrivateSub_Load()设置可用串口OnErrorGoToerror_openFori=1To4MSComm1.CommPort=iMSComm1.PortOpen=True设置可用的第一个串口OnErrorGoTo0ExitSuberror_resume:Nexterror_open:Resumeerror_resumeEndSubPrivateSubDialButton_Click()DimNumberTempNumber=Trim(Txttel.Text)IfNumber=“”ThenMsgBox“请输入电话号码”Txttel.SetFocusExitSub-20-EndIfDialButton.Enabled=FalseQuitButton.Enabled=FalseDialString=“ATDT”Number“”vbCrMSComm1.InBufferCount=0清除接收缓冲区MSComm1.Output=DialString拨电话号码Lblmessage.Caption=“正在拨号码”NumberDialButton.Enabled=TrueQuitButton.Enabled=TrueEndSubPrivateSubMSComm1_OnComm()SelectCaseMSComm1.CommEventCasecomEvReceiveCOMBUF=COMBUFMSComm1.读取串口数据lc=InStr(1COMBUFOK”)Iflc=0ThenExitSubLblmessage.Caption=“请您摘下电话机,准备通话”Modem已正常拨号,返回OKCasecomEvSendEndSelectEndSubPrivateSubCancelButton_Click()MSComm1.Output=“ATH”vbCr断开与调制解调器的连接EndSub实例2:实现来电显示在一些实际应用中,需要显示并保存来电号码,并根据电话号码显示相应资料,比如110报警等系统。-21-实现步骤:1.窗体创建(1)添加一个MSComm控件,用来建立与串口的连接;(2)添加4个Option控件,用来确定使用的串口号;(3)添加4个Label控件,用来显示来电号码及日期时间;(4)添加一个ProgressBar控件,用来显示电话振铃次数;为方便调试程序,添加一个Text控件Text5,用来显示Modem传来的所有信息。窗体见图图4.2来电显示窗体2.设置MSComm控件属性InBufferSize=1024len=0Mode=0Rthreshold=1RTSEnable=TrueSettings=“9600N81”Sthreshold=03.程序功能程序首先初始化Modem,然后等待来电。当有来电时,MSComm产生OnComm事件。Modem送出的信息格式为“DATE=月日回车换行TIME=时分回车换行NMBR=电话号码回车换行”。在OnComm事件处理程序中对读入信息进行截取,截取电话号码后,以该电话号码为关键字,查询并显示数据库中有关信息。-22-4.主要方法与事件代码ConstDEBFLG=1通用声明部分PublicCOMXBEEPNOHANGUPPNLOCAsIntegerPublicCOMBUFCOMLINAsStringPrivateSub_Load()检测串行口DimI,CAsIntegerCOMX=0COMBUF=“”COMLIN=“”BEEPNO=0HANGUP=0正常运行程序,关闭右侧Text5IfDEBFLG=0Then1.Width=1.WidthText5.WidthText5.Enabled=FalseText5.Visible=FalseEndIfOnErrorGoToERROR_LOAD检测可用串口ForC=1To4IfMSComm1.PortOpenThenMSComm1.PortOpen=FalseMSComm1.CommPort=CIfNotMSComm1.PortOpenThenMSComm1.PortOpen=True打开串口IfMSComm1.PortOpenThenMSComm1.PortOpen=FalseIfCOMX=0ThenCOMX=C_LOAD_1:NextCIfCOMX=0ThenEndOnErrorGoTo0-23-Option1(COMX1).Value=TrueExitSubERROR_LOAD:Option1(C1).Enabled=FalseResume_LOAD_1EndSubPrivateSubOption1_Click(IndexAsInteger)选择串行口COMX=Index1CallINIT_MODEMEndSubPrivateSubINIT_MODEM()初试化ModemIfMSComm1.PortOpenThenMSComm1.PortOpen=FalseMSComm1.CommPort=COMXIfNotMSComm1.PortOpenThenMSComm1.PortOpen=TrueMSComm1.Output=“ATCID=1”vbCrCallCHK_MODEM检查Modem命令是否完成MSComm1.Output=“ATS0=0”vbCrEndSubPrivateSubCHK_MODEM()检查Modem命令是否完成DimTAsSingleDimLAsIntegerT=TimerDoCOMBUF=COMBUFMSComm1.L=InStr(1COMBUF“OK”)-24-LoopUntilL0OrTimerT1IfL=0ThenLine1.Visible=TrueLine2.Visible=True1.ShowMsgBox“MODEM未联机”vbOKOnlyvbCritical“测试MODEM”ElseLine1.Visible=FalseLine2.Visible=FalseEndIfEndSubPrivateSubMSComm1_OnComm()串行口接收事件处理DimCHSTAsStringDimLCAsIntegerSelectCaseMSComm1.CommEvent接收到Rthreshold个字符CasecomEvReceiveCOMBUF=COMBUFMSComm1.Do读取串口数据LC=InStr(1COMBUFChr(10)IfLC=0ThenExitDoCOMLIN=Left(COMBUFLC)COMBUF=Mid(COMBUFLC1)CH=Left(COMLIN1)If“”0Then判断输入缓冲区是否有内容,若有数据则读取Text2.Text=Text2.Text+Comm1.EndIfEndSub图4.3双机通信图示(1)-29-图4.4双机通信图示(2)本程序经过实验运行,能实现双机之间的可靠通信用vb实现串行通信简单易用,也可以应用到微机与单片机或其它仪器仪表的串行通信中去,因此对双机串行通信软件的设计和对串行通信的研究,具有重要的现实意义4.4利用MSComm控件实现PC机和单片机的串口通信的研究上、下位机之间的通信协议在本系统中,上、下位机之间以波特率为4800bps的传输速率通信,无校验位,8位数据位和1位停止位。作为上位机的PC机以查询方式送出下位单片机的唯一地址编号,单片机据此判断地址是否与自身符合,符合,则将采集到的数据通过RS-232串行口发送给上位机。此处的通信协议可以在MSComm控件的set-tings属性中加以设置。MSComm控件工作过程及在本系统的应用1.设置通信对象、通信端口号以及配置通信格式(如起始位个数、数据位长度、校验方式停止位个数等)和其他相关属性;2.设定通信协议:3.打开通信端口,进行数据的传输;4.关闭通信端口,释放系统资源。-30-在完成串行通信操作后,应该将串行通信端口的资源归还给操作系统。在本校直机系统中,上位机软件是基于VB的。基于VB的上位机通信软件编制的方法是:在人机交互界面的“启动传输”按钮中,对串口进行初始化。指定所用的串行端口为COM1,并依照上述通信协议对控件的settings属性进行设置。本系统中,在通信过程的开始,上位Pc向下位单片机发送地址编码“O”,以便取得和下位机的联系。若下位机发回应答信号“O”,则表示联机成功。此时将控件的Mode属性设为ComlnputModeText。联机成功后,开始数据的传输过程,这里将数据的传输过程单独编制为一个过程communication,在“启动传输”按钮中调用此过程,此时将控件的Mode属性设为comModeBinary,上位机接收的数据存放在字节数组中留待后续处理。由于本串口通信数据量不大、时间间隔较长,故不必采用握手通信的方法。当整个数据传输过程结束时,关闭串行口,释放系统资源。PrivateSubCommandl_Click()MSComm1CommPort=1MSComm1Settings=“4800,N,8,1”波特率为4800bps,无奇偶校验位,8个数据位,一个停止位MSComm1Mode:ComModeTextBinary以文本形式接收数据MSComm1Len=1指定由串口读人的字节数IfMSComm1PortOpen=fals

温馨提示

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

最新文档

评论

0/150

提交评论