帮忙看下这个程序那里出问题了!(100)

  • 主题发起人 www.0o0.com
  • 开始时间
W

www.0o0.com

Unregistered / Unconfirmed
GUEST, unregistred user!
var Fcomm: TFcomm; ViewString: String; i: Integer; //rbuf,sbuf:array[16] of byte; rbuf,sbuf: array[1..6] of byte;implementation{$R *.dfm}procedure TFcomm.FormShow(Sender: TObject);begin Comm1.StartComm;end;procedure TFcomm.FormClose(Sender: TObject; var Action: TCloseAction);begin Comm1.StopComm;end;procedure TFcomm.SendData;var i: integer; commflag: Boolean;begin ViewString := ''; commflag := True; For i:= 1 to 6 do begin if Not Fcomm.Comm1.WriteCommData(@sbuf, 1) then begin commflag := False; Break; end; Sleep(2); ViewString := ViewString + IntToHex(sbuf, 2) + ' '; end; ViewString := '发送' + ViewString; Fcomm.Memo1.Lines.Add(ViewString); Fcomm.Memo1.Lines.Add(''); if not commflag then MessageDlg('发送失败!', mtError, [mbYes], 0);end;procedure TFcomm.btn_SendClick(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); move(buffer^,rbuf,bufferlength); for i := 1 to bufferLength do ViewString := ViewString + IntToHex(rbuf, 2) + ' '; ViewString := '接受' + ViewString; Fcomm.Memo1.Lines.Add(ViewString); Memo1.Lines.Add(''); Memo1.Invalidate;end;应该显示的结果 memo1上显示发送 F0 01 FF FF 01 F0和接收到 F0 01 FF FF 01 F0我执行 只显示 发送 F0 01 FF FF 01 F0 没有显示 :接收到 F0 01 FF FF 01 F0好心人帮忙看看~· 谢谢了~·
 
具体的问题你还是要跟踪调试一下,但是你的全局变量里有一个i,SendData、Comm1ReceiveData中都有局部变量i,这是有问题的,你最好先把这个改掉。
 
你不应该是两台电脑互相发,这个发那个收吗?难道是自发自收?你可以用串口助手先发一下,如果串口助手也收不到,那就不是程序的问题吧
 
谢谢szhcracker,我把全局变量i去掉了 还是得到同样的结果~单步运行时 Comm1ReceiveData没有触发~网上找了好久还是没解决!
 
谢谢kunwyf12345,由于刚接触串口~对里面的原理不是太熟悉应该是自收自发!我用串口助手试试~
 
如果是RS232方式的话,你要把电脑串口的2、3脚连接起来(即短接)才可。
 
谢谢szhcracker~~ 应该是你说的问题弱弱的问下,电脑串口的2、3脚 怎么短接的~确实不是太了解,baidu上不是太理解~ 谢谢了~
 
现在的电脑串口基本上是竖着的(老式电脑是横放的),你注意看一共竖有2排针,一排5根,一排4根,找到5根的那排(一般是靠左边的)从上往下的针脚为1、2、3、4、5,因此你可以找个金属(比如钥匙,我就经常这样)什么的塞到2、3脚之间使它们与钥匙都接触,这就实现了短接,不过这样调试程序或操作电脑就不大方便了,最好找个人帮一下。如果经常要测试串口,你可以自己去买一个9孔的头子(俗称母头),把里面的2、3脚焊接起来后插到电脑的串口上即可,非常方便。
 
接受答案~谢谢~!
 
多人接受答案了。
 
顶部