AWS IoT CoreとMQTT接続する
概略
アマゾン ウェブサービス(AWSクラウド) のIot CoreにPLCをMQTT接続してメッセージの交換をしてみます
IoT Coreへデータを送ることが出来ればAWSの各サービス(Lambda、DynamoDBなど)でデータを扱えるようになります
一例としてPLCからDynamoDBへデータをInsertする方法を別ページに書いています
構成
準備
AWS側の準備
AWSのアカウント作成してIoT Coreでクライアント証明書と秘密鍵をダウンロードします
手順は使い方ナビのAWS IoT CoreにMQTT接続するための準備を参考にしてください
PLCのライブラリのダウンロード
ダウンロードはこちらから
OMRON公式 MQTT通信ライブラリ ダウンロードページ
PLCのネットワークの設定
SysmacStudioでPLCのネットワークの設定を次のように設定ます
PLCのCPUユニットのセキュアソケット設定
簡単な流れは
- PLCをProgramモードにする
-
C:\ProgramData\Omron\Sysmac Studio\StartMenu\Sysmac Studio\Toolsフォルダの「セキュアソケット設定コマンド」ショートカットを実行します
(もしくはC:\ProgramData(x86)\Omron\Sysmac Studio\StartMenu\Sysmac Studio\Tools) -
証明書とキーファイルをPLCに転送します
C:\ProgramData\Omron\Sysmac Studio\StartMenu\Sysmac Studio\Tools\TLSSettingTool>tlsconfig setSessionInfo /id 0 /key "C:\private\xxx-private.pem.key" /cert "C:\certs\xxx-certificate.pem.crt" /ip:192.168.10.201 /f
(xxx-private.pem.keyとxxx-certificate.pem.crt のxxx部分はダウンロードしたファイルのファイル名に合わせます ファイル名が長い場合は変更しても構いません)
NOTE
コマンドプロンプトで手打ちがめんどくさい場合はファイル名を入力するところでエクスプローラからファイルを摘まんでコマンドプロンプトへドラッグするとファイル名が入力されます
詳しい手順はMQTTライブラリのマニュアルの「A-3-6 CPUユニットのセキュアソケット設定」を参照して下さい
ライブラリのマニュアルはセットアップ後にC:\OMRON\Data\Lib\MQTT_Commフォルダの下に作成されています
PLCの設定
MQTTライブラリの追加
SysmacStudioのメニューから[プロジェクト]-[ライブラリ]-[ライブラリ参照]を選んでライブラリ参照ダイアログでダウンロードしたMQTTライブラリを追加します
プログラムの作成
AWS IoT Coreと接続
MQTTクライアント(MQTTClient)でAWSと接続を確立します
trigger1をONにしてConnectedがONになれば接続中となります
接続中の状態でメッセージの交信が可能となります
ConnectionSettings.IpAdrはAWS IoT Core IoTの設定画面のエンドポイントを記入します

| 入力変数 | 説明 |
|---|---|
| ClientID | 任意の文字列 |
| ConnectionSettings.IpAdr | AWS IoT Core のエンドポイントを記述 |
| ConnectionSettings.PortNo | TLSUse=trueのとき8883 TLSUse=falseのとき1883 |
| ConnectionSettings.TLSUse | セキュアソケット通信を使用する |
| ConnectionSettings.TLSSessionName | TLSSession0~59 コマンドプロンプトで「tlsconfig setSessionInfo /id 0 ....」と設定したidの番号をTLSSessionの後ろに付けます |
| ConnectionSettings.UserName | 証明書を使うときは不要 |
| ConnectionSettings.Password | 証明書を使うときは不要 |
| ConnectionSettings.illCfg.WillFlag | Will機能を使用する |
| ConnectionSettings.CleanSession | 接続切断後に再接続時にクリアして接続 |
| KeepAlive | キープアライブタイマ |
| Timeout | タイムアウト(s) |
| DiscardMsgTime | メッセージ破棄時間(ms) |
PLCからメッセージを送信する
パブリッシュ命令(MQTTPubString)でメッセージを送信します
AWSのMQTTテストクライアントを使って受信データを確認します
トピックをサブスクライブする」タブのトピックフィルターに"test/#"を入力して[サブスクライブ]をクリックすると下のサブスクリプションに"test/#"が追加されます
これで受信待ち状態になっています
NOTE
#はワイルドカードです
受信するトピックの名前が"test/"で始まるトピックを受信したときにメッセージが表示されます
PLCではtrigger2をONにしてメッセージ({"message":"Hello!"})を送信します
| 入力変数 | 入力変数 |
|---|---|
| ClientReference | MQTTClientのClientReferenceと共通の変数 |
| PacketID | パケットID |
| MsgType | 0=PUBLISH 1=PUBREL |
| PubMsg | 送信メッセージ |
| PubSettings.PubQoS | QoSレベル |
| Topic | トピック名 |
| Timeout | タイムアウト |
AWS側で受信すると受信したメッセージが表示されます
PLCでメッセージを受信する
サブスクライブ命令(MQTTSubString)でメッセージを受信します
PLCではtrigger3をONにしてメッセージの受信を待ちます
MQTTSubString命令はEnable入力なのでtrigger3がONしている状態で受信待ち状態になります
| 入力変数 | 入力変数 |
|---|---|
| ClientReference | MQTTClientのClientReferenceと共通の変数 |
| SubQoS | 0=PUBLISH 1=PUBREL |
| Topic | トピックを指定 |
| Timeout | タイムアウト |
AWSのMQTTテストクライアントからメッセージを送信します
「トピックに公開する」タブのトピック名に"test/message1"と入力して、メッセージペイロードに送信メッセージを記入して[発行]をクリックします
サブスクリプションに送信したメッセージが表示されます
PLCはメッセージを受信すると出力変数に受信メッセージが入ります
| 出力変数 | 値 | 説明 |
|---|---|---|
| Subscribed | TRUE | サブスクライブ中 |
| RcvMsg | {$L $"message$": $"AWS IoT Core コンソールからの挨拶$"$L} | 受信メッセージ |
| Status | 0 | 実行状態 |
| Received | 受信時TRUE | メッセージ受信 |
| RcvTopic | test/message1 | トピック名 |
