| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1763 人关注过本帖
标题:VB6能實現如下功能嗎?2021-2-13
只看楼主 加入收藏
宋政林
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2020-9-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
VB6能實現如下功能嗎?2021-2-13
一,做一個控制來實現自動化。
图片附件: 游客没有浏览图片的权限,请 登录注册

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

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

搜索更多相关主题的帖子: text1 VB6 感激 
2021-02-13 09:34
宋政林
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2020-9-16
收藏
得分:0 
以下是引用宋政林在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
2021-02-13 15:26
cwa9958
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:76
帖 子:278
专家分:1357
注 册:2006-6-25
收藏
得分:20 
在for循环里设置个断点调试下看看,出什么问题了。
看代码是没有道理在48和01之间的空格会丢失了的。
串口的数据是一次连续发送的吗?去掉istr = RTrim(istr)这句试试看。

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

2021-02-14 17:10
宋政林
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2020-9-16
收藏
得分:0 
回复 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编辑过]

2021-02-14 19:01
yuma
Rank: 12Rank: 12Rank: 12
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1934
专家分:3012
注 册:2009-12-22
收藏
得分:0 
可以作为字符串直接比较。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2021-02-16 19:25
宋政林
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2020-9-16
收藏
得分:0 
回复 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 = "數據相同"
2021-02-16 20:21
快速回复:VB6能實現如下功能嗎?2021-2-13
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025219 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved