远程 Runtime
Runtime 是真正执行 PLC 程序的进程。常见部署方式:
部署位置
| 部署在哪 | 适用场景 |
|---|---|
| 开发机本地 | 学习、离线仿真 |
| 同机房工控机 | 现场控制,通过以太网连接 |
| 边缘盒子 | 远程站点,走 VPN 或公网 |
| 虚拟机 | 测试、演示、多人共享 |
安装 Runtime
- 从 下载 页面下载 Runtime 安装包(Windows / Linux 版本)
- 目标机上运行安装包,按向导完成
- 启动后 Runtime 自动开启 TCP 端口,等待 IDE 连接
管理远程 Runtime
IDE 不是管理 Runtime 的唯一方式。远程机上有独立的 Runtime 管理器,可以:
- 查看 Runtime 运行状态
- 启动 / 停止 / 重启
- 查看日志
- 配置自启动
多 Runtime 管理
如果有多台 Runtime(例如产线上 10 个工位),建议:
- 每台 Runtime 起唯一主机名
- IDE 侧用 工作区(Workspace) 保存一份 IP 列表
- 切换目标时直接选列表,不用每次输 IP
授权
每台 Runtime 都需要一个有效授权才能运行超过试用期。授权绑定硬件 ID,详见 许可 FAQ。
Runtime 组件
远程 Runtime 安装后包含以下进程:
| 进程 | 用途 | 是否默认启动 |
|---|---|---|
DarraPLC.Service.exe | 主服务, 监听端口, 管理项目 | 是 |
DarraPLC.Runtime.exe | PLC VM 宿主, 加载编译产物 | 按需 |
DarraPLC.Panel.exe | 可选的现场 HMI, 操作员用 | 按需 |
DarraRT_Eth.sys | 内核 EtherCAT 驱动 | 开机加载 |
DarraRT_PLC.sys | 内核 PLC VM 驱动 | 开机加载 |
DarraRT.sys | 内核核心隔离驱动 | 开机加载 |
Runtime 状态 = Service 进程活跃 + Runtime 进程加载了项目 + 内核驱动健康。
部署向导
远程机 (工控机) 上的安装流程:
- 下载对应架构的 Runtime 安装包 (
DarraPLCRuntime_<ver>_x64.msi) - 以管理员身份运行, 向导选项:
- 安装目录 (默认
C:\Program Files\DarraPLC) - 是否安装 Panel (取决于是否有现场 HMI 需要)
- 核心隔离数 (推荐 2, 保留 CPU 核心给 RT)
- 网卡角色 (哪些网卡给 EtherCAT 专用)
- 安装目录 (默认
- 安装程序自动:
- 注册 Service 为 Windows 服务, 开机自启
- 安装三个内核驱动 (需要管理员)
- 开启防火墙规则 (TCP 15000-15002, UDP 15003)
- 创建开始菜单项
- 首次启动向导:
- 设置 Runtime 主机名 (用于 IDE 发现)
- 设置访问密码
- 导入/激活授权 (可选, 试用期 30 天)
无人值守部署
大批量部署 (N 台产线工控机) 时用命令行:
msiexec /i DarraPLCRuntime_2.1.0_x64.msi /quiet `
TARGETDIR="C:\Program Files\DarraPLC" `
HOSTNAME="plc-line01-工位01" `
PASSWORD="..." `
LICENSEFILE="\\file-server\licenses\line01.lic" `
AUTOSTART=1
返回码 0 = 成功, 非 0 = 查看 %Temp%\DarraPLC_install.log。
Runtime 管理器界面
远程机桌面有 "Darra PLC 管理器" 图标, 打开后:
| 视图 | 内容 |
|---|---|
| 概览 | 运行状态、当前项目、CPU/内存使用 |
| 项目 | 已加载的 .plcx 列表, 启停/重新加载 |
| 日志 | Service / Runtime 日志实时 tail |
| 驱动 | 三个内核驱动的状态 + 版本 |
| 网络 | 网卡角色, EtherCAT 绑定, 端口监听 |
| 授权 | 授权状态, 到期时间, 硬件 ID |
| 备份 | 手动/定时备份项目 + 配置 |
| 更新 | 检查并应用 Runtime 升级 |
管理器与 IDE 共用 RPC, 所以本机/远程操作体验一致。
远程部署流程
IDE 下载项目到远程 Runtime 的完整流程:
IDE 编译产出 .plcx
↓ (TCP 15000 流传输)
Service 接收并校验签名
↓
原子替换: 备份旧项目 → 写入新项目 → 验证 → 切换
↓
通知 Runtime 重新加载
↓
Runtime 停 (当前 PLC 状态保存到 retain 区)
↓
Runtime 加载新项目
↓
Runtime 启动 (从 retain 区恢复状态)
↓
上报成功
↓
IDE 状态栏绿灯
任何一步失败会回滚到旧项目, 不会出现"半成功"状态。
项目热切换
同一 Runtime 可以预加载多个项目, 在线秒级切换:
- IDE 下载项目 A, B, C (每个项目不同 ID)
- 切换:
runtime.switch("B")通过 IDE 或 HMI 按钮触发 - Runtime 停 A, 加载 B, 启动
切换时常见 Q 区/M 区处理策略:
- 清零: 每次切换都清 (适合安全优先)
- 保留: 切换时 Q 区保持, 避免设备复位 (适合连续生产)
- 自定义: 切换脚本里指定字段清, 其他保留
工作区与目标列表
IDE 侧可以把多个 Runtime 组织成工作区:
工作区: 某某电子产线
├── plc-line01-工位01 192.168.1.101
├── plc-line01-工位02 192.168.1.102
├── plc-line01-工位03 192.168.1.103
└── plc-line01-工位04 192.168.1.104
切换工作区 = 一键切换 4 个目标的上下文。
批量操作:
- 批量下载: 对工作区内所有 Runtime 下载同一项目
- 批量启停: 一键启动/停止所有 Runtime
- 批量备份: 周期性备份所有 Runtime 的项目
- 批量升级: 推送 Runtime 升级包
日志与监控
远程 Runtime 日志:
<安装目录>\logs\service_<日期>.log Service 层
<安装目录>\logs\runtime_<日期>.log Runtime 层
<安装目录>\logs\driver_<日期>.log 内核驱动层 (需要 DbgView)
每个日志文件默认 100 MB 滚动, 最多保留 30 个文件 (~3 GB)。可在 Runtime 管理器 → 日志设置 调整。
远程查看: IDE → Ribbon → 诊断 → 远程日志, 实时 tail Runtime 侧日志。
时间同步
Runtime 之间协调需要时间一致:
- 推荐 NTP 同步到同一服务器 (误差 < 10ms)
- 支持 PTP (IEEE 1588) 同步, 误差 < 1μs, 用于 EtherCAT 分布式时钟
Runtime 管理器 → 时间 可查看当前时间源和偏移量。
灾备与备份
| 场景 | 策略 |
|---|---|
| 硬件故障 | Runtime 管理器 → 备份 → 导出完整镜像 (项目+配置+授权) |
| 项目误改 | 每次下载前自动备份旧项目, 支持回滚到最近 N 个版本 |
| 授权丢失 | 授权绑定硬件 ID, 换机器需申请新授权 |
| 误删整机 | 备份镜像 + 再次执行静默安装 + 授权迁移申请 |
典型部署规模
| 规模 | 架构 | 说明 |
|---|---|---|
| 单机 | 1 IDE + 1 Runtime | 学习、小型项目 |
| 产线 | 1 IDE + 10~20 Runtime | 常见制造业产线 |
| 多产线 | N IDE + 50~200 Runtime | 大型工厂 |
| 云 + 边 | 中心 + 边缘 Runtime | 远程站点, 物联网 |
排错
| 症状 | 处理 |
|---|---|
| Service 无法启动 | 管理器 → 日志查看启动失败原因, 常见为端口被占 |
| 下载后 Runtime 没重启 | 检查是否启用"自动重启", 或手工 Restart |
| 远程 IDE 连不上但本机能连 | 防火墙、端口转发、VPN 检查 |
| 授权过期 | 续期后 License Manager → Reload License |
| 项目加载后立刻崩 | 查看 Runtime 日志 + Core Dump |
| 多台 Runtime 时 IDE 卡 | 减少同时在线监视的数量, 或升级 IDE 网速 |
更多见 连接诊断。