工控智汇

工控智汇

西门子编程里面的各种块(Block)宝宝-OB/FB/FC/DB/SFC科普

admin 29 63

引言

西门子程序采用结构化编程,把程序分成多个模块,各模块完成相应的功能结合起来就能实现一个复杂的控制系统,就像高级语言一样用子程序实现特定的功能,再通过主程序调用各子程序,从而能实现复杂的程序。

结构化编程

STEP7的程序结构l线性程序结构l分块程序结构l结构化程序结构

一、西门子编程里面的块简介

1.编程块概述

变成块汇总

2.程序访问顺序

程序访问

西门子PLCCPU程序访问顺序:主程序OB块、功能块FBFC、数据块DB

二、西门子编程各块应用案例分析

1.OB块案例

组织块代号

1.1组织循环(OB1)块程序循环OB在CPU处于RUN模式时,周期性地循环执行。可在程序循环OB中放置控制程序的指令或调用其它功能块(FC或FB)。主程序(Main)为程序循环OB,要启动程序执行,项目中至少有一个程序循环OB。操作系统每个周期调用该程序循环OB一次,从而启动用户程序的执行。

1.2延时中断(OB20)块

延时中断块

1、调用“SRT_DINT”指令启动延时中断;

2、当到达设定的延时时间,操作系统将启动相应的延时中断OB;

3、图例中,延时中断OB20中断程序循环OB1优先执行;

4、当启动延时中断后,在延时时间到达之前,调用“CAN_DINT”指令可取消已启动的延时中断。

1.3循环中断(OB30)块

循环中断OB在经过一段固定的时间间隔后执行相应的中断OB中的程序。

循环中断块

1、PLC启动后开始计时;

2、当到达固定的时间间隔后,操作系统将启动相应的循环中断OB;

3、图例中,到达固定的时间间隔后,循环中断OB30中断程序循环OB1优先执行。

1.4硬件中断(OB40)块

硬件中断OB在发生相关硬件事件时执行,可以快速的响应并执行硬件中断OB中的程序(例如立即停止某些关键设备)。

硬件中断块

使用硬件中断需要注意什么?

1、一个硬件中断事件只能分配给一个硬件中断OB,而一个硬件中断OB可以分配给多个硬件中断事件;

2、用户程序中最多可使用50个互相独立的硬件中断OB;数字量输入和高速计数器均可触发硬件中断;

3、中断OB和中断事件在硬件组态中定义;在CPU运行时可通过“ATTACH”和“DETACH”指令进行中断事件重新分配;

4、如果“ATTACH”指令的使能端EN为脉冲信号触发,在使用“ATTACH”指令进行中断事件重新分配后;若CPU的操作模式从STOP切换到RUN时执行一次,包括启动模式处于RUN模式时上电和执行STOP到RUN命令切换,则硬件中断OB和硬件中断事件将恢复为在硬件组态中定义的分配关系;

5、如果一个中断事件发生,在该中断OB执行期间,同一个中断事件再次发生,则新发生的中断事件丢失;

6、如果一个中断事件发生,在该中断OB执行期间,又发生多个不同的中断事件中,则新发生的中断事件进入排队,等待第一个中断OB执行完毕后依次执行。

1.5时间错误(OB80)块

当CPU中的程序执行时间超过最大循环时间或者发生时间错误事件(例如,循环中断OB仍在执行前一次调用时,该循环中断OB的启动事件再次发生)时,将触发时间错误中断优先执行OB80。由于OB80的优先级最高,它将中断所有正常循环程序或其它所有OB事件的执行而优先执行。

时间错误块

1.6诊断错误(OB82)

可以为具有诊断功能的模块启用诊断错误中断功能来检测模块状态。

诊断错误块

触发诊断错误中断时,CPU如何响应?

1、启用诊断错误中断且CPU中创建了OB82;

2、OB82是唯一支持诊断错误事件的OB;一次只能报告一个通道的诊断错误;

3、如果多通道设备的两个通道出现错误,则第二个错误只会在以下情况触发OB82:第一个通道错误已清除,由第一个错误触发的OB82已执行完毕,并且第二个错误仍然存在;

4、事件的进入或离开都会触发一次OB82;

5、触发OB82,CPU不会进入STOP模式。

2.FB块案例

【FB块】有时候也叫函数块是一种代码块,它将输入、输出和输入/输出参数永久地存储在背景数据块中,从而在执行块之后,这些值依然有效、。所以函数块也称为“有存储器”的块。函数块也可以使用临时变量。临时变量并不存储在背景数据块中,而用于一个循环。

单背景数据块

3.FC块案例

【FC块】函数可以使用全局数据块(数据块用于存储用户数据。数据块分为可由所有代码块访问的全局数据块,以及分配给特定功能块调用的背景数据块。)永久性存储数据。

功能块参数传递

4.DB块案例

【DB块】数据块用于存储程序数据。因此,数据块包含由用户程序使用的变量数据。全局数据块存储所有其它块都可使用的数据。数据块的最大大小因CPU的不同而各异。可以以自己喜欢的方式定义全局数据块的结构。还可以选择使用PLC数据类型(UDT)作为创建全局数据块的模板。

DB数据块

5.SFCSFB块案例

【SFB】系统功能块是集成在S7CPU中的功能块。SFB是操作系统的一部分,不作为程序的一部分而被加载。同FB一样,SFB也是“具有内存”的块。必须给SFB创建实例数据块,然后将它们作为程序的一部分下载到CPU中。

S7CPU给SFB提供下列功能:

•通过已组态的连接进行通讯

•集成的特殊功能SFB29"HS_COUNT"

【SFC】作系统,不能作为程序的一部分而被加载。同FC一样,SFC也是“具有内存”的

块。

S7CPU给SFC提供下列功能:

•复制功能和块功能•检查程序•处理时钟和运行仪表•传送数据集•在多值计算模式中将事件从一个CPU传送到其它CPU中

•处理日历和延时中断•处理同步错误、中断和异步错误•关于静态和动态系统数据的信息,例如,诊断

•过程映像更新以及位域处理•寻址模块•分布式I/O•全局数据通讯

•通过未组态的连接进行通讯

三、结构化(模块化)编程

结构化编程

结构化编程:处理复杂自动化控制任务的过程,为了是任务易于控制,常把过程要求类似或者相关的功能进行分类,分割为用于几个任务的通用解决的小任务,这些小任务以相似的程序段表示即块,结构化编程的特点每个块都可以被多次调用。

四、总结

个人觉得西门子编程主程序写在OB块里面,子程序写在功能块FC/FB里面,DB作为数据块,可用于静态数据存储,SFC块是CPU集成的功能块相当于子程序!程序编写主要靠积累平时多积累有效的程序模块或者样例。

声明:本作品纯属个人娱乐学习交流,严禁使用其作为商业用途,图片均来至于西门子仿真软件及选型手册、网络,如有版权纠纷请及时告知,谢谢!