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 ClassMSComm1Output = str
MSComm1PortOpen = False,有误吧
刚发触发信号,就关了串口,还能接到信号吗
这里改成如下试试
Case comEvReceive '有接受事件发生
text1text =text1text & MSComm1InputVB可以通过串口控件实现串口通信,串口通信一般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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)