vb开发通信软件.doc_第1页
vb开发通信软件.doc_第2页
vb开发通信软件.doc_第3页
vb开发通信软件.doc_第4页
vb开发通信软件.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

vb开发通信软件 一、PC串行通信程序机制常用的PC串行通信程序大多利用BIOSINT14H中断,以查询IO方式完成异步串行通信。Windows系统提供中断方式驱动的串行通信驱动程序COMM.DRV。通信程序无需直接对串行端口进行操作,而是通过驱动程序这一编程接口进行间接操作。Windows操作系统中,串行通信采用“事件通知”方式,支持数据按块传送。进行通信时,Windows开辟一个用户定义的输入输出缓冲区,每接收一个字符就产生一个低级硬件中断,串行驱动程序立即取得控制权,并将字符放入输入数据缓冲区,然后将控制权返还正在运行的应用程序。如果输入数据缓冲区满了,驱动程序用当前定义的流控制机制通知发送方停止发送数据。发送数据也采用类似的处理方式,应用程序将需要发送的数据放入输出数据缓冲区,串口每发送一个字符就产生一个低级硬件中断。二、PC串行口远程通信的硬件配置串行通信数据链中,计算机一端称为DTE,即数据终端设备;调制解调器一端称为DCE,即数据通信设备。PC串行通信的硬件连接方式分为零Modem连接和Modem连接。 零Modem连接即直接用调制解调器电缆将两台设备连接起来,Modem连接则通过DCE(Modem)将两台PC连接起来。零Modem连接用于距离15m内两台DTE或DCE设备之间的连接。而Modem连接则通过电话网或专线用于长距离的通信。TXD和RXD信号线用于计算机和Modem间传输数据信息;RTS从计算机端发送信号到Modem,表示希望把数据传给Modem,若Modem能接收这个数据,它将发送CTS信号给计算机;DTR从计算机端发送信号到Modem,表示计算机已作好通信准备,Modem将DTR信号作为初始化自己的信号,然后给计算机回送数据设置就绪信号DSR;当本地Modem接收到远地Modem的呼叫,则发送RING信号给计算机;Modem应答呼叫后,发送数据载波检测DCD信号到计算机,表示已建立连接。Modem的工作状态分为命令状态和在线状态。处于命令状态时,Modem对串口发送的信息进行解释,可通过PC串口向Modem发送AT命令对其进行初始化、设置和操作。例如,初始化命令为:“ATQOV1WOSO1C1D2YOWO”,其含义为:QO:返回结果码;V1:以字符形式显示结果码;WO:不返回协商进程结果码;SO1:振铃一次,即应答;C1:追踪数据载波信号CD;D2当DTR从开到关时,Modem挂机进入命令状态;YO:Modem上电时重新调出用户方案;WO:将以上设置存为动态设置用户方案0;一旦本地Modem与远地Modem建立连接,Modem即处于在线状态,可进行数据传输。此时,Modem不响应AT命令,直接传送所收到的数据。三、Modem连接远程通信软件的编制通信过程中大部分的工作由串行通信驱动软件承担。本文软件的运行环境为AST466d,Hayes公司的ACCURA144FAX144Modem,Windows32,VB30专业版。VB30专业版中提供了一个MSCOMMVBX通信控件。它使用户能很方便地通过对控件属性的设置、检测,访问串行通信驱动程序的大多数特性,而不必考虑其实现细节。该控件为“事件驱动”,只响应“OnComm”事件,该事件可对已发生的事件或错误进行处理,与CommEvent属性紧密相关。通信软件、通信驱动软件和Modem之间的通信关系以下程序实现了通信的基本过程。包括初始化串口和Modem,上位机拨号呼叫下位机,下位机应答并开始定时传输数据,挂机停止传输等功能。VB30编制的通信软件清单如下:上位机控件清单:控件名称 属性Form1Form1Caption 上位机通信MsComm comm1CommandButton1CallCaption 拨号CommandButton2hangCaption 挂机CommandButton3ExitCaption 退出下位机控件清单控件名称 属性Form1Form1Caption 下位机通信MsComm comm1CommandButton1hangCaption 挂机CommandButton2ExitCaption 退出Timer1Timer1Interval 3000Text(i)Text(i)1串口初始化、设置程序在程序初始化时,先对串口初始化。因为使用RTSCTS握手信号的硬件设备只有RTS信号置为高才能接收数据,所以需将MSCOMM通信控件的RTSenable属性设为TRUE。由于Modem在处于命令状态时,通过串口发送的命令以及命令结果均会回显在输入缓冲区中,因此在进入在线状态前,禁止产生EVRECEIVE事件,避免数据误处理。由于Windows是多任务系统,在进行数据收发循环处理时,应调用DOEVENTS事件,将控制权交还系统,允许Windows执行其他任务。但应注意,在处理OnComm事件时小心使用DOEVENTS,避免系统又产生OnComm事件,造成嵌套,出现堆栈溢出错误。Sub FormLoad()comm1Commport1COM1口通信comm1Settings9600,N,8,1波特率9600,无校验,8位数据位1位停止位comm1OutBufferSizeOUTPACK设置输出缓冲区大小comm1InBufferSizeINPACK设置输入缓冲区大小comm1InputLen1每次从输入缓冲区中取一个字符comm1RTSenable1RTS信号为高comm1Rthreshold0不产生MSCOMMEVRECEIVE事件comm1PortOpen1打开串口cdcomm1CDHolding取载波检测信号线原始状态comm1outputATQOV1WOSO1C1D2YOWO初始化ModemDo DoEventsLoopUntilcomm1OutBufferCount0End Sub2上位机拨号呼叫下位机SubCallcomClick()Comm1OutPutATDTPhonnumchr(13)向Modem发拨号命令Do DoEventsLoopUntilcomm1OutBufferCount0End Sub3下位机Modem应答,连通后开始定时传输数据下位机检测CD,判断是否连通:Sub Comm1OnComm()Select Casecomm1CommEventCase5 MSCOMMEVCDTimer1Enabled1启动定时器End SelectEnd SubVB传送定长字符串,数据接收处理相对简单。但在发送实时数据时,若将数据转换成定长字符串,这样会大大降低传输效率。在接收端,通知程序从输入缓冲区中取字符有两种方法:一是用轮询方法循环判断InBufferCount是否为0;另外就是利用Rthreshold属性触发“OnComm”事件及“CommEvent”属性中EVRECEIVE事件。当Rthreshold的值不为0时,允许产生EVRECEIVE事件。该属性设置和返回在通信控件设定CommEvent特性为接收和产生OnComm事件之前要接收的字符数。VB传送变长字符串时,接收端的Rthreshold值要作相应的改变,以确保接收数据及时准确。下位机定时发送字符串“strin3Format(Len(strin1),0000)chr(8)strin2”。strin1为当前字符串,strin2为上一字符串。上位机根据接收strin3中Len(strin1),相应改变RthresholdLen(strin1)4。这样,通过提前发送字符串长度,改变Rthreshold值可实现发送变长数据。Windows串行通信驱动程序的事件驱动特性仍有不稳定的缺陷。如InputLen0时,有可能取出不完整的数据。为保证可靠,采取降低处理速率的方法,保证下位机发送的数据流完整地进入输入缓冲区。设InputLen1,即每次从缓冲区中取一个字符。也可采用轮询方法,定时检测输入缓冲区。下位机定时发送数据:Sub Timer1Timer()If comm1CDHoldingcdThenstr1text1(i)Textstrin2strin1上一字符串strin1str1当前字符串strin3Format(Len(strin1),0000)chr(8)strin2传送当前字符串长度,以及上一字符串内容com m1OutPutstrin3Do DoEventsLoopUntilcomm1OutBufferCount0ElseTimer1Enabled0End IfEnd Sub上位机检测CD状态,判断是否连通、并接收处理数据。Sub Comm1OnComm()Select Case comm1CommEventCase5 MSCOMMEVCD检测CD状态,判断是否连通comm1InBufferCount0清输入缓冲区comm1RThreshold4当输入缓冲区中有五个字符,Case2MSCOMMEVRECEIVE产生EVRECEIVE事件,接收处理数据Do DoEventsIfcomm1InBufferCountThen循环从缓冲区中取数据str1str1comm1InputElseExit DoEnd IfLooplen21en1当前字符串长度len1Va1(Left(str1,5)即将发送的字符串长度comm1RThresholdlen14strinRight(str1,len2)数据处理End Selectstr1End Sub4根据设置的AT命令“D2”,当置DTR信号为低时,Modem挂机进入命令状态。也可通过串口输出“ATH”chr(13)”字符串挂机。Sub Hangclick()If comm1CDHoldingcdThen检测CD,判断是否挂机comm1DTRenable0comm1DTRenable1置DTR信号为高,为下一次通信准备End IfEnd Sub5退出程序时,一定要关闭串口Sub Exitcomm()comm1PortOpenfalseEndEnd Sub四、Windows通信机制和VB30通信控件潜在缺陷在通信软件编制过程中,我们发现Windows下通信机制采用的“事件驱动”在实际运行中不稳定。如在文件传输过程中,误码和数据丢失的情况时有发生;若串口波特率过

温馨提示

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

评论

0/150

提交评论