📄 84.htm
字号:
<p>用VB5.0开发通信软件的技巧 </p>
<p></p>
<p>一 自己开发通信软件的必要性:</p>
<p></p>
<p>随着计算机应用领域的不断扩展,计算机之间的远程通信用得越来越广泛.进行计算机通信需要调制解调器(modem),电话线及通信软件.尽管市面上有许多商品通信软件,但是在许方情况下商品通信软件并不能满足实际工作的需要.这是因为通用的通信软件虽然能发送和接收文件,但有些时侯是不适用的.例如我们在开发一个EDI(电子数据交换)应用系统时,就需要把接收到的某个单证直接地自动地放到一个数据库中,作为一条记录。这种情况下采用通用的通信软件就不行了,需要开发自己专用的通信软件。</p>
<p>过去,开发通信软件对于一般的应用软件开发人员来说是比较困难的。而现在这件事已经变得容易多了。本文介绍如何利用VB5.0和MSCOMM控件开发通信软件。</p>
<p>要想自己开发通信软件,除了要掌握VB5.0的基本编程语言以外,还需知道一些微机通信的基本原理。如有关串行端口及调制解调器的基本知识,调制解调器的使用手册及AT命令集等。这在许多书中都可以找到。本文不再叙述。</p>
<p></p>
<p>二 有关预备知识</p>
<p></p>
<p>在PC机串行端口与调制解调器进行连接时,有十几根线进行信号传输。对于用MSCOMM控件编制通信软件来说,只需了解以下五根线的代号及作用。以下五根线的高电平/低电平状态分别对应MScomm控件的相应属性的True/False值。</p>
<p>(1)DTR线:PC发往MODEM,表示PC机是否已准备好。</p>
<p>(2)RTS线:PC发往MODEM,表示PC机是否允许modem发回数据.</p>
<p>(3)DSR线:MODEM发往PC,表示MODEM是否已做好操作准备</p>
<p>(4)CTS线:MODEM发往PC,表示MODEM是否允许发送数据</p>
<p>(5)CD线:MODEM发往PC,表示MOEDM已经与呼叫的远方MODEM处于连结状态</p>
<p></p>
<p>三 MSCOMM控件的属性及事件</p>
<p></p>
<p>VB5.0所带的通信控件MSCOMM易学易用。它只有约30个属性和事件。可以从VB5.0的联机帮助中找到它的全部资料。本文简述它的主要属性及事件,并加已归类整理。以下用MSCOMM1表示在窗体上设置的一个MSCOMM控件的名称</p>
<p></p>
<p>(一)通信参数设置</p>
<p></p>
<p>(1)CommPort属性</p>
<p>语法:MSCOMM1.CommPort[=Value]</p>
<p>作用:设置或返回联接MODEM的串口的编号。</p>
<p>值:用1,2,...表示串口COM1,COM2....</p>
<p></p>
<p>(2)Settings属性</p>
<p>语法:MSCOMM1.Settings[=Value]</p>
<p>作用:设置或返回通信参数。</p>
<p>值:String型。例入用"19200,N,8,1"表示传输速率为19200bps,没有奇偶校验位,8位数据位,1位停止位。</p>
<p></p>
<p>(3)Handshaking属性</p>
<p>语法:MSCOMM1.Handshaking[=Value]</p>
<p>作用与值:设置或返回硬件握手协议。指的是PC机MODEM之间为了控制流速而约定的内部协议。</p>
<p>0 没有握手协议。不考虑流量控制。</p>
<p>1 XON/XOFF。即在数据流中嵌如控制苻来进行流控。</p>
<p>2 RTS/CTS。既由信号线RTS/CTS自动进行流量控制。</p>
<p>3 两者皆可。</p>
<p>注:实践中我们发现选用2(即RTS/CTS)是很方便的。</p>
<p></p>
<p>(二)打开/关闭端口</p>
<p></p>
<p>(4)PortOpen属性</p>
<p>语法:MSCOMM1.PortOpen[=Value]</p>
<p>作用:打开或关闭端口。</p>
<p>值:Boolean型。设为True/False可以打开/关闭端口。</p>
<p></p>
<p>(三)发送数据</p>
<p>(5)OutBufferSize属性</p>
<p>语法:MSCOMM1.OutBufferSize[=Value]</p>
<p>作用:设置或返回传输缓冲区大小。</p>
<p>值:Integer型。传输缓冲区的字节数。例如可选1024。</p>
<p></p>
<p>(6)OutPut属性</p>
<p>语法:MSCOMM1.OutPut[=Variant]</p>
<p>作用:向传输缓冲区写数据流。</p>
<p>值:Variant型变量。</p>
<p>注:传输文本数据时,应将String型数据放入Variant变量,传输二进制数据(即按字节)时Byte型数组数据放入Variant变量</p>
<p></p>
<p>(四)接收数据</p>
<p>(7)InBufferSize属性</p>
<p>语法:MSCOMM1.InBufferSize[=Value]</p>
<p>作用:设置或返回接收缓冲区大小。</p>
<p>值:Integer型。接收缓冲区的字节数。例如可选1024。</p>
<p></p>
<p>(8)InputMode属性</p>
<p>语法:MSCOMM1.InputMode[=Value]</p>
<p>作用:设置或返回接收数据的数据类型。</p>
<p>值:0用Input属性接收文本型数据。</p>
<p>1用Input属性接收二进制数据。</p>
<p></p>
<p>(9)InBufferCount属性</p>
<p>语法:MSCOMM1.InBufferCount[=Value]</p>
<p>作用:返回接收缓冲区中已传到但还未取走的字符个数。</p>
<p>值:Integer型。</p>
<p></p>
<p>(10)Input属性</p>
<p>语法:MSCOMM1.Input[=Variant]</p>
<p>作用:将接收缓冲区中收到的数据读入变量。</p>
<p>值:Variant型变量。</p>
<p>注:当InputMode属性值为0(文本模式)时,变量中含String型数镜盜nputMode属性值为1(二进制模式)时,变量中含Byte型数组数据。</p>
<p></p>
<p>(五)状态控制</p>
<p>(11)DTREnabled属性</p>
<p>(12)RTSEnabled属性</p>
<p>(13)DSRHolding属性</p>
<p>(14)CTSHolding属性</p>
<p>(15)CDHolding属性</p>
<p></p>
<p>以上五个属性即如二所述,均取值TRUE/FALSE,用于读取或控制pc机与modem之间的交互状态。需运用好。例在读取到DSRHolding属性值为TRUE时再向MODEM发出命令。应当在载波检测到以后(CDHolding属性为TRUE)时再向MODEM发送数据。</p>
<p></p>
<p>(六)事件</p>
<p>MSCOMM控件把实际上是十七个事件归并为一个事件OnComm,用属性CommEvent的十七个值来区分不同的触发时机。主要有以下几个:</p>
<p></p>
<p>(1)CommEvent=1时:传输缓冲区中的字符个数已少于Sthreshold(可设置的属性值)个.</p>
<p>(2)CommEvent=2时:接收缓冲区中收到hreshold(可设置的属性值)个个字符.利用此事件可编写接收数据的过程。</p>
<p>(3)CommEvent=3时:CTS线发生变化.</p>
<p>(4)CommEvent=4时:DSR线发生变化.</p>
<p>(5)CommEvent=5时:CD线发生变化.</p>
<p>(6)CommEvent=6时:检测到振铃信号.</p>
<p>另外十个情况是可能发生的各种通信错误时触发。可参看有关资料.</p>
<p></p>
<p>四 通信软件参数设置</p>
<p></p>
<p>在自己编写的通信软件中,应包含进行通信参数设置的功能。主要就是可以设置端口号,波特率,数据位,停止位,奇偶校验位及设置硬件握手协议。</p>
<p>可在一个窗体上用下拉列表框,选择钮等由用户来选择。《保存》时,利用VB5.0的Settings函数将这些参数存储在WINDOWS95的系统注册表中。每次运行该软件时,先用GetSettings函数调出这些参数,并对Commport,Settings,Handshaking等属性赋值,来进行通信参数设置。</p>
<p></p>
<p>五 打开通信端口</p>
<p></p>
<p>在编写的通信软件的主窗体上,可以安排一个打开/关闭端口的菜单项或图形按钮。在打开端口时,可向MODEM发出命令,进行MODEM参数设置。可以象下面这样来编程:</p>
<p>(1)打开/关闭端口</p>
<p>MSComm1.PORTOPEN=NotMSComm1.PORTOPEN</p>
<p>(2)向MODEM发出DTR(已准备好)信号</p>
<p>OpenFlag=MSComm1.PORTOPEN</p>
<p>If OpenFlag Then</p>
<p>MSComm1.DTREnable=True</p>
<p>Else</p>
<p>MSComm1.DTREnable=False</p>
<p>End If</p>
<p>(3)打开时向MODEM发出一些命令来设置参数</p>
<p>S0=n(n>=1)自动应答.n为响铃次数</p>
<p>E0/E1关闭/打开命令字符回应</p>
<p>Q0/Q1modem返回/不返回结果码</p>
<p>M0/M1关闭/打开MODEM扬声器.</p>
<p>If OpenFlag Then</p>
<p>L1:</p>
<p>If MSComm1.CTSHolding Then</p>
<p>Outstring="ATS0=1E1Q0M0"+Chr(13)</p>
<p>MSComm1.Output=Outstring</p>
<p>GoTo LL</p>
<p>Else</p>
<p>GoTo L1</p>
<p>End If</p>
<p>End If</p>
<p>LL:...</p>
<p></p>
<p>也可以安排一些可变换颜色的指示灯来代表端口打开状态,CD线状态等,这样更形象生动。</p>
<p></p>
<p>六 拨号</p>
<p></p>
<p>进行拨号需向MODEM发出ATDT命令。可用如下语句:</p>
<p>cc="ATDT"+Trim(Text1.Text)+Chr(13)</p>
<p>MSComm1.Output=cc</p>
<p>其中TEXT1是窗体上让用户输入电话号的文本框。</p>
<p>为了使程序功能更强一些,可以增加<电话号码簿管理>,可以增加,修改,删除,查询电话号码。这与一般的数据库应用程序是一样的。</p>
<p></p>
<p>七 发送文件</p>
<p></p>
<p>拨号以后,程序要循环等待并随时判定是否接通。如果MODEM向PC的回应字符串中含有"Connect"或CDHolding属性值变为True(检测出载波),则表示已与远方MODEM连机了。这时就可以发送文件了。</p>
<p>发送文件开始以前,可打开一个显示发送信息的窗口。可在此窗口上显示要发送的文件名,总长度,已发送长度等信息。</p>
<p>设置以下全局变量,存放标志字符串,在发送及接收程序中均使用。</p>
<p>S_FILENAME="FILENAME"+Chr(5)+Chr(13)+Chr(10)</p>
<p>S_FILELEN="FILELEN"+Chr(5)+Chr(13)+Chr(10)</p>
<p>S_FILESTAR="FILESTAR"+Chr(5)+Chr(13)+Chr(10)</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -