跳到主要内容

连接诊断

"连不上" 是 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 后再试, 或者在开发模式下关闭签名校验 (仅测试环境)。

项目原子替换失败

下载过程是:

  1. 传新项目到临时目录
  2. 停 Runtime
  3. 备份旧项目
  4. 移动新项目
  5. 启动 Runtime
  6. 验证成功

失败可能在第 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 延迟< 5ms5~50ms> 50ms
Ping 抖动< 2ms2~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 或导入证书
连接数已满数据库连接池耗尽重启应用 / 扩大池
权限不足账号无 SELECTDBA 赋权
驱动未安装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。

防范措施

  1. 规划 IP 与防火墙: 部署阶段一次性配好, 避免临时救火
  2. 版本同步: IDE 和 Runtime 保持一致版本
  3. 双机备份: 关键场景配备用 Runtime, 热切换
  4. 监控告警: Service 日志接入集中监控 (ELK / Loki)
  5. 健康检查: 定期 (每月) 跑一次完整连接测试
  6. 文档化: 每次现场问题解决后更新知识库, 避免重复踩坑

相关文档