VB2008串口接收数据

VB2008串口接收数据,第1张

Public Class Form1
Dim mSTR As String
Dim strData As String
Dim strDat As String
'Dim mSize1 As Integer
Dim mRecvByte() As Byte
Dim Hexsj As String
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As SystemIOPortsSerialDataReceivedEventArgs) Handles SerialPort1DataReceived
Dim mSize As Integer = MeSerialPort1BytesToRead
'mSize1 = mSize
ReDim mRecvByte(mSize - 1)
SerialPort1Read(mRecvByte, 0, mSize)
'mSTR = EncodingDefaultGetString(mRecvByte, 0, mSize)
BeginInvoke(New EventHandler(AddressOf ONMLoadA), SerialPort1BytesToRead()) '使用委托方式显示接收到的字符串
End Sub
Sub ONMLoadA(ByVal sender As SystemObject, ByVal e As SystemEventArgs) '委托
'TextBox4Text = mSTR
Dim i As Integer
For i = 0 To UBound(mRecvByte) 'mSize - 1
strData = strData & IIf(mRecvByte(i) > 15, Hex(mRecvByte(i)), "0" & Hex(mRecvByte(i)))
Next
Dim sj As Byte
For i = 1 To Len(strData) Step 2 '处理为ASCII字符
sj = Val("&H" & Mid(strData, i, 2))
If sj < 32 Or sj > 128 Then '当接收字节中有Chr(0)时,其后字符被切割
strDat = strDat & ""
Else
strDat = strDat & Chr(sj)
End If
Next
TextBox1Text = strDat '显示字符
TextBox2Text = strData '显示为16进制
TextBox3Text = Len(strData) / 2
End Sub
Private Sub Form1_Load(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles MyBaseLoad
SerialPort1BaudRate = 9600 '波特率设为
SerialPort1PortName = "com1" '端口为串口
SerialPort1ReceivedBytesThreshold = 1
If SerialPort1IsOpen = False Then SerialPort1Open() '打开串口
Hexsj = "002702013524200239892700020020010201E9030D07"
TxtSendText = Hexsj
End Sub
Private Sub Button1_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles Button1Click
strData = ""
strDat = ""
TextBox1Text = ""
TextBox2Text = ""
TextBox3Text = ""
End Sub
Private Sub Button2_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles Button2Click
Dim bytHex() As Byte
ReDim bytHex((Len(Hexsj) \ 2) - 1)
Dim i As Integer
For i = 1 To Len(Hexsj) Step 2
bytHex((i - 1) / 2) = Val("&H" & Mid(Hexsj, i, 2))
Next
SerialPort1Write(bytHex, 0, bytHexLength)
End Sub
End Class

MSComm1Output = str
MSComm1PortOpen = False,有误吧
刚发触发信号,就关了串口,还能接到信号吗
这里改成如下试试
Case comEvReceive '有接受事件发生
text1text =text1text & MSComm1Input

VB可以通过串口控件实现串口通信,串口通信一般8个字节为1组进行发送,下面以你的前三个字节27bit为例
需要先串口控件初始化,此处略
发送时:
Dim Sendbuffer(3) as Byte
SendBuffer(0)=&H19
SendBuffer(1)=&H15
SendBuffer(2)=&H45
MSCOMMOUTPUT=Sendbuffer
接收时;
在控件接收事件Oncomm中
Dim RecvBuffer(1024) as Byte
RecvBuffer=MSCOMMInPut
如果发送的是0X19,0X15,0X45
那么RecvBuffer(0)=&H19
RecvBuffer(1)=&H15
RecvBuffer(2)=&H45


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13216801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-21
下一篇 2023-06-21

发表评论

登录后才能评论

评论列表(0条)

保存