AWSとMQTT接続する
概要
-
アマゾン ウェブサービス(AWSクラウド) のIot CoreにPLCをMQTT接続してメッセージの交換をしてみます
IoT Coreへデータを送ることが出来ればAWSの各サービス(Lambda、DynamoDBなど)でデータを扱えるようになります
一例としてPLCからDynamoDBへデータをInsertする方法を別ページに書いています

NX102 |
NX1P2 |
準備
- AWS側の準備
-
AWSのアカウント作成してIoT Coreでクライアント証明書と秘密鍵をダウンロードします
手順は使い方ナビのAWS IoTCoreにMQTT接続するための準備を参考にしてください
- PLCのライブラリのダウンロード
-
PLCで使うMQTTライブラリをダウンロードします
ダウンロードはこちらから
https://www.fa.omron.co.jp/product/special/sysmac/sysmac-library/index2.html
- 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部分はダウンロードしたファイルのファイル名に合わせます ファイル名が長い場合は変更しても構いません)
コマンドプロンプトで手打ちがめんどくさい場合はファイル名を入力するところでエクスプローラからファイルを摘まんでコマンドプロンプトへドラッグするとファイル名が入力されます
詳しい手順はMQTTライブラリのマニュアルの「A-3-6 CPUユニットのセキュアソケット設定」を参照して下さい
ライブラリのマニュアルはセットアップ後にC:\OMRON\Data\Lib\MQTT_Commフォルダの下に作成されています
PLCの設定
プログラムの作成
- AWSと接続
-
MQTTクライアント(MQTTClient)でAWSと接続を確立します
trigger1をONにしてConnectedがONになれば接続中となります
接続中の状態でメッセージの交信が可能となります
ConnectionSettings.IpAdrはAWS IoTの設定画面のエンドポイントを記入します
MQTTClientの入力の説明入力変数 説明 ClientID 任意の文字列 ConnectionSettings.IpAdr AWS IoTのエンドポイントを記述 ConnectionSettings.PortNo TLSUse=trueのとき8883
TLSUse=falseのとき1883ConnectionSettings.TLSUse セキュアソケット通信を使用する ConnectionSettings.TLSSessionName TLSSession0~59
コマンドプロンプトで「tlsconfig setSessionInfo /id 0 ....」と設定したidの番号をTLSSessionの後ろに付けますConnectionSettings.UserName 証明書を使うときは不要 ConnectionSettings.Password 証明書を使うときは不要 ConnectionSettings.WillCfg.WillFlag Will機能を使用する ConnectionSettings.CleanSession 接続切断後に再接続時にクリアして接続 KeepAlive キープアライブタイマ(s) Timeout タイムアウト(s) DiscardMsgTime メッセージは気時間(ms) - PLCからメッセージを送信する
-
パブリッシュ命令(MQTTPubString)でメッセージを送信します
AWSのMQTTテストクライアントを使って受信データを確認します
「トピックをサブスクライブする」タブのトピックフィルターに"test/#"を入力して[サブスクライブ]をクリックすると下のサブスクリプションに"test/#"が追加されます
これで受信待ち状態になっています
NOTE
#はワイルドカードです
受信するトピックの名前が"test/"で始まるトピックを受信したときにメッセージが表示されます
PLCではtrigger2をONにしてメッセージ({"message":"Hello!"})を送信します
MQTTSubStringの入力の説明入力変数 説明 ClientReference MQTTClientのClientReferenceと共通の変数 PacketID パケットID MsgType 0=PUBLISH
1=PUBRELPubMsg 送信メッセージ PubSettings.PubQoS QoSレベル PubSettings.RetainFlag メッセージを保持 Topic トピック名 Timeout タイムアウト
AWS側で受信すると受信したメッセージが表示されます
- PLCでメッセージを受信する
-
サブスクライブ命令(MQTTSubString)でメッセージを受信します
PLCではtrigger3をONにしてメッセージの受信を待ちます
MQTTSubString命令はEnable入力なのでtrigger3がONしている状態で受信待ち状態になります
MQTTSubStringの入力の説明入力変数 説明 ClientReference MQTTClientのClientReferenceと共通の変数 SubQoS 0=PUBLISH
1=PUBRELTopic トピックを指定 Timeout タイムアウト
AWSのMQTTテストクライアントからメッセージを送信します
「トピックに公開する」タブのトピック名に"test/message1"と入力して、メッセージペイロードに送信メッセージを記入して[発行]をクリックします
サブスクリプションに送信したメッセージが表示されます
PLCはメッセージを受信すると出力変数に受信メッセージが入ります
MQTTSubStringの出力の説明出力変数 値 説明 Subscribed TRUE サブスクライブ中 RcvMsg {$L $"message$": $"AWS IoT コンソールからの挨拶$"$L} 受信メッセージ Status 0 実行状態 Recieved 受信時TRUE メッセージ受信 RcvTopic test/message1 トピック名