六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用VB調試串口通訊

[摘要]現有電子秤一臺,使用串口與計算機進行通訊。編寫VB程序來訪問串口,達到讀取電子秤上顯示的數據。該電子秤為BE01型儀表,輸出為RS-232C標準接口,波特率為300-9600、偶校驗、7個數據位、2...
現有電子秤一臺,使用串口與計算機進行通訊。編寫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字節),這時完全可以實現實時監測或實時控制;如果微機在20ms內不能將數據計算處理完畢,接收緩沖區設置得又很大,在數據計算處理完畢前,接收緩沖區內就會保存有兩幀以上數據,而且一次工作時間越長,緩沖區內滯留數據幀就越多,數據采集和數據處理之間產生逐漸增大的額外時間差,當接收緩沖區充滿后,時間差不再增大,固定在某一值,部分數據因不能及時采集到接收緩沖區中,數據產生丟失現象,真實工作情況就會和微機處理結果產生較大的時間差,對實時監測和實時控制很不利,這種情況下接收緩沖區的大小就會影響實時監測效果,所以接收緩沖區設置不能過大,以保證數據處理的實時性。)

  小結:本文所用的儀表為梅特勒公司出產的BE01型電子秤,其輸出的每個編碼均為標準的ASCII碼。其他的儀表存在發射的編碼中含有BCD壓縮碼,而且分為高低位,需要接收后對其進行解碼換算,之后還要將高位和低位數字進行相加,即可以將其BCD碼換算成實數。另還存在誤差的可能:判斷最大值,儀表在剛開始工作時有干擾,會傳導一些亂碼,位移傳感器有參數偏差,最大值一般都略大于50毫米,所以取51為極限最大值,取-51為極限最小值。暫時先寫這些,當然其他的情況可以依此類推!


主站蜘蛛池模板: 中文字幕在线精品不卡 | 日本在线播放视频 | 最近免费的中文字幕一 | 天天舔天天射 | 中文字幕一区二区在线观看 | 五月丁婷 | 首页 亚洲 欧美 制服 丝腿 | 啪啪免费视频网站 | 亚洲成人mv| 午夜看毛片 | 香蕉在线视频网站 | 日本视频免费看 | 青青青视频在线免费观看 | 午夜影院在线免费观看 | 色老头久久网 | 亚洲精品在线免费 | 青青草视频在线观看 | 在线播放侵犯高傲女教师希崎 | 色香蕉色香蕉在线视频 | 色综合久久中文字幕综合网 | 亚洲国产日韩在线观频 | 青青视频网站 | 四虎在线免费 | 涩五月婷婷 | 日本大片在线看 | 青青草精品在线视频 | 日韩理论片在线观看电视 | 在线观看国产久青草 | 欧美一区视频 | 日韩久久网 | 亚洲欧洲尹人香蕉综合 | 日本www视频在线观看 | 色综合久久综合中文小说 | 欧美中文在线观看 | 视频二区中文字幕 | 午夜精品久久久久久 | 日本高清免费网站 | 伊人影院在线播放 | 日韩一级视频免费观看 | 日本叼嗨 | 日本男女网站 |