《windows环境下的串行数据通信程序设计》由会员分享,可在线阅读,更多相关《windows环境下的串行数据通信程序设计(19页珍藏版)》请在金锄头文库上搜索。
1、Windows环境下的串行数据通信程序设计摘要该文详细讨论了通信控件在Windows平台下的通信软件设计方法,借助于VisualBasic所附的通信控件能非常方便地开发出高级和专业性通信软件来满足不同业务的需要。在Windows操作系统平台上开发通信软件时,虽然WindowsSDK提供了完备的API应用程序接口函数和以中断方式驱动的通信设备驱动程序,从而可以用C或C+来完成这类应用程序的设计,但其复杂化和专业化程度仍然很高。所以,目前许多软件开迩发人员都在使用MicrosoftVi行sualBasic来开发Windows应用程序。本文将详细叙述VB环境的臆通信软件开发方法,通过对通信控件的分蕉
2、析,我们可以看到利用VB来开发Win做dows平台下的通信软件非常简单。最唠后结合我们工作中的一个实例来完整地描辟述该类软件的设计方法。一、的描述嶙VB中的串行通信控件已全面提供了荦使用RS-232来进行数据通信软件开炅发设计的所有细则,Microsoft皈VisualBasic中的是1992撤年CrescentsoftwareI嵩nc.公司专为Microsoft的V翁B平台设计的,它使用以下两种不同的方式来处理和解决各类通信软件的开发和设际计问题。事件驱动,它和我们用C/陷C+写Windows软件时的窗口回掣调函数类似,是一种功能强大的处理问题嗥的方法。在实际工作中,往往要求我们处揉理许多通
3、信中的相关事件。例如:当线路源数据到达本端或CD和RTS信号线状态柱发生变化时,这就要求我们使用相应的事提件来跟踪和处理。在该控件中,是使用O镍nComm来实现的,它也包括检测和处炙理通信错误等方面的问题。以下是MSC誓OMM详细的错误和事件列表:MS嵴COMM_ER_BREAKA收到一个堡Breaksignal.MSCO俯MM_ER_CDTOCD信号超时鞫MSCOMM_ER_CTSTOCTS崖信号超时MSCOMM_ER_DS芊RTODSR信号超时MSCOMM墉_ER_FRAME帧错误发生MS枥COMM_ER_OVERRUN接收数眉据丢失MSCOMM_ER_RXO孳VER接收缓冲器溢出MSCO
4、MM邾_ER_RXPARITY纠验错MSCOMM_ER_TXFULL发送缓邸冲器满MSCOMM_EV_CDC篑D信号改变MSCOMM_EV_C赭TSCTS信号改变MSCOMM_EV_DSRDSR信号改变MSC拷OMM_EV_EOF收到一个文本文件陧结束字符MSCOMM_EV_RI信NG检测到一个振铃信号MSCOM剃M_EV_RECEIVE接收到设定的脾字符数时产生该事件MSCOMM_裥EV_SEND发生缓冲器中的字符数低瞌于设定的数值时产生该事件以上常数定义踣在文件中。查询方式,由程序设计者砻来负责读取CommEvent的值并处会理所发生的错误或事件。通常简单的炬应用程序设计可采用这种方法。使
5、用涕通信控件开发通信软件时,能非常简单地硼设计出同时访问多个通信口的程序,这就棰是Windows的好处。例如使用,其廖中1in,就可以设计多个通信串口雌处理程序。例如,一个基于电话网用来检雇索信息资料的小型服务器的后台软件的设瘴计应用就是一个很好的例子。中提供了2豚7个关于通信控件方面的属性,以下列出宽最重要的几个:CommPort设蔟置和返回通信口的数目Settin蛾gs设置和返回以字符串形式给出的数据刿通信格式:波特率,校验,数据位和停止仍位PortOpen设置和返回通信迄口的状态Input读串行数据接收爷缓冲器Output发送一个串在中,有两个与Input和Outpu盘t性质相等同的函数
6、;输入函数,从串行通信接收缓冲器中读取字符串,句型刘如下:ComlnputAsInteger;图1返觋回值:本次读操作实际读取的字符数肀输出函数,向通信口发送一个字符串,句睫型如下:ComOutputAsint忒eger;图2返回值弩:本次写操作实际发送的字符数二、膑事件驱动和查询方式下的两种通信软件开痛发模板这两种方式分别对应我们通常蕨使用汇编或C/C+来写通信程序中的汶中断和查询方法。事件驱动下例是一个使用事件驱动方式设计通信程序的吸模板,我们只需根据自己的实际情况来选镑择在下列的Case语句中插入相应的代草码即可。SubComm_OnCo桩mmSelectCasei=1苔,2.错误部分C
7、aseMSCOMM-ER_BREAK插入匕处理BREAK代码CaseMSCOMM-ER_CDTO插入处理CD十超时代码CaseMSCOMM-E弊R_CTSTO插入处理CTS超时代码CaseMSCOMM-ER_D诃SRTO插入处理DSR超时代码舢CaseMSCOMM-ER_FRAME插入处理帧错误代码CaseM弋SCOMM-ER_OVERRUN插入处理数据丢失代码CaseMSC谬OMM-ER_RXOVER插入处理忮接收缓冲器溢出代码CaseMSC讲OMM-ER_RXPARITY插入供处理校验错误代码CaseMSCO院MM-ER_TXFULL插入处理发抿送缓冲器满代码事件部分Ca齄seMSCOMM
8、-EV_CD插入处钭理CD信号改变代码CaseMSC祆OMM-EV_CTS插入处理CTS信号改变代码CaseMSCOMM-EV_DSR插入处理DST信号改变代码CaseMSCOMM-EV狯_EOF插入处理收到一个文本文件结束字代码CaseMSCOMM-E痫V_RING插入处理检测到一个振铃娓信号代码CaseMSCOMM-E饪V_RECEIVE插入接收到设定的字符数时产生该事件代码CaseMSCOMM-EV_SEND插入处理萘发生缓冲器中的字符数低于设定的数值时多产生该事件的代码EndS谶electEndSub查询方麻式查询方式,就是每个命令都要查询等待对它的回答。详细使用方法请见下文兵的实例叙
9、述。三、一个完整例子笥该程序的设计背景是全军医药信息网上电话拨号用户前台软件中的自动拨号部分,叱为节省篇幅和说明问题,这里进行了重新廖编辑,但其本身是完整的。该程序帮助主辄人进行电话拨号以呼通被叫。调试环崮境:LEO486/50,HiTecMODEM,院内电话脉冲拨号,使用串行未口1,PWIN程序Form由下列俑部分组成:List1电话号码显示列表票;Label1拨号状态显示;Dial魑,Cancel,Quit三个渺按钮;通信控件。-慊-VisualBasic程序设计:使用MODEM拨号,人工吒通话程序名:军事医学科学搜院计算中心夏云,运行:使用VB娜FILE中的LoadText项装入,按F5
10、或生成.EXE文件运行-Optio壑nExplicitDimPhon涫eNumbers$电话号码存储变量DimCancelFlagCan砜cel按钮状态标志SubDial矽拨号例程DimDialStri恕ng$,FromModem$,dum驷my根据脉冲/双音多频拨号方式狞来选择DT/DP;所拨号码存放亍在变量PhoneNumbers$中;命令中的分号表示MODEM在拨号倘后重新回到命令状态;每个命令由酪回车符Chr$结束;DialSt嗝ring$=ATDT+Numbe濞r$+;+Chr$=2400,N,8,1设置帧格式On种ErrorResumeNext错误恢复=True启动该口工作旷IfE
11、rrThen如果该口不可启动肽,则显示信息MsgBox当前串碣行通信端口不能工作,请选择使用另外端忉口。”ExitSubEndi蚤f=0清除接收缓冲器=DialString$开始拨号Do乒等待MODEM返回“OK”回答巢dummy=DoEvents进入等跆待方式,将资源提交系统管理IfT昴hen若接收缓冲器中有数据存在,则榨读FromModem$=From蓁Modem$+IfInStrTh菘en是否接收到“OK”Beep壅已经接收到“OK”,发蜂呜声MsgBox对方电话已经拨通,请摘话蓝机并按回车或OK钮”ExitDoEndIfEndIfIf询CancelFlagThen若Ca咀ncel钮按下
12、则处理Cancel铄Flag=FalseExitDo尬EndIfLoop=A獒TH+Chr$挂断命令=Fa删lse关闭该口EndSub荨SubDialButton_Clic鲠kDial按钮处理程序DimNumber$,Temp$=Fal辽seDial,Quit二个按钮同时盗无效=False=True峥开放Cancel按钮Number尔$=PhoneNumbers$)获翰得一个电话号码Temp$=Sta幄tus保存状态Status$=“正在拨号码:”+Number$蝙DialNumber$拨号例程执行篓=True拨号结束开放Dail,Quit按钮=True=F古alse禁止Cancel按钮Sta
13、tus=Temp$恢复状态EndSubSubForm_Lo橡ad=0设置0值:读全部接收缓瑁冲器内容MD彭显示窗口“四环医学研究院计算中心”“军事医学科学院情报杭所张华研究员”ReDimPhoneNumbers$PhoneNu婴mbers$=1-8233296搭PhoneNumber$=1-8232255=0默认第一个邾号码EndSubSubLis烫t1-DblClick列表框选择号花码启动拨号DialButton-ClickEndSubSubCancelButton-Click替Cancel按钮处理程序CancelFlag=True标识Can酊cel钮已按下=False取消瓿该钮继续活动EndSubSu周bQuitButton-ClickQuit按钮End结束En潘dSub对开发Windows平台颁下的通信软件的确方便容易,使用事件驱体动能设计良好的后台通信程序、开发终端怊仿真软件和解决更复杂的实际问题。该通鸽信控件不但包括了全部WindowsAPI中关于串行通信的16个函数所完成浒的功能,而且开拓了更多的使用户设计方份便的对象属性来满足不同用户不同业务的幻需求。因此我们可以应用上文讨论的内容诿和方法,利用Windows环境,使用函VB工具来开发设计所有串行通信的软件炊。另外,MSCOMM为了能在下一个高龟速调制解调设备标准中直接使用,它提供膦了一档的速率接口。