首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 怎样处理我采集的数据??菜鸟求大侠帮个小忙!! [已结贴,结贴人:jjww850015]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 21:12:13 楼主
    小弟我初学VB半个月,在CSDN上泡了好久,看了很多帖子终于成功用MSCOMM把串口通讯的数据采集回来了,但现在又出现了新问题,我用MSCOMM控件与一测试仪器通讯采集回来如下数据,
    70 03 01 11 00 00 00 02 06 02 01 00 00 00 00 00 03 11 00 00 00 00 00 04 01 00 00 01 05 02 05 11 00 00 00 00 04 06 11 00 00 00 00 00 07 01 00 00 00 01 02 08 01 00 00 00 02 06 09 01 00 00 00 01 05 0A 11 00 00 00 00 00 01 7F
    按我破解的该仪器的通信协议为:其中70 03是每次采集回来的数据的开头,最后的01 7F则是结尾,中间是的十个通道返回的数据,例如01 11 00 00 00 02 06中的 01表示01通道,11表示是负的(如为01则是正),后面五位为数值,表示1通道的数据为-26,而04 01 00 00 01 05 02 则表示4通道的数据为152,以此类推,我现在不明白的是这些数据不是十六进制的吗?我该怎么把数据提取出来以十进制表示,并在界面上以数据表格的形式列出来呢?

    小弟我是边学VB边用,感觉VB好难啊,希望各位大侠能帮我解决这个问题
    80  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 21:25:281楼 得分:0
    周末大侠们都不在吗?哪位能解答我这个小问题啊???
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 22:11:432楼 得分:0
    LZ的说法是错误的,既然是十六进制,第1通道的值应该-&H11,即十进制的-17,和4通道的&H152是十进制的338,代码如下:
        Dim i As Integer, j As Integer
        Dim strCode As String
        Dim strArray() As String
        Dim strValue As String
        strCode = "70 03 01 11 00 00 00 02 06 02 01 00 00 00 00 00 03 11 00 00 00 00 00 04 01 00 00 01 05 02 05 11 00 00 00 00 04 06 11 00 00 00 00 00 07 01 00 00 00 01 02 08 01 00 00 00 02 06 09 01 00 00 00 01 05 0A 11 00 00 00 00 00 01 7F"
        strArray = Split(strCode, Space(1))
       
        For i = 2 To UBound(strArray) - 2 Step 7
            strValue = IIf(strArray(i + 1) = "01", "&H", "-&H")
            For j = i + 2 To i + 6
                strValue = strValue & Val(strArray(j))
            Next
            strValue = Val(strValue)
            Debug.Print "第" & strArray(i) & "通道的数据为:" & strValue
        Next
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 22:20:003楼 得分:0
    小弟我刚学VB很多问题都不明白,我回去试试这段代码看看运行情况,谢谢上面大侠的回答
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 10:04:224楼 得分:0
    你这个应该是10进制,不是16进制的。后面的数值好像只是按照数据的高低位顺序传输的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 11:15:105楼 得分:0
    01 11 00 00 00 02 06 表示01通道的数据为-26
    04 01 00 00 01 05 02 表示04通道的数据为152

    看来这就是所谓的“BCD编码”了!

    每次采集的数据都是那么多个字节吗?
    如果是的话,就很好办了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 16:25:046楼 得分:0
    Chen8013大哥,我的这些数据是BCD编码吗?我自己也不太清楚,按照一楼给的代码我也无法将其转换为我想要的十进制数,我用立即窗口看我的程序已经将数据
    70 03 01 11 00 00 00 02 06 02 01 00 00 00 00 00 03 11 00 00 00 00 00 04 01 00 00 01 05 02 05 11 00 00 00 00 04 06 11 00 00 00 00 00 07 01 00 00 00 01 02 08 01 00 00 00 02 06 09 01 00 00 00 01 05 0A 11 00 00 00 00 00 01 7F
    收到了,但是按照一楼给的代码我也无法将其转换为我想要的十进制数,小弟我是个菜鸟,这个问题困扰我 好几天了现在也没有解决,郁闷死了,有哪个好心的能帮我解决一下这个转换的问题吗?小弟感激不尽啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 17:02:437楼 得分:0
    不是十六进制,要按ASCll码来转化就对了。
    vb的函数是chr(10)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 20:11:578楼 得分:0
    那是ASCII码?不是吧??那上面的大哥又说是BCD编码,到底是哪个啊?晕啊到底是什么有人能给我答复吗??分数悉数相送
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 21:07:009楼 得分:80
    不是ASCII码,也不是BCD编码.
    是对方这么规定的一种编码
    你这样处理:
    用mid函数截取有用位的数字
    判断正负
    把mid返回的数字用&连起来,再用Val转换成数值
    至于mid和Val函数怎么用,找MSDN或书自己看吧


    引用 8 楼 jjww850015 的回复:
    那是ASCII码?不是吧??那上面的大哥又说是BCD编码,到底是哪个啊?晕啊到底是什么有人能给我答复吗??分数悉数相送
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 21:17:2810楼 得分:0
    上面的大哥虽然没给代码但给了思路我还是很谢谢你,要是能帮我解决这个问题就太感谢了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 21:26:5011楼 得分:0
    我这里没装VB,单位机器又上不了CSDN,囧
    引用 10 楼 jjww850015 的回复:
    上面的大哥虽然没给代码但给了思路我还是很谢谢你,要是能帮我解决这个问题就太感谢了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 15:34:3712楼 得分:0
    明显的是“BCD格式编码”的数据串
    楼主试一下下面的代码吧:

    VBScript code
    Sub Test() '测试过程 Dim i&, arr&(), strtemp$ strtemp = " 70 03 01 11 00 00 00 02 06 02 01 00 00 00 00 00 03 11 00 00 00 00 00 04 01 00 00 01 05 02 05 11 00 00 00 00 04 06 11 00 00 00 00 00 07 01 00 00 00 01 02 08 01 00 00 00 02 06 09 01 00 00 00 01 05 0A 11 00 00 00 00 00 01 7F " arr = ExchStr(strtemp) For i = 0 To UBound(arr) Debug.Print "COM"; i + 1, arr(i) Next End Sub Function ExchStr(ByVal strData$) As Long() '转换处理过程 '楼主自己保证传入的参数格式正确吧,我就不再写冗余的容错处理了 Dim lSeg&, lArrRes&(), lTemp& Dim lSign&, lArrModu&(1 To 5), i&, j& strData = Trim$(strData): lTemp = Len(strData) - 11 lArrModu(1) = 10000&: lArrModu(2) = 1000&: lArrModu(3) = 100& lArrModu(4) = 10&: lArrModu(5) = 1& lSeg = lTemp \ 21: ReDim lArrRes(0 To lSeg - 1) lSeg = 0 For i = 10 To lTemp If (Val(Mid$(strData, i, 2)) = 11) Then lSign = -1 Else lSign = 1 End If j = 0: lTemp = 0 While (j < 5) i = i + 3: j = j + 1 lTemp = lTemp + Val(Mid$(strData, i, 2)) * lArrModu(j) Wend lArrRes(lSeg) = lTemp * lSign lSeg = lSeg + 1: i = i + 5 Next ExchStr = lArrRes End Function

    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved