MQTTブローカーに接続する

概要

このエミュレーションモジュールを使用すると、データのパブリッシュとサブスクライブのためにFlexSimをMQTTブローカーに接続できるようになります。

完全に機能する例を構築するには、次のようにいくつかのステップが必要です。

  1. MQTTブローカーをインストールし、設定します。
  2. MQTTパブリッシャーとサブスクライバーを実行します。
  3. FlexSimモデルを準備し、MQTTブローカーに接続します。
  4. MQTTブローカー接続でモデルをテストします。
このチュートリアルを正常に構築して実行するには、使用するマシンにFlexSimをインストールするのは当然ですが、MQTTブローカーもインストールする必要があります。

ステップ1 MQTTブローカーをインストールし、設定する

市場では、多くのMQTTブローカーサーバーが市販品またはオープンプロジェクトの形で提供されています。

このチュートリアルでは、MQTTブローカーとして広く使用されているmosquittoを使用します。mosquittoはEclipse MosquittoのWebサイトで入手できます。

Eclipse Mosquittoは、MQTTプロトコルバージョン5.0、3.1.1、3.1を実装したオープンソース(EPL/EDLライセンス)メッセージブローカーです。

インストールしたmosquittoブローカーは、スタンドアロンアプリケーションとして、あるいはWindowsサーバーとして使用できます。
このチュートリアルでは、mosquittoをスタンドアロンアプリケーションとして使用します。
このスタンドアロンは、mosquittoのインストールフォルダー(通常はC:\ProgramFiles\mosquitto)にあるコマンドラインアプリケーションです。

このフォルダーには次のファイルがあります。
  • mosquitto.exe - MQTTブローカー
  • mosquitto_pub.exe - MQTTパブリッシャー
  • mosquitto_sub.exe - MQTTサブスクライバー
このチュートリアルでは、特別な設定は不要なため、デフォルトのパラメータを使用します。

ステップ2 MQTTブローカーを実行し、サブスクライバーとパブリッシャーをテストする


ご存知のように、MQTTとは、メッセージキュー/メッセージキューサービスのための、軽量でパブリッシュ-サブスクライブ型のマシン間ネットワークプロトコルです。
TCP/IPなどのトランスポートプロトコル上で実行する必要があります。

MQTTプロトコルは、メッセージブローカーおよび多くのクライアントという2種類のネットワークエンティティを定義しています。MQTTブローカーは、クライアントからすべてのメッセージを受け取るサーバーであり、受け取ったメッセージを適切な宛先クライアントに送信します。

メッセージを送信するクライアントをパブリッシャーと呼び、メッセージを待つクライアントをサブスクライバーと呼びます。

Windowsコンソールを3つ開き、いずれもディレクトリをmosquittoのインストールフォルダーに変更します。

続いて、次の3つのコマンドを実行します。
  • コンソール1 - ブローカー - mosquitto.exe -p 12345 -vを実行
    このコマンドは、TCPポート12345でmosquittoブローカーを詳細モードで実行します。

  • コンソール2 - クライアントサブスクライバー - mosquitto_sub.exe -i "myId" -t "iot_sensor" -p 12345 -vを実行このコマンドは、IDが「myID」で、トピック「iot_sensor」をサブスクライブし、ポート12345にあるlocalhostでブローカーに接続するmosquittoクライアントを詳細モードで実行します。

  • コンソール3 - client publisher - mosquitto_pub.exe -i "MyID2" -t "iot_sensor" -p 12345 -m "test_message"
    を実行
    このコマンドは、IDが「MyID2」で、トピック「iot_sensor」のメッセージ「test_message」をパブリッシュするクライアントを実行します。
    パブリッシュ後、このクライアントは終了し、コンソール2で実行中のサブスクライバーはメッセージを受け取ります。
ブローカーとクライアントサブスクライバーが実行中の状態で3つのコンソールを開いたままにし、FlexSimモデルの準備に移ります。

ステップ3 FlexSimモデルを準備する

このデバイスに接続できるようにFlexSimモデルを準備します。
このチュートリアルに使用するモデルは、ボックスアイテムをトートにパッケージングするという、実にシンプルな生産システムです。

