跳到主要内容

通讯问题

EtherCAT 从站无法上线怎么办?

排查步骤

  1. 检查物理连接

    • 确认网线插好,Link 灯亮起
    • 使用交叉线或直连线 (大多数设备支持 Auto-MDI/MDIX)
    • 检查网线质量 (推荐 CAT5e 或 CAT6)
  2. 检查网卡驱动

    • 推荐使用 Intel I210/I211/I350 网卡
    • 确认 Runtime 已启动,实时模式需要已安装实时内核包
    • 在设备管理器中确认网卡工作正常
  3. 检查从站地址

    • EtherCAT 从站不需要 IP 地址,通过拓扑自动编址
    • 确认从站硬件地址拨码正确 (如有)
  4. 检查 ESI 文件

    • 导入正确版本的 ESI XML 文件
    • ESI 文件版本需与从站固件匹配
诊断命令

在调试控制台中执行 ecat scan 可列出当前发现的所有从站。如果列表为空,说明物理层通讯异常。

EtherCAT WKC 不匹配报警是什么意思?

WKC (Working Counter) 是 EtherCAT 帧通过每个从站时的计数器。WKC 不匹配表示帧未被所有期望的从站处理。

原因解决方案
从站离线检查网线连接和从站电源
从站未进入 OP检查从站状态机,确认配置正确
网线松动重新插拔或更换网线
EMI 干扰使用屏蔽网线,远离变频器
帧超时增加超时时间或降低周期频率
WKC 期望值 = 已配置从站数 × 3  (每个从站: 读+写+读写各1)
WKC 实际值 < 期望值 → 有从站未正常响应

Modbus 通讯超时怎么处理?

常见原因

  1. IP 地址/端口错误 — 确认目标设备 IP 和 Modbus TCP 端口 (默认 502)
  2. 防火墙阻止 — 确认 Windows 防火墙允许 TCP 502 端口
  3. 串口参数不匹配 (RTU) — 检查波特率、数据位、停止位、校验位
  4. 寄存器地址错误 — Modbus 地址从 0 开始还是从 1 开始,不同厂商有差异

超时设置

(* Modbus TCP 配置 *)
ModbusConfig.IP := '192.168.1.10';
ModbusConfig.Port := 502;
ModbusConfig.Timeout := T#3s; (* 超时时间 *)
ModbusConfig.RetryCount := 3; (* 重试次数 *)
ModbusConfig.RetryDelay := T#500ms; (* 重试间隔 *)
自动重连

Darra PLC 的通讯适配器内置自动重连机制。连接断开后以指数退避策略 (1s → 2s → 4s → ... 最大 30s) 自动重连,无需手动干预。

OPC UA 连接报证书错误怎么办?

证书信任配置

OPC UA 使用 X.509 证书进行安全通讯。首次连接时需要互相信任证书:

  1. 服务器端 (Darra PLC)

    • 在「OPC-UA 配置」对话框中选择安全策略
    • 支持 None (无安全) 和 Basic256Sha256 (加密签名)
    • 首次连接的客户端证书会出现在「待信任」列表中,手动确认信任
  2. 客户端端 (MES/SCADA)

    • 导入 Darra PLC 的服务器证书
    • 将其添加到客户端的可信证书列表

快速测试

开发阶段可使用无安全策略:

端点: opc.tcp://localhost:4840
安全策略: None
认证模式: Anonymous
生产环境

生产环境必须启用安全策略 (Basic256Sha256) 和用户认证,避免未授权访问控制系统。

TCP SDK 连接不上 Runtime 怎么办?

检查项

  1. Runtime 是否运行 — 确认 Darra PLC Runtime 进程正在运行
  2. 端口是否正确 — 默认端口 9527,确认未被其他程序占用
  3. 防火墙 — 确认允许 TCP 9527 入站连接
  4. IP 地址 — 本机连接用 127.0.0.1,远程连接用实际 IP

连接测试

通过 HTTP API 测试连接:

curl -k https://127.0.0.1:18443/api/status

返回 JSON 状态信息即表示连接成功。

MQTT 消息发不出去?

