Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5725|回复: 29

[已解决]【求助】字符串分段处理(解码)显示<在线等>

  [复制链接]
发表于 2011-7-29 11:03 | 显示全部楼层 |阅读模式
本帖最后由 robinliubb 于 2011-7-29 12:27 编辑

小弟要从串口接收一组数据,并将其按不同的规则处理并显示出来
每秒串口输出的数据如下
57 40 00 20 11 07 28 19 59 58 01 07 00 00 00 09 00 00 00 11 00 00 00 5A 00 00 00 C8 06
要求转化结果为

57 40-->W,@
00 20 -->丢弃
11 07 28 19 59 58-->11年7月28日19点59分58秒
01 -->01下面数据有效,00下面数据无效
07 00 00 00 09 00 00 00 11 00 00 00 5A 00 00 00 -->有效:7,9,17,90 无效:NUL
C8 06 -->丢弃

W@11年7月28日19点59分58秒7,9,17,90

现已经用Mscomm控件完成数据的接收,保存于字符串变量receiveData中,望指教接下去该如何操作。


以下为串口接到的数据
1hex
hex.png
2
QQ截图未命名.png

期望转化目标
从控件显示
期望.png
或者
在表格中显示
期望2.png

第一次发帖,有不到位的地方,还请各位多包涵


最佳答案
2011-7-29 15:27
已经搞定了,只不过是做的自定义函数

  1. Public Function Comm(Rng As Range)
  2. Dim Str As String, Field1 As String, Field2 As String, Field3 As String, Field4 As String, H1 As String, H2 As String, H3 As String, H4 As String
  3. Str = Replace(Rng.Value, " ", "")
  4. Field1 = Chr(Application.WorksheetFunction.Hex2Dec(Mid(Str, 1, 2))) & Chr(Application.WorksheetFunction.Hex2Dec(Mid(Str, 3, 2)))
  5. Field2 = Mid(Str, 9, 2) & "年" & Mid(Str, 11, 2) & "月" & Mid(Str, 13, 2) & "日" & Mid(Str, 15, 2) & "点" & Mid(Str, 17, 2) & "分" & Mid(Str, 19, 2) & "秒"
  6. Field3 = Mid(Str, 21, 2)
  7. If Field3 <> "00" Then
  8.     H1 = Application.WorksheetFunction.Hex2Dec(Mid(Str, 29, 2) & Mid(Str, 27, 2) & Mid(Str, 25, 2) & Mid(Str, 23, 2))
  9.     H2 = Application.WorksheetFunction.Hex2Dec(Mid(Str, 37, 2) & Mid(Str, 35, 2) & Mid(Str, 33, 2) & Mid(Str, 31, 2))
  10.     H3 = Application.WorksheetFunction.Hex2Dec(Mid(Str, 45, 2) & Mid(Str, 43, 2) & Mid(Str, 41, 2) & Mid(Str, 39, 2))
  11.     H4 = Application.WorksheetFunction.Hex2Dec(Mid(Str, 53, 2) & Mid(Str, 51, 2) & Mid(Str, 49, 2) & Mid(Str, 47, 2))
  12.     Field4 = H1 & "," & H2 & "," & H3 & "," & H4
  13. End If
  14. Comm = Field1 & Field2 & Field4
  15. End Function
复制代码

代码没有进行精简的。
附件: (, 下载次数: 12)
发表于 2011-7-29 11:27 | 显示全部楼层
回复

使用道具 举报

发表于 2011-7-29 11:34 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2011-7-29 12:15 | 显示全部楼层
Comm.rar (11.08 KB, 下载次数: 8)
回复

使用道具 举报

发表于 2011-7-29 13:46 | 显示全部楼层
难点在于没看懂你的处理规则
回复

使用道具 举报

发表于 2011-7-29 14:00 | 显示全部楼层
你先把数据导出到单元格中,我没有你那个串口控件,也看不到任何数据,对于你的规则还不太明白,根据什么转换的
回复

使用道具 举报

 楼主| 发表于 2011-7-29 14:13 | 显示全部楼层
回复 兰色幻想 的帖子

恩,我马上再做个附件
那个数据转化是根据我串口发送过来的数字仪表规定的
就是W@是Ascii码
日期不变还是Hex的
四字节一个的数据转成LSB,如08 01 00 00转为00 00 01 08再算成十进制为264
回复

使用道具 举报

 楼主| 发表于 2011-7-29 14:33 | 显示全部楼层
Comm.rar (11.76 KB, 下载次数: 5)
回复

使用道具 举报

 楼主| 发表于 2011-7-29 14:38 | 显示全部楼层
回复 雪日骄阳 的帖子

很抱歉写了那么多没写重点
receiveData中包含n多个单元的数据,可能不是整数个,中间用空格隔开
每个单元数据如下:
W@是Ascii码51 20 转化来的
接下来两个字节一个是空格,一个是NUL
然后是日期不变还是Hex的 就是11年7月开始那六个字节
下面一个字节一般都是01,是校验位,如果是00,它下面的数据可能就有错误了
然后四字节一个的数据转成LSB,如08 01 00 00转为00 00 01 08再算成十进制为264
最后两个字节也是无效的

至此循环

回复

使用道具 举报

发表于 2011-7-29 14:47 | 显示全部楼层
不必抱歉,要抱歉是耽误了你问题的解决速度
要利用问题的解决的话,问题描述得越清楚越好,小学都看得懂了,问题解决起来就超快。说真的,对你的问题还是七窍通了六窍。见谅
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-31 05:20 , Processed in 0.334734 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表