この記事で、シミュレーション実行中にリアルタイムにキーボード入力を信号として受け取るコンポーネントを紹介した。しかし、当該コンポーネントはそのままでは使いにくい。なぜなら、キーボード入力はデジタルなので、出力信号も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に公開しているので、活用して頂ければ嬉しい限りだ。

以上





ブログ移転の案内

この記事 でお知らせしたとおり、本ブログはブログサービス下での運営を止め、個人サーバー上のwebページに引越しします。livedoorブログが存続している限り本ブログは閉鎖せず残り続けますが、 この記事 以降の記事は総て こちらの新ブログ にて公開してゆきますので、これからもよろしくお願いします。

文献紹介

Modelica, Model-based degign

Modelicaによるシステムシミュレーション入門

入門者に最適の書。Modelicaって何?という導入から、簡単なコードベースやGUIベースの例モデルまで解説。筆者も入門時に手に取った。訳に少し癖が有る印象だが、英語書物がハードルになる方には確かな助けになる筈。


[amazon、紙面・電子]
[楽天、紙面書籍版] [AU payマーケット、紙面書籍版]
[honto、電子版] [楽天、電子書籍版] [AU payマーケット、電子書籍版] [7ネットショッピング、電子書籍版]

Introduction to Modeling and Simulation of Technical and Physical Systems with Modelica

「Modelicaによるシステムシミュレーション入門」の英語版原書。英語に抵抗がなければこちらを入手したら良いと思う。


[amazon、電子版・紙面版]
[Yahoo、紙面書籍版]

Principles of Object-Oriented Modeling and Simulation with Modelica 3.3 A Cyber-Physical Approach (Wiley-IEEE Press)

本格的にModelicaを使い込むなら必携の書。辞書的に適宜調べものをするような形で手元に有ると頼もしい武器。量が多いので電子版もお勧め。筆者もKindle版を所有し、かなりの頻度で参照している。


[amazon、電子版・紙面版]
[楽天、電子書籍版]

はじめてのModelicaプログラミング -1日で読める わかる Modelica入門-


[amazon、紙面版]

Modelicaによるモデルベースシステム開発入門-ModelicaとFMIの活用による実践的モデルベース開発-


[amazon、電子版・紙面版]

Introduction to Physical Modeling With Modelica


[amazon、紙面版] [楽天、紙面書籍版]

Development of Modelica Library for Dynamics Simulation of CHP Plant: Modelica library structure design and modeling for transient simulation of Combined Heat and Power (CHP) plant


[amazon、紙面版]

Python

入門 Python 3


[amazon、紙面版]

かんたん Python


[honto、電子版]

スッキリわかるPython入門 (スッキリシリーズ)


[amazon、電子版・紙面版]

ゲームを作りながら楽しく学べるPythonプログラミング


[amazon, 紙面版・電子版] [honto、電子版]

流体力学(Fluid Mechanics)

Fundamentals of Fluid Mechanics


[amazon、紙面版] [Yahoo、紙面書籍版]

[amazon、紙面版]

[Yahoo、紙面書籍版]


熱力学(Thermodynamics), 熱機関(Engine, power system)

Fundamentals of Engineering Thermodynamics


[amazon, 紙面版]

Fundamentals of Jet Propulsion with Applications


[amazon、電子版・紙面版]
[amazon、紙面版]


航空力学/飛行力学(Aerodynamics/Flight Dynamics)

航空機の飛行力学と制御


[amazon, 紙面版]

Flight Stability and Automatic Control


[amazon, 紙面版]


------------------------------