我用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.

解决方案 »

  1.   

    if not fcomm.comm1.writecommdata(@sbuf[i],1)then
    发送长度是1?
    if not fcomm.comm1.writecommdata(@sbuf[i],SizeOf(sbuf[i]))then
    这样的吧?
      

  2.   

    其实你没必要一位一位的发
    这样就可以:
    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()?
      

  3.   

    可以直接发字符串
    S: String;Comm1.WriteCommData(pchar(S),length(S));
      

  4.   

     一、2 3针连接起来 是可以在同一台机器上接收发图片
        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;串口是否打开,另外串口号 从系统设备管理器中可以看出
      

  5.   

    不知道算不算spcomm的bug,WriteCommData中长度不能直接给1,要length(str)