当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > Visual Basic串口通讯调试方法

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

ASP.NET 中的 Visual Basic串口通讯调试方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 50 ::
收藏到网摘: n/a

现有电子秤一台,使用串口与计算机进行通讯。编写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()
 ClearText
 With 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 With

End Sub

****************************************************************************

Private Sub ClearText()
 Text3.Text = ""
 Text2.Text = "5"
 Text1.Text = ""
End Sub

Private Sub Command1_Click()
 ClearText
 ' nRece = 0 '计数器清零
 With MSC
  .InputMode = comInputModeBinary '设置数据接收模式为二进制形式
  .InBufferCount = 0 '清除接收缓冲区
  If Not .PortOpen Then
   .PortOpen = True '打开通信端口
  End If
 End With
End Sub

Private Sub MSC_OnComm()
 DelayTime ‘用来延续时间
 ClearText
 With MSC
  Select Case .CommEvent '判断通信事件
  Case comEvReceive: '收到Rthreshold个字节产生的接收事件
   SwichVar 1
   If Out(1) = 2 Then '判断是否为数据的开始标志
    .RThreshold = 0 '关闭OnComm事件接收
   End If
   Do
    DoEvents
   Loop Until .InBufferCount >= 3 '循环等待接收缓冲区>=3个字节
   ' nRece = nRece + 1
   For i = 2 To 12
    SwichVar i
    Text1.Text = Text1.Text & Chr(Out(i))
   Next
   Text1.Text = LTrim(Text1.Text)
   Text2.Text = Text2.Text & CStr(nRece)
   .RThreshold = 1 '打开MSComm事件接收
  Case Else
   ' .PortOpen = False
  End Select
 End With

End Sub

****************************************************************************

Private Sub DelayTime()

 Dim bDT As Boolean
 Dim sPrevious As Single, sLast As Single

 bDT = True

 sPrevious = Timer (Timer可以计算从子夜到现在所经过的秒数,在Microsoft Windows中,Timer函数可以返回一秒的小数部分)

 Do While bDT
  If Timer - sPrevious >= 0.3 Then bDT = False
 Loop
 bDT = True

End Sub

(通信传输速率为9600bps,则最快速度1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均5.0ms 发送一个字节,连续读取串口数据时要在程序中添加循环等待程序)

Private Sub SwichVar(ByVal nNum As Integer)

 DelayTime
 var = Null
 var = MSC.Input
 Out(nNum) = var(0)

End Sub

(设置接收数据模式采用二进制形式,即 InputMode=comInputModeBinary,但用Input属性读取数据时,不能直接赋值给 Byte 类型变量,只能通过先赋值给一个 Variant 类型变量,返回一个二进制数据的数组,再转换保存到Byte类型数变量中。)

Private Sub Text1_Change()

 Text3.Text = CText(Text1.Text) - CText(Text2.Text)

End Sub

****************************************************************************

Private Function CText(ByVal str As String) As Currency

 If str <> "" Then
  CText = CCur(Val(str))
 Else
  CText = 0
 End If

End Function

  (仪表每秒发送50帧数据,微机收到一帧完整数据至少需要20 ms时间,然后再进行数据处理。如果微机在下一帧数据接收前即20ms内能将数据计算处理完毕,则接收缓冲区内只会保存有一帧数据,不会存有两帧以上数据,接收缓冲区的大小不会影响实时监测效果(接收缓冲区>4字节)