工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> モノのインターネットテクノロジー

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プロトコルの仕様

アプリケーションを構築するには、次のものが必要です。

  • 必要なハードウェア
  • Raspberry Pi 3(モデルB)
  • 電源アダプター(2A / 5V)
  • microSDカード(8 GB以上)とSDアダプター
  • 有線ネットワーク接続用のイーサネットケーブル
  • SDカードの準備

    SDカードを準備するには、説明されている一連のアクションに従います。

    1. 最新のRaspbian LITEイメージをダウンロードします(https://raspberrypi.org/downloads/raspbian/で入手可能)。

    2. SDカードをコンピューターに接続し、Etcher(https:// io /)を使用してRaspbian.imgファイルをSDにフラッシュしますカード。

    3. SSHを有効にする:

    cd / Volumes / boot touch ssh

    1. Wi-Fiを有効にするには、次のコンテンツでconfを作成します。

    network ={
    ssid =” YOUR_SSID”
    psk =” YOUR_WIFI_PASSWORD”
    }

    Linuxコンソールでファイルを作成するには、GNUNanoエディターを使用できます。ほとんどのLinuxディストリビューションにプリインストールされています。必要なのは、nano FILE_NAMEコマンドを実行し、表示される指示に従うことだけです。
    1. / home / pi / hubを作成

    2. 次のコンテンツを含む/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”
    }
    }

    1. 次のコンテンツで/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(){
    });
    }
    );

    1. 次の内容で/ home / pi / hub / Dockerfileファイルを作成します。

    FROM hypriot / rpi-node:boron-onbuild

    1. / home / pi / sensorを作成

    2. 次のコンテンツを含む/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」
    }
    }

    1. 次のコンテンツを含む/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(“エンドポイント:“、エンドポイント);
    });
    });

    1. 最初に最小値と最大値を設定します

    / home / pi / sensor / index.jsファイル。

    1. 次の内容で/ home / pi / Sensor / Dockerfileファイルを作成します:

    FROM hypriot / rpi-node:boron-onbuild


    モノのインターネットテクノロジー

    1. 2020年のIIoTセキュリティのヒントとトレンド
    2. シスコは、包括的なIIoTセキュリティアーキテクチャ、可視性のためのサイバービジョン、およびエッジインテリジェンスを発表しました
    3. IIoTセキュリティの管理
    4. スマートセンサーボードがエッジAI開発をスピードアップ
    5. 3Dプリントを使用してすべてを行う製品開発会社
    6. 産業用IoTの開発の見通し
    7. エッジコンピューティングがIIoTにとって非常に重要である理由
    8. 製造業者と流通業者は最終的にIIoTとAIを使用して売上と生産性を向上させます
    9. IoTアプリ開発がコンテナテクノロジーから敏捷性を高める
    10. エッジコンピューティングとIIoTは、データに対する考え方を変えていますか?
    11. 次世代ツールが5Gとエッジ開発を推進