跳到主要内容

OPC-UA

OPC-UA (OLE for Process Control - Unified Architecture, IEC 62541) 是工业自动化领域的标准通信协议。几乎所有 SCADA / 中间件产品(如 Kepware, Matrikon, Prosys, Ignition 等)都提供 OPC-UA 服务器功能。

由于大多数 PLC 不直接具备 OPC-UA 服务器功能,通常通过 Kepware 等网关软件将 PLC 标签以 OPC-UA 形式公开,该网关通过连接此 OPC-UA 服务器来获取数值。

支持范围

该网关的 OPC-UA 客户端基于 Eclipse Milo 1.1.8 SDK。

  • 传输: opc.tcp:// (UA Binary encoding)
  • 安全模式: None · Sign · SignAndEncrypt · 自动 — 详见下方 安全连接
  • 安全策略: 自动 · Aes256_Sha256_RsaPss · Basic256Sha256 · Aes128_Sha256_RsaOaep (旧版策略 Basic256 · Basic128Rsa15 需单独允许)
  • 用户认证: 匿名 (Anonymous) 或 用户名 + 密码
  • 读 / 写: 均支持。读取采用 timecycle 周期轮询,不支持 UA 订阅 (MonitoredItem)

在连接 DCS 或机器人控制器的 OPC UA 服务器时,请参阅 连接 DCS · 连接机器人。


注册表单输入值​

在 IP 和端口下方的 OPC UA 协议选项 组中共有四个选项:服务器名称、用户、密码和发现。通道加密在下方的 安全 (通道加密) 组中设定 — 参阅 安全连接。

输入项输入内容示例
IP 地址OPC-UA 服务器 PC 的 IP192.168.0.40
端口OPC-UA 服务器端口49320 (Kepware 默认) / 4840 (标准)
服务器名称 (servername)端点 URI 的路径部分留空,或 OPCUAServer · iotgateway 等
用户 (username)注册在 OPC-UA 服务器上的用户 ID。若为匿名则留空kopens (依服务器而定)
密码 (password)该用户的密码***
发现 (discovery)若设为 true,则在连接时浏览整个节点树并记录在网关日志中false (推荐)

若 用户 / 密码 均填写,则使用用户名令牌登录;若其中任一项为空,则以匿名 (Anonymous) 方式 접속。若为匿名 접속,服务器必须允许匿名 접속。如果安全模式为 None,账户信息将通过明文通道传输,因此建议在设置账户时使用 SignAndEncrypt。

端点确定方式​

  1. 根据输入值创建 opc.tcp://<IP>:<port>/<servername> 向服务器请求端点列表。
  2. 从列表中选择 符合安全模式和安全策略 的端点。
    • 安全模式 None — 优先选择在 None 端点中声明了可用用户令牌(匿名或用户名)的端点,若无则选择第一个 None 端点。
    • Sign · SignAndEncrypt · 自动 — 在同时满足所选模式、策略及用户令牌的端点中,选择策略强度最高的一个。若无匹配项,不会降级为 None,而是直接连接失败 (OPCUA_NO_MATCHING_ENDPOINT)。
  3. 将所选端点 URL 的 主机名替换为输入的 IP 进行 접속(端口和路径使用服务器声明的值)。即使服务器声明了自身主机名,也无需进行 DNS 或 hosts 配置。

可通过点击 [查询端点] 按钮直接在屏幕上查看服务器公开的端点 — 参阅 查询端点。

“发现”并非搜索端点​

discovery=true 功能是在连接时从根文件夹开始 浏览整个节点树并将其记录在网关日志中。它既不是寻找端点的功能,也不是自动注册标签的功能。如需查看服务器提供的端点(安全模式·策略),请使用 [查询端点] 而非“发现”。对于节点较多的服务器,此操作会带来较大负载,因此通常建议设为 false,NodeId 请通过以下方法查找。


安全连接 (通道加密)​

在连接页面的 安全 (通道加密) 组中设定。若非 None,Edge 将 使用自身的客户端证书开启安全通道,且在没有匹配端点时不会降级为 None。

连接页面的 «安全 (通道加密)» 组 — 数字按阅读顺序

