MQTTブローカーに接続する
概要
このエミュレーションモジュールを使用すると、データのパブリッシュとサブスクライブのためにFlexSimをMQTTブローカーに接続できるようになります。
完全に機能する例を構築するには、次のようにいくつかのステップが必要です。
- MQTTブローカーをインストールし、設定します。
- MQTTパブリッシャーとサブスクライバーを実行します。
- FlexSimモデルを準備し、MQTTブローカーに接続します。
- 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モデルを準備する
このデバイスに接続できるように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は通信チャネルにのみ関連するため、このチュートリアルのコントロールロジックは、ユーザーが手作業で提供する必要があります。
[アドレス]と[ポート]に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からの接続方法、実行中のモデルを(手動で)制御する方法を示しました。これでこのチュートリアルは終了です。