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后的@是干什么的?)谢谢
另外,多学学基础吧,看看@和^分别代表的是什么含义。
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个字节
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;
数据自己改