数字项功能
①安全模式None (암호화 없음) · Sign (서명) · SignAndEncrypt (서명+암호화, 권장) · 자동 (Sign·SignAndEncrypt 중 가장 강한 것)
②安全策略자동 (서버가 제공하는 가장 강한 정책) 或 Basic256Sha256 · Aes128_Sha256_RsaOaep · Aes256_Sha256_RsaPss 之一。若安全模式为 None 则不显示
③高级展开后可见 允许旧版策略 复选框。仅针对仅提供 Basic256 · Basic128Rsa15(已弃用策略)的旧服务器开启。此操作不安全
  • 默认值 — 现有连接保持 None 不变。在连接添加页面的 DCS·机器人卡片 中创建的新连接从 SignAndEncrypt 开始。
  • 自动策略顺序 — Aes256_Sha256_RsaPss > Basic256Sha256 > Aes128_Sha256_RsaOaep。
  • 修改后的值必须 保存 后生效。

查询端点​

输入 IP、端口和服务器名称后点击 [查询端点],Edge 将向该服务器请求端点列表 (GetEndpoints) 并以表格形式展示。由于不开启会话,因此不需要账户,在信任服务器证书之前即可执行(连接限制 3 秒,总时限 6 秒)。

[查询端点] 结果 — 数字按阅读顺序

数字位置功能
①组标题右侧[查询端点] — 必须先输入 IP 和端口
②表头查询的地址与列 — 安全模式 · 安全策略 · 用户认证 (Anonymous · UserName · Certificate 等) · 服务器证书 (主体与 SHA-1 指纹)
③行末[使用此设置] — 将该行的安全模式和策略填入上方输入框。保存后生效
  • 策略列中的 已弃用策略 徽标为 Basic256 · Basic128Rsa15。点击该行的 [使用此设置] 时,允许旧版策略 将同时被开启,且策略列将变为 自动 而非该具体策略。
  • 带有 不支持 徽标的策略将导致 Edge 无法连接。
  • 即使在用户认证列中出现 Certificate,Edge 也仅使用匿名或用户名登录 — 参阅 不支持的功能。

初次连接 — 信任服务器证书​

Edge 不会自动信任初次见到的服务器证书。首次使用安全模式连接时,服务器证书会被拒绝,并在连接页面(编辑)和连接详情页的安全组中显示以下提示。

尚未信任服务器证书的状态 — 数字按阅读顺序

数字位置功能
①提示第一行提示由于尚未信任服务器证书而无法连接
②证书主体 · 指纹 (SHA-1)服务器出示的证书。需将指纹与服务器 (DCS·控制器) 屏幕上的证书指纹进行比对
③[信任此证书]打开确认窗口
④证书管理跳转至 OPC UA 服务器 › 客户端连接证书 标签页

点击 [信任此证书] 后,确认窗口将再次显示指纹。

服务器证书信任确认窗 — 数字按阅读顺序

数字位置功能
①主体 · 指纹将要信任的证书。再次确认是否与之前的提示指纹一致
②提示若指纹与服务器屏幕不一致,则不予信任
③[信任此证书]确认信任。显示 «已信任。即将重新连接。»

信任后,将解除等待该证书的连接重试状态并 立即重新连接。连接成功后,提示文字将变为绿色。

安全连接成功 — 数字按阅读顺序

数字位置功能
①状态行«安全连接 (SignAndEncrypt)» — 括号内为连接所设的安全模式(若为自动则显示 auto)

信任列表由 此 Edge 的所有 OPC UA 连接共享。若多个连接指向同一服务器,仅需信任一次。

当服务器拒绝 Edge 证书时​

DCS 或控制器也经常会拒绝初次见到的客户端证书。在这种情况下,安全通道将被拒绝并显示以下提示。

服务器拒绝 Edge 客户端证书的状态 — 数字按阅读顺序

数字位置功能
①提示第一行提示服务器拒绝了安全通道 — 通常是因为服务器尚未信任此 Edge 证书
②证书主体 · 指纹 (SHA-1)Edge 的 客户端证书。在服务器的拒绝列表中查找此指纹
③[下载客户端证书 (.der)]下载该连接的 Edge 证书
④证书管理跳转至 OPC UA 服务器 › 客户端连接证书 标签页
  1. 通过 ③ 下载证书 (.der)。也可以在 OPC UA 服务器 › 客户端连接证书 标签页的 «Edge 客户端证书» 中按连接下载。
  2. 将证书提交给 DCS 或控制器管理员,将其加入 服务器的信任列表(若已在拒绝列表中,将其移至信任列表即可)。具体操作参考服务器制造商手册。
  3. Edge 将在下次尝试连接时重新 접속。