排查步骤

  1. Broker 地址 — 确认 MQTT Broker 地址和端口正确 (默认 1883,TLS 默认 8883)
  2. 认证信息 — 确认用户名和密码正确
  3. Topic 权限 — 确认账号有目标 Topic 的发布权限
  4. QoS 设置 — QoS 1 需要 Broker 确认,网络不稳定时延迟较大
  5. 消息大小 — 部分 Broker 限制单条消息大小 (如 AWS IoT 限 128KB)

配置示例

MqttConfig.BrokerAddress := '192.168.1.200';
MqttConfig.BrokerPort := 1883;
MqttConfig.ClientId := 'DarraPLC_01';
MqttConfig.Username := 'plc';
MqttConfig.Password := '****';
MqttConfig.QoS := 1; (* QoS 0=最多一次, 1=至少一次 *)
MqttConfig.KeepAlive := 60; (* 心跳间隔 秒 *)

多个协议同时使用会相互影响吗?

不同协议运行在独立的线程/OB 中,互不阻塞:

协议执行位置影响
EtherCAT实时内核(独占核心)不影响其他协议
Modbus/TCP异步 OB (用户态线程)超时不阻塞主循环
OPC UA独立服务线程不影响 PLC 扫描
MQTT独立客户端线程不影响 PLC 扫描
HTTP API独立 HTTP 服务线程不影响 PLC 扫描
提示

只有 EtherCAT 运行在独占核心上,具有硬实时保障。其他协议运行在普通线程上,通讯延迟受操作系统调度影响,不适合实时控制场景。


运维层常见通讯问题

EtherCAT 从站掉线后如何恢复

掉线可能是短暂 (电缆抖动, 电源毛刺) 或长久 (硬件故障)。DarraRT 按不同恢复策略处理:

掉线时长恢复策略配置项
<1 总线周期自愈, 无感知自动
1-100 ms热重连 (状态机 OP 保持)ecat.hotReconnect = true
0.1-10 s冷重连 (从 INIT 重新进入 OP)ecat.coldReconnectTimeout = 10s
>10s主站重新扫描拓扑手工触发 ecat rescan

恢复期间的输出处理:

(* 掉线期间输出冻结, 不做危险动作 *)
IF NOT SYS.Ecat.Slave[5].Online THEN
Motor_Speed := 0.0; (* 安全值 *)
Alarm_SlaveLost := TRUE;
ELSE
Motor_Speed := SetpointSpeed;
END_IF;

关键命令:

ecat status         ← 查看每个从站当前状态
ecat rescan ← 重新扫描拓扑 (会短暂停止总线)
ecat reset <addr> ← 对单个从站发 Reset 命令
ecat coe read <addr> <index>:<subindex> ← 读 CoE 对象字典

Modbus TCP 连接断开自动重连参数

ModbusTcp.Config(
AutoReconnect := TRUE,
InitialDelayMs := 1000, (* 首次重试延迟 *)
MaxDelayMs := 30000, (* 最大退避延迟 *)
BackoffFactor := 2.0, (* 指数退避 1s→2s→4s→...→30s *)
KeepAliveSec := 30, (* TCP KeepAlive 心跳秒数 *)
ConnectTimeoutMs := 3000 (* 首次建连超时 *)
);

排查重连失败原因:

现象原因
重试日志持续但不成功防火墙间歇丢包, 检查路由
第一次成功后就断, 反复如此对端会话超时设置过短
网线插回才恢复交换机端口 STP 重计算 (30s), 改用快速生成树
同 PLC 多个 Modbus Client 全掉线本地 TCP 连接数上限, 见下

Windows 默认 MaxUserPort 16384, 对端打开很多连接时可能耗尽, 修改:

netsh int ipv4 set dynamicport tcp start=10000 num=50000

OPC UA 证书不信任怎么办

生产环境启用 Basic256Sha256 后, 客户端第一次连接会收到"证书不信任"错误。处理步骤:

服务器端 (DarraRT)

