シミュレーションモードの適用
シミュレーションモードに必要なブロックと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ブロックは基本ブロック、つまりシミュレーション機能を持つか、基本ブロックを含むスーパーブロックです。モデルのシミュレーションでは、次のようなことが起こります:
- 基本ブロックのシミュレーション関数が呼び出されるたびに、シリアルポートを介してArduinoボードに文字の配列を送信します。
- Arduinoの一般的なコードは、メッセージを待つループの中で実行され、シリアルポートでデータを受信します。
- 受信したデータはデコードされ、Arduinoで対応する操作が実行されます。
以下に簡単な例を挙げて、これらの手順を説明します。この例では、Arduinoボードを使用してデジタル値を読み取ります。
- Arduino側で、デジタルポートのデータを読むには、ポートを入力として定義し、関数digitalReadを使用する必要があります。
- Twin Activateブロックのシミュレーション関数DigitalInputは、2つのコード化された文字列を送信します。1つは初期化用で、もう1つはブロックがデジタルポートの値を読み取る必要があるたびに送信されます。
- 初期化用の配列には、以下のアスキーコードが含まれています:
{2, 0, n, 2}
.Twin Activateによって送信され、Arduinoによって受信されます。 - コード
2
を受け取ったArduinoのコードは、このメッセージがデジタルポートに関するものであることを認識します。次のコード0
は初期化用で、n
はアスキー文字でコード化されたピンの番号です。最後の2
はピンをINPUT_PULLUP
に設定することを意味しますので、この場合に呼び出されるArduinoのコードはpinMode(n,INPUT_PULLUP)
です。 - そして、Twin Activateブロックが呼び出されるたびに、シミュレーション関数は
{2, 1, n}
コードを送信します。ここで、2
はデジタル、1は読み込み、n
はピン番号(INPUT_PULLUP
の前に設定)を意味します。このとき呼び出されるArduinoのコードは、uint8_t dgv=digitalRead(n);
です。 - Arduinoのコードは、シリアルポートを通じてTwin Activateにデジタルピンの値を送信します。このとき、コードSerial.write(dgv);が使用されます。
- ブロックシミュレーション機能は、シリアルポートで値が利用可能になるまで待機し、値を読み込んで Twin Activateブロックの出力にコピーします。
Twin Activate Arduinoブロックライブラリのコード生成
Arduinoライブラリのブロックを使用したモデルのコード生成は、ベータ版の制作段階にあり、まだメニューとして公開されていません。
Arduino用の組み込みコードの生成:
- 埋め込みコードの定義で使用されるすべてのブロックをスーパーブロックに配置します。
- スーパーブロックに入力や出力がないことを確認してください。
- 選択したブロックをダイアグラム内でハイライト表示します。
- OMLコマンドウィンドウから関数
vssGenerateInoFile
を呼び出し、生成されたinoファイルパスを返します。 - 作成したinoファイルをArduino IDEで開きます。
- コードをコンパイルし、Arduinoボードにアップロードします。
注: 現在のリリースにおける既知の制限は以下の通りです:
- モデルにkeypad ブロック(Keypad4x3またはKeypad4x4)が含まれている場合は、スーパーブロックのコードを生成する前に、これらのブロックをインライン化する必要があります。インライン化はコンテキストメニューから行えます。
- 生成されたコードには、すべてのTwin Activate Arduinoブロックに対応するinoコードが含まれています(不要な場合でも)。