我的电子称型号是XK3100-B2+他的说明书里面串口发数的。是2、数据格式:每次发送数据有6帧,其定义如下:
   第1帧: D0~D7 —— 0FFH(起始位)
   第2帧: D0~D2 —— 为小数点位数(0-5)
            D3~D4 —— 当前的工作模式:00 - 计重模式;01 - 计数模式;10 - 百分比模式;
            D5     —— 1表示重量为负,0表示重量为正
            D6     —— 1表示重量稳定,0表示重量不稳定
            D7     —— 1表示重量溢出,0表示重量未溢出
   第3帧: D0~D7 —— BCD1(显示数值的最低字节)
   第4帧: D0~D7 —— BCD2(显示数值的中间字节)
   第5帧: D0~D7 —— BCD3(显示数值的最高字节)
   第6帧: D0~D7 —— 计重模式下的单位:1表示单位是磅,0表示单位是公斤;
里面那个第345帧是什么意思我还真不知道。。是不是比如 1000 1001   就表示89 ???是不是就是发六位的数据过来??请高手指点

解决方案 »

  1.   

    从LZ的通信协议看,秤是发送6字节的数据.
    需要按2进制方式接受.
    第345帧协议的描述说了BCD码,1个字节表示2位10进制数,数据需要倒着使用.
      

  2.   

      第3帧: D0~D7 —— BCD1(显示数值的最低字节)
      第4帧: D0~D7 —— BCD2(显示数值的中间字节)
      第5帧: D0~D7 —— BCD3(显示数值的最高字节)以下仅供参考:
    应该是三字节BCD码,每个一字节(8位),你收到的时候应该是16进制表现形式的十进制数。比如串口你收到这三个字节(10进制)是18、52、86
    你的做法是用hex分别转换它们到16进制hex(18)、hex(52)、hex(86)得到12 34 56
    然后按高字节在前低字节在后组成563412的结果,有没有小数位看其它协议。
      

  3.   

    谢楼上哥们
    下面是上一任的哥们写的。。
    Public Function weight(wei_rec() As Byte) As Single
        Dim i As Byte
        Dim tmp1, tmp2, tmp3, tmp4, tmp5, tmp6 As Byte
        
        i = wei_rec(1) And &H7
        
        If i > 0 Then
            i = i - 1
        End If
        
        tmp1 = wei_rec(2) And &HF
        tmp2 = (wei_rec(2) And &HF0) / 16
        tmp3 = wei_rec(3) And &HF
        tmp4 = (wei_rec(3) And &HF0) / 16
        tmp5 = wei_rec(4) And &HF
        tmp6 = (wei_rec(4) And &HF0) / 16
        weight = (tmp6 * 100000) + (tmp5 * 10000) + (tmp4 * 1000) + (tmp3 * 100) + (tmp2 * 10) + tmp1
        weight = weight / (10 ^ i)
        
    End Function然后就是里面那个wei_rec  我找完他整个程序。没有定义过这个函数。。请高手指点
      

  4.   

    wei_rec()不是函数,而是定义一个字节数组,从外部传一个字节数组到weight这个函数。
      

  5.   

    感谢楼上的哥们。你刚才说到用HEX()来读这个码现在比如是50公斤的。。他现在发来的数。就是&H50。设我用tmp读了这个数那用了HEX(tmp)之后。。会等于什么。
      

  6.   

    Hex 函数
    返回代表十六进制数值的 String。