# 第5章 S7-1200用户程序结构
# 资料来源
- PPT:
第4章 S7-1200的用户程序结构.pptx - 辅导书:
S7-1200 PLC编程及应用 第3版,目录中对应第4章“S7-1200的用户程序结构”。
# 1. 本章脉络
S7-1200用户程序结构
├─ 4.1 功能与功能块
│ ├─ 生成功能FC
│ ├─ FC局部数据
│ ├─ OB1中调用FC
│ ├─ 功能块FB特点
│ ├─ FB背景数据块
│ ├─ FC与FB区别
│ └─ FB多重背景数据块
├─ 4.2 数据类型与间接寻址
│ ├─ 基本/复杂/参数/系统/硬件数据类型
│ └─ 隐式转换与显式转换
└─ 4.3 中断事件与中断指令
├─ 启动组织块的事件
├─ 不会启动OB的事件
├─ 优先级与中断队列
├─ 程序循环OB、启动OB、循环中断OB、硬件中断OB
└─ 中断连接/分离、延时中断
# 2. 功能FC与功能块FB
# 2.1 功能和功能块共同点
功能(Function, FC)和功能块(Function Block, FB)都是用户编写的子程序,用于完成特定任务。它们都可以有输入、输出参数,执行完成后将结果返回给调用它的代码块。
工程意义:把重复出现的控制逻辑封装起来,提高程序可读性、可维护性和复用性。
# 2.2 生成功能FC
PPT例子以压力变送器量程换算为FC应用场景:
设压力变送器下限为0 MPa,上限为High MPa,A/D转换后数字量为0~27648,若当前数字值为N,则压力P为:
[
P=\frac{High\cdot N}{27648}
]
| 符号 | 含义 | 单位 | 备注 |
|---|---|---|---|
| (P) | 计算得到的压力 | MPa | FC输出 |
| (High) | 量程上限 | MPa | FC输入参数 |
| (N) | A/D转换数字量 | 无 | FC输入参数,0~27648 |
| 27648 | S7模拟量标准满量程值 | 无 | 对应100%正常量程 |
适用条件:变送器输出与物理量线性对应,模拟量模块正常满量程为0~27648。
工程意义:把原始数字量转换为工程量,便于HMI显示、报警判断和控制运算。
常见变形:
若下限不是0,通用式为:
[
P=P_{min}+\frac{N-N_{min}}{N_{max}-N_{min}}(P_{max}-P_{min})
]
易错点:整数运算时应先乘后除,必要时转为Real。
# 3. FC局部数据
FC界面区中的局部变量只能在该块内部使用,STEP 7 Basic会自动在局部变量名前加#。
| 类型 | 含义 | 数据是否保持 |
|---|---|---|
| Input | 输入参数,由调用块提供 | 不保持 |
| Output | 输出参数,返回执行结果 | 不保持 |
| InOut | 输入/输出参数,调用前传入,执行后返回 | 由实参决定 |
| Temp | 临时数据,保存在局部堆栈 | 执行结束后不保持 |
| Ret_Val | 返回值,属于输出参数 | 根据类型返回 |
Ret_Val默认类型为Void,表示不保存返回值。如果设置为非Void类型,则调用FC时会在方框右侧显示返回值。
# 4. 形参与实参
在FC界面区定义的参数叫形式参数,简称形参;调用FC时实际连接的变量或常数叫实际参数,简称实参。
规则:实参与形参数据类型应一致。
例子:
FC内部形参:#N、#High、#P
OB1调用实参:IW64、10.0、MD20
工程意义:同一个FC可被多处调用,只要传入不同实参即可处理不同对象。
# 5. 块的专有技术保护
STEP 7 Basic可以对FC/FB启用专有技术保护。启用后,其他人打开块时能看到接口变量,但看不到程序区逻辑。
适用场景:保护企业标准功能块、设备厂商专用算法或项目核心工艺逻辑。
注意:保护不能代替备份和版本管理,忘记密码会影响维护。
# 6. 功能块FB
# 6.1 FB特点
FB是有自己存储区的用户子程序。每次调用FB时,都需要指定一个背景数据块。背景数据块随FB调用而打开,调用结束时自动关闭。
FB典型应用:执行不能在一个扫描周期结束的操作,例如电机状态控制、阀门控制、定时器、计数器、PID对象等。
# 6.2 背景数据块
背景DB保存FB的输入、输出和静态变量,FB执行后这些数据不会丢失。
| 数据类型 | 是否存入背景DB | 是否保持到下次调用 |
|---|---|---|
| Input | 是 | 是,可有初值 |
| Output | 是 | 是 |
| InOut | 与实参相关 | 由实参决定 |
| Static | 是 | 是 |
| Temp | 否 | 否 |
工程意义:同一个FB可用不同背景DB控制不同设备。例如同一个“电机FB”分别用Motor1_DB和Motor2_DB控制两台电机。
# 6.3 调用错误处理
如果FB接口发生变化,例如新增输入参数,原来OB1中的FB调用会变红,表示接口不一致。应使用“更新不一致的块调用”功能同步新旧接口。
# 7. FC与FB区别
| 项目 | FC | FB |
|---|---|---|
| 是否有背景DB | 没有 | 有 |
| 是否有静态变量 | 没有 | 有Static |
| 数据保持 | Temp不保持,需用全局DB/M区保持 | Input/Output/Static保存在背景DB |
| 调用时参数 | 应给所有形参指定实参 | 未赋值参数可使用背景DB初值 |
| 可移植性 | 好,但状态保持需外部变量 | 适合对象化封装 |
| 典型用途 | 计算、转换、无状态逻辑 | 电机、阀门、定时计数、对象控制 |
考试重点:有无背景数据块是FC和FB最核心区别。
# 8. FB多重背景数据块
IEC定时器和计数器本质上是功能块,普通调用时每个定时器/计数器都需要一个背景DB。如果数量很多,会产生大量数据块。
多重背景数据块的思路:在一个用户FB中,把IEC_Timer或IEC_Counter定义为Static变量,这样多个定时器/计数器的背景数据被包含在该FB的背景DB中,不必为每个定时器单独生成DB。
优点:
- 减少DB碎片;
- 结构更清晰;
- 减少数据处理开销;
- 方便把设备控制封装成一个对象。
注意:PPT说明STEP 7 Basic库中包含的功能块可用多重背景方式调用,用户创建的功能块有相关限制,实际使用应按软件版本检查。
# 9. 数据类型与间接寻址
# 9.1 数据类型分类
除了基本数据类型和复杂数据类型外,还有:
| 类型 | 含义 |
|---|---|
| 参数类型 | 用于传递给被调用块形参,如Void |
| 系统数据类型 | 系统预定义结构,不能随意更改 |
| 硬件数据类型 | 用于识别硬件元件、事件、中断OB等对象 |
# 9.2 数据类型转换
| 转换方式 | 含义 | 例子 |
|---|---|---|
| 隐式转换 | 指令执行时自动转换 | 小范围整数转大范围整数 |
| 显式转换 | 使用转换指令手动转换 | Int转Real后进行小数计算 |
易错点:不要依赖隐式转换处理所有情况,尤其是模拟量计算、整数除法和有符号/无符号混用。
# 10. 中断事件与中断指令
# 10.1 中断基本思想
正常情况下CPU循环执行OB1。当某个中断事件发生时,CPU在当前指令执行完后暂停原程序,转去执行对应中断OB,执行完后再返回原程序断点继续执行。
工程意义:中断用于快速响应特殊事件,避免等待完整扫描周期。
# 10.2 启动组织块的事件
常见事件包括:
| 事件类型 | 典型OB | 触发条件 | 用途 |
|---|---|---|---|
| 程序循环 | OB1或≥200 | 启动或上一循环结束 | 主程序循环 |
| 启动 | OB100或≥200 | STOP切换RUN | 初始化 |
| 时间延迟 | ≥200 | 延迟时间到 | 延时事件处理 |
| 循环中断 | ≥200 | 固定周期到 | 固定周期采样/控制 |
| 硬件中断 | ≥200 | 硬件事件发生 | 快速响应输入边沿等 |
| 时间错误 | OB80 | 扫描超时等 | 错误处理 |
| 诊断错误 | OB82 | 诊断事件 | 设备诊断处理 |
# 10.3 不会启动OB的事件
有些系统事件只写入诊断缓冲区或状态信息,不一定触发用户OB。复习时重点掌握:不是所有事件都会打断OB1;只有配置了相应中断OB或系统支持的事件才会触发OB。
# 10.4 优先级与中断队列
中断事件有优先级和队列深度。高优先级事件可优先处理;若同类事件短时间大量出现,超过队列深度可能丢失事件或报警。
工程意义:高速、关键事件应合理配置中断优先级,避免过多中断造成扫描不稳定。
# 10.5 常见中断OB
# 程序循环OB
OB1是默认主程序,循环执行。可以有多个程序循环OB,但OB1是最常用入口。
# 启动OB
CPU从STOP到RUN时执行一次,用于初始化变量、复位状态、检查安全条件。
# 循环中断OB
按固定周期执行,适合周期采样、固定周期控制算法、定时记录。
# 硬件中断OB
由输入点上升沿、下降沿或硬件事件触发,适合高速响应、报警、计数辅助等。
# 延时中断OB
通过SRT_DINT等指令设置延迟时间,时间到后触发对应OB。
# 11. 图表索引
| 图表 | 来源位置 | 作用 |
|---|---|---|
| FC生成与调用界面 | 第4章PPT 4.1前半部分 | 理解FC形参、实参和Ret_Val |
| FB界面区与背景数据块图 | 第4章PPT 4.1中部 | 理解FB数据保持 |
| FB多重背景数据块图 | 第4章PPT 4.1后半部分 | 理解定时器/计数器嵌入背景DB |
| 中断事件表 | 第4章PPT 4.3前部 | 掌握OB类型、触发事件、优先级 |
| 硬件中断组态图 | 第4章PPT 4.3中部 | 理解输入边沿触发OB |
| 延时中断指令图 | 第4章PPT 4.3后部 | 理解SRT_DINT触发延时OB |
# 12. 易错点
- FC没有背景数据块,FB有背景数据块。
- Temp变量只在块执行期间有效,不能用于保存跨周期状态。
- FB的Static变量保存在背景DB中,适合保存状态。
- 形参与实参数据类型要一致。
- 修改FB接口后,原调用处必须更新接口。
- 多重背景不是“多个DB”,而是把多个被调用FB的数据嵌入一个背景DB。
- 中断OB不是普通子程序,不能由用户调用指令直接调用。
- 中断过多会影响扫描周期稳定性。
# 13. 考前补充:块调用与中断判断题
# 13.1 OB、FC、FB、DB一句话区分
| 块 | 谁调用 | 是否含程序 | 是否保存状态 | 高频考点 |
|---|---|---|---|---|
| OB | 操作系统调用 | 是 | 取决于访问的数据区 | 用户程序入口、中断入口 |
| FC | 其他代码块调用 | 是 | 无专用背景DB | 适合无状态计算 |
| FB | 其他代码块调用 | 是 | 有背景DB | 适合设备对象、定时计数 |
| DB | 被程序访问 | 否 | 保存数据 | 全局DB与背景DB区别 |
# 13.2 什么时候选FC,什么时候选FB
- 只做一次计算,结果完全由输入决定:优先FC,如模拟量线性换算。
- 需要保存运行状态、故障状态、定时器状态:优先FB,如泵、阀、电机控制。
- 同一逻辑控制多台相同设备:用一个FB,多次调用,每次配不同背景DB。
- 在一个大FB内部调用多个定时器/计数器:可用多重背景,减少独立DB数量。
# 13.3 中断OB的考试口径
中断不是“扫描更快的OB1”,而是由特定事件触发的程序入口。答题时抓住三点:
- 触发源:时间、硬件边沿、诊断、延时等事件。
- 响应方式:CPU暂停当前低优先级任务,执行对应中断OB,结束后返回断点。
- 使用限制:不能滥用,过多中断会增加系统负担,影响扫描周期稳定性。
# 14. 本章预测题与答案
# 题1:FC和FB共同点是什么?
答案:FC和FB都是用户编写的子程序,都用于完成特定任务,都可以通过输入、输出参数与调用块交换数据,执行完成后返回调用它的代码块。
# 题2:FC和FB最核心区别是什么?
答案:FB有背景数据块,能保存输入、输出和静态变量;FC没有背景数据块,执行结束后临时变量不保持。是否有背景数据块是二者最核心区别。
# 题3:Input、Output、InOut、Temp分别是什么意思?
答案:Input是输入参数,由调用块提供;Output是输出参数,返回执行结果;InOut是输入输出参数,调用前传入初值,执行后返回结果;Temp是临时变量,只在块执行期间有效,执行后不保存。
# 题4:什么是形参和实参?
答案:在FC或FB接口中定义的参数称为形参;调用该块时连接到形参上的实际变量、常数或地址称为实参。实参与形参应具有相同或兼容的数据类型。
# 题5:为什么FB适合控制电机、阀门等设备对象?
答案:电机、阀门控制通常需要保存运行状态、故障状态、定时状态等跨扫描周期数据。FB有背景DB和Static变量,能保存这些状态,因此适合设备对象化封装。
# 题6:什么是多重背景数据块?有什么优点?
答案:多重背景数据块是把被调用功能块如IEC定时器、计数器的背景数据作为外层FB背景DB的一部分保存。优点是减少大量独立DB碎片,使程序结构清晰,节省数据处理时间和存储空间。
# 题7:模拟量压力换算公式是什么?
答案:若0~High MPa对应0~27648,数字值为N,则 (P=High\cdot N/27648)。该公式用于把A/D数字量转换为真实压力值。
# 题8:启动OB和程序循环OB有什么区别?
答案:启动OB在CPU从STOP切换到RUN时执行一次,常用于初始化;程序循环OB如OB1在RUN模式下反复循环执行,是主程序入口。
# 题9:硬件中断OB适合什么场合?
答案:硬件中断OB适合对外部硬件事件快速响应,如输入信号上升沿/下降沿、报警信号、定位触发等,避免等待完整扫描周期。
# 题10:隐式转换和显式转换有什么区别?
答案:隐式转换由系统在执行指令时自动完成;显式转换由用户使用转换指令主动完成。对于模拟量计算、整数和浮点混合运算,应优先使用显式转换保证结果正确。

