システム構成
今回、SmartFitPRO Basicを利用して、IDEC製PLC(FT1A-H24RA)の接点出力データをAmazon DynamoDBに格納することを目指します。
構成は下図のようにします。
AWS、SORACOMプラットフォームの各設定方法は下記HPを参考にさせて頂きました。
準備するもの
ハードウェア
品名 | 数量 | 備考 |
---|---|---|
PLCユニット | 1 | 今回はIDEC製PLC(FT1A-H24RA)を使用します。 |
IoTゲートウェイSmartFitPRO Basicスターターキット | 1 | LTE通信可能なルーターです。SIMカードとセットになっています。 |
特定地域向け IoT SIM (plan-D)サイズ:マイクロ(データ通信のみ/D-300MB) | 1 | 上記キットとセットになっています。 |
設定用PC | 1 | SmartFitPRO Basicの設定に使用します。対応OSはWindows 10です。 |
設定・電源供給用USBケーブル | 1 | 設定用PCとSmartFitPRO Basicの接続に利用します。SmartFitPRO BasicのUSBポートはUSB Type-Cです。設定時はデータ通信可能なUSBケーブルをご用意ください。 |
接点入力用ケーブル | 1 | PLCとSmartFitPRO Basicの接続に利用します。SmartFitPRO Basicに同梱されています。 |
遠隔監視用PC | 1 | インターネット接続可能で最新Webブラウザでサイト閲覧が自由にできること。 |
ソフトウェア
品名 | 数量 | 価格 | 備考 |
---|---|---|---|
SmartFitPROSettingTool_SoracomStore.exe | 1 | 無料 | SmartFitPRO Basicの設定ソフトウェアです。保存先は任意です。 |
SmartFitPROSetting_Basic.csv | 1 | 無料 | SmartFitPRO Basicの初期パラメータcsvファイルです。 |
上記ソフトウェアはSmartFitPRO資料ページからダウンロードできます。
必要なクラウドサービスアカウント
サービス名 | アカウント作成方法 |
---|---|
SORACOMアカウント | SORACOMアカウントの作成(JP) |
AWSアカウント | AWSアカウント作成の流れ |
利用するクラウドサービス
サービス名 | 概要 |
---|---|
SORACOM Air for セルラー | IoT 向けのコネクティビティを提供するサービスです。ユーザーコンソールや API を利用して各種設定の変更や、通信量を監視するなど IoT デバイスを一元管理することができます。 |
SORACOM Funk | SORACOMが提供するAWS、Azure、Google Cloudといったパブリッククラウドが提供するFaaS (Function as a Service)のFunctionを呼び出すサービスです。今回はAWS Lambdaを呼び出すのに利用します。 |
Amazon DynamoDB | Amazonが提供するフルマネージドでサーバーレスなkey-value NoSQLデータベースです。このデータベースにPLCの接点データを格納します。 |
AWS Lambda | Amazonが提供するサーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービスです。PLCの接点データをAmazon DynamoDBへ格納するFunctionとして利用します。 |
(※)各種クラウドサービスに必要な費用は下記HPを参照ください。
・SORACOMの課金体系
・AWSの料金
・AWS Lambda料金
・Amazon DynamoDB料金
ステップ1:Amazon DynamoDBの作成
PLCのデータを保存するAmazon DynamoDBを作成します。
1. Amazon DynamoDBの「テーブルの作成」画面にアクセスします。
2. テーブル名は任意ですが、今回はテーブル名を「PLC_Database」、パーティションキーを「time」「文字列」とします。
テーブル名とパーティションキーはLambdaコード作成の際に使用するので、変更した場合はメモしておきます。
3.「テーブルの作成」をクリックします。
これでPLC接点データの保存用テーブルが作成できました。
ステップ2:AWS Lambdaの作成
続いて、AWSに届いたデータを作成したテーブルへ送信するAWS Lambdaの関数を作成します。
1. AWS Lambdaの「関数の作成」画面にアクセスします。
2. 「一から作成」をクリックし、以下の項目を設定します。
項目 | 説明 |
---|---|
関数名 | 関数名は任意ですが、ここでは「PLCdata-to-Dynamodb」とします。 |
ランタイム | 「Python x.x」を選択します。最新のサポート対象のPythonバージョンを選択してください。 |
アーキテクチャ | 「arm」を選択します。 |
3.「関数の作成」をクリックします。
4.「コードソース」に以下のサンプルプログラムを入力します。
「payload」の「time」は「ステップ1:Amazon DynamoDBの作成」で作成したテーブルのパーティションキー名にしてください。
import json
from datetime import datetime, timedelta, timezone
import boto3
import os
TZ = timezone(timedelta(hours=+9), 'JST')
TABLE_NAME = os.environ['DYNAMODB_TABLE_NAME']
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
payload = {
'time': datetime.now(TZ).strftime('%Y/%m/%d %H:%M:%S'),
'devicetype': str(event.get('devicetype')),
'fw_ver': str(event.get('fw_ver')),
'message_type': str(event.get('message_type')),
'timestamp': str(event.get('timestamp')),
'device_state': str(event.get('device_state')),
'di0': str(event.get('di0'))
}
dynamodb.Table(TABLE_NAME).put_item(Item=payload)
5.「デプロイ」をクリックします。
6.上記コードではデータを保存するDynamoDBのテーブル名を環境変数として取り込んでいるため、環境変数を設定します。
7.「設定」⇒「環境変数」⇒「編集」の順にクリックします。
8.「キー」に「DYNAMODB_TABLE_NAME」、値に「ステップ1:Amazon DynamoDBの作成」で作成したテーブル名を入力して「保存」をクリックします。
「キー」値はコードで指定しているため、変更しないようにしてください。
次に作成した関数に「ステップ1:Amazon DynamoDBの作成」で作成したテーブルにデータを保存する(PutItem)権限を与えます。
9.「設定」⇒「アクセス権限」の順にクリックします。
10.「実行ロール」に関数作成時に自動で作成されたロールが表示されているので、クリックします。
11.新しいウィンドウでIAMロールコンソールが開かれるので、「許可を追加」⇒「インラインポリシーを作成」の順にクリックします。
12.以下の項目を設定します。
項目 | 説明 |
---|---|
サービス | 「サービスの選択」をクリックして、「DynamoDB」をクリックします。 |
アクション | 「フィルタアクション」に「putitem」と入力し、「PutItem」にチェックを入れます。 |
13.「リソース」⇒「指定」⇒「ARNの追加」の順にクリックします。
14.「Region」にDynamoDBを作成したリージョン名を入力します。
DynamoDBコンソールからリージョン名は確認出来ます。
15.「Table name」に「ステップ1:Amazon DynamoDBの作成」で作成したテーブル名を入力します。
16.「追加」をクリックします。
17.「ポリシーの確認」をクリックします。
18.「名前」にAWS IAMポリシーの名前を入力して「ポリシーの作成」をクリックします。
ポリシー名は任意ですが、ここでは「PLCdata_To_DynamoDB_Lambda_policy」とします。
これで作成した関数に「ステップ1:Amazon DynamoDBの作成」で作成したテーブルにデータを保存する権限が与えられました。
19.Lambdaコンソールに戻って、この関数のARNをコピーします。
このARNはこれ以降、${lambda_func_arn}と表記します。
ステップ3:IAMロールの作成
Funkが動作するSORACOMプラットフォームのAWSアカウントに対して、作成したLambdaの実行を許可するためのAWS IAMロールを作成します。
1.IAMコンソールにアクセスして、「アクセス管理」⇒「ロール」の順にクリックして、「ロールを作成」をクリックします。
2.「AWSアカウント」⇒「別のAWSアカウント」の順にクリックし、「アカウントID」にSORACOMプラットフォームのAWSアカウントIDを入力します。
Funkが動作するSORACOMプラットフォームのAWSアカウントのIDはカバレッジタイプによって異なります。
・日本カバレッジ:762707677580
・グローバルカバレッジ:950858143650
3.「外部IDを要求する」にチェックを入れ、「外部ID」に任意の文字列を入力します。
「外部ID」に入力した文字列はこれ以降、${external_id}と表記します。
(例: External-ID-Mej73gfhrFhimGKb)
4.「次へ」をクリックします。
「許可を追加」画面が表示されます。
5.「ポリシーの作成」をクリックします。
別のウィンドウまたは別のタブで「ポリシーの作成」画面が表示されます。
ここからは「ポリシーの作成」画面でポリシーを作成します
「ポリシーの作成」画面の操作が終わったら、[ポリシーの作成] が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。
6.以下の項目を設定します。
項目 | 説明 |
---|---|
サービス | 「サービスの選択」をクリックして、「Lambda」をクリックします。 |
アクション | 「フィルタアクション」に「InvokeFunction」と入力し、「InvokeFunction」にチェックを入れます。 |
7.「リソース」⇒「指定」⇒「ARNの追加」の順にクリックします。
「ARNの追加」画面が表示されます。
8.「Lambda_functionのARN設定」に${lambda_func_arn}を入力して、「追加」をクリックします。
9.「次のステップ:タグ」⇒「次のステップ:確認」の順にクリックします。
10.「名前」にAWS IAMポリシーの名前を入力して「ポリシーの作成」をクリックします。
ポリシー名は任意ですが、ここでは「PLCdata_To_DynamoDB_policy」とします。
11.ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。
12.「更新ボタン」をクリックして手順12で入力したAWS IAMポリシーの名前をテキストボックスに入力して、Enterキーを押します。
13.作成したAWS IAMポリシーにチェックを入れて、「次へ」をクリックします。
14.「ロール名」にIAMロールの名前を入力して、「ロールを作成」をクリックします。
ここでは「PLCdata_to_DynamoDB_role」とします。
15.作成したIAMロールの名前をクリックし、「ARN」をメモします。
このARNはこれ以降、${iam_role_arn}と表記します。
これでAWSでの設定は完了です。
ステップ4:Funkのセットアップ
FunkからAWS Lambdaの関数を呼び出すための設定をSORACOMユーザーコンソールで行います。
認証情報ストアにAWS IAMロール認証情報を登録する
Funk から AWS Lambda の関数を呼び出すための認証情報を登録します。
1.認証情報ストアの「認証情報を登録」画面を表示します。
詳しくは、認証情報を登録するを参照してください。
2. 以下の項目を設定します。
項目 | 説明 |
---|---|
認証情報ID | 認証情報を識別するために任意の名前を入力します。ここでは「PLCdata-AWS-DynamoDB-cert」とします。 |
種別 | 「AWS IAMロール認証情報」を選択します。 |
ロールARN | ${iam_role_arn}を入力します。 |
外部ID | ${external_id}を入力します。 |
3.「登録」をクリックします。
Funkを有効化する
IoT SIMに対してFunkを有効化します。
Funk の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定を参照してください。
1.SIM グループ画面で [SORACOM Funk 設定] をクリックします。
SIM グループ画面を表示する操作について詳しくは、グループの設定を変更するを参照してください。
2.スイッチをクリックして「ON」にします。
3.各項目を設定します。
項目 | 説明 |
---|---|
サービス | 「AWS Lambda」を選択します。 |
関数のARN | ${lambda_func_arn}を入力します。 |
認証情報 | 認証情報ストアにAWS IAMロール認証情報を登録するで登録した認証情報を選択します。 |
送信データ形式 | ここでは「JSON」を選択します。 |
4.「保存」をクリックします。
5.IoT SIM が所属するグループを切り替えます。
これでIoT SIM の Funk の設定が完了しました。
ステップ5:SmartFitPRO Basicのセットアップ
下記からダウンロードできるSmartFitPRO Basicの取り扱い説明書を参照して、SmartFitPROのセットアップを行っていきます。
SIMを挿入するため、ケースを開ける
ケース側面(下記写真)の爪部にマイナスドライバ等を差し込み、持ち上げ、ケースを外します。
反対側の2か所も同様に外し、最後にケース蓋を上方向に外します。
SIMを挿入
1.下記写真の、SIMスロット部のシルバーの部分を指で軽く上から抑え、手前(矢印)方向にスライドします。(ロックが外れます)
2~ 3) SIMスロットのカバーを上方向に持ちあげて、カバーを開けます。
4.SIMを写真のように置きます。
5.写真の②の部分を下に下ろします。
6.カバーを抑えながら、1)と逆の方向(奥方向)にスライドし、スロットをロックします。
ソフトウェアパラメータの設定
SmartFitPRO Basicは工場出荷時、SORACOM Harvestに接続する設定となっているため、今回、設定をSORACOM Funkに接続する設定に変更します。
1.先端の細いピンセット等でSmartFitPRO BasicのSWを押しながら、PCとUSBケーブルを接続します。
緑LEDが約1s間隔で点滅したら、設定モードに移行しています。
2.設定アプリケーション「SmartFitPROSettingTool_SoracomStore.exe」を実行します。
3.「接続」をクリックします。
4.「設定ツールダウンロードページ」からダウンロードしたzipファイル内の「readme_Basic.txt」に記載されている方法で「管理者モード」に移行します。
5.「インポート」と押して、設定パラメータファイル「SmartFitPROSetting_Basic.csv」を選択します。
6.各工場出荷時の設定が読み込まれるので、ここでは送信周期を「10」(10秒)から「600」(10分)に変更して、「書込」をクリックします。
7.「LTE/Cloud Setting」タブ⇒「TCP/UDP」タブの順にクリックします。
8.下記設定を変更して、「書込」をクリックします。
項目 | 説明 |
---|---|
エンドポイント | 「harvest.soracom.io」⇒「uni.soracom.io」に変更します。 |
エンドポイント(HTTP) | 「http://harvest.soracom.io」⇒「http://uni.soracom.io」に変更します。 |
PORT | 「8514」⇒「23080」に変更します。 |
9.設定アプリケーションを閉じます。10.USBケーブルを外します。
これでソフトウェアパラメータの設定は完了です。
SmartFitPRO Basic起動
今回はそのままPCからSmartFitPRO Basicに給電するため、再度、USBケーブルでSmartFitPROとPCを接続します。
下図の緑LEDが不規則に点滅した後、10秒に1回程度の点滅に落ち着きます。
これで初回起動時の通信が完了しました。
ステップ6:Amazon DynamoDBのデータ確認
SmartFitPRO BasicからSORACOM Funkを通して、Amazon DynamoDBへデータが送信されているはずなので、Amazon DynamoDBを確認しにいきます。
1.「Amazon DynamoDB」コンソールにアクセスして、「テーブル」⇒「項目の探索」の順にクリックします。
2.作成した「PLCdata_Database」をクリックします。
SmartFitPRO Basicからの送信された各種データが「返された項目」で確認できます。
「message_type」が「1」で起動時の送信であることが分かります。
これでSmartFitPROのセットアップは完了です。
ステップ7:PLCのセットアップ
今回はIDEC製PLC「FT1A-H24RA」を使用します。
PLCプログラム作成に必要なアプリケーションは購入時に付属されているため、インストール方法等については解説しません。
PLCプログラムの作成
18信号入力、8接点出力が可能な「FT1A-H24RA」を使用して、下記構成でプログラムを作成します。
実際に作成したラダー図が下図になります。
SmartFitPRO Basic用には最上段の「I0017」、「I0000」、「Q0000」のみで問題無いですが、SmartFitPRO Standardにも接続する予定なので、各ポートも同様の構成でラダー図を作成しています。
PLCとSmartFitPRO Basicの接続
PLCとSmartFitPRO Basicを構成図通りに接続します。
これで全ての準備が完了しました。
ステップ8:PLCの出力変化でDynamoDBにデータが送られるか確認する
SmartFitPRO BasicはPLCの出力データの変化をトリガーにして、発報する仕組みになっています。
今回はトグルSWのON/OFFでデータが送付されるかを確認します。
PLCのI0とI17をON
まず、発報禁止命令を停止するため、I17のSWをONします。
そして、I0のSWをONすることでPLCからSmartFitPRO BasicにOFF⇒ONの出力変化信号が送信されます。
SW操作後、しばらくするとSmartFitPRO Basicの緑LEDが点滅します。
緑LEDの点滅が落ち着いたら、送信が完了しているはずなので、DynamoDBにデータが送られているか確認します。
無事、DynamoDBに新しいデータが送られていることが確認できます。
ここで注目すべきは「di0」はSmartFitPRO BasicのDI0に入力されたデータで、すなわち、PLCのI0の状態がONになっていることが分かります。
「message_type」は「接点入力変化による発報」を意味する「3」になっています。
では、PLCのI17のSWをONにしたまま、I0のON/OFFを繰り返して、データを蓄積してみます。
十分データが蓄積されると、このままでは分かりづらいと思います。
そこで蓄積したデータをCSVでダウンロードします。
ダウンロードしたCSVを開いて、「di0」のグラフを作成してみます。
これでPLCのI0がいつONになって、いつOFFになったのかが分かりやすくなったかと思います。
最後に
以上より、PLCが出力した接点データを Amazon DynamoDB に格納することができました。
今回はPLCのトグルSWを利用しましたが、例えば、ここに生産設備が接続されていて異常時に入力されるとすると、いつ生産設備に異常が起きて、いつ異常が解消したのかが、遠隔で分かるようになるかと思います。