每次取字符串的一位,然后转换到byte一个一个发 function TForm1.ComSendDate(str:TSendData):boolean; var rbuf:array of byte; max,i:integer; commflg:boolean; begin try max:=6+length(str.Data); SetLength (rbuf,max); //重新设定缓冲数组的大小 rbuf[0]:=byte($02); //帧头 rbuf[max-1]:=byte($03); //帧尾 rbuf[1]:=ord(char(str.Addr[1])); rbuf[2]:=ord(char(str.Addr[2])); rbuf[3]:=ord(char(str.Func[1])); rbuf[4]:=ord(char(str.Func[2])); for i:=5 to max-2 do //转换字符到ASCII rbuf[i]:=ord(char(str.Data[i-4])); //发送主体 for i:=0 to max-1 do begin if not comm1.writecommdata(@rbuf[i],1) then begin commflg:=false; break; end; sleep(2); //发送时字节间的延时 //if not commflg then messagedlg('发送失败',mterror,[mbyes],0); end; except end; end;这是我程序中的一段,你仔细看“发送主体”那一段吧 发送延时是一定要的
这样可能也行,你试试 var s : pchar; begin s := '10001001'; Comm1.WriteCommData(s,8); end;
function TForm1.ComSendDate(str:TSendData):boolean;
var rbuf:array of byte;
max,i:integer;
commflg:boolean;
begin
try max:=6+length(str.Data);
SetLength (rbuf,max); //重新设定缓冲数组的大小
rbuf[0]:=byte($02); //帧头
rbuf[max-1]:=byte($03); //帧尾
rbuf[1]:=ord(char(str.Addr[1]));
rbuf[2]:=ord(char(str.Addr[2]));
rbuf[3]:=ord(char(str.Func[1]));
rbuf[4]:=ord(char(str.Func[2]));
for i:=5 to max-2 do //转换字符到ASCII
rbuf[i]:=ord(char(str.Data[i-4])); //发送主体
for i:=0 to max-1 do
begin
if not comm1.writecommdata(@rbuf[i],1) then
begin
commflg:=false;
break;
end;
sleep(2); //发送时字节间的延时
//if not commflg then messagedlg('发送失败',mterror,[mbyes],0);
end;
except end;
end;这是我程序中的一段,你仔细看“发送主体”那一段吧
发送延时是一定要的
var
s : pchar;
begin
s := '10001001';
Comm1.WriteCommData(s,8);
end;
上边有关于SPCOMM的例子
var
s : pchar;
begin
s := '10001001';
Comm1.WriteCommData(s,8);
end;
感激不尽!