🔌

第2回:EtherNet/IP を WebAPI のモデルで理解する(フィールドネットワークをソフトウェア視点で整理する)

に公開

第2回:EtherNet/IP を WebAPI のモデルで理解する

(フィールドネットワークをソフトウェア視点で整理する)

はじめに

この記事は「ソフトウェアエンジニアがフィールドネットワークを理解する」シリーズの第2回です。
第1回では、私自身がアプリケーションエンジニアとして工場ネットワークに向き合う中で必要だった背景や考え方を整理しました。

本記事では、EtherNet/IP を WebAPI の概念になぞらえて理解するための技術的整理 を行います。
メーカー資料は設定中心で概念的説明が少ないため、構造が把握しづらいという課題があります。
そのため、ソフトウェアエンジニアの視点から、EtherNet/IP の各要素を WebAPI の概念にマッピングして整理します。


WebAPI ⇔ EtherNet/IP の対応表

EtherNet/IP を WebAPI の構造に置き換えて理解すると、
どこに何が対応しているかが一気に見通しやすくなります。

WebAPI の概念 内容 EtherNet/IP の対応 説明 種類
エンドポイント /device/10/status CIP Path(Class/Instance/Attribute) データ位置 URI
ルート /api/v1 Connection Point(Assembly 番号) Implicitの入口 URI
名前付きアクセス tank/level タグ通信 名前でアクセスできる上位API URI
ID直指定 /id/0x04/100/3 インスタンスID通信 数値で手動指定 URI
HTTPメソッド GET / POST CIP Service(0x0E/0x10/0x01…) 操作の種類 URI
API解決 Router / Resolver タグResolver / EDS CIP Path 解決 URI
REST通信 同期 GET/POST Explicit(Class3) 単発要求 通信
WebSocket通信 ストリーミング Implicit(Class0/1) 周期 I/O 通信
JSON / Schema 型定義 タグ / STRUCT / Assembly データ構造 データ構造

1. URI(エンドポイント)としての EtherNet/IP


1.1 CIP Path は「データの住所」

WebAPI のエンドポイント:

/device/10/status

EtherNet/IP(CIP)では:

Class    = 0x0F
Instance = 10
Attribute= 3

CIP Path = Class / Instance / Attribute の組み合わせでデータを特定する URI


1.2 Connection Point(Assembly)は “ルートエンドポイント”

Implicit(周期 I/O)通信では、通信開始時に
Assembly 番号(例:100,150,1) を指定します。

これは WebAPI の /api/v1 のような
ルートの入口 に相当します。

※ タグ通信では自動設定されるため通常は意識しません。


1.3 タグ通信 = 名前ベースのAPI

Tank.Level
Motor.Start

このように“タグ名”を指定するだけでデータへアクセスできます。

内部では:

タグ名 → CIP Path(Class/Instance/Attr)

へ自動で変換されています。

アプリ側からは、変数名だけでアクセスできる“名前ベースのAPI”のように扱えます。


1.4 インスタンスID通信 = 低レイヤ REST

こちらは自分で数値IDを明示的に指定する方式です。

Class = 0x04
Instance = 100
Attribute = 3

WebAPI で言えば:

/internal/4/100/3

のように 低レイヤの REST API を直接叩く 感覚に近いです。


1.5 CIP Service = HTTPメソッド

HTTP CIP 意味
GET 0x0E 単一属性の取得
POST/PUT 0x10 単一属性の書込み
GET ALL 0x01 複数属性の取得
BATCH 0x32 一括呼出し

1.6 EDS / Resolver = API仕様書とルーター

  • タグ通信:CPU が CIP Path を自動解決
  • インスタンスID通信:EDS(Electronic Data Sheet)が仕様書
  • Assembly の構造も EDS に記述されています

Swagger/OpenAPI ドキュメントのような役割です。


2. 通信方式(REST と WebSocket)


2.1 Explicit(Class3) = REST API

  • 単発の GET/SET
  • タグ通信の内部でも利用される
  • 設定値・状態確認向け

REST API とほぼ同じ構造です。


2.2 Implicit(Class0/1) = WebSocket(ストリーミング)

  • RPI(周期)でデータを PUSH
  • 高速(1〜10ms)更新
  • Connection Point が入口
  • Assembly をバイト列で送受信

WebSocket のストリーミング通信に非常に近い方式です。


3. データ構造(JSON / Schema)

EtherNet/IP で扱うデータ構造:

  • タグ(Tag)
  • STRUCT(構造体)
  • 配列(Array)
  • Assembly(I/O用構造体)

WebAPI における JSON / Schema に相当します。

Explicit では属性単位で読み書きし、
Implicit では Assembly(構造体)がバイト列としてやり取りされます。


まとめ

EtherNet/IP の本質は「WebAPI と同じ構造」です。

  • URI = CIP Path
  • ルート = Connection Point
  • 名前付き = タグ通信
  • ID指定 = インスタンスID通信
  • メソッド = CIP Service
  • REST = Explicit
  • WebSocket = Implicit
  • JSON = Assembly / STRUCT

このように対応づけることで、
ソフトウェアエンジニアでも EtherNet/IP の概念を直感的に理解できます。

シリーズの続きでは、他のフィールドネットワークについても
同じモデルで整理していく予定です。

Discussion