%AppData%\DarraPLC\pki\
├── own\ ← 服务器自己的证书 + 私钥
├── trusted\ ← 信任的客户端证书
├── rejected\ ← 被拒绝的客户端证书
└── issuers\ ← CA 根证书

首次连接失败后, 到 rejected\certs\ 找到客户端证书 .der 文件, 手工移到 trusted\certs\, 重启 OPC UA 服务即信任。

客户端端

%AppData%\DarraPLC\pki\own\certs\ServerCert.der 拷贝到客户端工具 (UaExpert / KEPServer) 的信任目录。

快速排查

IDE → OPC UA 诊断面板 显示"最近拒绝的客户端"列表, 一键"信任", 避免手工拷文件。

MQTT 遗嘱消息 LWT 怎么用

Last Will and Testament (LWT) 是客户端掉线时由 Broker 代发的消息, 用于通知其他订阅者"我死了"。

MqttConfig.LWT.Topic    := 'darra/line1/plc/status';
MqttConfig.LWT.Message := '{"online":false,"ts":0}';
MqttConfig.LWT.QoS := 1;
MqttConfig.LWT.Retain := TRUE; (* 保留消息, 新订阅者上线立即收到 *)

(* 正常运行时定期发送 online=true 消息 *)
MqttClient.Publish('darra/line1/plc/status',
'{"online":true,"ts":NOW}',
qos := 1, retain := TRUE);

Broker 在检测到连接断开时 (KeepAlive 超时或 TCP RST), 自动代发 LWT 消息。订阅方收到后更新 UI 状态灯。

通讯重试策略 (指数退避)

DarraRT 内置通讯适配器统一采用指数退避 + 随机抖动:

t(n) = min(InitialDelay * Factor^n + Jitter, MaxDelay)
参数默认说明
InitialDelay1 s首次失败后等待时间
Factor2.0每次翻倍
MaxDelay30 s延迟上限
Jitter±10%随机扰动, 避免多客户端同步风暴

自定义策略:

ModbusTcp.SetRetryPolicy(
Strategy := RETRY_EXPONENTIAL, (* LINEAR / EXPONENTIAL / FIXED *)
InitialDelayMs := 500,
MaxDelayMs := 10000,
Factor := 1.5,
MaxAttempts := 0 (* 0 = 无限重试 *)
);

跨网段通讯 (NAT / 网关穿透)

现场 PLC 在 192.168.10.x 内网, 服务器在 10.0.0.x, 两者通过路由器互连:

场景方案
PLC 主动连云端 MQTT出站连接一般路由器放行, 无需特殊配置
云端主动访问 PLC OPC UA路由器做端口映射 (4840 → 内网 PLC)
多 PLC 同时暴露 OPC UA每台 PLC 用不同外网端口 (4840, 4841, 4842...)
纯工厂内网, 无公网需求用三层交换机做静态路由

NAT 穿透 (不推荐生产):

  • STUN: 适合纯 UDP 协议 (如 KCP, 有点用)
  • TURN: 需中继服务器, 延迟高
  • DarraRT 优先选固定公网 IP + VPN 的传统方案

工业以太网 vs 办公以太网区别

维度工业以太网办公以太网
温度范围-40°C70°C0-40°C
振动IEC 60068-2-6无要求
供电24VDC 冗余220VAC 单路
端口数5-8 足够24-48
VLAN/QoS必须支持可选
生成树快速 RSTP/MRPSTP (30s 收敛慢)
EMI 抗扰屏蔽端口 (FTP/STP)普通 (UTP)
网线等级CAT5e SF/FTP 双屏蔽CAT5e UTP

EtherCAT 总线必须用工业级网线和接插件, 办公 CAT5e UTP 在变频器旁抗扰能力不足, 容易出现 WKC 偶发报警。

冗余链路断线检测

参见 冗余功能

通讯诊断清单

出现通讯问题时按顺序检查:

#工具
1物理层 (网线、Link 灯)目视 + 网线测试仪
2IP 可达ping
3端口开放Test-NetConnection -Port 502
4协议层 (抓包)Wireshark
5应用层 (Modbus Poll / UaExpert)第三方调试工具
6日志层Service 日志 + 对端日志