自动化专业人士学习官方网!
您现在的位置:首页 >> 网络通信 >> 通信问题 >> 内容

有关仪表和计算机通信使用VB语言问题,谢谢

时间:2009-6-3 17:54:33 点击:

  核心提示:我知道了读和写数据的形式 如何用VB进行描绘.用什么语句和控件来实现 冗余码如何加入这个串口协议的数据当中,请老师给我个例子,谢谢! 用mscomm控件实现串口通信MSComm控件提供了两种处理通信的方式:一种为事件驱动方式,该方式相当于一般程序设计中的中断方式。当串口发生事...
我知道了读和写数据的形式 如何用VB进行描绘.用什么语句和控件来实现 冗余码如何加入这个串口协议的数据当中,请老师给我个例子,谢谢! 
用mscomm控件实现串口通信


MSComm控件提供了两种处理通信的方式:一种为事件驱动方式,该方式相当于一般程序设计中的中断方式。当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。本文的两个例子均采用该方式。另一种为查询方式,在用户程序中设计定时或不定时查询 MSComm控件的某些属性是否发生变化,从而确定相应处理。在程序空闲时间较多时可以采用该方式。    
  常用属性和方法    
  利用MSComm控件实现计算机通信的关键是理解并正确设置MSComm控件众多属性和方法。以下是MSComm控件的常用属性和方法:    
  ●Commport:设置或返回串口号。    
  ●Settings:以字符串的形式设置或返回串口通信参数。    
  ●Portopen:设置或返回串口状态。    
  ●InputMode:设置或返回接收数据的类型。    
  ●Inputlen:设置或返回一次从接收缓冲区中读取字节数。    
  ●InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。    
  ●InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数。    
  ●Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。    
  ●OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。    
  ●OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。    
  ●Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。    
  ●Rthreshold:该属性为一阀值。当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent属性为ComEvReceive,并产生OnComm事件。用户可在OnComm事件处理程序中进行相应处理。若Rthreshold属性设置为0,则不产生OnComm事件。例如用户希望接收缓冲区中达到一个字符就接收一个字符,可将Rthreshold设置为1。这样接收缓冲区中接收到一个字符,就产生一次OnComm事件。    
  ●Sthreshold:该属性亦为一阀值。当发送缓冲区中字符数小于该值时,MSComm控件设置Commevent属性为ComEvSend,并产生 OnComm事件。若Sthreshold属性设置为0,则不产生OnComm事件。要特别注意的是仅当发送缓冲区中字符数小于该值的瞬间才产生 OnComm事件,其后就不再产生OnComm事件。例如Sthreshold设置为3,仅当发送缓冲区中字符数从3降为2时,MSComm控件设置 Commevent属性为ComEvSend,同时产生OnComm事件,如发送缓冲区中字符始终为2,则不会再产生OnComm事件。这就避免了发送缓冲区中数据未发送完就反复发生OnComm事件。    
  ●CommEvent:这是一个非常重要的属性。该属性设计时无效,运行时只读。一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。用户程序就可在OnComm事件处理程序中针对不同的代码,进行相应的处理。 CommEvent属性的代码、常数及含义参见表1及表2。    
  表1   CommEvent通信事件   代码   常数   含义    
  1   ComEvReceive   接受到Rthreshold个字符。该事件将持续产生,直到用Input属性从接受缓冲区中读取并删除字符。    
  2   ComEvSend   发送缓冲区中数据少于Sthreshold个,说明串口已经发送了一些数据,程序可以用Output属性继续发送数据。    
  3   ComEvCTS   Clear   To   Send信号线状态发生变化。    
  4   ComEvDSR   Data   Set   Ready信号线状态从1变到0。    
  5   ComEvCD   Carrier   Detect信号线状态发生变化。    
  6   ComEvRing   检测到振铃信号。    
  7   ComEvEOF   接受到文件结束符。    
     
     
  表2   CommEvent通信错误   代码   常数   含义    
  1001   ComEvntBreak   接受到一个中断信号。    
  1002   ComEvntCTSTO   Clear   To   Send信号超时。    
  1003   ComEvntDSRTO   Data   Set   Ready信号超时。    
  1004   ComEvntFrame   帧错误。    
  1006   ComEvntOverrun   串口超速。    
  1007   ComEvntCDTO   载波检测超时。    
  1008   ComEvntRxOver   接受缓冲区溢出,缓冲区中已没有空间。    
  1009   ComEvntRxParity   奇偶校验错。    
  1010   ComEvntTxFull   发送缓冲区溢出,缓冲区中已没有空间。    
  1011   ComEvntDCB   检索串口的设备控制块时发生错误。    
     
  实例1:计算机拨号    
  在一些实际应用中经常需要使用计算机拨号。下面这个例子利用MSComm控件操作Modem进行拨号,实现串口通信。    
  实现步骤:    
  1.建窗体    
  ●添加一个MSComm控件,用来建立与串口的连接;    
  ●添加一个Text控件,Name属性为Txttel,用来输入电话号码;    
  ●添加3个CommandButton控件,Name属性分别为DialButton、CancellButton、QuitButton,分别用来实现拨号、中止拨号、中止程序;    
  ●添加一个Label控件,用来显示所有与拨号有关的信息。窗体见图1。    
  2.设置MSComm控件属性    
  ●InBufferSize=1024;    
  ●Inputlen=0;    
  ●InputMode=0;    
  ●Rthreshold=2;    
  ●RTSEnable=True;    
  ●Settings=“9600,N,8,1”;    
  ●Sthreshold=0。    
  因为每一台计算机的串口使用状态都不会一样。为使程序具有通用性,在窗体的Load方法中首先进行串口测试,找到第一个可用串口后再进行设置。    
  3.程序功能    
  程序根据输入的电话号码进行拨号,Modem正常拨号后,提示用户摘机,准备通话。    
     
  图1   电话拨号实例    
     
  4.主要方法与事件代码    
  '设置可用串口    
  Private   Sub   Form_Load()      
  On   Error   GoTo   error_open    
  For   i   =   1   To   4    
  MSComm1.CommPort   =   i    
  MSComm1.PortOpen   =   True    
  '设置可用的第一个串口    
  On   Error   GoTo   0      
  Exit   Sub    
  error_resume:    
  Next    
  error_open:    
  Resume   error_resume    
  End   Sub    
        
  Private   Sub   DialButton_Click()    
  Dim   Number$,   Temp$    
  Number$   =   Trim$(Txttel.Text)    
  If   Number$   =   “"   Then    
  MsgBox   “请输入电话号码"    
  Txttel.SetFocus    
  Exit   Sub    
  End   If    
  DialButton.Enabled   =   False    
  QuitButton.Enabled   =   False    
  DialString$   =“ATDT”+   Number$   +   “;”   +   vbCr    
  '清除接收缓冲区    
  MSComm1.InBufferCount   =0      
  '拨电话号码    
  MSComm1.Output   =   DialString$      
  Lblmessage.Caption   =   “正在拨号码   -”+Number$    
  DialButton.Enabled   =   True    
  QuitButton.Enabled   =   True    
  End   Sub    
        
  Private   Sub   MSComm1_OnComm()    
  Select   Case   MSComm1.CommEvent    
  Case   comEvReceive    
  '读取串口数据    
  COMBUF=COMBUF   +   MSComm1.Input      
  lc   =   InStr(1,   COMBUF,   “OK”)    
  If   lc   =   0   Then   Exit   Sub    
  'Modem已正常拨号,返回OK    
  Lblmessage.Caption   =   “请您摘下电话机,    
  准备通话”      
  Case   comEvSend    
  End   Select    
  End   Sub    
        
  Private   Sub   CancelButton_Click()    
  '断开与调制解调器的连接    
  MSComm1.Output   =   “ATH”   +   vbCr      
  End   Sub    
  实例2:实现来电显示    
  在一些实际应用中,需要显示并保存来电号码,并根据电话号码显示相应资料,比如小区物业管理和110报警等系统。    
  实现步骤:    
  1.创建窗体    
  ●添加一个MSComm控件,用来建立与串口的连接;    
  ●添加4个Option控件,用来确定使用的串口号;    
  ●添加4个Label控件,用来显示来电号码及日期时间;    
  ●添加一个ProgressBar控件,用来显示电话振铃次数;    
  ●为方便调试程序,添加一个Text控件Text   5,用来显示Modem传来的所有信息。窗体见图2。    
     
  图2   来电显示窗体    
     
  2.设置MSComm控件属性    
  ●InBufferSize=1024;    
  ●Inputlen=0;    
  ●InputMode=0;    
  ●Rthreshold=1;    
  ●RTSEnable=True;    
  ●Settings=“9600,N,8,1";    
  ●Sthreshold=0。    
   

作者:节能降耗 录入:节能降耗 来源:原创
相关评论
发表我的评论
  • 大名:
  • 内容:
  • 自动化网(www.zidonghuawang.com) © 2019 版权所有 All Rights Reserved.
  • Email:admin@zidonghuawang.com 鲁icp备08103350号