可以在微软时间精度的Windows XP中开发实时数据采集系统吗?

时间:2011-11-29 09:08:48

标签: java windows real-time

对于我的一个项目,我需要开发一个软件,它需要在从应用程序接收到触发器后从并行端口以100毫秒获取2000个数据。这意味着需要以50微秒的间隔读取并行端口。数据频率设置为10 KHz。因此,这个采集过程应该以微秒的时间精度实时进行。 我正在尝试用Java编程。到目前为止,能够从并行端口获取数据,但努力维持时间间隔。 我的问题是:是否真的可以在windows xp环境下以这样的时间(以微秒为单位)精度进行此操作?如果是,请您指点一些指导方针/资源吗?

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

这取决于您的软件是否必须可靠或仅在大多数情况下工作。

使用普通的Java VM,您无法预测垃圾收集器的行为,因此您基本上无法阻止VM在任意时间段内中断软件的执行。

有可能使用具有“Java实时规范”(JSR-1)扩展的VM在Java中实现实时软件,但AFAIK没有针对Windows的实现,因为Windows本身没有实时能力。 Sun的前一个参考实现(现在由Oracle维护)在支持Solaris和RT的Linux版本上运行,还有其他嵌入式系统实现。

答案 1 :(得分:0)

System.nanoTime()甚至以纳秒时间精度返回时间,您也可以将其用于微秒。

答案 2 :(得分:0)

如果您不致力于仅使用Windows执行此操作,则添加一些其他硬件可能会有效。尽管硬件可以像FPGA那样精心设计,但您可以使用像8位微控制器这样简单的东西,例如Arduino板和IDE中使用的Atmega328。有了它,您可以对输入进行采样,缓冲数据,并将并行端口驱动到PC,微控制器充当实时数据源和接近实时的PC数据消耗之间的FIFO。 / p>

Atmega328只有2K的RAM,所以你需要确定它是否足以覆盖PC的死机时间。如果没有,有类似的微控制器具有更大的RAM。

Arduino UNO适用于

如果您不熟悉微控制器,那么皮肤下的操作系统不会引入不确定性。没有“无形”维护系统问题。编写代码更像是编写内核驱动程序(因为您需要了解实时注意事项,中断处理以及维护CPU状态的完整性),但周围系统尽可能简单。

- 卡尔

答案 3 :(得分:0)

Windows有第三方实时扩展。这是一个:http://www.directinsight.co.uk/products/venturcom/rtx.html

他们声称他们实时交付。现在,Java是否适合开始实时编程是一个很难的问题。有垃圾收集,JIT编译可能会妨碍...我会说 - 坚持本地代码的时间关键部分(信号收集),为漂亮的GUI构建Java接口。

C ++在概念上与Java完全不同,但至少语法很接近。

RTX家伙明确将自己定位为自定义硬件的替代品,声称商用主板上的英特尔CPU可以提供实时处理。他们的东西不是免费的。你想要免费,请使用嵌入式Linux。或者使用QNX