证书管理 — OPC UA 服务器 › 客户端连接证书​

在 OPC UA 服务器 页面 (/ui/opcua) 的 客户端连接证书 标签页中,可以集中查看 Edge 作为客户端所使用的证书。这与 Edge 为 SCADA 提供的 OPC UA 服务器证书(客户端证书 标签页)不同。

客户端连接证书标签页 — 数字按阅读顺序

数字位置功能
①标签页客户端连接证书
②被拒绝的服务器证书Edge 拒绝的服务器证书 — 主体 · Application URI · 指纹 · 有效期 · 等待中的连接。[信任] 或 [删除]
③已信任的服务器证书运营人员已信任的服务器证书。[取消信任] 后将移回拒绝列表,且在下次尝试连接时不再连接该服务器
④Edge 的客户端证书每个 OPC UA 连接对应一个 — 连接 · 安全模式 · Application URI · 指纹 · 有效期。尚未尝试安全模式连接的显示为 «尚无»
⑤[下载 (.der)]该连接的 Edge 证书。用于加入服务器信任列表
  • [删除] 的被拒绝证书在再次尝试连接同一服务器时会重新出现。
  • [取消信任] 后,已开启的连接将在下次重连时断开。

Edge 的客户端证书​

项目值
类型自签名 (self-signed), RSA 2048
有效期10年。过期后将自动重新生成,需在服务器端重新信任
生成时机该连接首次尝试安全模式连接时
Application URIurn:plantpulse:edge:<OPC ID> — 每个连接唯一
存储位置/data1/pp-data/opcua-client ($PE_DATA_DIR/pp-data/opcua-client)。信任列表亦存储于此
  • 即使删除连接,证书依然保留;若使用相同的 OPC ID 重新创建连接,将继续使用该证书。无需在 DCS 端重新信任。
  • 此目录属于 备份 对象。恢复备份后,Edge 证书与信任列表将一并恢复。

不支持的功能​

  • X.509 用户证书登录 — 用户认证仅支持匿名或 用户名 + 密码。
  • CA 签名的客户端证书 — Edge 证书仅使用自签名。
  • HA 冗余箱体间信任列表复制 — 信任列表在每个箱体中独立。若为 HA 结构,每个箱体 均需信任服务器证书,且服务器端也需分别添加每个箱体的 Edge 证书。

标签的 PLC 地址表示法​

OPC-UA 的标签地址通常称为 NodeId,其格式如下。

表示法说明
ns=2;s=Channel1.Device1.Tag1命名空间 2, 字符串标识符 — Kepware 最常见
ns=2;i=1234命名空间 2, 数字标识符
ns=3;g=09087e75-8e5e-499b-954f-f2a8624db28aGUID 格式
  • ns= 为命名空间编号。通常为 2。
  • s= 之后跟随类似 “Channel.Device.Tag” 的路径(Kepware 生成的原始路径)。

如何获取 NodeId​

  1. PLC 制造商 / Kepware 制造商手册 中通常提供映射表。
  2. 使用 UA Expert 等免费 OPC-UA 客户端直接连接,在树状结构中右键点击节点即可复制 NodeId。
  3. 使用 Kepware 自带的 OPC Quick Client 工具也可执行相同操作。

Kepware 快速配置​

以下是基于常用组合 Kepware 的配置步骤。

  1. Kepware Server → Project → 添加通道 (例如: Simulator)
  2. 添加设备 (例如: Simulator) → 模型 = 16 Bit Device
  3. 添加标签 → 名称 Sine1, 类型 Float, 扫描率 100ms
  4. 在 Project Properties → OPC UA → Server Endpoint 中启用端口 49320
  5. 选择服务器端点的安全策略 (Security Policies)。若使用安全连接,请选择 Basic256Sha256 以上策略并开启 Sign and Encrypt,同时将 Edge 证书加入 Kepware 的信任列表 — 参阅 当服务器拒绝 Edge 证书时
  6. 启用匿名或用户账户

在该网关的注册表单中填写:

项值
IPKepware 服务器 PC 的 IP
端口49320
用户/密码上述创建的账户 (若为匿名则留空)
标签 PLC 地址ns=2;s=Simulator.Simulator.Sine1

常见问题与解决​

