我有一个项目使用Rocketport Infinity 16 ports从6个不同的anemometers(风速测量设备)接收数据(RS422,50Hz,38.4k波特,每个记录47个字节)。当我使用32Hz和9600波特时,一切都很好,但是,当我改为50Hz时,没有收到一些数据。我尝试使用USB而不是Rocketport Infinity而没有运气。
因此,除了风速计失败之外,我怀疑数据丢失的解释如下:
对于Rocketport Infinity,我打开了所有16个端口,但只连接了6个端口,我怀疑当切换到50Hz时,最大数据吞吐量会很高。
IRQ开关速度太高,com端口无法正常运行。
还有其他可能的原因吗?如果我弄错了,请纠正我。
Receiver的开发环境:Windows XP Professional 32位版本的Delphi 6,CPort 3.1
答案 0 :(得分:2)
IRQ率不是那么高,现代机器应该没有跟上它的麻烦。我怀疑真正的问题是你的应用程序没有足够快地处理收到的字节。特别是当您的代码也在接收数据的同一线程中更新UI时。
很难给出具体的故障排除提示,因为您既未指定语言也未指定操作系统。但一定要确保您的错误处理正确。区分缓冲区溢出(应用程序读取速度不够快)和字符缓冲区溢出(驱动程序读取速度不够快)。在Windows上,它是CE_RXOVER和CE_OVERRUN。
答案 1 :(得分:1)
超过6个设备的串行端口是否存在限制 连接?
是的,有约束。我假设您有差分输出和带差分输入的I / O接收器。请参阅Balanced differential signals。有可能超过接收器电路的最大额定电压。
每个端口速度必须与相应的设备速度匹配。请参阅必须匹配的other criterias。
IRQ切换速度太高,com端口无法正常运行。
为什么你认为你的IRQ开关速度会出现问题? - 我会说你只有scarce个IRQ资源。