首页 上一页 1 2 下一页 尾页

用VB开发电子称串口通讯一例 点击:3861 | 回复:21



如火

    
  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2005-12-05 12:59:00
楼主
发送错误



如火

  • 精华:172帖
  • 求助:0帖
  • 帖子:803帖 | 5249回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2005-12-05 13:34:00
1楼
现有电子秤一台,使用串口与计算机进行通讯。编写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)

山水

  • 精华:4帖
  • 求助:0帖
  • 帖子:128帖 | 2238回
  • 年度积分:0
  • 历史总积分:3675
  • 注册:2004年1月06日
发表于:2005-12-05 13:38:00
2楼
困了,不看了.

山水

  • 精华:4帖
  • 求助:0帖
  • 帖子:128帖 | 2238回
  • 年度积分:0
  • 历史总积分:3675
  • 注册:2004年1月06日
发表于:2005-12-05 13:39:00
3楼
激情如火是个做正经事的.
很想认识一下

一叶77

  • 精华:0帖
  • 求助:0帖
  • 帖子:20帖 | 107回
  • 年度积分:0
  • 历史总积分:176
  • 注册:2005年8月13日
发表于:2006-10-25 00:02:00
4楼
呵呵
我用VC做了16台电子秤的数据采集和在局域网内共享,以及可以管理查询,打印生成报表等等。。楼主交流下qq121221604

winco

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 27回
  • 年度积分:0
  • 历史总积分:40
  • 注册:2005年3月08日
发表于:2006-10-25 15:14:00
5楼
一点用都没有

wanghere

  • 精华:0帖
  • 求助:0帖
  • 帖子:21帖 | 455回
  • 年度积分:0
  • 历史总积分:647
  • 注册:2006年2月08日
发表于:2006-10-25 15:19:00
6楼
有用的,支持!!!!

逆火海

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 20回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2006年10月31日
发表于:2006-11-01 13:49:00
7楼
言论自由, 

刘正刚

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 216回
  • 年度积分:0
  • 历史总积分:237
  • 注册:2006年11月10日
发表于:2006-11-12 15:10:00
8楼
永远支持激情如火。

欠费停机

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 114回
  • 年度积分:0
  • 历史总积分:211
  • 注册:2006年8月06日
发表于:2006-11-12 21:22:00
9楼
good

随风而行的爱

  • 精华:0帖
  • 求助:0帖
  • 帖子:19帖 | 39回
  • 年度积分:0
  • 历史总积分:692
  • 注册:2005年3月13日
发表于:2006-12-07 17:23:00
10楼
我建议你把接收和发送数据的子程序写到Timer里,实时性更好!

随风而行的爱

  • 精华:0帖
  • 求助:0帖
  • 帖子:19帖 | 39回
  • 年度积分:0
  • 历史总积分:692
  • 注册:2005年3月13日
发表于:2006-12-07 17:23:00
11楼
我建议你把接收和发送数据的子程序写到Timer里,实时性更好!

量子风

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 940回
  • 年度积分:0
  • 历史总积分:1259
  • 注册:2004年6月09日
发表于:2006-12-08 09:24:00
12楼
呵呵 别用VB ,偶用了好多年了感觉在这方面不实用 主要是效率低

hooko

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 90回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2005年3月03日
发表于:2007-06-26 22:48:00
13楼
 谢谢了,学习中

hooko

  • 精华:1帖
  • 求助:0帖
  • 帖子:3帖 | 90回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2005年3月03日
发表于:2007-06-26 22:53:00
14楼
 谢谢了,学习中

随风而行的爱

  • 精华:0帖
  • 求助:0帖
  • 帖子:19帖 | 39回
  • 年度积分:0
  • 历史总积分:692
  • 注册:2005年3月13日
发表于:2007-07-20 16:52:00
15楼
在学习中!

happyoicq

  • 精华:0帖
  • 求助:0帖
  • 帖子:49帖 | 1382回
  • 年度积分:0
  • 历史总积分:3120
  • 注册:2005年10月16日
发表于:2007-07-25 15:16:00
16楼
学习学习

云之槿

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:1015
  • 注册:2007年12月28日
发表于:2007-12-28 10:32:00
17楼
好的西,一定好好学习了

云之槿

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:1015
  • 注册:2007年12月28日
发表于:2008-01-08 16:51:00
18楼
真是好东西
但我有的地方还是看不太明白

国产组态

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 129回
  • 年度积分:0
  • 历史总积分:706
  • 注册:2006年4月05日
发表于:2008-01-08 17:18:00
19楼
支持

待业青年

  • 精华:6帖
  • 求助:0帖
  • 帖子:285帖 | 879回
  • 年度积分:0
  • 历史总积分:3279
  • 注册:2005年3月26日
发表于:2008-01-15 14:22:00
20楼
有用的,支持!

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页