私は、24msごとにUDPパケットを送信するPLCを持っています。 「同時に」(すなわち、数十マイクロ秒または何百マイクロ秒であろうと)、同じPLCがカメラをトリガして画像をスナップする。画像とUDPパケットの両方を受信するWindows 8.1システムと、各画像をPLCからのUDPパケットと照合できるアプリケーションが実行されています。Windowsネットワークでの可変待ち時間
ほとんどの場合、Windowsアプリケーションに関する限り、2つのイベント間では20ms±5msの間に適度な固定レイテンシがあります。しかし時にはレイテンシが上昇し、決して落ちることはありません。結局、それは私が持っているマッチングバッファの範囲を越え、2つのシステムは自分自身をリセットします。それは常に "通常の"レベルの遅延で始まります。
この可変待ち時間の変動性は私には分かりますが、20ms±5msで終日座ってしまうこともありますが、他の日には定期的かつ急速に増加し、システムが往々にして不自然にリセットされます。
ここで何が起こっている可能性がありますか?それを修正するために何ができるのですか? WindowsはレイテンシやPLCシステムの可能性のあるソースですか?
99%の疑わしいWindowsは、PLCがリアルタイム応答用に設計されており、Windowsはそうではないためです。 Windowsの場合は「通常」と発音されますか?もしそうなら、ネットワークやその他のリソースに対抗する他のプロセスがあっても、競合が発生したときにレイテンシが上がり、競合が停止した後に通常のレイテンシレベルに戻るのはなぜですか?
FYI:WindowsアプリケーションはSetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)
を呼び出し、各重要スレッドはAfxBeginThread(SomeThread, pSomeParam, THREAD_PRIORITY_TIME_CRITICAL)
で開始します。可能な限りシステム上で稼動するアプリケーションはほとんどなく、アプリケーションは使用可能なクアッドコアプロセッサ(ハイパースレッディング、したがって8つの有効なプロセッサ)の約5%しか使用しません。私はそれを考慮していますが、SetThreadAffinityMask()
の使用はありません。
リアルタイムではないマルチタスクオペレーティングシステムで実行しています。多くのcrapolaがマルチタスキングを利用していますが、一般にWindows UpdateがPLCの監視中に更新プログラムをインストールすることに興味はありません。ソフトリアルタイム動作を取得する本当に良い方法は、Windows Embeddedから起動し、システムビルダーを使用することです。何もオンにならないようにし、実際に必要なホップラだけをオンにするオプションを与えます。 –
"リアルタイム"は常にアプリケーションに関連する概念です。 Windowsは、目立つポップやクリック(ほとんどの場合)なしでオーディオトラックを再生したり、毎秒50以上のフレームでビデオストリームを処理したりすることができます。これは、ほとんどの人にとって十分な「リアルタイム」の応答です。だから私は、Windowsが可能であることを明らかにしていないことを何もしようとしていません - (a)何が起こっているかを正確に理解し、(b)同等の性能を達成するためにアプリケーションをプログラミングすることに興味があります。 – omatai
どのような2つの出来事の間? UDPパケットを受信し、TCP経由で画像を受信していますか?はいの場合は、おそらくTCPウィンドウの調整です。レイテンシを最小限に抑えたい場合は、両方でUDPを使用するか、TCPのレイテンシを下げる方法を調べてください。 – Soonts