跳到主要内容

PLC 编程概述

Darra Software PLC 基于 IEC 61131-3 国际标准实现, 提供三种 PLC 逻辑编辑器、抢占式多任务模型和完善的在线调试能力。

三种 PLC 逻辑编辑器

语言缩写分类适用场景特点
SCL (Structured Control Language)SCL文本复杂算法、数据处理类似 Pascal 的文本语言
梯形图LAD图形开关逻辑、继电器替换电气工程师熟悉
拖拽式编程 (Continuous Function Chart)CFC图形信号处理、过程控制框 + 针脚 + 接线的数据流编程
混合编程

程序组织单元 (POU) 可在三种语言间互相调用。同一项目允许混合使用: 联锁逻辑用 LAD, 复杂算法用 SCL 写, 信号处理与控制回路用 CFC 串联 — 各语言编译为同一套中间代码。

程序组织单元 (POU)

IEC 61131-3 将可执行代码组织为三种 POU:

POU 类型关键字用途是否有实例示例
程序PROGRAM主入口 (OB)一个PROGRAM Main
功能块FUNCTION_BLOCK有状态的对象多实例FUNCTION_BLOCK FB_Motor
函数FUNCTION无状态纯函数无实例FUNCTION Average : REAL
  • PROGRAM: 被 OB 调度器调用, 持有全局状态
  • FUNCTION_BLOCK: 封装逻辑 + 内部状态, 必须实例化后使用
  • FUNCTION: 只依赖输入, 相同输入永远产生相同输出, 无副作用

任务模型 (Task Model)

PLC 执行不是单线程循环, 而是多任务抢占式调度:

┌──────────────┐      ┌──────────────┐      ┌──────────────┐
│ OB1 主任务 │ │ OB30 周期10ms│ │ OB35 周期 1ms│
│ 优先级 1 │ ←抢占│ 优先级 12 │ ←抢占│ 优先级 14 │
└──────────────┘ └──────────────┘ └──────────────┘
↑ ↑ ↑
│ │ │
┌───┴───────────────── 任务调度器 ───────────────┴────┐
│ 基于优先级抢占 + 同优先级 FIFO + 看门狗保护 │
└──────────────────────────────────────────────────────┘

每个任务独立配置:

参数说明示例
周期时间任务执行间隔1ms / 2ms / 4ms / 10ms
优先级1~31, 数字越大越高OB1=1, OB30=12, OB35=14
看门狗单次最长允许时间200ms → OB80
绑定 POU任务调用的 PROGRAMMain, FastControl

三段式扫描周期

每个任务内部遵循经典三段式:

┌──────────────┐
│ 1. 输入合并 │ ← 读取 IO 映像表 (I 区刷新)
├──────────────┤
│ 2. 程序扫描 │ ← 执行 POU 代码
├──────────────┤
│ 3. 输出分发 │ ← Q 区写入硬件
└──────────────┘

下一周期 (1ms/2ms/4ms/10ms/50ms 可配)
一致性

一个完整周期内, 程序看到的输入始终是周期开始时的瞬时快照, 输出在周期末尾统一写出。这保证了程序逻辑不会在中途受到 IO 变化干扰 (Input Image / Output Image 机制)。

内存模型

PLC 采用标准 IEC 61131-3 内存地址 + 符号变量双模型:

区域前缀用途持久化示例
I 区%I物理输入 (DI/AI)每周期刷新%IX0.0, %IW100
Q 区%Q物理输出 (DO/AO)每周期刷新%QX0.0, %QW100
M 区%M标记位 / HMI 交互非易失可配%MX0.0, %MD200
D 区%D数据块 (DB)持久化%D10.DBW0
S 区%S系统状态 (只读)运行时%SW0 (扫描时间)

每个区域支持 X (位) / B (字节) / W (字) / D (双字) / L (长字) 访问。

符号优先

推荐使用符号变量 (VAR) 而非直接地址访问。编译器自动分配地址, 变量表支持符号→地址双向查找, 维护性更好。

运行模式

模式适用场景特性
离线仿真开发阶段, 无硬件内置仿真 Runtime, 在线监视/强制/趋势全支持
在线连接开发阶段, 真实硬件IDE 连接 Runtime, 实时监视/强制/趋势/报警
Deploy 部署生产运行Runtime 独立运行, IDE 可选离线
调试约束

DarraRT PLC 不提供断点 / 单步 / F9 / F10 等传统代码调试手段 — 产线实时控制不允许程序暂停。调试通过在线监视 + 强制赋值 + 趋势图 + 报警 + 日志 + 任务扫描统计组合进行, 详见 在线调试

截图: 在线监控面板

切换方式: Ribbon → PLC → 仿真 / 在线。

OB 组织块

PLC 支持 12 种 OB 类型, 按优先级调度:

OB 类型功能优先级典型用途
OB1主循环 (每个扫描周期)1 (最低)主程序逻辑
OB10~OB17异步事件8~9通讯回调、报警处理
OB20~OB23时间触发 (TOD)10定时任务
OB30~OB38周期中断12~15闭环控制 (PID)
OB40~OB47硬件中断16~17边沿触发、紧急响应
OB80时间错误 (超时)20看门狗处理
OB82IO 错误18IO 模块离线
OB100冷启动启动时初始化
OB121/122运行时异常22除零/越界/溢出

功能特性一览

  • 标准功能块库: 定时器 (TON/TOF/TP)、计数器 (CTU/CTD/CTUD)、触发器 (SR/RS/R_TRIG/F_TRIG)
  • IEC 61800-5-2 安全库: 13 个安全功能块 (STO/SS1/SS2/SLS/SLP/SBC/SDI 等), SIL 2 / PL d
  • PID 控制器: 带抗积分饱和、输出限幅、自整定、前馈、死区、级联
  • 配方管理: 工艺参数批量切换 (焊接参数、工具偏移)
  • 在线调试: 变量监视、强制写入、趋势图、报警管理、任务统计
  • OOP 支持: FUNCTION_BLOCK 继承 (EXTENDS)、接口实现 (IMPLEMENTS)、方法 (METHOD)
  • 交叉引用: 变量 where-used 分析, 安全重命名
  • 代码模板库: 标准动作块 (Cylinder/Motor/Conveyor), 可导入导出
  • 冗余架构: 双机热备 1ms 切换 (详见 冗余配置)

截图: 编译输出对话框

相关文档