IIoTエッジ開発– OPCUAプロトコルの使用
編集者注:産業用モノのインターネット(IIoT)は、産業運営に関する深い洞察を提供し、接続されたマシンとシステムの効率を高めることを約束します。大規模なIIoTアプリケーションは、階層化されたアーキテクチャに依存して、さまざまなセンサーからデータを収集し、データを確実かつ安全にクラウドに移動し、その洞察と効率を提供するために必要な分析を実行します。インダストリアルインターネットアプリケーション開発では、著者はIIoTアーキテクチャの詳細な調査を提供し、これらのシステムに関連する幅広い要件を満たすためのアプローチについて説明します。
産業用インターネットアプリケーション開発から改作、Alena Traukina、Jayant Thomas、Prashant Tyagi、KishoreReddipalliによる。
第3章IIoTエッジ開発(続き)
by Alena Traukina、Jayant Thomas、Prashant Tyagi、Kishore Reddipalli
産業用M2Mプロトコル– OPC UA
このセクションでは、RaspberryPiハブとOPCUAプロトコルを使用して、センサーシミュレーターモジュールからレシーバーデバイス(PCまたはクラウド)にデータを送信するためのシンプルなIoTアプリの構築を試みます。
センサーシミュレーターからレシーバーデバイスへのデータフロー
OPC UAプロトコルはModbusに似ていますが、より多くのデータタイプで動作し、セキュリティ、圧縮、および低遅延を提供しながら、重大な制限はありません。
このプロトコルは、OPCFoundationによって産業用マシンツーマシン通信プロトコルとして開発されました。 OPC UA(Unified Architecture)は、 Open Platform Communications の改良版です。 ( OPC )プロトコル。主な変更点の1つは、新しいプロトコルが制限なしで無料で利用できることです。
次の表に、プロトコルの詳細な説明を示し、ニーズに適しているかどうかを理解します。
キー 価値 オープンソースはいOSIレイヤートランスポートまたはアプリケーションデータタイプ整数、浮動小数点、文字列、ブール、日付、時刻など制限複雑なアーキテクチャには適していません可能な操作読み取り/書き込み/監視/クエリ変数LatencyLowUsageIIoTSecurityYesCompressionYes表5:OPCUAプロトコルの仕様
アプリケーションを構築するには、次のものが必要です。
- 必要なソフトウェア
- Node.js 6+(https://nodejs。org/en / download /)
- PostgreSQL(https://www。postgresql。org/download /)
- Cloud Foundry CLI(https://github。com/cloudfoundry / cli#downloads)
- リクエスト(https://www。npmjs。com/package / request)
- NodeOPCUA(https://www。npmjs。com/package / node- opcua)
- 非同期(https://www。npmjs。com/package / async)
- Docker(https://docs。docker。com/engine / installation /)
SDカードの準備
SDカードを準備するには、説明されている一連のアクションに従います。
-
最新のRaspbian LITEイメージをダウンロードします(https://raspberrypi.org/downloads/raspbian/で入手可能)。
-
SDカードをコンピューターに接続し、Etcher(https:// io /)を使用してRaspbian.imgファイルをSDにフラッシュしますカード。
-
SSHを有効にする:
cd / Volumes / boot touch ssh
-
Wi-Fiを有効にするには、次のコンテンツでconfを作成します。
network ={
ssid =” YOUR_SSID”
psk =” YOUR_WIFI_PASSWORD”
}

-
/ home / pi / hubを作成
-
次のコンテンツを含む/home/pi/hub/package.jsonファイルを作成します。
{
"name": "hub"、
"version": "1.0.0"、
"description": ""、
" main」:「index.js」、「scripts」:{
「start」:「node index.js」、
「test」:「echo「エラー:テストが指定されていません」&&exit 1」
}、
「作成者」:「」、
「ライセンス」:「ISC」、「依存関係」:{
「非同期」:「^ 2.4.0」、
“ node-opcua”:“ 0.0.64”、
“ request”:“ ^ 2.81.0”
}
}
-
次のコンテンツで/home/pi/hub/index.jsファイルを作成し、置き換えます
REMOTE-SERVER-ADDRESS.comおよびREMOTE-SENSOR-ADDRESSと実数値:
var opcua =require(“ node-opcua”); var async =require(“ async”);
var request =require(“ request”);
var session、subscription;
var client =new opcua.OPCUAClient();
var Sensor =“ opc.tcp:// REMOTE-SENSOR- ADDRESS:4334 / UA / resourcePath”;
var receive =“ http://REMOTE-SERVER-ADDRESS.com:8080”;
async.series([
//接続機能の確立(cb){
client.connect(sensor、function(err){
if(err){
console.log (「接続先」+センサー+「失敗」);
} else {
console.log(「接続成功」);
}
cb(err);
});
}、
//セッション開始function(cb){
client.createSession(function(err、res){
if(!err)session =res;
cb(err);
});
}、
//値を読み取る
関数(cb){
session.readVariableValue( " ns =1; s =Variable1”、function(err、dataValue){
if(!err)console.log(“ Variable1 =“、dataValue.value.value);
cb(err);
});
}、
//値を書き込む
関数(cb){
session.writeSingleNode(“ ns =1; s =Variable1”、new opcua.Variant({
dataType:opcua.DataType.Double、value:100
})、function(err){
cb(err);
});
}、
//変更をサブスクライブする
function(cb){
subset =new opcua.ClientSubscription(session、{
maxNotificationsPerPublish:5、
priority:5、
publishingEnabled: true、
requestedLifetimeCount:5、
requestedMaxKeepAliveCount:3、
requestedPublishingInterval:500、
});
subset.on( "started"、function(){
console.log( "subscription id:"、
subscription.subscriptionId);
})。on( "terminated"、function(){
cb();
});
setTimeout(function(){
subset.terminate();
}、5000);
//監視対象アイテムをインストール
var monitor =Subscription .monitor({
attributeId:opcua。 AttributeIds.Value、
nodeId:opcua.resolveNodeId( "ns =1; s =Variable1")、
}、
{
discardOldest:true、
samplingInterval: 50、
queueSize:5、
}、
opcua.read_service.TimestampsToReturn.Both
);
monitor.on( "changed"、function(dataValue){
console.log( "Variable1 ="、dataValue.value.value);
//受信者に送信
var data ={
デバイス: "sensor1"、
タイムスタンプ:Date.now()、
Variable1:dataValue.value.value
};
request.post({url:receiver、form:data}、function(err){
if(err)console.log(“ Failed to send” +
JSON.stringify(data)+” to” + receive);
});
});
}、
//セッションを閉じる
関数(cb){
session.close(function(err){
if(err)console.log( "Failed toセッションを閉じる」); cb();
});
}
]、
function(err){if(err){
console.log( "Failed with error:" 、err);
} else {
console.log( "Successfully finish");
}
client.disconnect(function(){
});
}
);
-
次の内容で/ home / pi / hub / Dockerfileファイルを作成します。
FROM hypriot / rpi-node:boron-onbuild
-
/ home / pi / sensorを作成
-
次のコンテンツを含む/home/pi/sensor/package.jsonファイルを作成します:
{
「name」:「sensor」、
「version」:「1.0.0」、
「description」:「」、
「 main」:「index.js」、
「scripts」:{
「start」:「node index.js」、
「test」:「echo「エラー:テストが指定されていません」 &&exit 1″
}、
"author": ""、
"license": "ISC"、
"dependencies":{
"node-opcua 」:「0.0.64」
}
}
-
次のコンテンツを含む/home/pi/sensor/index.jsファイルを作成します。
var opcua =require(“ node-opcua”);
var min =1;
var max =100;
var host =new opcua.OPCUAServer({ buildInfo:{
buildDate:new Date(2018、8、8)、
buildNumber:“ 1234”、
productName:“ productName”、
}、
port :4334、
resourcePath:“ UA / resourcePath”、
});
host.initialize(function(){
var space =host.engine.addressSpace;
var componentOf =space.addObject({
ブラウズ名:「browseName」、
OrganizedBy:space.rootFolder.objects、
});
var variable1 =0;
//新しい値を生成
setInterval(function(){
variable1 =Math.floor(max – Math.random()*(max – min));
}、500);
space.addVariable({
browseName:「browseName」、
componentOf:componentOf、
dataType:「Double」、
nodeId:「ns =1; s =Variable1”、//文字列nodeID
value:{
get:function(){
return new opcu a.Variant({dataType:opcua.DataType.Double、value:variable1});
}、
set:function(variant){
variable1 =parseFloat(variant.value);
return opcua.StatusCodes.Good;
}
}
});
host.start(function(){
var endpoint =
host.endpoints [0] .endpointDescriptions()[0] .endpointUrl; console.log(“エンドポイント:“、エンドポイント);
});
});
-
最初に最小値と最大値を設定します
/ home / pi / sensor / index.jsファイル。
-
次の内容で/ home / pi / Sensor / Dockerfileファイルを作成します:
FROM hypriot / rpi-node:boron-onbuild
モノのインターネットテクノロジー
- 2020年のIIoTセキュリティのヒントとトレンド
- シスコは、包括的なIIoTセキュリティアーキテクチャ、可視性のためのサイバービジョン、およびエッジインテリジェンスを発表しました
- IIoTセキュリティの管理
- スマートセンサーボードがエッジAI開発をスピードアップ
- 3Dプリントを使用してすべてを行う製品開発会社
- 産業用IoTの開発の見通し
- エッジコンピューティングがIIoTにとって非常に重要である理由
- 製造業者と流通業者は最終的にIIoTとAIを使用して売上と生産性を向上させます
- IoTアプリ開発がコンテナテクノロジーから敏捷性を高める
- エッジコンピューティングとIIoTは、データに対する考え方を変えていますか?
- 次世代ツールが5Gとエッジ開発を推進