InteractiveSimulation用便利ツール

InteractiveSimulation Library

この記事で、シミュレーション実行中にリアルタイムにキーボード入力を信号として受け取るコンポーネントを紹介した。しかし、当該コンポーネントはそのままでは使いにくい。なぜなら、キーボード入力はデジタルなので、出力信号もbooleanであり、値が1か0にしかならないからだ。

例によって記事を通して言いたい事は冒頭、導入のすぐ後で述べる。

  •  この記事で紹介したDeviceDrivers libraryのコンポーネントでは使い難い場合がある。なので、より使いやすくなるよう便利コンポーネントを2つ作成・公開した。下記では製作物の解説および動作確認結果を示す。

実際にシミュレーション中に何らかのInputをキーボードから操作するとなると、ダイヤルを回すイメージで、キーを押した回数か時間に応じて出力信号値が蓄積された方が使い勝手が良い筈だ。
しかし当然、ゲームコントローラのボタンのように、キーの押下を止めたら信号が0になる方が使いやすい場合も有る。機敏なアクション操作を要するゲームだったり、PWMによる制御をシミュレートする場合等だ。なので、使い方に応じて容易に使い分けが出来るように、DeviceDrivers libraryのKeyboardInputに付け足し機能追加して使う事を前提としたblockを作成する。

上でも述べたが、付け足したい機能は下記の2種類。各々別々にコンポーネント作成する。

  • キーを押した回数に応じて、蓄積した値を出力する。出力信号の時間変化が階段状となる。
  • キーを押し続けた合計時間に応じて、蓄積した値を出力する。出力信号の時間変化がランプ状となる。

これらどちらも、インターフェイスはboolean信号を受け取り、Real信号を出力するだけの単純なものであり、同じ姿形のコンポーネントとなる。異なるのは内部の信号処理ロジック部のみだ。

1. キーを押した回数に応じて蓄積した値を出力

上述通り、単純なblockコンポーネントで、インターフェイポート周りについて述べることは特に無い。図中説明書きの通り、値の蓄積に加えて下記機能を持つ。

  • 入力するboolean信号に係数を掛けた値を蓄積できる。true1回を2や10という風に任意の値とみなす事が出来る。係数はparameterから設定する。
  • 出力信号の初期値を任意の値に設定出来る。初期値はparameterから設定する。


下図の通り、Modelica_DeviceDrivers libraryのkeyboardInputとsynchronizeRealTimeに追加して使う事を想定している(他の使い方も有るとは思うが)。

動作確認

シミュレーション実行中に数回、[↓]を押す。回数のみが出力値を決めることを確認するために、一度は長めに押し続ける。


意図通り、[↓]を押下したタイミングで出力信号が階段状に増加している。出力値の変化はキーを押した回数のみで決まり、キーを押し続ける回数には影響されていない。また、値は設定した通り2で始まり、10づつ増えている。


以下、上記動作確認モデルの情報

2. キーを押し続けた時間に応じて蓄積した値を出力

上述通り、#1と同じ姿形のblockコンポーネント。図中説明書きの通り、値の蓄積に加えて下記機能を持つ。

  • 出力信号の初期値を任意の値に設定出来る。初期値はparameterから設定する。
  • boolean信号サンプリングのインターバルを任意のものに設定できる。値はparameterから設定する。
  • 受け取ったbooleanとサンプリングインターバルのそれぞれに係数を掛けられる。値はparameterから設定する。


下図の通り、#1と同じくModelica_DeviceDrivers libraryのkeyboardInputとsynchronizeRealTimeに追加して使う事を想定している。

動作確認

シミュレーション実行中に数回、[↓]を押す。押下し続けている時間が出力値を決めることを確認するために、短い押下と長い押下を行う。意図通り動作すれば、押している間、出力信号がランプ形状となる筈だ。


意図通り、[↓]を押している期間だけ、出力信号がランプ状に増加している。また、値は設定した通り2から開始している。


以下、上記動作確認モデルの情報

モデリングの分野に関係無く、Modelica_DeviceDrivers library を使おうという方なら誰にでも使える機会が有るのではないかと思う。ライブラリごとGPL3でgithubに公開しているので、活用して頂ければ嬉しい限りだ。

以上

コメント

タイトルとURLをコピーしました