Private Sub Command1_Click() Dim cmd As String cmd = Text1.Text MSComm1.Output = cmd & vbCrLf '向串口發送命令 Text1.Text = "" '清空輸入框 Text1.SetFocus '設置焦點 End Sub
Private Sub MSComm1_OnComm() Dim buffer As String buffer = MSComm1.Input '讀取接收緩沖區中的數據 Text2.SelText = buffer '將讀取的數據顯示在輸出框中 End Sub
以上代碼僅供參考,具體實現還需要根據實際需求進行適當修改和完善。
要有16進制接收和發送
在上述代碼的基礎上,添加處理16進制數據的代碼。具體步驟如下:
添加兩個OptionButton控件,用于選擇發送和接收時的數據格式(文本或16進制)。
修改CommandButton的Click事件,先根據選擇的發送格式進行處理,再將數據發送給串口。
在MSComm控件的OnComm事件中,根據選擇的接收格式進行處理,將讀取的數據顯示在輸出框中。
代碼示例:
Private Sub Command1_Click() Dim cmd As String Dim hex As String If Option1.Value Then '發送格式選擇的是文本 cmd = Text1.Text MSComm1.Output = cmd & vbCrLf '向串口發送命令 ElseIf Option2.Value Then '發送格式選擇的是16進制 hex = Text1.Text '獲取16進制字符串 MSComm1.Output = HexToByte(hex) '將16進制字符串轉換成字節數組并發送給串口 End If
Text1.Text = "" '清空輸入框
Text1.SetFocus '設置焦點
End Sub
Private Sub MSComm1_OnComm() Dim buffer As String Dim hex As String Dim data() As Byte Dim i As Integer
If Option3.Value Then '接收格式選擇的是文本
buffer = MSComm1.Input '讀取接收緩沖區中的數據
Text2.SelText = buffer '將讀取的數據顯示在輸出框中
ElseIf Option4.Value Then '接收格式選擇的是16進制
buffer = MSComm1.Input '讀取接收緩沖區中的數據
data = StrToBytes(buffer) '將字符串轉換成字節數組
hex = ""
For i = 0 To UBound(data)
hex = hex & Right$("00" & Hex(data(i)), 2) & " " '將字節數組轉換成16進制字符串
Next
Text2.SelText = hex '將16進制字符串顯示在輸出框中
End If
End Sub
'將16進制字符串轉換成字節數組 Private Function HexToByte(ByVal hex As String) As Byte() Dim length As Integer Dim data() As Byte Dim i As Integer
hex = Replace(Replace(hex, " ", ""), vbCr, "") '去掉空格和回車符
length = Len(hex) \ 2 '計算字節數組長度
ReDim data(length - 1) '設置字節數組的長度
For i = 0 To length - 1
data(i) = Val("&H" & Mid(hex, i * 2 + 1, 2)) '將每兩個字符轉成一個字節
Next
HexToByte = data '返回字節數組
End Function
'將字符串轉換成字節數組 Private Function StrToBytes(ByVal str As String) As Byte() Dim length As Integer Dim data() As Byte
length = Len(str) '計算字符串長度
ReDim data(length - 1) '設置字節數組的長度
data = StrConv(str, vbFromUnicode) '將字符串轉換成字節數組
StrToBytes = data '返回字節數組