win9x串口通讯出错率高,如何解决?(200分)

  • 主题发起人 主题发起人 kinglaw
  • 开始时间 开始时间
K

kinglaw

Unregistered / Unconfirmed
GUEST, unregistred user!
一个采集系统,数据以1ms(误差<1%)一次,最大连续10000次送入电脑串口。
串口设置:波特率56K
在dos下通讯良好。
在win9x中用createfile()打开com口方式读,如win9x正在打开大的程序,或较剧烈读硬盘
时就会出现掉数据的情况。
如何解决?[急]
btw:win9x中串口通讯真麻烦。
 
好像前面有个同学讨论过类似的问题,
你可以尝试将发送和接收的缓冲区开大些.
 
你的时间采集的速率可能太高了:(
起码我这样认为,你可以看看有过这样一个贴子
建议用硬件加以实现
win9x可能不能实现对串口操作精确到1ms的
要不自己做个dos程序,与window结合使用,
用dos进行数据采集,用window对其数据进行处理.
希望有帮助:)
哪个贴子结束没几天,去查查看:)
 
现在我发现问题在我试的电脑的串口使用老的主板,不支持硬件缓冲FIFO。
在有FIFO的缓冲的串口测试,同时使用其它操作(eg.我的电脑降频到166.同时运行
金山毒霸、播放vcd)数据通讯都极少出现错误。
现在的问题是:如何在win9x中测试一台PC电脑的主板支持串口FIFO,如何打开FIFO.
 
你可在“设置”的“系统”的“端口1”、“端口2”的“高级”中看到缓冲区的有关设置。
将其调到最低就行了。
 
一、中断接收的话:
使用VICHW32控件(具体名字我忘了懒得查),在中断过程中嵌入式汇编语言和
串行口通讯,避开win32的串口操作。

二、定时接收的话:
a、设置一高优先级线程
b、读取数据时,记录下其gettickcount,开辟一记录型缓冲区,每个数据包括:
1、数值,2、发生时间
c、判断处理缓冲区数据。
 
如果要使用串口控件的话,我认为AYSNC32控件最好,我最近就在使用这个控件。
非常好用,我还把它的使用手册翻译成为中文,它支持多线程,提供了许多相关的函数。
如果感兴趣的话,可到DELPHI32位厉险去DOWN一个。
 
能不能把使用手册Mail一个给我,谢谢!
E-Mail: Huu@263.net
 
1)win9x的实时性不是很好
2)能跑win9x的机器应该都有16550FIFO的
 
to dogfish 或其他高手:

如能给出使用VICHW32控件 在中断过程中嵌入式汇编语言实现串行口通讯的成功例子,
如能给出使用VICHW32控件 在时钟中断过程中嵌入式汇编语言实现定时串行口发送的
成功例子,
将得满分!
 
AYSNC32的使用手册能否Mail一个给我,谢谢!
junlu@chinese.com
 
可以考虑采用生成一个"读"线程,
并且在对串行口的设置必须正确,如果未考虑,则可能丢失#07,#08,#09...等控制字符
特别是XonXoff的流控制.
 
最近因为需要做底层开发,所以常写驱动程序。
如果用驱动程序和应用程序通讯,在剧烈读盘的时候,应用程序可能反应不过来,
但是驱动程序仍然可以把数据写到缓冲区中,由应用程序来读。
用驱动程序的好处是:驱动程序自己调整缓冲区,不依赖硬件;
缺点是win95/98和win2000/nt需要分别做驱动程序,再说驱动程序也比较难做:(
 
能不能把使用手册(中文)Mail一个给我,谢谢!
E-Mail: zhouqing99@163.net
 
多人接受答案了。
 
后退
顶部