<font color=red>在读串口n次后,接受不到数据,why?(all money)</font>(300分)

  • 主题发起人 主题发起人 faun
  • 开始时间 开始时间
F

faun

Unregistered / Unconfirmed
GUEST, unregistred user!
1.自定义线程
2.第一次超时后再也收不到数据
3.串口彼端的硬件能正常发数据(由仿真得知)
 
把程序贴出来大家看看。

你最好把你解决的方法简单的说一下,才好判断问题所在。
问题好象是超时之后双方无法握手,具体要看你两边的程序。
BTW:超时之后你的发端是怎么处理的?可能是你的程序出现超时
就进入了一个死循环。

我最近也在作这方面的东西,就是 pc通过串口与单片机通信。
很想和你交流,这里面有好多问题让人费神。(我做的是一点对多点)
 
>>AdamJoe
发送端没问题,我在复位后(98下必须机器复位,NT下杀进程),还可收到发端的未
发数据.
 
我是用同步方式,线程中接收代码入下:
function TCommBase.ReceiveChar(nByteToRead:DWORD; var nByteRead:DWORD):BOOLEAN;
var
cs : ComStat;
stat:DWORD;
RET: BOOL;
begin
if hComm = 0 then
begin
ReceiveChar := false;
Exit;
end;
if PortBusy then
begin
ReceiveChar := FALSE;
Exit;
end;

PortBusy := TRUE;
if ReadFile(hComm,PkBuffTemp[0],nByteToRead,nByteRead,nil) then
Begin
ReportMessage(WM_ERRORENCOUNTED, ERR_READPORT,ord(SendBuff[5]));
ReceiveChar := FALSE;
PortBusy := FALSE;
Exit;
End;

if nByteToRead <> nByteRead then
Begin
ret := PurgeComm(hComm,PURGE_TXCLEAR or PURGE_RXCLEAR);
RET := ClearCommError(hComm,stat,@CS);
PortBusy := FALSE;
ReceiveChar := FALSE;
End else
Begin
PortBusy := FALSE;
ReceiveChar := TRUE;
End;
end;

 
where is hexi.
 
出错处理中有没有把串口缓冲区、标志位等清除
最好能贴出你程序的出错处理结构
 
能告诉我你是怎么读到串口的数据的,用什么控件???
 
这时重新打开串口怎么样?
 
我也碰到这个问题,对串口读数5分到20分钟后(每秒读16次,38K速率),就开始接受不到数据,
检查后发现线程中数据正在发送,可就是WaitCommEvent接收不到接收到数据的事件,
远端RTU的通讯灯一直不停的闪烁,说明RTU接收到了命令并回传了数据,可
WaitCommEvent就是没有检查到 :(

有人解决了这个问题了吗?
 
看来,与主板有关之外很难有其他的解释了,我改用华硕主板(BX2000)后,再也没出现。
 
多人接受答案了。
 
后退
顶部