加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VB程序以串口方式访问电子秤实例【工控老鬼】

(2012-05-23 09:11:53)
标签:

西门子plc

工业自动化

s7200

s7300

plc

工控老鬼

杂谈

分类: WinCC

VB程序以串口方式访问电子秤实例【工控老鬼】

VB程序以串口方式访问电子秤实例【工控老鬼】



    现有电子秤一台,使用串口与计算机进行通讯。编写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 As Integer, As Integer '随即变量,计算循环
****************************************************************************
Private Sub Form_Load()
 ClearText
 With MSC
  .CommPort '设置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 '设置Input一次从接收缓冲读取字节数为1
  .RThreshold '设置接收一个字节就产生OnComm事件
 End With
End Sub
****************************************************************************
Private Sub ClearText()
 Text3.Text ""
 Text2.Text "5"
 Text1.Text ""
End Sub
Private Sub Command1_Click()
 ClearText
 ' nRece '计数器清零
 With MSC
  .InputMode comInputModeBinary '设置数据接收模式为二进制形式
  .InBufferCount '清除接收缓冲区
  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) Then '判断是否为数据的开始标志
    .RThreshold '关闭OnComm事件接收
   End If
   Do
    DoEvents
   Loop Until .InBufferCount >= '循环等待接收缓冲区>=3个字节
   ' nRece nRece 1
   For To 12
    SwichVar i
    Text1.Text Text1.Text Chr(Out(i))
   Next
   Text1.Text LTrim(Text1.Text)
   Text2.Text Text2.Text CStr(nRece)
   .RThreshold '打开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函数可以返回一秒的小数部分)
组态王6.53破 解版下载
力控6.0完美破 
开物2000破 解版
 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类型数变量中。) 

 

【工控老鬼】友情分享

自动化专业技术博客:http://blog.sina.com.cn/wincchome   

Emailhispeed@foxmail.com 

西门子S7200/300/400,人机界面,变频器,运动控制,伺服驱动,WinCC组态监控,自动化系统集成,以及自动化个行业的解决方案。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有