基于FAX或MODEM远程通信程序设计.doc_第1页
基于FAX或MODEM远程通信程序设计.doc_第2页
基于FAX或MODEM远程通信程序设计.doc_第3页
基于FAX或MODEM远程通信程序设计.doc_第4页
基于FAX或MODEM远程通信程序设计.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

基于FAXMODEM远程通信程序设计陈立新摘要本文首先介绍了开发Windows事件驱动的串行通信编程原理及方法,然后简述了FAXMODEM的控制方式,接着详细论述了一个远程监视系统的编程例子。最后探讨了技术的应用途径。关键词WINDOWS事件驱动串行通信FAXMODEM远程监视1. 引言FAXMODEM首先用于传真业务,近几年发展极为迅速,取得了极大成功。随着技术的发展和人们认识的提高,人们拓宽了FAXMODEM的功能,把它用于广域网络通信中,FAXMODEM能从微机接受串行数据,直接传给另一端的FAX机或另一台FAXMODEM,所以使用微机通过程控电话网和FAXMODEM互联起来可以组成一个广域网络系统,当两台微机拨号联上后,它们就独占了一条电话线路,它们之间就像本地通信一样(光电传输速度108米秒)方便1。2. Windows事件驱动编程原理采用OWL开发应用程序。2.1 WM_COMMNOTIFY消息WM_COMMNOTIFY是窗口管理类型消息,当COM端口有事件发生时Windows就向窗口发送这条消息。该消息指出了WINDOWS发送接收队列的状态,如果通告状态是CN_EVENT,表明COM端口有通信事件发生,其消息TMessage结构的成员wParam标志发生事件的COM端口2。2.2 对消息的响应定义一个窗口及一个消息响应成员函数如下:class TMonitorWindow:public Twindow私有成员public;公有成员virtual void WMCommnotify(RTMessage Msg)=WM_FIRST:WM_COMMNOTIFY;在此例中,当TMonitorWindow对象接到一个WM_COMMNOTIFY消息,就立即自动唤起WMCOmmnotify成员函数,处理端口事件。其中Msg是消息RTMessage类型的变量,RTMessage是TMessage的引用。从WINDOWS发送的消息信息存放于Msg中。如果表达式(Msg.LP.Lo CN_EVENT)=CN_EVENT)(Msg.WParam=comm2)为真,则表明端口comm2有通信事件发生,可以从comm2中读取接收报文。3. FAXMODEM的控制3.1 命令模式和在线模式FAXMODEM工作时处在本地命令状态或在线状态。处在本地命令时,用户能够通过计算机的串行接口向它发送命令,完成一定功能,FAXMODEM不传送这些命令;一旦与远程FAXMODEM建立连接后,FAXMODEM就进入在线状态,这时它将直接传送计算机发送的命令1。3.2 命令和结果码所有HayesFAXMODEM控制命令毫无例外一律使用AT开头。当FAXMODEM接受一个命令,它就返回一个结果,这个结果可以是一个字符串或结果码。因此可以编程与FAXMODEM交互,实现用软件来控制FAXMODEM。4.远程监视编程假设2台微机(称A和B)通过电话网、FAXMODEM连接,用A机监视B机,实时接收B机发送的状态报文(B机的发送是随机的),那么A机的监视软件模块主要包括:定义监视窗口;初始化并建立与B机的连接;监视B机;挂断关闭通信口结束程序运行。这里介绍功能模块编程方法如下:4.1 定义监视窗口class TMonitorWindow: public TWindowCOMSTAT comstat;char buffer1024; 缓冲区int bufnum;缓冲区实际字节数int comdev;串行口设备号int status; 当前通信状态void InitComm(); 初始化串行口void InitFAXMODEM();初始化FAXMODEMvoid Dial(char); 拨号void Connect(); 接听电话void HangUp(); 挂断电话void EndFAXMODEM(); 挂断FAXMODEMvoid EndComm(); 结束通信int ReadFAXMODEMCode();读取FAXMODEM返回码public:TMonitorWindow(PTWindowsObject AParent,LPSTR ATitle);virtual void CloseWindow();virtual void WMClose(RTMessage Msg)=CM_FIRST+WM_CLOSE;终止程序运行virtual void CommMessage(RTMessage Msg)=WM_FIRST+WM_COMMNOTIFY;通信消息函数;4.2 初始化并建立与B机的连接4.2.1 计算机串口初始化串行口的初始化必须完成三项任务:一调用OpenComm函数打开串行口。一个重要的工作是检查返回值,如果小于或等于0,则打开操作失败,这时必须采取容错措施;二调用SetCommState设置通信参数;三是调用函数setCommEventMask设定窗口只收CN_EVENT通告;调用函数EnableCommNotification屏蔽CN_RECEIVE和CN_TRANSMIT通告。参考代码如下:void TMonitorWindow:InitComm() DCB dcb;comdev=OpenComm(COM3,1024.1024);if(comdev=0) MessageBox(HWindow,串行口打开失败!,出错,MB_OK);GetCommError(comdev,comstat);else GetCommState(comdev,dcb);dcb.BaudRate=4800;dcb.Parity=NOPARITY;dcb.ByteSize=8;dcb.StopBits=ONESTOPBIT;if (SetCommState(dcb)0)McssagcBox(HWindow,串行口打开失败! ,出错,MB_OK);GetCommError(comdev,comstat);return;SetCommEventMask(comdev,EV_RXCHAR|EV_RING |EV_BREAK);EnableCommNotification(comdev,HWindow,1,1);4.2.2 FAXMODEM初始化作如下工作:关掉屏幕回显,设置数字显示结果码,打开载波信号,设置扬声器值,打开结果码,设置FAXMODEM值。组合命令为:ATEOVOC1D2X4M1L1QOSO=OS7=10r;参考代码如下:void TMonitorWindow:InitFAXMODEM() char Str=ATEOVOC1D2X4M1L1QOSO=OS7=10r;if (WriteComm(comdev,Str,strlen(Str)0) GetCommError(comdev,comstat);MessageBox(HWindow,初使化FAXMODEM失败!,出错,MB_OK);4.2.3 拨号如果用音频拨号方式拨电话号码1234567,拨号命令为:“ATDT 1234567r”;如果用脉冲拨号方式拨电话号码1234567,拨号命令为:“ATDP 1234567r”;如果电话号码暂存到字符串DialStr中,用Dial函数拨号,参考代码如下:void TMonitorWindow:Dial(char telphone)char DialStr50;sprintf(DialStr,ATDPsr,telphone);if(WriteComm(comdev,DialStr,strlen(DialStr)0)MessageBox(HWindow,拨号FAXMODEM失败!,出错,MB_OK);GetCommError(comdev,comstat);4.2.4 连接发送ATAr命令可以实现连接。参考代码如下:void TMonitorWindow:Conncct() char connstr=ATAr;if(WriteComm(comdev,connstr,strlen(connstr)0)MessageBox(HWindow,拨号FAXMODEM失败!,出错,MB_OK);GetCommError(comdev,comstat);4.3 监视B机4.3.1 读FAXMODEM返回码计算机向FAXMODEM发送命令后,立即读通信口的接送队列,将读出的字符串转换成整数即得到FAXMODEM返回码。参考代码如下:int TMonitorWindow:ReadFAXMODEMCode() char tempbuf20int readno;readno=ReadComm(comdev,tempbuf,3);if (readno0)static int i=1;bufferbufnum=0;hdc=GetDC(HWindow);TextOut(hdc,10,20i,buffer,bufnum);ReleaseDC(HWindow,hdc);i;else MessageBox(HWindow,Receive Error,ERROR,MB_OK);break;case ready:result=ReadFAXMODEMCode();status=strconnecting;Connect();break;default;result=ReadFAXMODEMCode();switch 4.4 中止程序运行按AltF4,选择弹出菜单“关闭”项执行“中止程序运行”操作,具体完成“挂断”、“关闭MODEM”、“关闭串行口”和“关闭监视窗口”功能。4.4.1 挂断发送“ATHOr”命令可以实现连接。参考代码如下:void TMonitorWindow:HangUp()char HangUpstr=ATHOr;WriteComm(comdev,HangUpstr,strlen(HangUpstr);5. 结束语通过FAXMODEM进行远程信息传输有较广阔的应用前

温馨提示

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

评论

0/150

提交评论