Toppers_JSPとScicos_labによる組込みメカトロニクス
制御シミュレーション	
塩出 武	  TOPPERS活用	  アイデア・アプリケーション開発	
コンテスト2013		

目的・狙い	• 組込みメカ制御を始めてみたいが、機材、予算に制約がある。	
• 新しい制御方式を試したいが、そもそもうまく行くのか、事前に検証したい。	
• 評価機材が上がる前に、先行で制御プログラム開発を進めたい。	
• 組込みによるメカ制御を学習、体験したい。		

使用する開発成果物	
• Toppers_JSPカーネル	  	  Windowsシミュレーション環境	
• VisualC++2010Express	  	  (Toppers側シミュレーション用)	  	  ＊2008Expressでも構いません	
• Scicos_lab(制御用シミュレーション環境)	  	  ＊Scilabでも構いません(5.4.0で確認)	  ＊シミュレーションは遅めです	

お詫び	

お詫び	
カミさんが子供を連れて実家に遊びに行っている間を見て、（子供割りはノンマスカブル）	  調整、資料作りをした関係上	  
評価環境、資料とも	  
荒い仕上がりとなっております。	  
（デバッグモードのみで精いっぱいでした）	  動作について	制御割込み（タイマ：計算上1ms）	参照	
共有情報	  ・位置	  ・速度	
制御用PWM入力	更新）	

仕組みの説明(データ共有編)	
• DLLファイルでデータを共有しています。	  

仕組みの説明(データ共有編)	
• VisualCシリーズを採用したのは、データの共有が容易なためです。
#pragma	  data_seg(“共有名”)を使用。	  
• JSPカーネルシミュレータがVisualCに対応していたことも大きな要因です。	  
• Win32メモリマップファイルを用いれば、他のツールでも可能。 （試せていません）	  仕組みの説明(割込み編)		  • DLLファイルを介してScicos側からToppersの割込みAPIをコールします。	  
HALInterruptRequest(INT_MOTOR);

仕組みの説明(割込み編)	
• ですが、直接呼び出せませんでした。	  	  	  	  	  ・関数ポインタで参照 	  	  → 失敗(共有出来ない)	  ・DLL側にヘッダを読み込んで参照	  	  → 失敗(エラーがいっぱいで折れます)	  	仕組みの説明(割込み編)	
• そこで、この人に頼むことにしました。	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  ConsoleProc( ・・・・)	  	  {	  	  	  case	  WM_CLOSE: 	  	  	  	  	  case	  WM_CHAR:	  	  	  case	  WM_INITDIALOG:	  	  	  case	  WM_SIZE:	  	  	  case	  WM_COMMAND:	  	  	  case	  SERMSG_UPDATE:	  	  	  case	  WM_SCILABINT:	  	  	  	  HALInterruptRequest(INT_MOTOR);	  	  	  	  break;	  	  	  default:	  	  }	  	  	  	  ここなら、Toppersの管轄なので呼び出せる		  仕組みの説明(割込み編)	
• DLL側には、以下の2つを準備。	  	  ・Toppersコンソールハンドラを探すAPI	  	  	  	  	  	  	  	  	  	  	  	  （Scicosシミュレーション開始時に1回）	  	  ・探したハンドラにメッセージを投げるAPI	  	   （割込み毎）	  ※今回のアプリにおいて	  デバッグコンソールは、実は生命線だったりします。	  仕組みの説明(割込み編)	
• こうすることで2段階にはなりますが、割り込めました。	
メッセージ	

toppers	

メッセージ	

scicos	

制御モデルの説明	

お詫び	
・Toppers側から、Scicos/Scilabを制御することに 	  重きを置いたこと。	  
・皆さんの研究、業務、趣味等の都合で、	  モデルは様々であること。	  	  というわけで簡単なサンプルとなっております。	  制御モデルの説明	
• DCモーターの数式モデル（Scicos側）	  等価回路部	

運動方程式部	

位置/速度の変換部	

