在线等,spcomm数据接受问题(100分)

  • 主题发起人 主题发起人 cugb_huan
  • 开始时间 开始时间
C

cugb_huan

Unregistered / Unconfirmed
GUEST, unregistred user!
我用SPCOMM控件来控制串口,现在想实现这样的功能:
由PC机控制多个单片机,这些单片机在动作完成后会发送不同的数据给PC机,比如说单片机A发FF,单片机B发FE等等等等.现在我想让PC机在接受到FF,FE,FD后跳出一个信息:初始化完毕.应该怎么写呢?
如果我想在PC机等待数据的时候,出现一个进度条,显示正在初始化,不知道用什么控件比较好呢?
谢谢,大家五一快乐.
 
这是一个简单的问题,你首先定义好你的协议命令,当pc收到这些消息时,就发布相应的消息,至于等待进度,你可以设置一个定时器,由他控制初始化进度条就可以了。
 
to jamcky
我是这样想的,先定义一个integer的N
当收到FF的时候,N=N+1,收到FC的时候也是如此
等N等于4的时候显示信息
但为什么N一直没有累加呢?但可以肯定的是,PC机收到信息了
如果方便的话能不能把程序写给我看看呢:)
 
这方面就看你怎样读取数据了,是一个包还是一个字节,有必要的时候,你可以跟踪一下你的接收部分,看收回什么数据,是不是你所要的。
另外,你这种判断方式不对,传输中肯定会有干扰的,你必须定义一个协议,来去除这些干扰。
 
to jamcky
我是一个字节一个字节的读取数据,接受的数据也很正确.
但是似乎单片机在刚通电或者刚断电的时候会发出一个莫名其妙的数据,不知道是不是你说的干扰.
你所说的定义一个协议,能不能给我个提示呢?谢谢
 
一个协议包含:
soh:包头
addr:地址
order:命令
data:数据
chk:校验
eoh:包尾
这样下来,基本就可以排除错误了
 
谢谢,问题已经解决了.
但是我还是有一个疑问,假设我的方法可行,为什么我定义的N不能累加呢?
程序是这样写的:
var
n:integer;
i:integer;
begin
n:=0;
move(buffer^,pchar((@rbuf)^),bufferLength);
for i:=1 to bufferlength do
begin
if rbuf=byte($ff)
then
begin
n:=n+1;
end
else if rbuf=byte($fd)
then
begin
n:=n+1;
end
end;
end;
中间有一部分我省去了,为什么n不能累加呢,显示N一直是1.我是菜鸟,请勿见怪,打扰了:)
 
在下面语句中设断点,看看你的数据,单步调测一下就知道了

move(buffer^,pchar((@rbuf)^),bufferLength); <------stop
for i:=1 to bufferlength do
begin
if rbuf=byte($ff)
.
.
.
.
 
能把你的联系方式,比如说QQ给我吗?我有一些问题想请教你:)
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部