我用SPComm做一个串口通讯的测试,就是用网上很多的那个例子,但是到if not fcomm.comm1.writecommdata(@sbuf[i],1) then处 writecommdata函数就返回了false 显示我发送失败了 不知道为什么
我用的是RS232串口 用跳线把2针和3针连起来了 不知道这样是不是能在一台机器上实现接受和发送。 新手 请大侠指教啊!谢谢!var
fcomm: Tfcomm;
viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;procedure Tfcomm.Button3Click(Sender: TObject);
begin
comm1.StartComm;
end;procedure Tfcomm.Button4Click(Sender: TObject);
begin
comm1.StopComm;
end;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;procedure Tfcomm.Btn_sendClickClick(Sender: TObject);
begin
sbuf[1]:=byte($f0);
sbuf[2]:=byte($01);
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($f0);
senddata;
end;procedure Tfcomm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
begin
viewstring:='';
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring + inttohex(rbuf[i],2)+'';
viewstring:='接收'+viewstring;
memo1.Lines.Add(viewstring);
memo1.Lines.Add('');
end;end.
我用的是RS232串口 用跳线把2针和3针连起来了 不知道这样是不是能在一台机器上实现接受和发送。 新手 请大侠指教啊!谢谢!var
fcomm: Tfcomm;
viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;procedure Tfcomm.Button3Click(Sender: TObject);
begin
comm1.StartComm;
end;procedure Tfcomm.Button4Click(Sender: TObject);
begin
comm1.StopComm;
end;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;procedure Tfcomm.Btn_sendClickClick(Sender: TObject);
begin
sbuf[1]:=byte($f0);
sbuf[2]:=byte($01);
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($f0);
senddata;
end;procedure Tfcomm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
begin
viewstring:='';
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring + inttohex(rbuf[i],2)+'';
viewstring:='接收'+viewstring;
memo1.Lines.Add(viewstring);
memo1.Lines.Add('');
end;end.
发送长度是1?
if not fcomm.comm1.writecommdata(@sbuf[i],SizeOf(sbuf[i]))then
这样的吧?
这样就可以:
if not fcomm.comm1.writecommdata(Pchar(@sbuf[1]),length(sbuf))then
begin
commflg:=false;
break;
end;
for i:=1 to 6 do
begin
viewstring:=viewstring+inttohex(sbuf[i],2)+'';
end;
还有就是你原先的代码是不是少Pchar()?
S: String;Comm1.WriteCommData(pchar(S),length(S));
2 接受数据(RXD)
3 发出数据(TXD 二、把程序改一下procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 6 do
begin
if fcomm.comm1.writecommdata(@sbuf[i],1)then
begin
commflg:=true;
sleep(2);
viewstring:=viewstring+inttohex(sbuf[i],2)+'';
viewstring:='发送'+viewstring;
fcomm.Memo1.Lines.Add(viewstring);
fcomm.Memo1.Lines.Add('');
end;
end;
if not commflg then messagedlg('发送失败',mterror,[mbyes],0);
end;
注: Comm1.StopComm; Comm1.StartComm;串口是否打开,另外串口号 从系统设备管理器中可以看出