使用 spcomm 碰到的问题(100分)

  • 主题发起人 主题发起人 GWW
  • 开始时间 开始时间
G

GWW

Unregistered / Unconfirmed
GUEST, unregistred user!

编一串口程序,需连续交替发送 Mark 和 Space 两种校验格式的数据,
使用了spcomm 控件,碰到两个问题,向大家请教 ?

1. 按 spcomm 中说明,可以在串口open时修改 Parity属性, 但在使用
中发现修改后发出的数据校验格式并没有改变,只有重新 stopcomm,
startcomm 后,修改才生效, spcomm 是否确实如此 ?

2. 编出的程序发现一奇怪的问题.

在一些机器上运行正常。而在另一些机器上(主板不同)却不正常,
串口根本没有数据输出。而如果程序改为不转换校验格式,则全部机
器都运行正常。试过在转换校验格式时加入延时也不起作用。找不
到原因。

是与编程有关还是与硬件有关?


有关程序段如下:

......

// send data Mark;
while not (MainForm.Comm1.SendDataEmpty) do Application.ProcessMessages;

Mainform.comm1.StopComm;
Mainform.comm1.parity:=Mark;
Mainform.comm1.StartComm;

ndispstr:=length(cdispstr); // cdispstr 为发送的数据;
try
Mainform.comm1.WritecommData(pchar(cdispstr),ndispstr);
except
showmessage('send error !');
end;

while not (MainForm.Comm1.SendDataEmpty) do Application.ProcessMessages;

// send data Space;
Mainform.comm1.StopComm;
Mainform.comm1.parity:=Space;
Mainform.comm1.StartComm;

ndispstr:=length(cdispstr);
try
Mainform.comm1.WritecommData(pchar(cdispstr),ndispstr);
except
showmessage('send error !');
end;

while not (MainForm.Comm1.SendDataEmpty) do Application.ProcessMessages;
......

请教 ...

 
在收发过程中改变通信参数(包括速率,帧格式等)
一般会在收端产生一个overrun或者frame error
你的程序要处理这样的异常,通常关闭-打开是可以解决这问题的
 
至于与主板相关的问题,一般是跟主板cache相关,你试着关闭
cache看看,一般486就不会有问题,如果那样的话就是你没有正确处理FIFO
 
接受答案了.
 
后退
顶部