用spcomm通讯的时候一个奇怪的问题,问了很多高手都无法解决,请各位大哥帮忙!!!!!(100分)

D

dsq1980

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是spcomm控件,在发送和接受数据的时候当要发送数据$13即10进制的19时。
就收不到数据,我用控件自带的例程也有这个问题:
代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SPComm, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Comm1: TComm;
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
viewstring:string;
i:integer;
rbuf,sbuf:array[1..16] of byte;
implementation

{$R *.dfm}
procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:='' ;
commflg:=true;
for i:=1 to 6 do
begin
if not form1.comm1.writecommdata(@sbuf,1) then
begin
commflg:=false;
break;
end;
//发送时字节间的延时
sleep(2);
viewstring:=viewstring+inttohex(sbuf,2)+'' ;
end;
viewstring:='发送'+ viewstring;
form1.memo1.lines.add(viewstring);
form1.memo1.lines.add('');
if not commflg then messagedlg('发送失败 !' ,mterror,[mbyes],0);
end;


procedure TForm1.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,2)+'' ;
viewstring:='接收'+ viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
sbuf[1]:=byte($f0); //帧头
sbuf[2]:=byte($01); //命令号
sbuf[3]:=byte($ff);
sbuf[4]:=byte($13);//////////////////////////任何数据都行,除了$13,为什么
sbuf[5]:=byte($01);
sbuf[6]:=byte($f0); //帧尾
senddata;//调用发送函数

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
comm1.StartComm;
memo1.Clear;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
comm1.StopComm;
end;

end.
 
#17还有#19是spcomm定义的xoffchar xonchar 的定义字,你可以定义其它的字,是你通讯不用的
 
但如果我接收的数据是不固定的,0--255都用,那怎么办,可不可以不用xoffchar,xonchar
 
xoffchar xonchar 是干嘛用的,把inx_xOnOffFlow outx_xOnOffFlow给为false有和意义
 
xoffchar xonchar 是干嘛用的
xoffchar 是当程序收到该字符时就停止发送数据,当收到xonchar时就开始发送数据,
反之,你的缓冲区满了,想让对方等一会儿再发,就发xoffchar过去,处理了后,缓冲区空
就发xonchar过去,让对方发数据。

inx_xOnOffFlow outx_xOnOffFlow给为false有和意义?
当然就是是否允许上面的控制起作用了!
 
楼上说的很对,也比较完整. :))),我也用SPCOMM控件做过项目.
 
再问一个比较简单的问题,在程序运行期怎么设置齐偶校验位,他是Tparity型的
 
多人接受答案了。
 
顶部