44(基于MSCOMM控件的Modem通信的实现)

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

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

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

资源描述

基于MSCOMM控件的Modem通信的实现乔奕1,王超2,陶维青1(1.合肥工业大学电气与工程学院;2.合肥工业大学计算机与信息学院,合肥230009)摘要:利用Modem进行数据传输具有简单方便投入少的优点,目前已广泛应用于计算机通信中。MSCOMM(MicrosoftCommunicationControl)控件是微软公司提供的Windows环境下用于串行通信编程的ActiveX控件,提供了一系列的通信命令接口。本文介绍了在Delphi环境下利用MSCOMM控件控制Modem通信的方法,讨论了Modem通信中应注意的问题。关键字:MSCOMM;调制解调器;计算机通信;AT命令中图分类号:TP393文献标识码:ATheImplementationofModemCommunicationwiththeMSCOMMControlWANGChao,LUYang(SchoolofComputerScienceandInformationEngineering,HefeiUniversityofTechnology,Hefei230009)Abstract:Itissimpleandlow-costedtotransmitdatabyModem.Now,Modemcommunicationisabroadappliedincomputercommunication.MSCOMM(MicrosoftCommunicationControl)providedbyMicrosoftisoneofActiveXcontrolsandprovidesserialcommunicationsforyourapplicationunderWindows.Itprovidesaninterfacetoastandardsetofcommunicationscommands.ThisarticleintroduceshowtousetheMSCOMMcontrolinDelphitocontrolModemandthendiscussestheproblemsinModemcommunication.Keywords:MSCOMM;Modem;ComputerCommunication;ATCommands为实现Modem通信使通信应用程序和硬件设备无关,微软提供了Win32通信API(ApplicationProgrammingInterface)和TAPI(TelephoneApplicationProgrammingInterface)函数,但这些函数十分复杂,编程要求高,而串行通信控件MSCOMM简化了编程,可以快速的建立通信应用程序,本文利用MSCOMM实现了MODEM的通信程序。1.Modem通信技术1.1Modem和RS232接口RS-232C是美国电子工业协会(EIA)制定的串行接口标准[1],常见的Modem和微机通信采用的是串行通信,因此Modem实际是和计算机的串口进行通信。目前计算机使用的是9针的RS-232接口,每只管脚有它信号流动的方向,其意义和Modem传输有关。表1显示了各个管脚的意义和信号的方向。1.2Modem通信规则和标准1.Modem状态Modem分为命令状态、在线状态、在线命令状态三种状态。当Modem启动时处于命令状态,此状态下,Modem不和远端通信只接收命令,可以对Modem进行控制修改参数;在线状态又称为联机状态或数据状态,此时通信双方握手完成通信链路已经建立,Modem可以发送和接收数据;在线命令状态作者简介:乔奕(1978-),女,安徽合肥人,合肥工业大学硕士,研究方向为计算机控制;王超(1978-),男,安徽合肥人,合肥工业大学硕士研究生;陶维青,男,合肥工业大学副教授,研究方向为计算机控制。是Modem已经和远端建立通信链路,但只接收计算机的控制指令不能与通信方发送和接收数据。计算机用AT命令控制Modem实现三种状态的相互转换。图1描述了状态的转换过程。表1.RS22管脚方向及意义离线命令状态在线状态在线命令状态ATH命令载波丢失连接建立ATO命令换码序列+++图1.Modem状态转换2.AT指令集Modem通信有一套的规则和标准,各个厂家生产的Modem都遵循Hayes标准,主要是指它能识别并执行成为AT命令的某些命令或命令串,这些命令组成了所谓的AT命令集[2]。AT命令建立之前,计算机和Modem之间是通过硬件电路来实现直接控制的,它的建立使的振铃检测、载波检测、速率选择等都可以由Modem来完成。计算机发送AT命令到Modem,Modem执行后将结果通过RxD返回给计算机,它是控制Modem的软件接口。所有的AT命令都是由一个特定的“命令前缀”开始,由一个“命令结束符”结束。命令前缀由AT两个字符组成,命令结束符是一个单字符,其值存在Modem的寄存器S3中,通常为回车符,S3的内容可由AT命令修改。AT命令按功能可分为13个类别:用户接口命令、拨号呼叫、应答呼叫、专线方式、挂机命令、Modem逻辑接口、扬声器控制、状态切换等。2.MSCOMM控件的应用MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。2.1MSCOMM控件处理通信的方式MSCOMM有两种通信处理方式:事件驱动方式和查询方式。1.事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法[3]。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者CarrierDetect(CD)或RequestToSend(RTS)线上一个字符到达或一个变化发生时。在这些情况下,可以利用MSComm控件的OnComm事件捕获并处理这些通讯事件。OnComm事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅CommEvent属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。2.查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。2.2MSCOMM的属性和事件管脚方向说明CD计算机ModemModem通知计算机有载波被侦测到RXD计算机Modem接收数据TXD计算机Modem传送数据DTR计算机Modem计算机告诉Modem可以进行传输GND计算机Modem地线DSR计算机ModemModem告诉计算机一切准备就绪RTS计算机Modem计算机要求Modem将数据送出CTS计算机ModemModem通知计算机可以送出数据过来RI计算机ModemModem通知计算机有电话过来MSComm控件有很多重要的属性,但首先必须熟悉几个主要的属性。1)CommPort:设置并返回通讯端口号,在设计时,value可以设置成从1到16的任何数(缺省值为1),注意:必须在打开端口之前设置CommPort属性;2)Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位,设置的格式为“BBBB,P,D,S”,BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数;3)PortOpen:设置并返回通讯端口的状态。也可以打开和关闭端口,true表示串口打开;4)Input:从接收缓冲区返回和删除字符;5)Output:向传输缓冲区写一个字符串;6)InputMode:设置发送和接收数据的类型,0表示文本的方式,1表示二进制的方式;7)Rthreshold:设置CommEvent属性为comEvReceive并产生OnComm之前,设置并返回的要接收的字符数,若Rthreshold属性设置为0(缺省值)则不产生OnComm事件;8)SThreshold:MSComm控件设置CommEvent属性为comEvSend,并产生OnComm事件之前,设置并返回传输缓冲区中允许的最小字符数,若设置Sthreshold属性为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。如果在传输缓冲区中的字符数小于value,CommEvent属性设置为comEvSend,并产生OnComm事件;9)CDHolding:通过查询CarrierDetect(CD)线的状态确定当前是否有传输。该属性在设计时无效,在运行时为只读,true表示Modem已经和远端建立连接;10)InputLen、Input:收缓和发送缓冲区字符数或字节数;11)comEvent:该属性列出了控件触发事件的类型和具体的事件活错误。MSCOMM只有一个OnComm事件,只要comEvent的值一改变,就会触发该事件,这表示发生了一个通信错误或事件。3.在Delphi中实现Modem通信程序1.Delphi中安装MSCOMM控件MSCOMM控件有三个文件:Mscomm.reg,Mscomm32.ocx,Mscomm32.dep,把这三个文件拷贝到Windows的system目录下(注意WinNT或Win2000下是System32)。然后用Windows下的注册工具regsvr32注册该OCX控件,例如:Regsvr32…system目录\Mscomm32.ocX,进入Delphi环境在Component菜单下选ImportActiveXControl,这时在列表中可以看到MicrosoftCommControl6.0选项,选中这个选项点击Install按钮,完成安装。在ActiveX控件页上可以看到一个电话为图标的控件。2.Modem拨号通信实例MSCOMM1.CommPort:=1;//设置端口号com1mscomm1.portopen:=true;//打开端口sleep(500);mscomm1.DSRholding:=true;//DSR准备好ifmscomm1.DSRholding=truethenbeginmscomm1.inbuffercount:=0;//清空缓冲区mscomm1.inputlen:=0;//读取整个缓冲区内容mscomm1.RThreshold:=1;mscomm1.SThreshold:=1;//每发送一个字节产生ONCOMM事件mscomm1.DTRenable:=true数据终端准备好mscomm1.RTSenable:=true;//请求发送mscomm1.InputMode:=1;end;//mscomm1.output:='+++'+chr(13);sleep(2000);mscomm1.Output:=‘at&l0’+chr(13);//设置拨号方式mscomm1.Output:=‘atd111’+chr(13);//拨号连接,对方号码为111然后在checkThread线程中检查CDHolding属性,如果是TRUE,发送数据。CheckThread.executeBeginWhile(true)do//无限循环查询BeginSleep(8);Ifmscomm1.cdholdingthen//已经建立通信链路BeginMscomm1.output:=senddata;//发送缓冲区senddata中的数据Mscomm1.outputlen:=0;//清空发送缓冲区中的数据EndEndEnd3.Modem通信中应注意的问题1.波特率的问题Modem通信中有有两种速率,一种是计算机和Modem的通信速率叫波特率[4][5],另一种是两个通信Modem之间的速率,一般是Modem

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

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

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

×
保存成功