关于串口通讯

wudi_1982 2003-11-16 05:40:53
1.我使用来自[ Kaersoft 卡尔软件]的一个串口通讯控制器,可以成功的向一个AD模块发送命令,然后接收数据.
但没有这个软件所使用的一个控件[TApdComPort],不知道那位哥哥可以给一个.

2.我使用SPCOMM组件的时候,不知道出现了什么问题,希望各位大侠帮忙解决.
问题:
我可以成功的打开串口,也可以写命令字进去,但是读不到数据.简易源代码如下:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
S: string;
//问题主要在这里...这个接收数据的事件总是不执行
begin
inc(i);
Label1.Caption := IntToStr(i);
showmessage('receivedata');

SetLength(S, BufferLength);
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Comm1.StopComm;
Comm1.CommName := 'COM1';//打开串口..串口的其它配置信息在组件的属性栏已经设置
Comm1.StartComm;
end;

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

procedure TForm1.Button2Click(Sender: TObject);
begin

//writecommdata执行后,可以返回true.
if Comm1.WriteCommData(pchar(Edit1.Text),length(Edit1.Text)) then
showmessage('true')
else showmessage('false');

end;

希望各位大侠看看,我是一个串口通讯的初学者,不知道如何接收数据..
...全文
54 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
quansui 2003-11-24
  • 打赏
  • 举报
回复
你发送的命令是 #125 还是 '#125'啊,很关键的。应该是你发的命令模块没有识别。
lxhong1980 2003-11-21
  • 打赏
  • 举报
回复
接收数据

procedure TForm.Comm1ReceiveData(Sender: TObject;
Buffer: Pointer; BufferLength: Word);
var
i:integer;
begin
sRece1:='';
move(buffer^,pchar((@rbuf)^),bufferlength);
for i:=1 to bufferlength do
begin
sRece1:=sRece1+ inttohex(rbuf[i],2);
end;
end;
wudi_1982 2003-11-20
  • 打赏
  • 举报
回复
我用了串口监视,模块接收得命令,但没有返回数据。。我使用另外一个控件。。。就可以得到数据,就是turbopower就可以。。。
citytramper 2003-11-19
  • 打赏
  • 举报
回复
你用了串口监视就应该知道,模块有没有给你返回数据,有就是spcomm的问题,没有就是协议、线路等其它问题了
linnet2000 2003-11-19
  • 打赏
  • 举报
回复
学习
wudi_1982 2003-11-19
  • 打赏
  • 举报
回复
to 楼上...我使用了串口监视...确实发送了数据...
我在CSDN的另外一帖子中看到这样的说法:spcomm在WIN2K下有BUG,读不到数据...不知道是不是真的..
xah_JD 2003-11-18
  • 打赏
  • 举报
回复
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);

var strRecv:string;
i:byte;
begin
setlength(strRecv,BufferLength);
move(buffer^,pchar(strRecv)^,Bufferlength);

memo1.Lines.Add('已收到'+intTostr(Bufferlength)+'字节');
for i:=1 to BufferLength do
memo1.Lines.Add('s:'+intTohex(byte(strRecv[i]),1));
Memo1.Invalidate;

end;
处界到COM的是HEX数
hiflower 2003-11-18
  • 打赏
  • 举报
回复
Edit1.Text:='#025'??
Edit1.Text:=#025;!!
citytramper 2003-11-18
  • 打赏
  • 举报
回复
建议用串口监视,看看 是否串口真的发出数据, 模块是否有返回数据,再注意一下串口各种的设置
wudi_1982 2003-11-18
  • 打赏
  • 举报
回复
TO楼上....我的模块连接的COM1,命令通过COM1发送过去..为什么接收的数据会到COM2呢??不可能吧......
SoftProgress 2003-11-18
  • 打赏
  • 举报
回复
你是在同一电脑上测试吗?如果是的话,你肯定接收不到数据的。
因为你用Comm1发送数据(从Com1),此时接收数据的是Com2(假设你电脑就只有两个Com口),如果你要显示接收到数据,还得加一个控件Comm2,设置端口为Com2,然后在Comm2的ReceiveData事件中接收数据就OK了!
先决条件:要由一根线将Com1和Com2相连接。
wudi_1982 2003-11-16
  • 打赏
  • 举报
回复
我去那个什么源码空间,怎么还要交费啊..
wudi_1982 2003-11-16
  • 打赏
  • 举报
回复
楼上的哥哥.到那里去升级啊...
getit911 2003-11-16
  • 打赏
  • 举报
回复
升级 SPCOM,低版本的SPCOM有问题W2k下有时候读不到数据
wudi_1982 2003-11-16
  • 打赏
  • 举报
回复
具体问题可以这样描述:

在那个来自[卡尔]的软件,我设置好串口名,波特率这些东西后,我在命令栏输入#025,然后点发送,可以得到来自模块的信息,例如+1.536.

在我用SPCOM写的程序中,我Comm1.WriteCommData(pchar(edit1.text),length(Edit1.Text))
edit1.text 为 #025,发送成功后,rReceiveData事件不执行.也就是说,我发了命令,但是接收不到数据...命令#025没有错...
wudi_1982 2003-11-16
  • 打赏
  • 举报
回复
伙计,能具体一点吗?帮忙拉..看一下...你让菜鸟自己看,怎么看的出来呢..
aiirii 2003-11-16
  • 打赏
  • 举报
回复
一時看不出你的代碼有什麼問題, 也許, 你修改下 spcomm 那個 Tx.on Continue那個屬性吧, 你看看, 太長了, 我記不全!!
aiirii 2003-11-16
  • 打赏
  • 举报
回复
TApdComPort 應該在如下就可下載到!
http://www.turbopower.com/updates/

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