モデルを構築するために、2つのソース(1つはボックス用、もう1つはトート用)、トート用の1つのキュー、ボックスとトートを結合する1つのコンバイナを使用します。

上の図に示すように、これらの要素をコンベヤでつなげます。コンベヤの速度は0.5 m/秒に設定します。

ソース名を「Boxes」(ボックス)と「Totes」(トート)に変更します。ソースTotesは時間0の時点で100個のトートを生産するように設定し、ソースBoxesは10秒ごとにボックスを1個生産するように設定します。

フォトアイをボックスのコンベヤに配置します。配置場所は、トートのコンベヤが始まる約1メートル前です。

コンバイナはボックスを5秒でトートに入れます。

最後に、キューのリセット時とトートがキューから出るたびにキューの出力を閉じるように、キューを設定します。

ステップ4 MQTT接続でモデルをテストする

まず、モデルをブローカーに接続するために、MQTT接続を作成します。

MQTTブローカーは通信ゲートウェイであるため、PLCのようにコントロールロジックを作成するツールではありません。
つまり、「MQTTでモデルをテストする」場合、MQTTは通信チャネルにのみ関連するため、このチュートリアルのコントロールロジックは、ユーザーが手作業で提供する必要があります。

FlexSimで新しいMQTT接続を作成するには、ツールメニューから新しいエミュレーションまたは接続を追加します。

[アドレス]と[ポート]にMQTTブローカーの値を入力します。このチュートリアルでは、127.0.0.1と12345です。

他のオプションはデフォルト値のままにします。

[接続テスト]ボタンを押します。すべてが適切な場合、次のメッセージが表示されます。

[アクティブ]チェックボックスをオンにし、[適用]をクリックします。

[変数]タブをクリックし、[+]ボタンから[MQTT センサー(パブリッシャー)と[MQTT コントロール(サブスクライバー)
を追加します。


次に、[MQTT センサー]の[トピック]フィールドを「iot_sensor」に設定します。
MQTT コントロール]では、[トピック]フィールドを「iot_command」に設定します。



これで設定は終了し、FlexSimはメッセージのパブリッシュとメッセージの受信を行うことができます。
さらに、FlexSimモデルでPLCのinputをどのように駆動し、PLCのoutputをFlexSimでどのように管理するかを定義する必要があります。

このモデルで行いたいのは、ボックスがフォトアイをカバーするときに「input」タグを1に設定し、「output」タグが1に設定されたときにトートをキューからリリースすることです。

フォトアイがクリアになったときには「input」タグを0にリセットする必要があります。

そのためには、[MQTTセンサー]を選択してフォトアイに関連付け、フォトアイがカバーされたときにはメッセージ"pe_covered"を送信するように、フォトアイがクリアになったときにはメッセージ"pe_clear"を送信するように設定します。


次に[MQTTコントロール]を選択し、トートのキューに関連付けます。

新しいアクションを追加し、メッセージがトピック「iot_command」でパブリッシュされたときにキューが出力を開くように設定します。

これで、モデルの設定が完了しました。モデルをリセットし、実行できます。

FlexSimの実行速度を1に設定することを忘れないでください。

前述のように、MQTTは通信ゲートウェイにすぎないため、コントロールロジックを手動で提供する必要があります。 

そのため、このモデルをテストするには、トピック「iot_sensor」のメッセージ"pe_covered"がパブリッシュされたときに、トピック「iot_command」のメッセージ"release_a_tote"をパブリッシュする必要があります。

このモデルを実行すると、ボックスフローアイテムがフォトアイをカバーするたびにメッセージ"pe_covered"が送信され、フォトアイがクリアになるたびにメッセージ"pe_uncovered"が送信されます。


メッセージ"release_a_tote"を手動でパブリッシュしてトートフローアイテムをキューからリリースするには、コマンドmosquitto_pub.exe -i "MyID2" -t "iot_command" -p 12345 -m "release_a_tote"を実行します。


新しい値が書き込まれ、FlexSimモデル内のキューからフローアイテムがリリースされます。

MQTTブローカーの作成方法とFlexSimからの接続方法、実行中のモデルを(手動で)制御する方法を示しました。これでこのチュートリアルは終了です。