使用机器实时处理

Real-time processing with machines

本文关键字:实时处理 机器      更新时间:2023-10-16

我将在C 中编写一个控制大型CNC计算机的接口,并且它将在Windows上运行。出于安全原因,我希望此过程以其自身的核心运行,以便它可以实时运行该过程。如果它与Windows共享核心,则所有Windows进程都将在我的过程之前处理。基本上,如何确保我的过程始终位于处理队列的前面,或者如何指定核心来运行我的过程并留下另一个核心来处理窗口?另外,是否有任何方法可以看到我的编程是实时运行的。又名,此核心正在处理此程序,但是该核心没有做任何事情,因为我们告诉程序不在该程序上运行。任何输入都会有所帮助。

不能保证您的过程会实时处理。Windows不这样做。由于您提到安全性,我会提到,如果提起诉讼,您将陷入严重的麻烦。专家证人会证明该设计本质上是不安全的。

用户控制和显示可以在Windows中完成,但实时操作属于专用硬件,例如Plc。

您可以使用SetThreadAffinityMask限制线程以在可用处理器/内核的某些子集上运行。

如果您使用SetThreadPrioritySetProcessPriorityClass将线程设置为实时优先级,则只有在实时运行的其他线程才能中断它,有效地迫使其他线程在其他内核上运行(除非您将两个或多个线程提高到实时时间优先级。

作为替代方案,Windows Embedded Compact是一个基于实时优先级的OS,可以提供柔和的实时保证(比Windows Vista/7更好)。这很昂贵,但是与其他商业rtoses相当。