| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7668 人关注过本帖
标题:【求助】VB串口发送16进制数问题
只看楼主 加入收藏
luouse
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-11-5
收藏
 问题点数:0 回复次数:8 
【求助】VB串口发送16进制数问题
我想发送一串字符(以16进制发送),其中包含“,”号,我的打算是遇到“,”时,串口就不发送并延时1S,程序不知怎么写,望各位朋友帮帮忙。
部分程序如下:
Private Sub send_Click()
 Dim strText As String
 Dim bytByte() As Byte
     strText = TxtDot.Text
       longth = strHexToByteArray(strText, bytByte())
        If longth > 0 Then                             '我想在此添加那段程序,该怎么写?望指点,谢谢!!!
           MSComm1.Output = bytByte
        End If
End Sub

'**********************************
'字符表示的十六进制数转化为相应的整数
'错误则返回  -1
'**********************************

Function ConvertHexChr(str As String) As Integer
   
    Dim test As Integer
   
    test = Asc(str)
    If test >= Asc("0") And test <= Asc("9") Then
        test = test - Asc("0")
    ElseIf test >= Asc("a") And test <= Asc("f") Then
        test = test - Asc("a") + 10
    ElseIf test >= Asc("A") And test <= Asc("F") Then
        test = test - Asc("A") + 10
    Else
        test = -1                                       '出错信息
    End If
    ConvertHexChr = test
   
End Function

'**********************************
'字符串表示的十六进制数据转化为相应的字节串
'返回转化后的字节数
'**********************************

Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer
   
    Dim HexData As Integer          '十六进制(二进制)数据字节对应值
    Dim hstr As String * 1          '高位字符
    Dim lstr As String * 1          '低位字符
    Dim HighHexData As Integer      '高位数值
    Dim LowHexData As Integer       '低位数值
    Dim HexDataLen As Integer       '字节数
    Dim StringLen As Integer        '字符串长度
    Dim Account As Integer          '计数
        
    strTestn = ""                   '设初值
    HexDataLen = 0
    strHexToByteArray = 0
   
    StringLen = Len(strText)
    Account = StringLen \ 2
    ReDim bytByte(Account)
   
    For n = 1 To StringLen
   
        Do                                              '清除空格
            hstr = Mid(strText, n, 1)
            n = n + 1
            If (n - 1) > StringLen Then
                HexDataLen = HexDataLen - 1
               
                Exit For
            End If
        Loop While hstr = " "
        
        Do
            lstr = Mid(strText, n, 1)
            n = n + 1
            If (n - 1) > StringLen Then
                HexDataLen = HexDataLen - 1
               
                Exit For
            End If
        Loop While lstr = " "
        n = n - 1
        If n > StringLen Then
            HexDataLen = HexDataLen - 1
            Exit For
        End If
        
        HighHexData = ConvertHexChr(hstr)
        LowHexData = ConvertHexChr(lstr)
        
        If HighHexData = -1 Or LowHexData = -1 Then     '遇到非法字符中断转化
            HexDataLen = HexDataLen - 1
            
            Exit For
        Else
            
            HexData = HighHexData * 16 + LowHexData
            bytByte(HexDataLen) = HexData
            HexDataLen = HexDataLen + 1
            
            
        End If
                        
    Next n
   
    If HexDataLen > 0 Then                              '修正最后一次循环改变的数值
        HexDataLen = HexDataLen - 1
        ReDim Preserve bytByte(HexDataLen)
    Else
        ReDim Preserve bytByte(0)
    End If
   
   
    If StringLen = 0 Then                               '如果是空串,则不会进入循环体
        strHexToByteArray = 0
    Else
        strHexToByteArray = HexDataLen + 1
    End If
   
   
End Function
搜索更多相关主题的帖子: 串口 进制 
2008-11-17 17:26
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
你可以用split函数,先把字符串按逗号分割成多个字符串,然后逐个字符串发送,每次发送间隔1s

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-11-17 20:21
luouse
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-11-5
收藏
得分:0 
回复 2# 的帖子
split函数我不会用,能给个具体的例子吗?或者你用你的思想帮我该下我的程序
2008-11-17 20:51
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:0 
把","转换成",",也就是全角符号和半角符号的转换
strText=replace(strText",",",")
例如:
Dim bytByte() As Byte
     strText = TxtDot.Text
       longth = strHexToByteArray(replace(strText",",","), bytByte())'这样你或许就不需要延时了吧
        If longth > 0 Then                             
           MSComm1.Output = bytByte
        End If
End Sub
至于延时函数,我在论坛有贴子,怎么用也说得很明白,你搜一下吧

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2008-11-17 21:07
luouse
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-11-5
收藏
得分:0 
[bo][un]不说也罢[/un] 在 2008-11-17 21:07 的发言:[/bo]

把","转换成",",也就是全角符号和半角符号的转换
strText=replace(strText",",",")
例如:
Dim bytByte() As Byte
     strText = TxtDot.Text
       longth = strHexToByteArray(replace(strText",",", ...

谢谢你回复!但我的意思是遇到“,”时,我就是要延时一段时间,然后再发送后面的字符。你说的{把","转换成",",也就是全角符号和半角符号的转换}能达到这目的吗?等待你的回复!
2008-11-17 22:29
meihonganddulon
Rank: 1
来 自:河南郑州
等 级:新手上路
帖 子:54
专家分:4
注 册:2008-7-18
收藏
得分:0 
Dim a() As String
a = Split("sdjfdsjf,897gd",",")
则可以得到a(0)="sdjfdsjf",a(1)="897gd"。
然后加个timer每一秒发送一次就行了
2008-11-18 08:42
luouse
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-11-5
收藏
得分:0 
回复 6# 的帖子
谢谢楼上的回答!问题应该可以解决了,我去试试
2008-11-18 10:01
nanren
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-11-20
收藏
得分:0 
学习中
2008-11-22 00:23
skdyu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-3-26
收藏
得分:0 
看帖学习了,谢谢个位!
2011-02-15 17:03
快速回复:【求助】VB串口发送16进制数问题
数据加载中...
 
   



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

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