首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于串口读取bcd码之后数据分析的有关问题

2012-01-07 
关于串口读取bcd码之后数据分析的问题(4).串行口命令码:本仪器作为从机与主机通信,接收命令后执行相应操作

关于串口读取bcd码之后数据分析的问题
(4).串行口命令码:本仪器作为从机与主机通信,接收命令后执行相应操作,命令码为单字节。
2DH:复位仪器
20H:向主机回送所有参数数据(V,A,W,PF,HZ),每个参数占5个字节,共5*5=25个字节。数据格式见串行数据结构
(5)。数据结构
本仪器在接到命令码后,回送相应的参数数据,每个参数由5个字节组成前4字节表示尾数,后1字节表示阶码,数据格式采用科学记忆法即小数点在第一个bcd码之后,其结构如下:
尾数(4字节):小数点;数码
阶码(1字节):数符;阶符;阶码
阶码最高为数符,次高位为阶码,(0代表下数,1代表负数),低6位为阶码值,范围为0~63H,例:
1.2345678*10^4其浮点数为12345.678,接收字节次序:78,56,34,12,04
-8.7654321*10^-2其浮点数为0.087654321,接收字节次序:21,43,65,87,12
上面是产品说明书上的内容,好多错误,我参照之后接收到了字符串,但是实在不知道怎样分析得到的数据,希望各位做过这个的能给个建议,源码最好,本人急用
这是我用加了hex函数接收到的字符串
405845CC28
202020A0E8
4040404028
E040404028
20E04040E8
不加也能收到,但是经常不完整,下面是一段
1685178344
1616160820
4016160820
1640160820
1616400844
谢谢各位帮忙,用的仪器是杭州威博的电参数测量仪,说明书好多错误,客服什么都不懂,大家以后不要用!请大家帮我分析一下数值,怎么搞?小弟先谢谢了。这个码实在不知道怎么转换成10进制的,能看懂的帮忙 啊 !
我把接收的源码也贴上
Private Sub MSComm1_OnComm()
  Dim Buffer() As Byte
  Dim str As String
  Dim i As Integer
  Select Case MSComm1.CommEvent
  Case 2
  Buffer = MSComm1.Input
   
  For i = 0 To UBound(Buffer)
  strRec = strRec & Right("0" $ Hex(Buffer(i), 2))
  Next i
  str = strRec
  End Select
   
End Sub
问题的关键是怎样分析得到的数据,分析数据,谢谢各位了,听说csdn上面高手多,请各位多帮忙。
我的qq是503922432,要是有那位大侠不吝赐教,感激不尽

[解决办法]
问题比较偏,长期搁置,帮顶吧
[解决办法]
这个问题好办,你先把乱码转换成正常的字符串,每两位或者四位(仪器用Unicode的很少,成本问题!)截取,转换为字符。看看是什么数据。然后分析这些数据是否被加密过,很多国内做的单片机的通信接口是不按照国际ASTM1394协议做的,所以有很多地方不规范。有时候我就是觉得设计人员在偷懒。
[解决办法]
Buffer = MSComm1.Input 
这一句其实就把 MSComm1.Input 给清空了,所以造成数据不完整。
应该有个判断,等所有的数据都发送完毕再分析数据。

[解决办法]
文档说明和举例不符。
按文档定义:

VB code
Function Decode(Buffer() As Byte) As Double    Dim v As Double    Dim i As Long    Dim e As Long        For i = 0 To 3        v = v / 100 + Buffer(i)    Next    v = v / 10        If (Buffer(4) And &H80) <> 0 Then        v = v * -1    End If    e = Buffer(4) And &H3F    If (Buffer(4) And &H40) <> 0 Then        e = e * -1    End If        Decode = v * (10 ^ e)End FunctionPrivate Sub MSComm1_OnComm()    Dim Buffer() As Byte    Select Case MSComm1.CommEvent        Case 2            Buffer = MSComm1.Input            Debug.Print Decode(Buffer)    End SelectEnd Sub 

热点排行