有一台电子称协议如下:
串口通讯协议:   
采用232接口,所有数据均为ASCII码,每组数据有10位组成,第一位是起始位,第10位是停止位,中间8位为数据位
连续方式通信协议(该称是连续不断的自动发送数据):
起始    符号    净重    扣重   小数点    单位    校验    结束符
起始:02H(十六进制,一个字节)
符号:+/-,净重的符号(ASCII码,一个字节)
净重:占6字节,高位在前(ASCII码)
     如净重为1000(十进制),转换为16进制为03E8H,则为0 0 0 3 E 8
扣重:与净重相同
小数点:0-4,表示小数点的位数(1字节)
单位(1字节)
校验:除起始位外前面的各字节进行共或运算(XOR)得到的数值
-------------------------------------------
-------------------------------------------
我用commportDriver组件,receivedata事件如下(我只要获得净重的数据):
procedure TForm1.CommPortDriver1ReceiveData(Sender: TObject;
  DataPtr: Pointer; DataSize: Cardinal);
Var P,TP,First:Pchar;
    Decim:Integer;
    WeiStr:String;
    WeiReal:Real;
    I:Integer;
begin
p:=dataptr;
weistr:='';
p:=p+7;     //这里不知取净重该从第几位取
   if   (datasize=16)    then
   begin
         for i:=1 to 6 do begin
               weistr:= weistr+p^;
               inc(p);
         end;
    Edit1.Text:=trim(weistr);
    Memo1.Lines.Add(trim(weistr)+#13);
   end
end;
-------------------------------
-------------------------------
问题:
1.取净重应该从第几位开始取?也就是上面的p:=p+?
2.按上述代码每次memo里面显示的字符串都不是相同的(有时候是净重,有时候是16位中其他字符),根据协议是不是除了判断字符串是16位以外还要加其他条件,还是我根本就不正确?如何保证我每次取得都是净重?