我的一个电子称,通过串口和计算机相连,我用MsComm控件进行编程,电子称不断向串口发出18个字符一组的信号,信号格式为:
1:stx ascII字符 hex(02);
2:状态字a;
3:状态字b;
4:状态字c;
5:重量值高位;
.
.
10:重量值低位;
11:皮重值高位;
.
.
16:皮重值低位;
17:回车;
18:检查和;
现我用vb编制代码如下:
Dim cou As Long
Dim I_cou As Integer
Dim data As Variant
    Me.Text1 = ""
    Me.MSComToledoA.InputLen = 0
    cou = MSComToledoA.InBufferCount
    data = Me.MSComToledoA.Input
    For I_cou = 1 To cou - 1
        If data(I_cou) = &H2 Then
            MsgBox "", vbOKOnly, SysName
        End If
        Me.Text1 = Me.Text1 + "." + Str(data(I_cou))
    Next
收到如下数据:
. 180. 48. 160. 160. 160. 160. 178. 178. 48. 160. 160. 160. 48. 48. 48. 141. 9. 130.
这是电子称上的读数为2.20kg
现在的问题是如何将重量值从数据中转换读取出来,请各位大侠救命,今天老板要催命了...

解决方案 »

  1.   

    我的MSComToledoA控件设置为:MSComToledoA.InputMode = comInputModeBinary
      

  2.   

    很显然,返回的是二进制数据,大约为三个字节表示一个数据,你的称有可能使用了IEEE754格式,需要经过计算才能转化成一个可以读懂的数值,最终数值应是带有正负号的数据。你可以找一个IEEE754格式的计算方法。如果找不到,我可以帮你找一个。
      

  3.   

    ciky() 老兄:能帮我找一个ieee754的算法吗?? 解决了一定高分相送!!
      

  4.   

    我刚才说的有一点不对,应该是四个字节表示一个数据,你可以试试我的程序,Exp是指数,MO,M1,M2是顺序的三个字节,你试试吧,我也只是猜测,因为你对数据格式的描述不是很清楚。
    告诉我你的mail,我发给你!
      

  5.   

    改为
    Me.Text1 = Me.Text1 + "." + data(I_cou)
    然后把数据发出来
      

  6.   

    不行啊,我的接受格式是:comInputModeBinary不能直接放到文本框里的要加STR函数,收到的数据为: . 180. 48. 160. 160. 160. 160. 177. 180. 53. 160. 160. 160. 48. 48. 48. 141. 3. 130. 180. 48. 160. 160. 160. 160. 177. 180. 53. 160. 160. 160. 48. 48. 48. 141. 3. 130. 180. 48. 160. 160. 160. 160. 177. 180. 53. 160. 160. 160. 48. 48. 48. 141. 3我的MAIL:[email protected]
      

  7.   

    你看到了么?&H2 显示的是180 呀,你怎么看呀,怎么算的出你要的数据呀!
      

  8.   

    改为
    Me.Text1 = Me.Text1 + "." + chr(data(I_cou))
    把数据在贴出来!
      

  9.   

    改为
    Me.Text1 = Me.Text1 + "." + chr(data(I_cou))后变为:
    00000 00000 00000 00000
      

  10.   

    你的数据有错STR(&H2)=2,你的怎么会是180呢?
      

  11.   

    你收到的数据肯定有问题,不光是楼上ftp0697说的第一个字节,还有一个回车符,在你得到的数据中也没有体现出来。