メインコンテンツまでスキップ

PROFINET ドライバ

概要

PROFINET IO — 産業用イーサネットベースの fieldbus。2026-07 ネイティブ再実装 — 旧 Apache PLC4j profinet への委譲は削除されました(PLC4X profinet は raw Ethernet(EtherType 0x8892、libpcap 前提)+ canRead()=false のため、Edge では connect 自体が例外で落ちていました)。現在は plantpulse-plc-protocol の独自 acyclic Read-Implicit(DCE/RPC over UDP 34964) 実装(ProfinetPLC)を使用します — AR(Connect)なしで ARUUID=0 として record を読み出すサービス(I&M データなどエンジニアリングツール経路)であり、ポーリング型収集器に適合します。

項目
opc_typePROFINET
実装クラスplantpulse.driver.protocol.profinet.ProfinetDriver
ライブラリ独自ネイティブ (plantpulse-plc-protocolprofinet — DCE/RPC Read-Implicit)
継承BaseProtocolDriver (PLC4j ではない)
デフォルトポート34964 (PROFINET CM DCE/RPC, UDP)
状態安定 (acyclic record ポーリング)
readOK (Read-Implicit, acyclic record)
write❌ (読み取り専用 — Write record 未実装)
セキュリティなし
acyclic record 専用 — サイクリック RT 非対応

本ドライバは acyclic record ポーリング専用です。サイクリック IO 交換(RT/IRT、L2 raw Ethernet)は非対応 — RT が必要な場合は raw-ethernet(pcap, CAP_NET_RAW)トラックが別途必要です。GSDML ファイルも使用しません(record 座標を直接指定)。


クラス構造

BaseProtocolDriver
└── ProfinetDriver — connect() 에서 ProfinetPLC(host, port) 생성 (UDP connectionless)

UDP は connectionless のためハンドシェイクがありません — ライブネスは read 失敗時に無効化します(AB-ETH/BACnet パターン)。要求→応答の往復は ProfinetPLC 内で直列化(one outstanding request)され、応答は activityUuid + sequenceNumber のエコー検証で stale を拒否します。


OPC 登録オプション

フィールド意味デフォルト
opc_agent_ipPROFINET デバイス IP192.168.1.30
opc_agent_portUDP ポート34964 (0 なら自動)
options.read-timeout応答タイムアウト (ms)3000
options.apiPROFINET API 番号0
旧 PLC4X オプションの削除

旧フォームの gsd-directory / dap-id / ip-address オプションはネイティブでは受け付けません(削除済み)。record 座標はタグアドレスで直接指定します。


タグ plc_address 形式 (新契約)

<slot>:<subslot>:<index>[:<TYPE>]
  • index: 10進または 0x 16進 (例: I&M0 = 0xAFF0)
  • TYPE(デフォルト WORD): WORD(u16) / INT(i16) / DINT(i32) / DWORD(u32) / REAL(float32) / BOOL / STRING[n](デフォルト n=32)。record data は big-endian
表記意味
0:1:0x0001:REALslot0 / subslot1 の record 0x0001 を float32 として
0:1:2record 2 を WORD(u16) として — TYPE 省略
0:1:0xAFF0:STRING[32]I&M0 領域の文字列

support / 非対応

  • read: DCE/RPC Read-Implicit (acyclic record) — OK。
  • write: 非対応isWriteSupported() = falsewrite() は常に false。(Write record は今後対応。)
  • サイクリック IO (RT/IRT): 非対応 — record ポーリング専用。
  • DCP discovery / 自動 IP 設定: 非対応 — IP を直接指定。
  • PROFIsafe / PROFIenergy profile: 非対応。

curl 登録例

curl -X POST http://<edge-host>/api/v1/opc \
-H "Content-Type: application/json" \
-d '{
"opc_id": "OPC_PROFINET_IO1",
"opc_type": "PROFINET",
"opc_name": "PN Device 1",
"opc_agent_ip": "192.168.1.30",
"opc_agent_port": "34964",
"site_id": "SITE_00001",
"auto_collect": true,
"timecycle": 1000,
"options": { "read-timeout": "3000" },
"tag_list": [
{"tag_id":"OPC_PROFINET_IO1_T01","tag_name":"Rec1","plc_address":"0:1:0x0001:REAL","data_type":"Float"},
{"tag_id":"OPC_PROFINET_IO1_T02","tag_name":"Rec2","plc_address":"0:1:2:WORD","data_type":"Integer"}
]
}'

参考

  • Profinet IO — IEC 61158-6-10 / IEC 61784。Read-Implicit = CM opnum 5。
  • コード: plantpulse-edge-driver/src/plantpulse/driver/protocol/profinet/ProfinetDriver.java + plantpulse-plc-protocolprofinet パッケージ。
  • 運用: S7 PLC のメモリ値収集が目的であれば S7 (ISO-on-TCP) ドライバ の方が一般的です — 本ドライバは PROFINET デバイスの record(I&M など)ポーリング用です。