コンテンツにスキップ

OPC UAコネクタ

**OPC UA(Open Platform Communications Unified Architecture)**コネクタは、産業オートメーションとデータ交換の産業標準プロトコルであるOPC UAサーバーとの通信を可能にします。

コネクタタイプ:

  • OpcuaReader - OPC UAサーバーからデータを読み取る
  • OpcuaWriter - OPC UAサーバーにデータを書き込む
  • ✅ 産業オートメーション用の産業標準プロトコル
  • ✅ 複数の認証方法(匿名、Basic、証明書)
  • ✅ セキュリティモード(None、Sign、SignAndEncrypt)
  • ✅ 設定可能なポーリングレート
  • ✅ 複雑なノード構造のサポート
  • ✅ 読み取りおよび書き込み操作
{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://localhost:4840",
"pollingRate": 1000
},
"variables": [
{
"key": "temperature",
"nodeId": "ns=1;s=Temperature"
},
{
"key": "pressure",
"nodeId": "ns=1;s=Pressure"
}
]
}
{
"type": "OpcuaWriter",
"config": {
"endpoint": "opc.tcp://localhost:4840",
"auth": {
"mode": "Basic",
"username": "opcuser",
"password": "opcpassword"
}
},
"variables": [
{
"key": "setpoint",
"nodeId": "ns=1;s=Setpoint"
},
{
"key": "control_mode",
"nodeId": "ns=1;s=ControlMode"
}
]
}

OPC UAサーバーのエンドポイントURL。

{
"endpoint": "opc.tcp://192.168.1.100:4840"
}

形式: opc.tcp://[host]:[port][/path]

リーダーの場合、データ読み取り間のミリ秒単位の間隔。

{
"pollingRate": 1000 // 1秒ごとに読み取る
}

推奨値:

  • 高速: 100-500ms
  • 通常: 1000ms(1秒)
  • 低速: 5000ms(5秒)

認証不要:

{
// authフィールド不要
}

ユーザー名とパスワード:

{
"auth": {
"mode": "Basic",
"username": "your-username",
"password": "your-password"
}
}

X.509証明書:

{
"auth": {
"authCertificateFile": {
"mode": "DirectPath",
"fileName": "client-cert.pem",
"path": "/path/to/client-cert.pem"
},
"authKeyFile": {
"mode": "DirectPath",
"fileName": "client-key.pem",
"path": "/path/to/client-key.pem"
}
}
}

セキュリティモードとポリシーを設定:

{
"security": {
"mode": "SignAndEncrypt",
"policy": "Basic256Sha256"
}
}

セキュリティモード:

  • None - セキュリティなし(デフォルト)
  • Sign - メッセージに署名のみ
  • SignAndEncrypt - メッセージに署名して暗号化

セキュリティポリシー:

  • None
  • Basic128Rsa15
  • Basic256
  • Basic256Sha256(推奨)

変数は、読み取りまたは書き込みするOPC UAノードを定義します。

{
"key": "temperature",
"nodeId": "ns=1;s=Temperature"
}

フィールド:

  • key - Meddleペイロード内のキー名
  • nodeId - OPC UAノード識別子

OPC UAはさまざまなNode ID形式をサポートします:

{
"key": "sensor1",
"nodeId": "ns=1;s=SensorName"
}

形式: ns=[namespace];[type]=[identifier]

ここで:

  • ns - 名前空間インデックス(0-65535)
  • type - Node IDタイプ:
    • s - 文字列
    • i - 数値
    • g - GUID
    • b - Opaque(Base64)
OPC UAサーバー → OpcuaReader → Meddleペイロード

例:

OPC UAノード:

  • ns=1;s=Temperature = 25.5
  • ns=1;s=Pressure = 101.3

出力ペイロード:

{
"temperature": 25.5,
"pressure": 101.3
}
Meddleペイロード → OpcuaWriter → OPC UAサーバー

例:

入力ペイロード:

{
"setpoint": 30.0,
"mode": "auto"
}

書き込み先:

  • ns=1;s=Setpoint ← 30.0
  • ns=1;s=Mode ← “auto”

PLCから温度センサーを読み取る:

{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://plc.local:4840",
"pollingRate": 1000
},
"variables": [
{
"key": "zone1_temp",
"nodeId": "ns=2;s=Zone1.Temperature"
},
{
"key": "zone2_temp",
"nodeId": "ns=2;s=Zone2.Temperature"
},
{
"key": "ambient_temp",
"nodeId": "ns=2;s=Ambient.Temperature"
}
]
}

プロセスを制御するための設定値を書き込む:

