概略

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

AWS ソフトウェア構成イメージ
AWS ソフトウェア構成イメージ

構成

AWS ハードウェア構成
AWS ハードウェア構成

準備

AWS側の準備

AWSのアカウント作成してIoT Coreでクライアント証明書と秘密鍵をダウンロードします
手順は使い方ナビのAWS IoT CoreにMQTT接続するための準備を参考にしてください

PLCのライブラリのダウンロード

ダウンロードはこちらから
OMRON公式 MQTT通信ライブラリ ダウンロードページ
MQTT通信ライブラリ

PLCのネットワークの設定

SysmacStudioでPLCのネットワークの設定を次のように設定ます

Sysmac Studio 設定画面
Sysmac Studio 設定画面

PLCのCPUユニットのセキュアソケット設定

簡単な流れは

  1. PLCをProgramモードにする
  2. C:\ProgramData\Omron\Sysmac Studio\StartMenu\Sysmac Studio\Toolsフォルダの「セキュアソケット設定コマンド」ショートカットを実行します
    (もしくはC:\ProgramData(x86)\Omron\Sysmac Studio\StartMenu\Sysmac Studio\Tools)
  3. 証明書とキーファイルを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
コマンドプロンプトで手打ちがめんどくさい場合はファイル名を入力するところでエクスプローラからファイルを摘まんでコマンドプロンプトへドラッグするとファイル名が入力されます

PLCのCPUユニットのセキュアソケット設定
PLCのCPUユニットのセキュアソケット設定

詳しい手順はMQTTライブラリのマニュアルの「A-3-6 CPUユニットのセキュアソケット設定」を参照して下さい
ライブラリのマニュアルはセットアップ後にC:\OMRON\Data\Lib\MQTT_Commフォルダの下に作成されています

PLCの設定

MQTTライブラリの追加

SysmacStudioのメニューから[プロジェクト]-[ライブラリ]-[ライブラリ参照]を選んでライブラリ参照ダイアログでダウンロードしたMQTTライブラリを追加します

MQTTライブラリの追加
MQTTライブラリの追加

プログラムの作成

AWS IoT Coreと接続

MQTTクライアント(MQTTClient)でAWSと接続を確立します
trigger1をONにしてConnectedがONになれば接続中となります
接続中の状態でメッセージの交信が可能となります

AWS IoT Coreと接続するサンプルラダー
AWS IoT Coreと接続するサンプルラダー

ConnectionSettings.IpAdrはAWS IoT Core IoTの設定画面のエンドポイントを記入します

エンドポイントを記入
エンドポイントを記入
MQTTClientの入力の説明
入力変数 説明
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/"で始まるトピックを受信したときにメッセージが表示されます

MQTT テストクライアント
MQTT テストクライアント

PLCではtrigger2をONにしてメッセージ({"message":"Hello!"})を送信します

メッセージ送信ラダー
メッセージ送信ラダー
MQTTSubStringの入力の説明
入力変数 入力変数
ClientReference MQTTClientのClientReferenceと共通の変数
PacketID パケットID
MsgType 0=PUBLISH
1=PUBREL
PubMsg 送信メッセージ
PubSettings.PubQoS QoSレベル
Topic トピック名
Timeout タイムアウト

AWS側で受信すると受信したメッセージが表示されます

AWS 受信確認
AWS 受信確認

PLCでメッセージを受信する

サブスクライブ命令(MQTTSubString)でメッセージを受信します

PLCではtrigger3をONにしてメッセージの受信を待ちます

MQTTSubString命令はEnable入力なのでtrigger3がONしている状態で受信待ち状態になります

PLC 受信待ちラダー
PLC 受信待ちラダー
MQTTSubStringの入力の説明
入力変数 入力変数
ClientReference MQTTClientのClientReferenceと共通の変数
SubQoS 0=PUBLISH
1=PUBREL
Topic トピックを指定
Timeout タイムアウト

AWSのMQTTテストクライアントからメッセージを送信します

「トピックに公開する」タブのトピック名に"test/message1"と入力して、メッセージペイロードに送信メッセージを記入して[発行]をクリックします
サブスクリプションに送信したメッセージが表示されます

AWS IoT Core メッセージ送信
AWS IoT Core メッセージ送信

PLCはメッセージを受信すると出力変数に受信メッセージが入ります

MQTTSubStringの出力の説明
出力変数説明
Subscribed TRUE サブスクライブ中
RcvMsg {$L $"message$": $"AWS IoT Core コンソールからの挨拶$"$L} 受信メッセージ
Status 0 実行状態
Received 受信時TRUE メッセージ受信
RcvTopic test/message1 トピック名

ダウンロード

この記事へのコメント