DYING4EVER

NOTES

第05章_S7-1200用户程序结构

第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. 易错点

  1. FC没有背景数据块,FB有背景数据块。
  2. Temp变量只在块执行期间有效,不能用于保存跨周期状态。
  3. FB的Static变量保存在背景DB中,适合保存状态。
  4. 形参与实参数据类型要一致。
  5. 修改FB接口后,原调用处必须更新接口。
  6. 多重背景不是“多个DB”,而是把多个被调用FB的数据嵌入一个背景DB。
  7. 中断OB不是普通子程序,不能由用户调用指令直接调用。
  8. 中断过多会影响扫描周期稳定性。

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”,而是由特定事件触发的程序入口。答题时抓住三点:

  1. 触发源:时间、硬件边沿、诊断、延时等事件。
  2. 响应方式:CPU暂停当前低优先级任务,执行对应中断OB,结束后返回断点。
  3. 使用限制:不能滥用,过多中断会增加系统负担,影响扫描周期稳定性。

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:隐式转换和显式转换有什么区别?

答案:隐式转换由系统在执行指令时自动完成;显式转换由用户使用转换指令主动完成。对于模拟量计算、整数和浮点混合运算,应优先使用显式转换保证结果正确。