注册 登录
编程论坛 VB6论坛

VB6能實現如下功能嗎?2021-2-13

宋政林 发布于 2021-02-13 09:34, 1969 次点击
一,做一個控制來實現自動化。
只有本站会员才能查看附件,请 登录

1,有一個串口會發來一組十六進制的數據(01 02 01 01 60 48 01 02 01 FE 20 08),VB6接收到讓它如何顯示在text1中,(之前做過串口發送方面的,但接收部分沒有做過)忘大神指導,不勝感激!

[此贴子已经被作者于2021-2-13 12:27编辑过]

5 回复
#2
宋政林2021-02-13 15:26
以下是引用宋政林在2021-2-13 09:34:54的发言:

一,做一個控制來實現自動化。

1,有一個串口會發來一組十六進制的數據(01 02 01 01 60 48 01 02 01 FE 20 08),VB6接收到讓它如何顯示在text1中,(之前做過串口發送方面的,但接收部分沒有做過)忘大神指導,不勝感激!


先使用的串口調試軟件測試結果如下圖:
只有本站会员才能查看附件,请 登录


後來使用代碼寫出來的,中間48和01連在一起了,如下圖,(01 02 01 01 60 48為輸入點閉合,01 02 01 FE 20 08為輸入點斷開)。有什麼方式可以分開嗎?
只有本站会员才能查看附件,请 登录

'---------------變量聲明-----------------------------------------
Dim a() As Byte, istr As String

Private Sub Command1_Click()
istr = ""
Text1 = ""
End Sub

'---------------窗體載入 RS232設定內容-----------------------------------------
Private Sub Form_Load()
= 1
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.RThreshold = 1 '缓冲区中接收到一个字符,就产生一次OnComm事件
MSComm1.SThreshold = 1 '若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。
MSComm1.InputMode = comInputModeBinary '二进制接收comInputModeBinary 'InputMode属性:设置接收数据的类型,0为文本格式,1为二进制格式。
MSComm1.PortOpen = True
MSComm1.Settings = "115200,n,8,1"
End Sub

Private Sub MSComm1_OnComm()
a = MSComm1.Input
For i = 0 To UBound(a)
     istr = istr & Format(Hex(a(i)), "00") & " "
Next
istr = RTrim(istr)
Text1 = istr   'Text1正常接收為:01 02 01 01 60 48 01 02 01 FE 20 08
End Sub
#3
cwa99582021-02-14 17:10
在for循环里设置个断点调试下看看,出什么问题了。
看代码是没有道理在48和01之间的空格会丢失了的。
串口的数据是一次连续发送的吗?去掉istr = RTrim(istr)这句试试看。

[此贴子已经被作者于2021-2-14 17:12编辑过]

#4
宋政林2021-02-14 19:01
回复 3楼 cwa9958
你好:cwa9958
    1,通過剛剛的測試,發現01 02 01 01 60 4801 02 01 FE 20 08   (01 02 01 01 60 48和01 02 01 FE 20 08)確實是接收了2次,通過注釋掉'istr = RTrim(istr)這個后就有空格了。
只有本站会员才能查看附件,请 登录

    2,問題點:如果a裡面為01 02 01 01 60 48 01 02 01 FE 20 08,怎麼和01 02 01 01 60 48 01 02 01 FE 20 08這個進行對比,謝謝!

[此贴子已经被作者于2021-2-14 19:56编辑过]

#5
yuma2021-02-16 19:25
可以作为字符串直接比较。
#6
宋政林2021-02-16 20:21
回复 5楼 yuma
你好:yuma
通過如下代碼后,好像可以了,語法上面的使用都是OK的吧,謝謝你的幫助。

Text1 = istr   'Text1正常接收為:01 02 01 01 60 48 01 02 01 FE 20 08   (01 02 01 01 60 4801 02 01 FE 20 08)

k2 = "01 02 01 01 60 4801 02 01 FE 20 08"

If Text1 = k2 Then

isk2 = True
Label2.Caption = "數據相同"
1