{
"type": "OpcuaWriter",
"config": {
"endpoint": "opc.tcp://plc.local:4840",
"auth": {
"mode": "Basic",
"username": "operator",
"password": "secure123"
}
},
"variables": [
{
"key": "temperature_setpoint",
"nodeId": "ns=2;s=Control.TempSetpoint"
},
{
"key": "pressure_setpoint",
"nodeId": "ns=2;s=Control.PressureSetpoint"
}
]
}

複数のマシンを監視:

{
"type": "OpcuaReader",
"config": {
"endpoint": "opc.tcp://scada.local:4840",
"pollingRate": 500
},
"variables": [
{
"key": "machine1_status",
"nodeId": "ns=3;s=Machine1.Status"
},
{
"key": "machine1_speed",
"nodeId": "ns=3;s=Machine1.Speed"
},
{
"key": "machine1_count",
"nodeId": "ns=3;s=Machine1.ProductCount"
},
{
"key": "machine2_status",
"nodeId": "ns=3;s=Machine2.Status"
},
{
"key": "machine2_speed",
"nodeId": "ns=3;s=Machine2.Speed"
}
]
}

問題: OPC UAサーバーに接続できない

解決策:

  1. エンドポイントURLが正しいことを確認
  2. ネットワーク接続を確認: ping [server-ip]
  3. ポートが開いていることを確認: telnet [server-ip] 4840
  4. ファイアウォールルールを確認
  5. OPC UAサーバーが実行中であることを確認

問題: 認証エラー

解決策:

  1. ユーザー名とパスワードが正しいことを確認
  2. ユーザーに適切な権限があることを確認
  3. 証明書認証の場合、証明書が有効で期限切れでないことを確認
  4. 証明書パスが正しいことを確認

問題: 「ノードが見つかりません」エラー

解決策:

  1. OPC UAクライアント(UaExpertなど)を使用してサーバーを参照
  2. 名前空間インデックスが正しいことを確認
  3. Node ID形式がサーバーの形式と一致することを確認
  4. ノードが存在しアクセス可能であることを確認

セキュリティポリシーの不一致

Section titled “セキュリティポリシーの不一致”

問題: セキュリティポリシーエラー

解決策:

  1. サーバーがサポートするセキュリティポリシーを確認
  2. security.policyをサポートされているポリシーと一致させる
  3. 暗号化接続用に証明書が正しく設定されていることを確認

問題: データ更新が遅いまたはCPU使用率が高い

解決策:

  1. 頻度を減らすためにpollingRateを増やす
  2. 読み取る変数の数を減らす
  3. サポートされている場合はサブスクリプションベースの読み取りを使用
  4. ネットワークレイテンシを確認

1. 適切なポーリングレートを使用

Section titled “1. 適切なポーリングレートを使用”

必要以上に速くポーリングしない:

  • 重要なデータ: 100-500ms
  • 通常の監視: 1000ms
  • ゆっくり変化する値: 5000ms以上

本番環境では常に認証と暗号化を使用:

{
"auth": {
"mode": "Basic",
"username": "user",
"password": "pass"
},
"security": {
"mode": "SignAndEncrypt",
"policy": "Basic256Sha256"
}
}

より良い組織化のために、関連する変数を同じコネクタに保持:

{
"variables": [
// 温度センサー
{"key": "temp1", "nodeId": "ns=1;s=Temp1"},
{"key": "temp2", "nodeId": "ns=1;s=Temp2"},
// 圧力センサー
{"key": "press1", "nodeId": "ns=1;s=Press1"},
{"key": "press2", "nodeId": "ns=1;s=Press2"}
]
}

Meddleは接続喪失と再接続を自動的に処理しますが、以下を考慮してください:

  • 欠落データを処理するためにタイムアウト付きのMergeコネクタを使用
  • 接続の問題を通知するためにAlertコネクタを追加

接続を確認するために匿名認証から始め、その後セキュリティを追加:

  1. 認証なしでテスト
  2. ユーザー名/パスワードを追加
  3. 暗号化を追加
  4. 証明書認証を追加
OpcuaReader → Filter → Reshape → InfluxDb2Writer
Trigger → Alert(高温時にメール)
  1. OpcuaReader: 温度と圧力を読み取る
  2. Filter: 関連フィールドのみを保持
  3. Reshape: メタデータを追加(場所、単位)
  4. InfluxDb2Writer: 時系列データベースに保存
  5. Trigger: 高温をチェック
  6. Alert: しきい値を超えた場合にメールを送信
  • Modbus - 代替産業プロトコル
  • Siemens S7 - Siemens PLC直接通信
  • Filter - OPC UAデータをフィルタリング
  • Trigger - OPC UAデータの条件付きロジック