シミュレーションモードの適用

シミュレーションモードに必要なブロックとinoコードについて説明します。

Twin Activate Arduinoブロックライブラリ: シミュレーションモード

Twin Activate Arduinoブロックライブラリには、Arduinoボードと通信できるブロックのセットが含まれています。

これらのブロックは、標準的なArduinoライブラリで使用できるように定義することもできますし、複雑で外部ライブラリを使用する必要がある場合もあります(必要な拡張機能とライブラリのセクションで前述のとおり)。

Arduinoライブラリには、inoファイルを含む_bin/Arduinoフォルダーが含まれています。これらのファイルには、シミュレーション中にTwin ActivateがArduinoボードと通信するために使用する、一般的なArduinoコードが定義されています。

Arduinoブロックを含むTwin Activateモデルを実行する前に、ライブラリで提供される"スケッチ"がボードにアップロードされていることを確認することがベストプラクティスです。これを実現するには、Arduino IDEでarduino.inoファイルを開いてコンパイルし、結果をボードにアップロードします。

このコードがボード上にあれば、Arduinoブロックを含むどのTwin Activateモデルもシミュレーションモードで使用できます。

Twin Activateは汎用Inoコードとどのように通信しますか?

各Arduinoブロックは基本ブロック、つまりシミュレーション機能を持つか、基本ブロックを含むスーパーブロックです。モデルのシミュレーションでは、次のようなことが起こります:
  1. 基本ブロックのシミュレーション関数が呼び出されるたびに、シリアルポートを介してArduinoボードに文字の配列を送信します。
  2. Arduinoの一般的なコードは、メッセージを待つループの中で実行され、シリアルポートでデータを受信します。
  3. 受信したデータはデコードされ、Arduinoで対応する操作が実行されます。
以下に簡単な例を挙げて、これらの手順を説明します。この例では、Arduinoボードを使用してデジタル値を読み取ります。
  1. Arduino側で、デジタルポートのデータを読むには、ポートを入力として定義し、関数digitalReadを使用する必要があります。
  2. Twin Activateブロックのシミュレーション関数DigitalInputは、2つのコード化された文字列を送信します。1つは初期化用で、もう1つはブロックがデジタルポートの値を読み取る必要があるたびに送信されます。
  3. 初期化用の配列には、以下のアスキーコードが含まれています:{2, 0, n, 2}.Twin Activateによって送信され、Arduinoによって受信されます。
  4. コード2を受け取ったArduinoのコードは、このメッセージがデジタルポートに関するものであることを認識します。次のコード0 は初期化用で、 nはアスキー文字でコード化されたピンの番号です。最後の 2はピンをINPUT_PULLUPに設定することを意味しますので、この場合に呼び出されるArduinoのコードはpinMode(n,INPUT_PULLUP)です。
  5. そして、Twin Activateブロックが呼び出されるたびに、シミュレーション関数は{2, 1, n}コードを送信します。ここで、2はデジタル、1は読み込み、nはピン番号(INPUT_PULLUPの前に設定)を意味します。このとき呼び出されるArduinoのコードは、uint8_t dgv=digitalRead(n);です。
  6. Arduinoのコードは、シリアルポートを通じてTwin Activateにデジタルピンの値を送信します。このとき、コードSerial.write(dgv);が使用されます。
  7. ブロックシミュレーション機能は、シリアルポートで値が利用可能になるまで待機し、値を読み込んで Twin Activateブロックの出力にコピーします。

Twin Activate Arduinoブロックライブラリのコード生成

Arduinoライブラリのブロックを使用したモデルのコード生成は、ベータ版の制作段階にあり、まだメニューとして公開されていません。

Arduino用の組み込みコードの生成:
  1. 埋め込みコードの定義で使用されるすべてのブロックをスーパーブロックに配置します。
  2. スーパーブロックに入力や出力がないことを確認してください。
  3. 選択したブロックをダイアグラム内でハイライト表示します。
  4. OMLコマンドウィンドウから関数 vssGenerateInoFileを呼び出し、生成されたinoファイルパスを返します。
  5. 作成したinoファイルをArduino IDEで開きます。
  6. コードをコンパイルし、Arduinoボードにアップロードします。
注: 現在のリリースにおける既知の制限は以下の通りです:
  • モデルにkeypad ブロック(Keypad4x3またはKeypad4x4)が含まれている場合は、スーパーブロックのコードを生成する前に、これらのブロックをインライン化する必要があります。インライン化はコンテキストメニューから行えます。
  • 生成されたコードには、すべてのTwin Activate Arduinoブロックに対応するinoコードが含まれています(不要な場合でも)。