首页 >> 读书频道 >> 电脑 >> VB开发通讯软件下
 
· 第14章 XSL变换
· 第14章 XSL变换
· 第14章 XSL变换
· VB开发通讯软件上
· 第14章 XSL变换
· VB Mscomm控件应
· VB Mscomm控件应
· 第14章 XSL变换
· VB Mscomm控件应
· 编写映射驱动器
· 第14章 XSL变换
· 用VB更换桌面墙纸下
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

VB开发通讯软件下


查看有无更新版本

关键字:VB 2006-9-18

 

2.上位机拨号呼叫下位机
SubCallcom-Click()
Comm1.OutPutΚ″ATDT″&Phonnum$&chr$(13)′向Modem发拨号命令
Do DoEventsLoopUntilcomm1.OutBufferCountΚ0
End Sub
3.下位机Modem应答,连通后开始定时传输数据
下位机检测CD,判断是否连通:
Sub Comm1-OnComm()
Select Casecomm1.CommEvent
Case5 ′MSCOMM-EV-CD
Timer1.EnabledΚ-1′启动定时器
End Select
End Sub
VB传送定长字符串,数据接收处理相对简单。但在发送实时数据时,若将数据转换成定长字符串,这样会大大降低传输效率。在接收端,通知程序从输入缓冲区中取字符有两种方法:一是用轮询方法循环判断InBufferCount是否为0;另外就是利用Rthreshold属性触发"OnComm"事件及"CommEvent"属性中EV-RECEIVE事件。当Rthreshold的值不为0时,允许产生EV-RECEIVE事件。该属性设置和返回在通信控件设定CommEvent特性为接收和产生OnComm事件之前要接收的字符数。VB传送变长字符串时,接收端的Rthreshold值要作相应的改变,以确保接收数据及时准确。
下位机定时发送字符串"strin3$ΚFormat$(Len(strin1$),″0000″)&chr$(8)&strin2$"。strin1$为当前字符串,strin2$为上一字符串。上位机根据接收strin3$中Len(strin1$),相应改变RthresholdΚLen(strin1$)+4。这样,通过提前发送字符串长度,改变Rthreshold值可实现发送变长数据。
Windows串行通信驱动程序的事件驱动特性仍有不稳定的缺陷。如InputLenΚ0时,有可能取出不完整的数据。为保证可靠,采取降低处理速率的方法,保证下位机发送的数据流完整地进入输入缓冲区。设InputLenΚ1,即每次从缓冲区中取一个字符。也可采用轮询方法,定时检测输入缓冲区。下位机定时发送数据:
Sub Timer1-Timer()
If comm1.CDHoldingΙΛcdThen
str1$-text1(i).Text
strin2$Κstrin1$′上一字符串
strin1$Κstr1$′当前字符串
strin3$ΚFormat$(Len(strin1$),″0000″)&chr$(8)&strin2$
′传送当前字符串长度,以及上一字符串内容
com m1.OutPutΚstrin3$
Do DoEventsLoopUntilcomm1.OutBufferCountΚ0
Else
Timer1.EnabledΚ0
End If
End Sub
上位机检测CD状态,判断是否连通、并接收处理数据。
Sub Comm1-OnComm()
Select Case comm1.CommEvent
Case5 ′MSCOMM-EV-CD检测CD状态,判断是否连通
comm1.InBufferCountΚ0′清输入缓冲区
comm1.RThresholdΚ4′当输入缓冲区中有五个字符,
Case2′MSCOMM-EV-RECEIVE产生EV-RECEIVE事件,接收处理数据
Do DoEvents
Ifcomm1.InBufferCountThen′循环从缓冲区中取数据
str1$Κstr1$+comm1.Input
Else
Exit Do
End If
Loop
len2Κ1en1′当前字符串长度
len1ΚVa1(Left$(str1$,5))′即将发送的字符串长度
comm1.RThresholdΚlen1+4
strin$ΚRight$(str1$,len2)′数据处理
……
End Select
str1$Κ″″
End Sub
4.根据设置的AT命令"&D2",当置DTR信号为低时,Modem挂机进入命令状态。也可通过串口输出""+++ATH"+chr$(13)"字符串挂机。
Sub Hang-click()
If comm1.CDHoldingΙΛcdThen′检测CD,判断是否挂机
comm1.DTRenableΚ0
comm1.DTRenableΚ-1′置DTR信号为高,为下一次通信准备
End If
End Sub
5.退出程序时,一定要关闭串口
Sub Exitcomm()
comm1.PortOpenΚfalse
End
End Sub
四、Windows通信机制和VB3.0通信控件潜在缺陷
在通信软件编制过程中,我们发现Windows下通信机制采用的"事件驱动"在实际运行中不稳定。如在文件传输过程中,误码和数据丢失的情况时有发生;若串口波特率过高,会产生无法通信或在通信过程中随机挂机的情况。这主要是由于Windows本身通信机制和通信线路介质及质量的影响。为保证数据传输稳定可靠,可采用通信协议如XModem-CRC或YModem。在MSCOMM.VBX通信控件中,Rthreshold属性值大小与输入缓冲区InBufferSize大小有关,当Rthreshold值较接近InBufferSize值时,有可能不产生EV-RECEIVE事件,为保证产生该事件,可将InBufferSize值取得较大

VB开发通讯软件下

[ 1 ]
VB开发通讯软件下 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