質問: simulinkでリアルタイムでモータを動作させたい(hils) simulink上でc++で書いたプログラムにmex関数に変換して,モータをパルス列で動作させています. 一台のモータを動作させる場合は,ペーシングが正常ですが,2台のモータを同時に動作させようとすると,ペーシングが遅れます.制御周期は0.001秒です.(これ以上大きくしたくないです.) メモリは4gbと少ないので,ここが原因かと思うのですが,他に見るべきところはありますか.
回答: すでにshoumeiさんがおっしゃっていますが、pc上で動作しているmatlab/simulinkでリアルタイム制御をするというのは無謀ですね。windows/mac/linuxどれであっても、simulink標準の「シミュレーションペーシング」機能では、リアルタイム性は全く確保されません。 参考までに、simulink desktop real-timeというツールボックスを用いると、かなり改善されます。 simulink desktop real-timeにはノーマルモードとエクスターナルモードがありますが、simulinkの全機能が使えるのはノーマルモードです。エクスターナルモードでは専用のi/oインターフェースが必要で、少し制約もあります。 ノーマルモードを使う場合、windowsではサンプリング周期20msまでなら、厳密なリアルタイムではありませんが使えます。それより小さいステップは厳しいと思ってください。 エクスターナルモードを使う場合、100μsでも動作します。こちらは厳密に近いと言えます。 根本的な話ですが、一般的にpcがリアルタイム制御に向いていないのは、 cpuのリソースを有効に使うために、pc向けのosはリアルタイム性よりもリソース効率を重視して作られている リアルタイム制御を必要とする機器はエラー1個が人命に繋がる可能性があるため、ハード的にもソフト的にも頻繁に故障するpcは危なくて使えない が理由です。 リアルタイム制御には専用の組み込み機器を用いることを推奨します。