• よく教科書で見る形式です。	  
• 上記×2セット +	  Toppers側との入出力を追加してます。 	

制御モデルの説明	
• 全体図	  	Toppersへ出力	

Toppersから入力	

制御モデルの説明	
• DCモーター サンプルパラメータ(MKS単位系)	  	   //回路関連	//メカ関連	
//[m]-­‐>[cm]変換	
E=20[V];	  R	  =	  10[Ω];	  L=0.002[H];	  Kt=0.05	  ;	  Ke=0.05;	  J=(4e-­‐6)[kg	  m2];	  m2cm	  =	  10;	D	  =	  5e-­‐4)[kg	  m2	  	  /s];	  r=1[m];	  修正間に合わず．．．	

制御方式	• PID制御にて加速～定速～減速 各速度制御	  	  	  	  +	  位置決め制御• 割込み間隔は1ms。(Scicos側の計算周期)	  • 1ms以下設定も可能ですが、遅くなります。	  	  制御パラメータ	
• PIDゲイン：PID各パラメータ =	  1	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  (モデルが適当のため2以上は発振・・・)	  • PWM上下限-­‐1000～+1000Cnt	  • 目標速度は 3速度 用意
高速 =	  100cm/s	  	  	  	  距離が短いと下の速度へ切り替え
中速 =	  50cm/s 距離が短いと下の速度へ切り替え
低速 =	  10cm/s	  使い方（準備編）	
• Toppers側を立上げ（必要に応じてビルド）	  • Scicoslab側を立上げて作業ディレクトリをToppers実行環境へ移動。(～\tool\windows)	  • 移動先ディレクトリで、Toppers側との共有DLLを読み込み。 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  (メニュー→Exec→motorsci.sceを選択)	  • モデルを開く。Applicajon→ScicosでDiagram
画面が開くのでメニューよりmotor.cosを選択。	  使い方（実行編）	
• Toppers側を実行	  • Scicos側のシミュレーションを実行	  • 各種キーボタンで評価開始“I”ボタンで初期設定（必要）	  	   “a”モーター1駆動	  	  	  	  	  “b”モーター2駆動	  	  	  	  	  “e”モーター1/2同時駆動	  ※必ず先にToppers側を起動してください	  	  使い方	• うまく行ったら、速度や距離を変更してみていろいろ試してみてください。	  
• お詫び。何度か試していると、キーボタンを受け付けなくなることがあります。	  
• お手数ですがデバッグを再起動願います。
申し訳ありません。	  
• Scicos側が止まることがあります（（＾＾；））(stops→run→stopとすると良いみたいです)	  使い方(割込み編)	
• 制約付きですが、割込みでのデバッグが試せます。	  
• 制約内容。以降のキー動作が出来なくなることがあります。	  
• ステップ実行中はScicos側にも待ってもらうことでICEのように飛んで行かないようにしています。	

まとめ	
• DLLを用いてToppers側とScicos側を連携。	  
• 使い勝手もあり、今回はVisualC環境を採用。	  
• ScicosLabはScilabのXcosでも代用可	  • 割込みはデバッグコンソール経由で実施。
もっといい方法あればお願いします	  • 制御モデルはいろいろお試しください。	  
• 素人(私)でも出来ます。私はハッカーではありません。（結構 参考書の受け売りです）	  今後の予定	
• ASPカーネル環境への移行を考えています。	  
• 実はASPカーネル環境を全く使いこなせないでいます。シミュレーション環境の立上げすら出来ていません。(Win7	  _64bit環境)	  • 本当はこちらでいろいろ試したいと考えております。	  
• 情報ございましたらお願いいたします。	  Toppers事務局の皆様へ	• こちらの事情で荒い作りになったにもかかわらず、このような賞をいただき、大変光栄に思います。	  
• また、アプリの立上げについて事務局：岡山様にうまく行き届かなかったことをお詫びします。根気よく応対いただき、有難うございました。	  ご静聴有難うございました	• 本日は誠に有難うございました