MATLAB Answers

Simulinkでリ​アルタイムでモータを​動作させたい(HiL​S)

18 views (last 30 days)
KAZUKI KISHIWADA
KAZUKI KISHIWADA on 17 Feb 2020
Answered: Toshinobu Shintai on 18 Feb 2020
Simulink上でC++で書いたプログラムにMEX関数に変換して,モータをパルス列で動作させています.
一台のモータを動作させる場合は,ペーシングが正常ですが,2台のモータを同時に動作させようとすると,ペーシングが遅れます.制御周期は0.001秒です.(これ以上大きくしたくないです.)
メモリは4GBと少ないので,ここが原因かと思うのですが,他に見るべきところはありますか.

  3 Comments

Toshinobu Shintai
Toshinobu Shintai on 17 Feb 2020
PC上で動作しているMATLAB/Simulinkでリアルタイム制御をしているということでしょうか。
それとも、Simulinkで作ったロジックをmexでコンパイルして他の環境で実行しているのでしょうか。
Shoumei
Shoumei on 18 Feb 2020
Simulinkでリアルタイム処理させようなんて、そんな無謀な!Simulinkはリアルタイム実行には向いていません。
Arduinoなど組み込み機器に実装したほうが良いと思います。
KAZUKI KISHIWADA
KAZUKI KISHIWADA on 18 Feb 2020
Sintai様
PC上で動作しているMATLAB/Simulinkでリアルタイム制御しようとしています.

Sign in to comment.

Answers (1)

Toshinobu Shintai
Toshinobu Shintai on 18 Feb 2020
すでに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は危なくて使えない
が理由です。
リアルタイム制御には専用の組み込み機器を用いることを推奨します。

  0 Comments

Sign in to comment.

Sign in to answer this question.