欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    VB串口通信程序代码.doc

    • 资源ID:56401670       资源大小:721KB        全文页数:57页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VB串口通信程序代码.doc

    vb中怎样用mscomm控件实现串口通信本问分两部分均来自第一部分jessezappy(晶晶)=If   MSComm1.PortOpen   Then   MSComm1.PortOpen   =   False                                                         MSComm1.CommPort   =   1     '假定是用COM1口                                                         '   设定传输速率等,可依照您的需求更改                             MSComm1.Settings   =   "9600,N,8,1"                                   MSComm1.PortOpen   =   True                             '-初始化Modem-                   MSComm1.Output   =   "ATZ"                   MSComm1.Output   =   "AT&F"                   MSComm1.Output   =   "ATE0"                   MSComm1.Output   =   "ATM1"                   MSComm1.Output   =   "ATQ0"                   MSComm1.Output   =   "ATV0"         '-拨号-     MSComm1.Output   ="ATDT163"       '拨163     '-接通后     MSComm1.Output   ="SDFJDKSJLKFA"       '发送字符串         '-     Private   Sub   MSComm1_OnComm()               '用串口事件捕捉数据.             If   MSComm1.InBufferCount   Then                           '   通讯埠中假如有资料的话,   则读取进来                         InStringB   =   InStringB   &   MSComm1.Input                         '   如果资料中有   Chr(13)   和   Chr(10)   的话,   则显示出来                                   If   InStr(InStringB,   vbCrLf)   Then                                           instring   =   instring   &   InStringB                                                                                     AddText   Text3,   InStringB,   False                                                                                     InStringB   =   ""                                   End   If                           End   If     END   SUB         '-挂断-     MSComm1.PortOpen   =   False         '这个挂断方法不能适用所有MODEM,我正在研究.通用办法=第二部分:=最后借你一篇文章看,作者不是我,里面的不一定都对.     '-     VB   Mscomm控件应用         江苏戚墅堰机车车辆厂设计处()   李秉璋           -               Visual   Basic   6.0(以下简称VB)   是一种功能强大、简单易学的程序设计语言。它不但保留了原先Basic语言的全部功能,而且还增加了面向对象程序设计功能。它不仅可以方便快捷地编制适用于数据处理、多媒体等方面的程序,而且利用ActiveX控件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。           3程序功能       程序首先初始化Modem,然后等待来电。当有来电时,MSComm产生OnComm事件。Modem送出的信息格式为“DATE   =   月日回车换行TIME   =   时分回车换行NMBR   =   电话号码回车换行”。在OnComm事件处理程序中对读入信息进行截取,截取电话号码后,以该电话号码为关键字,查询并显示数据库中有关信息。       4主要方法与事件代码       '通用声明部分       Const   DEBFLG   =   1       Public   COMX,   BEEPNO,   HANGUP,PNLOC   As   Integer       Public   COMBUF,   COMLIN   As   String       Private   Sub   Form_Load()       '检测串行口       Dim   I,   C   As   Integer         COMX   =   0       COMBUF   =   “”       COMLIN   =   “”       BEEPNO   =   0       HANGUP   =   0       '正常运行程序,关闭右侧Text5       If   DEBFLG=   0   Then       Form1.Width   =   Form1.Width     Text5.Width       Text5.Enabled   =   False       Text5.Visible   =   False       End   If       On   Error   GoTo   ERROR_FORM_LOAD       '检测可用串口       For   C   =   1   To   4         If   MSComm1.PortOpen   Then   MSComm1.PortOpen   =   False       MSComm1.CommPort   =   C       If   Not   MSComm1.PortOpen   Then         MSComm1.PortOpen   =   True       If   MSComm1.PortOpen   Then   MSComm1.PortOpen   =   False       If   COMX   =   0   Then   COMX   =   C       FORM_LOAD_1:       Next   C       If   COMX   =   0   Then   End       On   Error   GoTo   0       Option1(COMX     1).Value   =   True       Exit   Sub       ERROR_FORM_LOAD:       Option1(C     1).Enabled   =   False       Resume   FORM_LOAD_1       End   Sub             '选择串行口       Private   Sub   Option1_Click(Index   As   Integer)       COMX   =   Index     1       Call   INIT_MODEM       End   Sub             '初试化Modem       Private   Sub   INIT_MODEM()       If   MSComm1.PortOpen   Then   MSComm1.PortOpen   =   False       MSComm1.CommPort   =   COMX       If   Not   MSComm1.PortOpen   Then   MSComm1.       PortOpen   =   True       MSComm1.Output   =   “ATCID=1”     vbCr       '检查Modem命令是否完成       Call   CHK_MODEM         MSComm1.Output   =   “ATS0=0”     vbCr       End   Sub             '检查Modem命令是否完成       Private   Sub   CHK_MODEM()       Dim   T   As   Single       Dim   L   As   Integer       T   =   Timer       Do       COMBUF   =   COMBUF     MSComm1.Input       L   =   InStr(1,   COMBUF,“OK”)       Loop   Until   L   <>   0   Or   Timer     T   >   1       If   L   =   0   Then       Line1.Visible   =   True       Line2.Visible   =   True       Form1.Show       MsgBox   “MODEM未联机”,vbOKOnlyvbCritical,“测试MODEM”       Else       Line1.Visible   =   False       Line2.Visible   =   False       End   If       End   Sub             '串行口接收事件处理       Private   Sub   MSComm1_OnComm()       Dim   CH,   ST   As   String       Dim   LC   As   Integer       Select   Case   MSComm1.CommEvent       '接收到Rthreshold个字符       Case   comEvReceive         COMBUF   =   COMBUF     MSComm1.Input       '读取串口数据       Do         LC   =   InStr(1,   COMBUF,   Chr(10)       If   LC   =   0   Then   Exit   Do       COMLIN   =   Left(COMBUF,   LC)       COMBUF   =   Mid(COMBUF,   LC     1)       CH   =   Left(COMLIN,   1)       If   “   ”   <   CH   And   CH   <   Chr(127)   And   DEBFLG   =   1   Then       Text5.Text   =   Text5.Text     COMLIN       Text5.SelStart   =   Len(Text5.Text)       End   If       '截取来电号码,并显示       If   InStr(1,   COMLIN“NMBR=”)<>   0   Then       ST   =   Mid(COMLIN,   8)       Text2.Text=“   ”Left(ST,Len   (ST)   2)     “   ”       Form1.WindowState   =   0       Timer1.Enabled   =   True       Call   BEEP_NO       '截取来电日期,并显示       ElseIf   InStr(1,   COMLIN,   “DATE   =   ”)   <>   0   Then       Text3.Text   =   Str(Year(DATE)     “.”   Mid(COMLIN,   8,   2)     “.”     Mid(COMLIN,   10,   2)     “   ”       '截取来电时间,并显示       ElseIf   InStr(1,   COMLIN,   “TIME   =   ”)   <>   0   Then       Text4.Text   =   “   ”     Mid(COMLIN,   8,   2)     “:”     Mid(COMLIN,   10,   2)       '检测振铃个数       ElseIf   InStr(1,   COMLIN,   “RING”)   <>   0   Then       Call   BEEP_NO       If   HANGUP   =   1   Or   BEEPNO   =   15   Then   Call   HANG_UP       '检测是否停止振铃       ElseIf   Left(COMLIN,   3)   =   “000”   Then       BEEPNO   =   0       Timer1.Enabled   =   False       Form1.WindowState   =   1       ProgressBar1.Value   =   0       Frame3.Caption   =   “振铃数”       End   If       Loop       '其他事件处理       Case   comEvCTS       Case   comEvDSR       Case   comEvCD       Case   comEvRing       Case   comEventBreak       Call   INIT_MODEM       Case   Else       MsgBox   “串口接收事件号:”     MSComm1.CommEvent     “   ”,   vbOKOnly           vbCritical,   “测试串行口”       End   Select       End   Sub       、VB控件MSComm串口通讯实例vb 2007-04-04 21:26:46 阅读150 评论0   字号:大中小 订阅 =声明:本文摘自 = 现有电子秤一台,使用串口与计算机进行通讯。编写VB程序来访问串口,达到读取电子秤上显示的数据。该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600、偶校验、7个数据位、2个停止位。所有字符均发送11位ASCII码,一个起始位。在VB中与串口通讯需要引入控件MSComm串口通讯控件(在Microsoft Comm Control 6.0中)。具体程序如下:控件简称:MSC Dim Out(12) As Byte '接收var中的值Dim var As Variant '接收MSC.input中的数值Dim nRece As Integer '计算MSC.inputbuffer的个数Dim i As Integer, j As Integer '随即变量,计算循环*Private Sub Form_Load()ClearTextWith MSC.CommPort = 1 '设置Com1为通信端口.Settings = "9600,E,7,2" '设置通信端口参数 9600赫兹、偶校验、7个数据位、1个停止位.(这里需要进一步说明的是:.Setting=”BBBB,P,D,S”。含义是:B:Baud Rate(波特率);P:Parity(奇偶);D:Data Bit;S:Stop Bit).InBufferSize = 40 '设置缓冲区接收数据为40字节.InputLen = 1 '设置Input一次从接收缓冲读取字节数为1.RThreshold = 1 '设置接收一个字节就产生OnComm事件End WithEnd Sub*Private Sub ClearText()Text3.Text = ""Text2.Text = "5"Text1.Text = ""End SubPrivate Sub Command1_Click()ClearText' nRece = 0 '计数器清零With MSC.InputMode = comInputModeBinary '设置数据接收模式为二进制形式.InBufferCount = 0 '清除接收缓冲区If Not .PortOpen Then.PortOpen = True '打开通信端口End IfEnd WithEnd SubPrivate Sub MSC_OnComm()DelayTime 用来延续时间ClearTextWith MSCSelect Case .CommEvent '判断通信事件Case comEvReceive: '收到Rthreshold个字节产生的接收事件SwichVar 1If Out(1) = 2 Then '判断是否为数据的开始标志.RThreshold = 0 '关闭OnComm事件接收End IfDoDoEventsLoop Until .InBufferCount >= 3 '循环等待接收缓冲区>=3个字节' nRece = nRece + 1For i = 2 To 12SwichVar iText1.Text = Text1.Text & Chr(Out(i)NextText1.Text = LTrim(Text1.Text)Text2.Text = Text2.Text & CStr(nRece).RThreshold = 1 '打开MSComm事件接收Case Else' .PortOpen = FalseEnd SelectEnd WithEnd Sub*Private Sub De

    注意事项

    本文(VB串口通信程序代码.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开