网上看到的都是下面这种方式给的例子
sbuf[1]:=byte($ FA); //帧头 
sbuf[2]:=byte($ FB);
sbuf[3]:=byte($ 80); //命令号 
sbuf[4]:=byte($ 02); //数据长度
sbuf[5]:=byte($ 8D); //数据
sbuf[6]:=byte($ 8A); //数据
sbuf[6]:=byte($ 5A);//帧尾 校验和
可是我的数据是变量呀,如8B8A,DF4等(数据是1或2byte),不可能向上那样一一填写进去。还从网上同行处得到sendstr:=chr($FA)+chr($FB)+chr($80)+char(length)+data
其中data为我要发送的数据,可是以16进制接收的data不正确,请问data该如何
处理使接收的数据正确,或者该如何发送 。谢谢。 
就象串口调测软件那样,发送和接收都是16进制的

解决方案 »

  1.   

    comm1.WriteCommData(pchar(yourstringdata),length(yourstringdata));
      

  2.   

    全局变量
       yourstringdata=#$12#$34#$56#$ad#$78...;
      

  3.   

    多谢 getit911(Windows转Linux中) ,下面是我得函数,
    procedure A8051tran(data:string);
    var
      Len:integer;     //数据长度
      sendstr:string;  //发送的数据
      chksum:integer;  //校验和
      i:integer;       //求校验和时的循环变量
      l:Integer;       //发送
      dataHex:array[0..250] of Char;
    begin
      chksum:=0;
      sendstr:=''; //清空传送字串
      Len:=length(data);
      Form1.memo1.lines.add(data);
      sendstr:=chr($FA)+chr($FB)+chr($80)+chr((Len div 2)+1);  for l:=((Len-1)div 2) downto 0 do
      begin
        dataHex[l]:=Chr(StrToInt('$'+copy(data,l*2+1,2)));
      end;
      for l:=0 to ((Len-1)div 2) do
      begin
        sendstr:=sendstr+dataHex[l];
      end;
      // 帧头+帧头+命令+长度(1Byte)+资料(不固定长度的字串)
     // sendstr:=chr($FA)+chr($FB)+chr($80)+chr(Len+1)+data;
      for i:=1 to length(sendstr) do
      chksum:=chksum+ord(sendstr[i]);
      chksum:=chksum mod 256; //检查码
      sendstr:=sendstr+chr(chksum);  //CR
      sleep(10);
      Form1.Comm1.WriteCommData(pchar(sendstr) ,length(sendstr));
      Sleep(10);
    end;在发送8D8A时是正确的,可是8A8时
    就不正确了,应该是
      for l:=((Len-1)div 2) downto 0 do
      begin
        dataHex[l]:=Chr(StrToInt('$'+copy(data,l*2+1,2)));
      end;
    有问题,但是对于8A8这样3位的数应该如何处理呢