连接诊断
"连不上" 是 PLC 工程师最常遇到的问题, 本页用决策树把常见症状定位到根本原因, 配套工具和命令。
决策树总览
场景 1: 完全连不上
症状
- IDE 点"连接 Runtime"后长时间无响应
- 最终弹出 "连接超时"
- 状态栏连接图标保持灰色
排查步骤
第 1 步: 网络层通不通
在 IDE 所在电脑上打开命令行:
ping 192.168.1.101
- 通 (收到回复): 进入第 2 步
- 不通:
- 确认 IP 没输错
- 目标机开机了吗? 插网线了吗?
- 两机是否同一子网? (对比 IP 前三段和子网掩码)
arp -a看 MAC 是否已学习- 如果用公网访问, 检查路由/NAT
第 2 步: 端口层通不通
telnet 192.168.1.101 15000
# 或 PowerShell:
Test-NetConnection 192.168.1.101 -Port 15000
- 成功 (telnet 进入黑屏, TNC 返回
TcpTestSucceeded : True): 进入第 3 步 - 拒绝 (
Connection refused):- 目标 Runtime 的 Service 没启动
- 端口配错 (默认 15000)
- 改用默认端口或核对 Runtime 侧
%ProgramData%\Darra\PLC\config.json
- 超时 (长时间无响应):
- 防火墙拦了 (见第 3 步)
第 3 步: 防火墙
Windows 防火墙是最常见的拦路虎。在目标 Runtime 机器上:
# 查看 Darra 相关规则
Get-NetFirewallRule -DisplayName "*Darra*" |
Format-Table DisplayName, Enabled, Direction, Action
# 如果没有, 手动添加
New-NetFirewallRule -DisplayName "DarraPLC Runtime TCP" `
-Direction Inbound -Protocol TCP `
-LocalPort 15000-15002 -Action Allow -Profile Any
New-NetFirewallRule -DisplayName "DarraPLC Discovery UDP" `
-Direction Inbound -Protocol UDP `
-LocalPort 15003 -Action Allow -Profile Any
如果有企业杀毒软件 (卡巴斯基、360、McAfee 等), 它们可能独立拦截, 需要单独放行 DarraPLC.Service.exe, DarraPLC.Runtime.exe。
第 4 步: 服务运行状态
在目标机上:
Get-Service | Where-Object { $_.Name -like "*Darra*" }
应看到:
Status Name DisplayName
------ ---- -----------
Running DarraPLCService Darra PLC Service
如果 Stopped:
Start-Service DarraPLCService
启动失败看 Windows 事件日志:
Get-EventLog -LogName Application -Source "DarraPLC*" -Newest 20
或者看 Service 日志:
%ProgramData%\Darra\PLC\logs\service_*.log
场景 2: 连上但认证失败
症状
- 握手阶段弹错 "认证失败" / "Invalid Credentials"
- 日志:
Auth error: Bad password
排查
| 错误信息 | 原因 | 处理 |
|---|---|---|
| Bad password | 密码错 | 重新输入, 检查大小写, 开 Caps Lock |
| Account locked | 多次失败锁定 | 在目标机上用管理员工具解锁 |
| Account expired | 账号过期 | 延长账号有效期 |
| Certificate invalid | 证书问题 | 重新导入 IDE 公钥到 Runtime |
| Certificate expired | 证书过期 | 续期或重新生成 |
| Signature mismatch | 被篡改或版本不匹配 | 重装或升级 |
密码重置
目标机上:
开始菜单 → Darra PLC → 工具 → 密码管理器
→ 选账号 → 重置密码
或命令行:
& "$env:ProgramFiles\DarraPLC\DarraPLC.Admin.exe" reset-password --user admin --new-password newpass123
证书问题
证书存放:
目标机: %ProgramData%\Darra\PLC\Certificates\
├─ Server.pfx Runtime 自己的证书
├─ Server.crt 公钥
└─ Trusted\ 信任的客户端证书
├─ ide_公司A.crt
└─ ide_公司B.crt
在目标机上信任 IDE 侧证书:
Copy-Item "\\ide-pc\share\ide_client.crt" "%ProgramData%\Darra\PLC\Certificates\Trusted\"
Restart-Service DarraPLCService
场景 3: 版本不匹配
症状
- 连接到握手阶段, 收到 "Protocol version mismatch"
- 日志:
Client version 2.0.0, Server version 2.1.0
处理
IDE 版本和 Runtime 版本应保持主版本号一致:
- 完全一致: 最佳
- 小版本差异 (2.1.0 vs 2.1.2): 通常兼容
- 主版本差异 (2.x vs 3.x): 不兼容
升级方案:
升级 Runtime (推荐)
# 目标机上
Stop-Service DarraPLCService
& "\\share\DarraPLCRuntime_2.1.2.msi" /quiet
Start-Service DarraPLCService
降级 IDE (临时应急)
从历史版本页面下载匹配的 IDE 版本, 平行安装, 切换使用。
场景 4: 下载失败
症状
- 连接正常, 编译通过
- 点"下载"后卡在 90%, 弹出 "下载失败"
排查
检查目标盘空间
目标机上:
Get-PSDrive C | Select-Object Free
少于 500MB 时, Runtime 可能拒绝下载大项目。清理日志或临时文件。
签名校验
IDE 下载前给项目加签名, Runtime 校验。如果签名失败:
- IDE 和 Runtime 用的证书不匹配
- 项目在传输中损坏
重新登录 IDE 后再试, 或者在开发模式下关闭签名校验 (仅测试环境)。
项目原子替换失败
下载过程是:
- 传新项目到临时目录
- 停 Runtime
- 备份旧项目
- 移动新项目
- 启动 Runtime
- 验证成功
失败可能在第 4~6 步, 查 Service 日志:
%ProgramData%\Darra\PLC\logs\service_*.log
常见:
ERROR Failed to move project file: Access denied→ 杀毒软件占用, 加白名单ERROR Runtime failed to load project→ 项目与 Runtime 版本不兼容ERROR Retain data corrupt→ 断电保存数据损坏, 清 Retain 后重来
场景 5: 在线监控慢 / 断断续续
症状
- 连接成功
- 进入在线模式, 监视表刷新间断, 时快时慢
- 变量值显示"?"
排查
带宽
# 目标机上
Get-Counter '\Network Interface(*)\Bytes Total/sec' -SampleInterval 1 -MaxSamples 10
看目标机网卡吞吐。 > 80% 带宽使用率时, 减少监视变量数量。
延迟抖动
IDE → 诊断 → 连接质量:
| 指标 | 优 | 一般 | 差 |
|---|---|---|---|
| Ping 延迟 | < 5ms | 5~50ms | > 50ms |
| Ping 抖动 | < 2ms | 2~20ms | > 20ms |
| 丢包率 | 0% | < 1% | > 1% |
差 → 检查网络路径, 换成 VPN / 专线。
监视表过大
同时监视 > 1000 变量时 IDE 侧 UI 会卡。
建议:
- 监视表拆分为多个小表, 每个 < 200 变量
- 降低刷新频率 (250ms → 1000ms)
- 关闭不必要的趋势图
Runtime CPU 100%
PLC 扫描周期越界, Runtime 来不及响应在线请求:
目标机 → 任务管理器 → DarraPLC.Runtime.exe:
- CPU > 90% 持续: 周期太短, 加大扫描周期
- 内存快速上涨: 有内存泄漏, 联系技术支持
场景 6: EtherCAT 相关问题
单独的决策树, 见 EtherCAT IO 排错。关键点:
- 网卡驱动: 必须被 DarraRT_Eth 驱动接管, 设备管理器查看
- 从站供电: 所有从站必须有 24V 供电, 没供电不响应 BRD
- 网线: EtherCAT 按 IN → OUT 顺序串联, 接反只能扫到第一个从站
- 周期时间: 新加的从站如果处理慢, 当前周期跑不赢, 加大
SafeOpTimeout
场景 7: 数据库连接问题
IDE → 通讯 → 数据库连接 → 测试连接, 常见错误:
| 错误 | 原因 | 处理 |
|---|---|---|
| 无法解析主机名 | DNS 问题 | 用 IP 代替主机名 |
| 连接被拒绝 | 数据库未启或端口错 | telnet host port |
| 登录失败 | 账号密码错 | 在 MySQL Workbench / SSMS 先验证 |
| SSL/TLS 握手失败 | 证书不匹配 | 关闭 SSL 或导入证书 |
| 连接数已满 | 数据库连接池耗尽 | 重启应用 / 扩大池 |
| 权限不足 | 账号无 SELECT | DBA 赋权 |
| 驱动未安装 | MySQL/PG 驱动缺失 | IDE 内置但某些引擎需单独装 |
详见 数据库通讯。
常用工具
Wireshark
抓包分析的终极工具, 能看到每一帧:
- 过滤:
tcp.port == 15000看 Runtime 通讯 - 过滤:
eth.type == 0x88a4看 EtherCAT - 过滤:
tcp.port == 502看 Modbus TCP - 过滤:
opcua看 OPC UA
Process Monitor
文件/注册表访问监视, 用于:
- 查 Runtime 加载时访问了哪些配置文件
- 看是否文件权限导致无法读写
- 找配置文件实际路径
DbgView (SysInternals)
内核调试输出查看器, 看三个 DarraRT 内核驱动的 DbgPrint 输出。
PowerShell 网络诊断
# 一次性详细诊断
Test-NetConnection -ComputerName 192.168.1.101 -Port 15000 -InformationLevel Detailed
# Route 跟踪
tracert 192.168.1.101
# 列出本机所有 TCP 监听
Get-NetTCPConnection -State Listen | Format-Table LocalAddress, LocalPort, OwningProcess
# 看某端口被哪个进程占用
Get-NetTCPConnection -LocalPort 15000 | Select-Object OwningProcess
Get-Process -Id <pid>
netstat
netstat -ano | findstr "15000"
查占用端口的进程 ID, 和 tasklist 配合定位:
tasklist | findstr "1234"
日志位置速查表
| 日志 | 路径 | 级别设置 |
|---|---|---|
| IDE 日志 | %AppData%\DarraPLC\logs\ide_*.log | 设置 → 日志级别 |
| IDE 实时输出 | 输出窗 → IDE 标签 | - |
| Service 日志 | %ProgramData%\Darra\PLC\logs\service_*.log | 配置文件 logLevel |
| Runtime 日志 | %ProgramData%\Darra\PLC\logs\runtime_*.log | 同上 |
| 内核驱动 | DbgView (实时, 不落盘) | - |
| Windows 事件 | 事件查看器 → 应用程序 | - |
| 编译输出 | 输出窗 → 编译标签 | - |
提高日志级别到 Trace 会产生大量日志, 调完问题记得改回 Info。
防范措施
- 规划 IP 与防火墙: 部署阶段一次性配好, 避免临时救火
- 版本同步: IDE 和 Runtime 保持一致版本
- 双机备份: 关键场景配备用 Runtime, 热切换
- 监控告警: Service 日志接入集中监控 (ELK / Loki)
- 健康检查: 定期 (每月) 跑一次完整连接测试
- 文档化: 每次现场问题解决后更新知识库, 避免重复踩坑