串口通讯 ( 积分: 50 )

  • 主题发起人 主题发起人 dajiangxu
  • 开始时间 开始时间
D

dajiangxu

Unregistered / Unconfirmed
GUEST, unregistred user!
现在在做一个串口通讯程序,程序每秒钟向串口发一条指令,然后串口会返回一个数据。不知道怎么回事情,程序运行一段时间后,串口不能返回数据。需要重新启动一下程序才可以继续返回数据。哪位大哥能帮帮,给点建议?
 
大哥大姐帮帮忙啊!
 
看看你的程式缓冲是否溢出死掉, 下位机是否死机,
 
下位机是好的。
“看看你的程式缓冲是否溢出死掉”这个怎么检查啊?能不能提供点详细的资料。我用的是Tcomm控件。
 
在你发送或接收数据的过程中可能会出现奇偶校验错误, 或者你加入的和校验, CRC校验的错误, 或者电流干扰,导致数据畸变, 你的缓冲区可能会有垃圾数据, 在判断出有错误的地方清空接收缓冲区 比如 .net的System.IO.Ports.SerialPort.DiscordInBuffer();
 
谢谢
我用的是Tcomm控件。程序根本不报错误,就是不能从串口读数据。
 
是不是缓冲区已经满了,不能继续接收数据?导致程序不能触发OnRxChar事件?
 
我遇到过这样的情况。后来也没有真正找到是外部设备还是软件的原因,或者是现场干扰。
你这样试试看,如果超过你设定的时间间隔没有数据返回,你关闭串口,然后重新打开。
 
我遇到过这样的情况。后来也没有真正找到是外部设备还是软件的原因,或者是现场干扰。
你这样试试看,如果超过你设定的时间间隔没有数据返回,你关闭串口,然后重新打开。
 
把控件给删了,再添加过一个新的.或许能行.
 
每秒发送一条指令是怎么做到的?
如果使用Timer或者GetTickCount就要注意上一秒的指令是否已经完成了
通讯往往会有很多特殊情况,比如信号不好,或者干扰,或者断线等等
在长时间运行也就容易出现一秒中完不成任务,资源没有释放而累计到下次
所以建议使用一个单独的线程控制
当本次命令完成后再进行下次的命令
 
来自:壁画, 时间:2007-4-1 15:07:40, ID:3693557
我遇到过这样的情况。后来也没有真正找到是外部设备还是软件的原因,或者是现场干扰。
你这样试试看,如果超过你设定的时间间隔没有数据返回,你关闭串口,然后重新打开。

和你说的一样,关掉串口重新打开就可以了.郁闷啊!
 
Tcomm控件太差了

改其它的吧
 
你设置为一个字节就触发,看看如何,可能时间长了,有干扰信号,导致。。。
 

Similar threads

回复
0
查看
848
不得闲
回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
816
SUNSTONE的Delphi笔记
S
后退
顶部