5 简化了编程概念
5.2 轻松设计用户程序
5.2 轻松设计用户程序
创建处理自动化任务的用户程序时,需要将程序指令插入代码块(OB、FB 或 FC)中。
OB 是用于针对您的应用构建和组织用户程序的代码块。 对于许多应用,都采用一个不断 循环的 OB(如程序循环 OB 1)来包含程序逻辑。 除程序循环 OB 外,CPU 还提供其它 执行特定功能的 OB,例如执行启动任务、处理中断和错误或者以特定的时间间隔执行特 定程序代码。 每个 OB 都对 CPU 中的一个特定事件作出响应,并能根据预定义的优先级 组和等级中断用户程序的执行。
FB 是从另一个代码块(OB、FB 或 FC)进行调用时执行的子例程。调用块将参数传递 到 FB,并标识可存储特定调用数据或该 FB 实例的特定数据块 (DB)。更改背景 DB 可实 现使用一个通用 FB 控制一组设备的运行。 例如,借助包含每个泵或阀门的特定运行参数 的不同背景 DB,一个 FB 可控制多个泵或阀。 背景 DB 会保存该 FB 在不同调用或连续 调用之间的值,以便能支持异步通信。
FC 是从另一个代码块(OB、FB 或 FC)进行调用时执行的子例程。FC 不具有相关的背 景 DB。调用块将参数传递给 FC。FC 中的输出值必须写入存储器地址或全局 DB 中。
为用户程序选择结构类型
根据实际应用要求,可选择线性结构或模块化结构来创建用户程序。
线性程序按顺序逐条执行处理自动化任务的所有指令。 通常,线性程序将所有程序指令 都放入一个程序循环 OB (OB 1) 中以循环执行该程序。
模块化程序调用可执行特定任务的特定代码块。 要创建模块化结构,需要将复杂的自动 化任务划分为与过程所执行的功能任务相对应的更小的次级任务。每个代码块都为各个次 级任务提供程序段。通过从另一个块中调用其中一个代码块来构建程序。
线性结构: 模块化结构:
2% )%
)&
2%
长沙工控帮教育科技有限公司整理
5.2 轻松设计用户程序
5.2 轻松设计用户程序
5.2.1 使用 OB 组织用户程序
组织块为程序提供结构。 它们充当操作系统和用户程序之间的接口。 OB 是由事件驱动 的。 事件(如诊断中断或时间间隔)会使 CPU 执行 OB。某些 OB 预定义了起始事件和 行为。
程序循环 OB 包含用户主程序。 用户程序中可包含多个程序循环 OB。 RUN 模式期间,
程序循环 OB 以最低优先级等级执行,可被其它各种类型的程序处理中断。 (启动 OB 不会中断程序循环 OB,因为 CPU 在进入 RUN 模式之前执行启动 OB。) 完成处理程序 循环 OB 后,CPU 会立即重新执行程序循环 OB。 该循环处理是用于 PLC 的“正常”处理 类型。 对于许多应用,整个用户程序位于一个 OB 中,如默认的程序循环 OB 1。
可创建其它 OB 以执行特定的 功能,如执行启动任务、处理 中断和错误或以特定的时间间 隔执行特定程序代码。
使用“添加新块”(Add new block) 对话框在用户程序中创建新的 OB。
CPU 根据 分配给每个 OB 的优 先级 (页 35)来确定处理中断事 件的顺序。
在某等级的 OB 内创建附加 OB: 可为用户程序创建多个 OB,甚至可以为程序循环和启 动 OB 等级创建。 使用“添加新块”(Add new block) 对话框创建 OB。输入 OB 的名称并提 供 200 或更大的数作为 OB 编号。
如果为用户程序创建了多个程序循环 OB,则 CPU 会按数字顺序从主程序循环 OB(默认 为 OB 1)开始执行每个程序循环 OB。 例如,当第一个程序循环 OB (OB 1) 完成后,
CPU 将执行第二个程序循环 OB(例如 OB 200)。
组态 OB 的运行
可修改 OB 的运行参数。例如,可为延时 OB 或循环中断 OB 组态时间参数。
长沙工控帮教育科技有限公司整理
5.2 轻松设计用户程序
5.2.2 FB 和 FC 使模块化任务编程变得很轻松
功能 (FC) 与子例程类似。 FC 是通常对一组输入值执行特定运算的代码块。 FC 将此运 算结果存储在存储单元中。 使用 FC 可执行以下任务:
● 执行标准和可重复使用的运算,例如数学计算。
● 执行功能任务,如通过使用位逻辑运算进行单独控制。
也可以在程序中的不同位置多次调用 FC。 此重复使用简化了对经常重复发生的任务的编 程。
与 FB 不同,FC 不具有相关的背景 DB。 FC 使用其临时存储器 (L) 保存用于计算运算的 数据。 不保存临时数据。 要存储数据以备 FC 执行完成后使用,可将输出值赋给全局存 储单元,如 M 存储器或全局 DB。
功能块 (FB) 与带存储器的子例程类似。 FB 是可通过块参数以编程方式实现其调用的代 码块。 FB 将输入 (IN)、输出 (OUT) 和输入/输出 (IN_OUT) 参数存储在数据块 (DB) 或
“背景”DB 中的变量存储器内。 背景 DB 提供与 FB 的实例(或调用)关联的一块存储区 并在 FB 完成后存储数据。
用户通常使用 FB 控制在一个扫描周期内未完成其运行的任务或设备的运行。 要存储运行 参数以便从一个扫描快速访问到下一个扫描,用户程序中的每一个 FB 都应具有一个或多 个背景 DB。 调用 FB 时,也会打开存储块参数的值以及用于该 FB 调用或“背景”的静态 局部数据的背景 DB。 FB 完成后,背景 DB 将存储这些值。
可以给 FB 接口中的参数赋初值。 这些值将传送到相关的背景 DB 中。 如果未分配参 数,将使用当前存储在背景 DB 中的值。 某些情况下,必须分配参数。
可将不同的背景 DB 与 FB 的不同调用进行关联。 通过背景 DB 可使用一个通用 FB 控制 多个设备。 通过使一个代码块对 FB 和背景 DB 进行调用,来构建程序。 然后,CPU 执 行该 FB 中的程序代码,并将块参数和静态局部数据存储在背景 DB 中。 FB 执行完成 后,CPU 会返回到调用该 FB 的代码块中。 背景 DB 保留该 FB 实例的值。 通过设计用 于通用控制任务的 FB,可对多个设备重复使用 FB,方法是:为 FB 的不同调用选择不同 的背景 DB。
长沙工控帮教育科技有限公司整理
5.2 轻松设计用户程序
下图显示了三次调用同一个 FB 的 OB,方法是针对每次调用使用一个不同的数据块。 该 结构使一个通用 FB 可以控制多个相似的设备(如电机),方法是在每次调用时为各设备 分配不同的背景数据块。 每个背景 DB 存储单个设备的数据(如速度、加速时间和总运 行时间)。 在此实例中,FB 22 控制三个独立的设备,其中 DB 201 用于存储第一个设备 的运行数据,DB 202 用于存储第二个设备的运行数据,DB 203 用于存储第三个设备的 运行数据。
'%
'%
'%
)%'%
)%'%
)%'%
2%
)%
5.2.3 数据块为程序数据提供了便捷的存储方式
在用户程序中创建数据块 (DB) 以存储代码块的数据。用户程序中的所有程序块都可访问 全局 DB 中的数据,而背景 DB 仅存储特定功能块 (FB) 的数据。
用户程序可将数据存储在 CPU 的专用存储区中,如输入 (I)、输出 (Q) 和位存储器 (M)。
此外,可使用数据块 (DB) 快速访问存储在程序本身中的数据。可将 DB 定义为只读。
当数据块关闭或相关代码块的执行结束时,DB 中存储的数据不会被删除。有两种类型的 DB:
● 全局 DB 存储程序中代码块的数据。任何 OB、FB 或 FC 都可访问全局 DB 中的数 据。
● 背景 DB 存储特定 FB 的数据。背景 DB 中数据的结构反映了 FB 的参数(Input、
Output 和 InOut)和静态数据。 FB 的临时存储器不存储在背景 DB 中。
尽管背景 DB 反映特定 FB 的数据,然而任何代码块都可访问背景 DB 中的数据。
长沙工控帮教育科技有限公司整理
5.2 轻松设计用户程序 创建新代码块
1. 打开“程序块”(Program blocks) 文件夹。
2. 双击“添加新块”(Add new block)。
3. 在“添加新块”(Add new block) 对话框中,单击“功能 (FC)”(Function (FC)) 图标。
4. 通过从下拉菜单中选择
“LAD”为 FC 指定编程语言。
5. 单击“确定”(OK) 将块添加到 项目中。
选中“添加新对象并打开”(Add new and open) 选项(默 认),在项目视图中打开代码 块。
用户可以很容易地使用用户程序中的任何 代码块(OB、FB 或 FC)调用 CPU 中的 FB 或 FC。
1. 打开将调用另一个块的代码块。
2. 在项目树中,选择要调用的代码块。
3. 将该块拖到所选程序段中以创建一个 Call 指令。
说明
用户程序无法调用 OB,因为 OB 是 由事件驱动的 (页 35)。 CPU 接收到事件时,将 开始执行 OB 进行响应。