delphi7.0 spcomm3.0 向串口‘发送’和‘接收’字符串
下面是我程序的所有代码希望大家帮我看看我现在进行程序调试是我的电脑和另一天电脑的串口相连我们两个通过‘超级终端’可以相互连接收发数据都能正常实现然后用我的程序只能接受另一...
下面是我程序的所有代码 希望大家帮我看看
我现在进行程序调试是 我的电脑和另一天电脑的串口相连
我们两个通过‘超级终端’可以相互连接收发数据都能正常实现
然后用我的程序只能接受另一天电脑发送出来的数据 ,不能像另一台电脑发送数据
希望大家帮我找出 不能发送的原因!
private
{ Private declarations }
public
{ Public declarations }
end;
var
main_from : Tmain_from;
viewstring : string;
i : integer;
rbuf,sbuf : array of byte;
implementation
{$R *.dfm}
procedure Tmain_from.Button17Click(Sender: TObject);
begin
if length(combobox4.text)=0 then exit;
if length(combobox5.text)=0 then exit;
if length(combobox6.text)=0 then exit;
if length(combobox7.text)=0 then exit;
if (button17.Caption='连 接') then
begin
//串口号
comm.CommName:=ComboBox4.Text;
//波特率
comm.BaudRate:=strtoint(ComboBox5.Text);
//数据位
if strtoint(combobox6.Text)=5 then comm.bytesize:=_5;
if strtoint(combobox6.Text)=6 then comm.bytesize:=_6;
if strtoint(combobox6.Text)=7 then comm.bytesize:=_7;
if strtoint(combobox6.Text)=8 then comm.bytesize:=_8;
//停止位1
if strtoint(combobox7.Text)=1 then Comm.StopBits:=_1;
if strtoint(combobox7.Text)=1.5 then Comm.StopBits:=_1_5;
if strtoint(combobox7.Text)=2 then Comm.StopBits:=_2;
Comm.StartComm;
memo1.Lines.Add('com1端口已经打开');
button17.Caption:='断 开';
end
else
begin
comm.StopComm;
button17.Caption:='连 接';
end;
end;
procedure Tmain_from.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm.StopComm;
end;
procedure Tmain_from.CommReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
RecData: string;
begin
SetLength(RecData, BufferLength);
move(Buffer^, PChar(@RecData[1])^, BufferLength);
memo1.Lines.Add('已接收'+ inttostr(BufferLength)+'字节数据');
memo1.Lines.Add(RecData);//添加接收到的内容
memo1.Invalidate;
end;
procedure Tmain_from.Button1Click(Sender: TObject);
var
str: Pchar;
Count: integer;
begin
str:= '10001001';
Count := Length(str);
comm.WriteCommData(Pchar(str),length(str));
if Comm.WriteCommData(str, Count) then
memo1.Lines.Add(str)
else
memo1.Lines.Add('数据发送错误!')
end;
procedure Tmain_from.FormShow(Sender: TObject);
begin
comm.StartComm;
end;
end.
procedure Tmain_from.Button1Click(Sender: TObject);
var
str: Pchar;
Count: integer;
begin
str:= '恭喜你,成功了!';
Count := Length(str);
sleep(1000);
if Comm.WriteCommData(str, Count) then
memo1.Lines.Add(str)
else
memo1.Lines.Add('数据发送错误!');
end;
我加了延时 可是还是不对啊 !当我点击发送的时候在memo1中显示了str的内容,可是另外一天电脑上的超级终端还是收不到我发的数据啊!
哪位还有高见?? 大家都说说自己的想法! 展开
我现在进行程序调试是 我的电脑和另一天电脑的串口相连
我们两个通过‘超级终端’可以相互连接收发数据都能正常实现
然后用我的程序只能接受另一天电脑发送出来的数据 ,不能像另一台电脑发送数据
希望大家帮我找出 不能发送的原因!
private
{ Private declarations }
public
{ Public declarations }
end;
var
main_from : Tmain_from;
viewstring : string;
i : integer;
rbuf,sbuf : array of byte;
implementation
{$R *.dfm}
procedure Tmain_from.Button17Click(Sender: TObject);
begin
if length(combobox4.text)=0 then exit;
if length(combobox5.text)=0 then exit;
if length(combobox6.text)=0 then exit;
if length(combobox7.text)=0 then exit;
if (button17.Caption='连 接') then
begin
//串口号
comm.CommName:=ComboBox4.Text;
//波特率
comm.BaudRate:=strtoint(ComboBox5.Text);
//数据位
if strtoint(combobox6.Text)=5 then comm.bytesize:=_5;
if strtoint(combobox6.Text)=6 then comm.bytesize:=_6;
if strtoint(combobox6.Text)=7 then comm.bytesize:=_7;
if strtoint(combobox6.Text)=8 then comm.bytesize:=_8;
//停止位1
if strtoint(combobox7.Text)=1 then Comm.StopBits:=_1;
if strtoint(combobox7.Text)=1.5 then Comm.StopBits:=_1_5;
if strtoint(combobox7.Text)=2 then Comm.StopBits:=_2;
Comm.StartComm;
memo1.Lines.Add('com1端口已经打开');
button17.Caption:='断 开';
end
else
begin
comm.StopComm;
button17.Caption:='连 接';
end;
end;
procedure Tmain_from.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm.StopComm;
end;
procedure Tmain_from.CommReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
RecData: string;
begin
SetLength(RecData, BufferLength);
move(Buffer^, PChar(@RecData[1])^, BufferLength);
memo1.Lines.Add('已接收'+ inttostr(BufferLength)+'字节数据');
memo1.Lines.Add(RecData);//添加接收到的内容
memo1.Invalidate;
end;
procedure Tmain_from.Button1Click(Sender: TObject);
var
str: Pchar;
Count: integer;
begin
str:= '10001001';
Count := Length(str);
comm.WriteCommData(Pchar(str),length(str));
if Comm.WriteCommData(str, Count) then
memo1.Lines.Add(str)
else
memo1.Lines.Add('数据发送错误!')
end;
procedure Tmain_from.FormShow(Sender: TObject);
begin
comm.StartComm;
end;
end.
procedure Tmain_from.Button1Click(Sender: TObject);
var
str: Pchar;
Count: integer;
begin
str:= '恭喜你,成功了!';
Count := Length(str);
sleep(1000);
if Comm.WriteCommData(str, Count) then
memo1.Lines.Add(str)
else
memo1.Lines.Add('数据发送错误!');
end;
我加了延时 可是还是不对啊 !当我点击发送的时候在memo1中显示了str的内容,可是另外一天电脑上的超级终端还是收不到我发的数据啊!
哪位还有高见?? 大家都说说自己的想法! 展开
展开全部
有时候牵涉到硬件部分的编程,时序很重要.这种情况多半sleep一下就可以了.
可以理解为"给点时间让硬件思考一下"
sleep(1000)
if Comm.WriteCommData(str, Count) then
memo1.Lines.Add(str)
else
memo1.Lines.Add('数据发送错误!')
可以理解为"给点时间让硬件思考一下"
sleep(1000)
if Comm.WriteCommData(str, Count) then
memo1.Lines.Add(str)
else
memo1.Lines.Add('数据发送错误!')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的spcomm3.0控件问题!
你重新换下载一个spcomm控件
就可以了!
你重新换下载一个spcomm控件
就可以了!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询