863
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Dim strData As String
Dim sjO2 As Single
Dim sjCH4 As Single
Dim sjCO2 As Single
Dim sjCO As Single
Dim sjSend() As Byte
Private Sub Command1_Click() '查询测量结果
ReDim sjSend(3)
sjSend(0) = &H11
sjSend(1) = &H1
sjSend(2) = &H1
sjSend(3) = &HED
MSComm1.Output = sjSend
End Sub
Private Sub Form_Load()
Dim port As Integer
port = 1
MSComm1.CommPort = port 'COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm() '接收数据
Dim BytReceived() As Byte
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
Dim i As Integer
For i = 0 To UBound(BytReceived) '接收数据处理为16进制
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next ' 2 2 2 4 4 4 4 2 2 2
'数据处理代码 应答:[ACK] 0B 01 (CO) (CO2) (CH4) (O2) [ST1] [ST2] [CS]
If Mid(strData, 1, 2) = "16" And Len(strData) = 2 * (Val("&H" & Mid(strData, 3, 2)) + 3) Then
Text1 = strData
sjCO = Val("&H" & Mid(strData, 7, 4)) / 10
sjCO2 = Val("&H" & Mid(strData, 11, 4)) / 1000
sjCH4 = Val("&H" & Mid(strData, 15, 4))
sjO2 = Val("&H" & Mid(strData, 19, 4)) / 100
Print sjCO, sjCO2, sjCH4, sjO2
strData = "" '为下次接收做清除
End If
End Select
End Sub
Option Explicit
Dim strData As String
Private Sub Form_Load()
Dim port As Integer
port = 1
MSComm1.CommPort = port 'COM端口
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm() '接收数据
Dim BytReceived() As Byte
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
Dim i As Integer
For i = 0 To UBound(BytReceived) '接收数据处理为16进制
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
Text1 = strData
'数据处理代码
End Select
End Sub