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 的 IP | 192.168.0.40 |
| 端口 | OPC-UA 服务器端口 | 49320 (Kepware 默认) / 4840 (标准) |
| 服务器名称 (servername) | 端点 URI 的路径部分 | 留空,或 OPCUAServer · iotgateway 等 |
| 用户 (username) | 注册在 OPC-UA 服务器上的用户 ID。若为匿名则留空 | kopens (依服务器而定) |
| 密码 (password) | 该用户的密码 | *** |
| 发现 (discovery) | 若设为 true,则在连接时浏览整个节点树并记录在网关日志中 | false (推荐) |
若 用户 / 密码 均填写,则使用用户名令牌登录;若其中任一项为空,则以匿名 (Anonymous) 方式 접속。若为匿名 접속,服务器必须允许匿名 접속。如果安全模式为 None,账户信息将通过明文通道传输,因此建议在设置账户时使用 SignAndEncrypt。
端点确定方式
- 根据输入值创建
opc.tcp://<IP>:<port>/<servername>向服务器请求端点列表。 - 从列表中选择 符合安全模式和安全策略 的端点。
- 安全模式 None — 优先选择在 None 端点中声明了可用用户令牌(匿名或用户名)的端点,若无则选择第一个 None 端点。
- Sign · SignAndEncrypt · 自动 — 在同时满足所选模式、策略及用户令牌的端点中,选择策略强度最高的一个。若无匹配项,不会降级为 None,而是直接连接失败 (
OPCUA_NO_MATCHING_ENDPOINT)。
- 将所选端点 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 秒)。
![[查询端点] 结果 — 数字按阅读顺序](/zh/assets/images/opcua-sec-endpoints-0ee0b6bafc4d759d75de125ad75c658b.webp)
| 数字 | 位置 | 功能 |
|---|---|---|
| ① | 组标题右侧 | [查询端点] — 必须先输入 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 证书 |
| ② | 证书主体 · 指纹 (SHA-1) | Edge 的 客户端证书。在服务器的拒绝列表中查找此指纹 |
| ③ | [下载客户端证书 (.der)] | 下载该连接的 Edge 证书 |
| ④ | 证书管理 | 跳转至 OPC UA 服务器 › 客户端连接证书 标签页 |
- 通过 ③ 下载证书 (.der)。也可以在 OPC UA 服务器 › 客户端连接证书 标签页的 «Edge 客户端证书» 中按连接下载。
- 将证书提交给 DCS 或控制器管理员,将其加入 服务器的信任列表(若已在拒绝列表中,将其移至信任列表即可)。具体操作参考服务器制造商手册。
- 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 URI | urn: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-f2a8624db28a | GUID 格式 |
ns=为命名空间编号。通常为2。s=之后跟随类似 “Channel.Device.Tag” 的路径(Kepware 生成的原始路径)。
如何获取 NodeId
- PLC 制造商 / Kepware 制造商手册 中通常提供映射表。
- 使用 UA Expert 等免费 OPC-UA 客户端直接连接,在树状结构中右键点击节点即可复制 NodeId。
- 使用 Kepware 自带的 OPC Quick Client 工具也可执行相同操作。
Kepware 快速配置
以下是基于常用组合 Kepware 的配置步骤。
- Kepware Server → Project → 添加通道 (例如:
Simulator) - 添加设备 (例如:
Simulator) → 模型 =16 Bit Device - 添加标签 → 名称
Sine1, 类型Float, 扫描率100ms - 在 Project Properties → OPC UA → Server Endpoint 中启用端口
49320 - 选择服务器端点的安全策略 (Security Policies)。若使用安全连接,请选择
Basic256Sha256以上策略并开启 Sign and Encrypt,同时将 Edge 证书加入 Kepware 的信任列表 — 参阅 当服务器拒绝 Edge 证书时 - 启用匿名或用户账户
在该网关的注册表单中填写:
| 项 | 值 |
|---|---|
| IP | Kepware 服务器 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 示例。