procedure senddata;  var  i:integer;  commflg:boolean;  begin  viewstring:=‘’ ;  commflg:=true;  for i:=1 to 6 do  begin  if not fcomm.comm1.writecommdata(@sbuf[i],1) then  begin  commflg:=false;  break;  end;  //发送时字节间的延时  sleep(2);  viewstring:=viewstring+ inttohex(sbuf[i],2)+‘’ ; end;  viewstring:=‘发送’+ viewstring;  fcomm.memo1.lines.add(viewstring);  fcomm.memo1.lines.add(‘’ );  if not commflg then messagedlg(‘发送失败 !’ ,mterror,[mbyes],0);  end; 上面是自定义的发送数据过程,用的是SPCOMM控件。早上测试了下,每次都只能发送00000000,请问这是为什么?(那个writecommdata后的@是干什么的?)谢谢

解决方案 »

  1.   

    你先确定你要发送的是什么?看你的程序似乎是依次发送sbuf[1]...sbuf[6],你先看看sbuf[1]..sbuf[6]在你发送之前,这个数组里面是否有数据。
    另外,多学学基础吧,看看@和^分别代表的是什么含义。
      

  2.   

    这里面的逻辑关系到底是怎么进行的?从第一个FOR开始我就不太懂了。
      

  3.   

    @是地址符,人家来问了,当然得回答人家。
    for i:=1 to 6 do   begin   if not fcomm.comm1.writecommdata(@sbuf[i],1) then   begin   
    是依次发送sbuf[i]中的内容。writecommdata发送缓冲区里的数据。如果是
    fcomm.comm1.writecommdata(@sbuf[0],6);也可以这样写
    fcomm.comm1.writecommdata(sbuf,6);
    就是一次发送6个字节
      

  4.   

    procedure TForm1.Button17Click(Sender: TObject);
    begin
        Form1.RichEdit1.Clear;
        Form1.RichEdit2.Clear;
    sbuf[1]:=byte($5A ); {帧头}sbuf[2]:=byte($7F );sbuf[3]:=byte($99 );sbuf[4]:=Byte($DD );senddata5;{调用发送函数}
    end;
    数据自己改