データ送受信のタイミング

データ送信のタイミング次第ではデータの計測や制御のシステムを扱う時に具合が悪いのは前述した通りです。

それを回避するためには例では速度指令RTCとセンサRTCを短い周期で実行すれば良いのですが、CPUの負担が大きくなるのでそれはそれで問題です。

そのために順序どおりに実行し、さらにMultipleOrderedECにより速度指令RTCとセンサRTCを並列実行することで同期直列実行よりも短い時間で同期実行できることも前述したとおりです。

制御器RTCがデータを受信したタイミングで制御器RTCのロジックの駆動を開始したらさらに短縮できます。

ArtDataSyncECという実行コンテキストは入力データに同期してRTCの駆動を行うようですので同様の事をやれば良いわけですね。MultipleOrderedECの場合はデータがバッファに書き込まれたタイミングで制御器RTCを駆動するスレッドを生成すれば良いさそうですが、やってみないとわかりません。

さらに、制御器RTCも他二つのRTCと同じタイミングで開始してデータを読み込む時に速度指令RTC、センサRTCがバッファにデータを書き込んでなかった場合そこで制御器RTCの処理を停止してデータが書き込まれるまで待つようにすればさらに短縮できるかもしれません。

ただ、これをやるとなると実行コンテキストでどうこうできる問題ではないような気がします。isNew()でデータが書き込まれたか確かめる時に処理を止めるのが良いと思うのですが、そうなるとInPort.hのisNew()を変更する必要があるので望ましくないですね。そうなるとRTCのロジックをいじるしかなさそうですが、そんなことをすると再利用性がなくなりそうなのでこれも良くなさそうです。RTCのコアロジックの処理が途中で止まるのは良くないらしいですからね。
ただ、オーバーヘッドの方が大きくなりそうなので多分ここで述べたことは実装しないとは思います。