症状 / 消息可能原因解决方法
“Connection refused” / 无法连接OPC-UA 服务器关闭或端口被封禁确认 OPC-UA 服务器是否运行,IP/端口是否正确
“User access denied”用户/密码错误,或服务器禁用了匿名 접속在服务器端注册用户或允许匿名 접속
安全模式为 None 但连接失败,日志显示 no SecurityMode=None endpoint服务器未开放 None 端点将安全模式改为 Sign 或 SignAndEncrypt,并通过 [查询端点] 确认
连接成功但数值始终为 0 或 null标签 NodeId 误写,或命名空间编号不符使用 UA Expert 等验证该 NodeId 是否实际可用
频繁断连重连网络不稳定或服务器 PC 负载过高检查服务器 PC 资源 / 网线 / 交换机

安全连接错误 (屏幕文本)​

若安全连接失败,将在连接页面和连接详情页的安全组中显示以下内容(界面提供韩文/英文)。

代码屏幕文本 (ko)屏幕文本 (en)解决方法
OPCUA_SERVER_CERT_UNTRUSTED서버 인증서를 아직 신뢰하지 않아 연결하지 않았습니다. 지문을 서버(DCS·컨트롤러) 쪽 인증서와 대조한 뒤 신뢰하세요.Not connected: the server certificate is not trusted yet. Compare the thumbprint with the server's (DCS / controller) certificate, then trust it.比对指纹后点击 [信任此证书]
OPCUA_SERVER_CERT_INVALID신뢰한 서버 인증서가 유효하지 않습니다(만료·폐기·용도 불일치). 서버 쪽 인증서를 확인하세요.The trusted server certificate is not valid (expired, revoked or wrong usage). Check the server's certificate.重新颁发服务器证书并信任新指纹
OPCUA_CLIENT_CERT_REJECTED서버가 보안 채널을 거절했습니다. 대개 서버가 이 엣지의 클라이언트 인증서를 아직 신뢰하지 않은 경우입니다 — 인증서를 내려받아 서버의 신뢰 목록에 넣으세요.The server refused the secure channel - usually it does not trust this edge's client certificate yet. Download it and add it to the server's trust list.将 Edge 证书 (.der) 加入服务器信任列表
OPCUA_PKI_DIR_MISSING엣지의 클라이언트 인증서 저장소를 찾지 못했습니다(데이터 볼륨 PE_DATA_DIR 를 확인하세요).The edge's client certificate store is missing (check the data volume PE_DATA_DIR).确认数据卷 (/data1) 是否已挂载
OPCUA_PKI_ERROR엣지의 클라이언트 인증서 저장소를 읽거나 만들지 못했습니다. 서버 로그를 확인하세요.The edge's client certificate store could not be read or created. See the server log.确认 /data1/pp-data/opcua-client 权限及磁盘空间
OPCUA_SECURITY_CONFIG_INVALID보안 모드·정책 설정이 올바르지 않습니다(폐기된 정책은 '낡은 정책 허용'을 켜야 합니다).The security mode / policy setting is invalid (a deprecated policy needs 'Allow deprecated policies').确认安全模式/策略值。若为弃用策略,请开启 «允许旧版策略»
OPCUA_NO_MATCHING_ENDPOINT서버가 설정한 보안 모드·정책·인증 방식에 맞는 엔드포인트를 제공하지 않습니다. [엔드포인트 조회]로 확인하세요.The server offers no endpoint with this security mode, policy and user token. Check with [Find endpoints].在 [查询端点] 中选择服务器提供的组合并点击 [使用此设置]
OPCUA_CONNECT_FAILED연결하지 못했습니다(네트워크·시간 초과·세션).Could not connect (network, timeout or session).确认 IP、端口、防火墙及服务器运行状态

常用数据格式​

PLC 数值数据格式格式辅助PLC 地址示例
开/关Boolean(留空)ns=2;s=Pump.Status
整数Integer(留空)ns=2;s=Counter
大整数Long(留空)ns=2;s=Total
实数 (32-bit)Float(留空)ns=2;s=Pressure
实数 (64-bit, 精确)Double(留空)ns=2;s=PrecisionTemp
字符串String(留空)ns=2;s=Recipe.Name

对于 OPC-UA,format 列通常 保持为空(由服务器提供数据类型)。


更多示例 / 自动化注册​

若需通过脚本 / API 进行自动化注册,请参考 高级 — REST API 页面中的 OPC-UA 示例。