Zenoh#Peer to PeerとZenoh Routerを試してみよう

今回の記事ではZenoh通信Protocolを横河電機のert3とSeeedStudioのreComputer R1025-10を試します。最初はPeer to PeerとZenoh Routerにチャレンジします。

さ、FAを楽しもう。

Zenoh?

ZenohはPub/Sub/Queryプロトコルであり、比較的新しい通信Protocolです。その効率的なPub/Sub/Queryを提供し、複数レベルの信頼性、ダイナミック・ディスカバリー、フラグメンテーション、ワイヤ・レベルのバッチ処理をサポートします。また、Zenohは、スケーラブルなルーティング・インフラストラクチャを提供し、アプリケーションをインターネット規模で展開することを可能にします。

Pub/Sub in Zenoh

下図は基本的なパブ/サブの動作を示しています。システムに接続されたサブライバは、Zenoh ネットワークを通じて効率的にルーティングされたパブリッシャから送信された値を受信します。また、ネットワークに接続されたサブウーファがスリープしている様子も見ることができます。

Queries in Zenoh

下図はZenohを使った簡単なクエリの動作を示しています。ストレージとクエリケーブルが存在することがわかります。クエリ可能とは、クエリに応答できるすべてのプロセスです。ストレージはサブスクリプションとクエリ可能の組み合わせです。

Who is using?

以下は、Zenohを採用、支援、貢献した企業、研究機関、財団のリストであります(2024年時点)。

Installation

最初に横河電機のert3とrecomputerR1025にZenoh のPython Packageをインストールします。

install venv 

下記のコマンドに仮想環境を作成します。

python -m venv yourvenvname

install zenoh

ert3とrecomputerR1025の仮想環境の中にZenoh Packageをインストールしましょう。

pip install eclipse-zenoh==1.0.0b2

Exmaple1

Example1は横河電機のert3がSubscriberで、recomputerR1025がPublisherになります。2つのデバイスではPeer to Peerで通信します。

SeeedStudio Side

下記のコマンドでSubscribe用のPython scriptを作成します。

nano z_sensor.py

z_sensor.py

下記のPython Scriptで1秒ごとにCNC/machine1/axis1/position/abs/x MessageをPublishします。

import zenoh,random,time
random.seed()

def read_post():
    return (random.randint(15,30))
    #return “Hello world”

if __name__ ==”__main__”:
    session = zenoh.open(zenoh.Config())
    key=’CNC/machine1/axis1/position/abs/x’
    pub=session.declare_publisher(key)

    while True:
        t=read_post()
        buf=f”{t}”
        print(“putting data..”+key+” “+buf)
        pub.put(buf)
        time.sleep(1)

ert3 Side

下記のコマンドでert3用のPython scriptを作成します。

nano z_sub.py

z_sub.py

下記のPython Scriptで1秒ごとにCNC/machine1/axis1/position/abs/x をSubscribeします。

import zenoh,time

def listener(message):
    #print(“Message is received:”+message.kind+” , “+message.key_expr+” ,”+message.payload.des>    print(f”Received {message.kind} (‘{message.key_expr}’: ‘{message.payload.deserialize(str)}>
if __name__ == “__main__”:
    session=zenoh.open(zenoh.Config())
    sub=session.declare_subscriber(‘CNC/machine1/axis1/position/abs/x’,listener)
    time.sleep(10)

Result

横河電機のert3とrecomputerR1025間でメッセージ交換できました!

Example2

Example2はrecomputerR1025にZenoh Routerをインストールし、横河電機のert3がSeeedStudioがPublishしたメッセージをそのRouter経由でデータを取得します。

SeeedStudio Side

SeeedStudioR1025側からpackageをインストールし、Python Scriptを作成します。

Install Router

下記のコマンドでZenoh Routerをインストールします。

$ echo “deb [trusted=yes] https://download.eclipse.org/zenoh/debian-repo/ /” | sudo tee -a /etc/apt/sources.list > /dev/null
$ sudo apt update
$ sudo apt install zenoh 

Config File

zenoh-config.json5 Fileを作成し、下記のようにConfiguration Fileを作成してください。

REST APIで、Port 8000、CNC/**をRoutingするようなConfigurationです。

{
  plugins: {
    rest: {                        // activate and configure the REST plugin
      http_port: 8000              // with HTTP server listening on port 8000
    },
    storage_manager: {             // activate and configure the storage_manager plugin
      storages: {
        myhome: {                 
          key_expr: “CNC/**”,
          volume: {                // and using the “memory” volume (always present by default)
            id: “memory”
          }
        }
      }
    }
  }
}

Start router

最後は下記のコマンドでZenoh Routerを起動し、またExample1で作成したz_sensor.pyを起動しましょう。

zenohd -c zenoh-config.json5

ert3 Side

次は横河電機のert3にRouterからCNC/machine1/axis1/abs/x’の情報を取得するScriptを作成します。

import zenoh

if __name__ == “__main__”:
    session = zenoh.open()
    replies = session.get(‘CNC/machine1/axis1/abs/x’)
    for reply in replies:
        try:
            print(“Received (‘{}’: ‘{}’)”
                .format(reply.ok.key_expr, reply.ok.payload.deserialize(str)))
        except:
            print(“Received (ERROR: ‘{}’)”
                .format(reply.err.payload.decode(str)))

session.close()

Result

Done!横河電機のert3 ControllerがrecomputerR1025にインストールされたZenoh Routerから情報を取得できました!

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする