當前位置:編程學習大全網 - 源碼下載 - 如何實現串口數據采集,如何分析這些數據

如何實現串口數據采集,如何分析這些數據

MSCOMM控件在VB6的企業版中有,需通過部件添加方式加載。

Private Sub MSComm_OnComm()

Dim bytInput() As Byte

Dim intInputLen As Integer

Select Case frmMain.ctrMSComm.CommEvent

Case comEvReceive

If blnReceiveFlag Then

If Not frmMain.ctrMSComm.PortOpen Then

frmMain.ctrMSComm.CommPort = intPort

frmMain.ctrMSComm.Settings = strSet

frmMain.ctrMSComm.PortOpen = True

End If

'此處添加處理接收的代碼

frmMain.ctrMSComm.InputMode = comInputModeText '按ASCII接收

intInputLen = frmMain.ctrMSComm.InBufferCount

ReDim bytInput(intInputLen)

bytInput = frmMain.ctrMSComm.Input

Text1 = bytInput

Text2 = Text1

jscd = Len(Text1)

If Left(Text1, 1) <> Chr(27) Or jscd > 25 Then '

frmMain.Label3.BackColor = vbRed

frmMain.Label3.ForeColor = vbWhite

frmMain.Label3.Caption = "接收信號出錯!"

ElseIf Left(Text2, 1) = Chr(27) And Mid(Text2, 25, 1) = Chr(13) Then

frmMain.Label3.BackColor = vbGreen

frmMain.Label3.ForeColor = vbBlack

frmMain.Label3.Caption = "接收信號正常!"

If Left(Text2, 6) = Chr(27) & "R0032" And jscd = 25 Then

If Val(fa2) >= 0 And Len(fa2) = 4 Then

fa2 = "0" & Mid(fa2, 2, 3)

End If

frmMain.txtSend = Chr(27) & fa0 & fa1 & "9999" & zhenkong & fa2 & fa3 & fa4 & Chr(13)

lenTxtSend = Len(txtSend)

frmJishi.Label8.Caption = txtSend

frmJishi.Label11.Caption = lenTxtSend

If lenTxtSend = 24 Then

Call commFasong

Else

frmMain.Label3.BackColor = vbRed

frmMain.Label3.ForeColor = vbWhite

frmMain.Label3.Caption = "發送信號出錯!"

End If

blL1 = Mid$(Text2, 19, 2)

If blL1 = "01" Then

record_jmm(0) = Val(Mid$(Text2, 21, 4)) / 10 '制品1溫度

ElseIf blL1 = "02" Then

record_jmm(1) = Val(Mid$(Text2, 21, 4)) / 10 '制品2溫度

ElseIf blL1 = "03" Then

record_jmm(2) = Val(Mid$(Text2, 21, 4)) / 10 '制品3溫度

ElseIf blL1 = "04" Then

record_jmm(3) = Val(Mid$(Text2, 21, 4)) / 10 '制品4溫度

ElseIf blL1 = "05" Then

record_jmm(4) = Val(Mid$(Text2, 21, 4)) / 10 '制品5溫度

ElseIf blL1 = "06" Then

record_jmm(5) = Val(Mid$(Text2, 21, 4)) / 10 '制品6溫度

End If

record_jm(0) = Val(record_jmm(0))

record_jm(1) = Val(record_jmm(1))

record_jm(2) = Val(record_jmm(2))

record_jm(3) = Val(record_jmm(3))

record_jm(4) = Val(record_jmm(4))

record_jm(5) = Val(record_jmm(5))

blL = Mid$(Text2, 7, 6)

Call Hex_bin '輸出口狀態鑒別

blLg = Mid$(Text2, 13, 6)

Call hex_bin1 '輸出口故障狀態鑒別

txtSend = ""

Else

txtSend = ""

End If

End If

If Not blnAutoSendFlag And Not blnReceiveFlag Then

frmMain.ctrMSComm.PortOpen = False

End If

End If

End Select

End Sub

以上是壹段MSCOMM的ONCOMM事件代碼,接收的數據按上下位機約定取出賦值於全局變量,在其它窗體進行數據記錄(寫入數據庫).至於數據分析確如壹樓說的可以海闊天空,通過數據控件及SQL語句來完成任務.

以下提供MSDN參考:

OnComm 常數

常數 值 描述

comEvSend 1 發送事件。

comEvReceive 2 接收事件。

comEvCTS 3 clear-to-send 線變化。

comEvDSR 4 data-set ready 線變化。

comEvCD 5 carrier detect 線變化。

comEvRing 6 振鈴檢測。

comEvEOF 7 文件結束。

MSComm 控件提供下列兩種處理通訊的方式:

事件驅動通訊是處理串行端口交互作用的壹種非常有效的方法。在許多情況下,在事件發生時需要得到通知,例如,在 Carrier Detect (CD) 或 Request To Send (RTS) 線上壹個字符到達或壹個變化發生時。在這些情況下,可以利用 MSComm 控件的 OnComm 事件捕獲並處理這些通訊事件。OnComm 事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱 CommEvent 屬性。

在程序的每個關鍵功能之後,可以通過檢查 CommEvent 屬性的值來查詢事件和錯誤。如果應用程序較小,並且是自保持的,這種方法可能是更可取的。例如,如果寫壹個簡單的電話撥號程序,則沒有必要對每接收壹個字符都產生事件,因為唯壹等待接收的字符是調制解調器的“確定”響應。

SThreshold 屬性

在 MSComm 控件設置 CommEvent 屬性為 comEvSend 並產生 OnComm 事件之前,設置並返回傳輸緩沖區中允許的最小字符數。

說明

若設置 Sthreshold 屬性為 0(缺省值),數據傳輸事件不會產生 OnComm 事件。若設置 Sthreshold 屬性為 1,當傳輸緩沖區完全空時,MSComm 控件產生 OnComm 事件。

如果在傳輸緩沖區中的字符數小於 value,CommEvent 屬性設置為 comEvSend,並產生 OnComm 事件。comEvSend 事件僅當字符數與 Sthreshold 交叉時被激活壹次。例如,如果 Sthreshold 等於 5,僅當在輸出隊列中字符數從 5 降到 4 時,comEvSend 才發生。如果在輸出隊列中從沒有比 Sthreshold 多的字符,comEvSend 事件將絕不會發生。

CommEvent 屬性包含實際錯誤或產生 OnComm 事件的數碼。註意,設置 Rthreshold 或 Sthreshold 屬性為 0,分別使捕獲 comEvReceive 和 comEvSend 事件無效。

  • 上一篇:螞蟻信息發布源代碼
  • 下一篇:SaaS系統能為企業帶來哪些價值?
  • copyright 2024編程學習大全網