西门子 PLC中OB、FC、FB、SFC、SFB中功能块
SIEMENS S7300-400程序块的类型和区别
SIEMENS S7-300/400程序块的类型及区别(总结)来源:作者:时间:2007-11-01 点击:85在SIEMENS S7-300/400系列PLC中有多种程序块,如下图(在管理器右边的空白区域点击右键),主要有:组织块(OB),功能块(FB),功能(FC),数据块(DB)及系统功能(SFC)和系统功能块(SFB)等。
注:快捷菜单中的其它两项:数据类型和变量表。
数据类型(UDT)用于指定程序中数据元素的大小与格式;变量表(VAT)用来在程序调试和运行时修改和监视变量的内容(在地址栏中输入地址后,符号栏中会自动显示在符号表中定义的符号)。
这几种程序块的功能简要说明如下:说明:调用程序块:OB,FB,FC(可以调用除OB块外的其它程序块);被调用程序块:FB,FC,SFB,SFC。
1、组织块OBOB由系统自动调用,并执行用户在OB块中编写的程序,所以OB的基本作用是调用用户程序。
在OB块中编写程序的最大容量,S7-300是16KB,S7-400是64KB。
除主程序循环OB1外,其它OB均是由事件触发的中断。
2、函数FC函数FC有两个作用:(1)作为子程序用;(2)作为函数用,函数中通常带形参。
函数中程序的最大容量,S7-300是16KB,S7-400是64KB。
FC的形参通常也称为接口区,参数类型分为输入参数,输出参数,输入/输出参数和临时数据区。
在编写函数FC的输出参数时,应避免没有直接输出(否则,可能输出一个随机值,影响程序的判断)。
可以在函数的开始,将字输出参数清0,位输出参数复位。
3、函数块FBFB与FC相比,FB每次调用都必须分配一个背景数据块,用来存储接口数据区(TEMP类型除外)和运算的中间数据。
其它程序可以直接使用背景数据区中的数据。
FB中程序的最大容量,S7-300是16KB,S7-400是64KB。
FB的接口区比FC多了一个静态数据区(STAT),用来存储中间变量。
程序调用FB时,形参不像FC那样必须赋值,可以通过背景数据块直接赋值。
step7内通讯块FB-FC以及各种系统通讯块SFB-SFC都是在什么场合使用-
step7内通讯块FB/FC以及各种系统通讯块SFB/SFC都是在什么场合使用?
最近在学习西门子的通讯,但是越学越晕了,有好多通讯用的SFC和SFB,这些已经有好多已经明白是怎么用了,但是又发现有很多FB/FC,FB/FC和SFB/SFC实现的功能貌似是相同的,但是具体的区别和使用场合自己还是搞不懂。
SFC用在非组态连接的场合,通讯较少量数据,SFB用于400内组态通信连接的场合,适合数据量较大的通信。
但是两者应用的网络以及连接方式还是不太清楚。
最佳答案
1、但是又发现有很多FB/FC,FB/FC和SFB/SFC实现的功能貌似是相同的?
是的。
他们的功能是相同的,其实就是同一个程序。
2、但是具体的区别和使用场合自己还是搞不懂?
详见:
下载:
/download/Upload/AS/manual/1 023.pdf。
西门子 PLC 中各个组织块OB作用
1、自由循环组织块OB1S7 CPU启动完成后,操作系统循环执行OB1,OB1执行完成后,操作系统再次启动OB1。
在OB1中可以调用FB、SFB、FC、SFC等用户程序使其循环执行。
除OB90以外,OB1优先级最低,可以被其他OB中断。
OB1默认扫描监控时间为150ms(可设置),扫描超时,CPU自动调用)B80报错,如果程序中没有建立OB80,CPU进入停止模式。
2、日期中断组织块OB10~OB17在CPU属性中,可以设置日期中断组织块OB10~OB17触发的日期、执行模式(到达设定的触发日期后,OB只执行一次或按每分、每小时、每周、每月周期执行)等参数,当CPU的日期值大于设定的日期值时,触发相应的OB并按设定的模式执行。
在用户程序中也可以通过调用SFC28系统函数设定CPU日期中断的参数,调用SFC30激活日期中断投入运行,与在CPU属性中的设置相比,通过用户程序,可以在CPU运行时灵活地修改设定的参数,两种方式可以任意选择,也可以同时对一个OB进行设置。
3、时间延迟中断组织块OB20~OB23时间延迟中断组织块OB20~OB23的优先级及更新过程映像区的参数需要在CPU属性中设置,通过调用系统函数SFC32触发执行,OB号及延迟时间在SFC32参数中设定,延迟时间为1~60000ms,大大优于定时器精度。
4、循环中断组织块OB30~OB38循环中断组织块OB30~OB38按设定的时间间隔循环执行,循环中断的间隔时间在CPU属性中设定,每一个OB默认的时间间隔不同,例如)B35默认的时间间隔为100ms,在OB35中的用程序将每隔100ms 调用一次,时间间隔可以自由设定,最小时间间隔不能小于55ms。
OB中的用户程序执行时间必须小于设定的时间间隔,如果间隔时间较短,由于循环中断OB没有完成程序扫描而被再次调用,从而造成CPU故障,触发OB80报错,如果程序中没有创建OB80,CPU进入停止模式。
西门子PLC S7OB组织块功能一览表
组织块一览表
OB编号
启动事件
默认优先级
说明
OB1
启动或上一次循环结束时执行OB1
1
主程序循环
OB10~OB17
日期时间中断0~7
2
在设置的日期时间启动
OB20~OB23
时间延时中断0~3
3~6
延时后启动
OB30~OB38
循环中断0~8时间间隔分别为5s,2s,1s
7~15
以设定的时间为
同步循环中断1~4
25
同步循环中断
OB70
I/O冗余错误
25
冗余故障中断
OB72
CPU冗余错误,例如一个CPU发生故障
28
只用于H系列的CPU
OB73
通行冗余错误中断,例如冗余连接的冗余丢失
25
OB80
时间错误
26启动为28
OB81
电ቤተ መጻሕፍቲ ባይዱ故障
27启动为28
OB82
诊断中断
28启动为28
OB83
插入/拔出模块中断
27
启动
OB102
冷启动
27
OB121
编程错误
与引起中断的
同步错误中断
OB122
I/O访问错误
OB相同
500ms,200ms,100ms,50ms,20ms,10ms
周期运行
OB40~OB47
硬件中断0~7
16~23
检测外部中断请求时启动
OB55
状态中断
2
DPV1中断(profibus-dp)
OB56
刷新中断
2
OB57
制造厂特殊中断
2
西门子PLC讲义 2-2 功能和功能块 FCFBs
定义FC 20形式参数
定义
in out In_out
形式参数
使用方法
只能读 只能写 可读/可写
图形显示
在块的左侧 在块的右侧 在块的左侧
编辑可以分配参数的块
调用可以分配参数的块
练习: 编辑可以分配参数的FC块
练习: 调用可以分配参数的FC块
第一次调用FC20时 的参数分配
2. 创建一个新的背景数据块 在 SIMATIC Manager
练习: 编辑功能块
练习: 调用功能块并测试
之前
之后
之后插入/删除块的参数
Adding a parameter
Save
检查块的一致性
调用被修改过的块时应做的更正
单击鼠标右键
比较: 功能和功能块
特性 静态变量 变量的初始值 需要背景数据块 当被调用时必须使用所有的实际参数
FBD
FC1 CALL
FC1
EN
ENO
FC2
EN
Par3
Par1
Par2 ENO
DB2
FB1
EN
ENO
DB3
FB2
EN
Par3
Par1 Par2
ENO
FC 2
FC 3
?? . ? EN ENO
EN ENO
EN ENO
=
总结: 块的调用
语言
STL
LAD
无参数
• UC FC1 • CC FC1 • CALL FC1
FC1
( CALL )
FC1
EN
ENO
FC
有参数
• CALL FC2 Par1: ... Par2: ... Par3: ...
西门子编程里面的各种块(Block)宝宝-OBFBFCDBSFC科普
西门子编程里面的各种块(Block)宝宝-OBFBFCDBSFC科普引言西门子程序采用结构化编程,把程序分成多个模块,各模块完成相应的功能结合起来就能实现一个复杂的控制系统,就像高级语言一样用子程序实现特定的功能,再通过主程序调用各子程序,从而能实现复杂的程序。
结构化编程STEP7的程序结构 l 线性程序结构 l 分块程序结构 l 结构化程序结构一、西门子编程里面的块简介1.编程块概述变成块汇总2.程序访问顺序程序访问西门子PLC CPU 程序访问顺序:主程序OB块、功能块FB&FC、数据块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硬件中断(OB 40)块硬件中断OB 在发生相关硬件事件时执行,可以快速的响应并执行硬件中断 OB 中的程序(例如立即停止某些关键设备)。
西门子OB,FB,FC模块
OB、FC、FB、SFC、SFB的区别
S7-300/400PLC程序采用结构化程序,把程序分成多个模块,各模块完成相应的功能。
结合起来就能实现一个复杂的控制系统。
就像高级语言一样,用子程序实现特定的功能,再通过主程序调用各子程序,从而能实现复杂的程序。
在S7-300/400PLC中写在OB1模块里和程序就是主程序,子程序写在功能(FC),功能块(FB)。
FC运行是产生临时变量执行结束后数据就丢失--------------不具有储存功能
FB运行时需要调用各种参数,于是就产生了背景数据块DB。
例如用FB41来作PID控制,则它的PID控制参数就要存在DB里面。
FB具有储存功能
系统功能块(SFB)和系统功能(SFC)也是相当于子程序,只不过SFB和SFC是集成在S7 CPU中的功能块,用户能直接调用不需自已写程序。
SFC与FC 不具有储存功能,FB和SFB具有储存工办。
OB模块相当于主程序,负责调用其他模块。
如果程序简单只需要OB就可以实现。
FB中可以定义静态变量,每个FB可以定义多个背景数据块,来代表同种类型的不同设备。
这样只通过一个功能块就可以完成多个设备的变程。
而FC中不可以定义背景数据块,一般情况下只能使用共享数据块中的数据,但同时也可以通过全局变量定义方式来访问其他背景数据块。
我个人的经验:在有多个类似的设备的时候,尽量抽象出这些设备的共同点,编写一个FB,然后通过FC来挂点或处理一些不同点。
西门子PLC中各个组织块OB作用
西门子PLC中各个组织块OB作用1.OB1:OB1是西门子PLC中最重要的一个组织块,也是原始程序的入口点。
OB1在PLC加电后首先执行,并决定其他OB组织块的执行顺序。
它包含了初始化程序、故障处理、中断处理等主要功能,它对整个控制过程起着关键性作用。
2.OB2:OB2是一个错误组织块,用于处理运行时的错误和异常。
在PLC运行过程中,如果发生错误,比如传感器故障、通信异常等,OB2将负责处理和记录这些错误。
它可以通过警报或报警灯等方式告知操作员错误的发生。
3.OB3:OB3是一个系统状态组织块,用于监控PLC系统运行状态。
它可以检测并记录PLC中的各种状态信息,比如CPU利用率、内存使用情况、网络通信状态等。
OB3可以帮助工程师了解系统的运行情况并进行优化。
4.OB10:OB10是一个周期性组织块,用于周期性地执行程序中的周期任务。
它可以通过设置时间周期和触发条件来执行周期性操作,比如定期更新数据、定时刷新显示等。
OB10可以根据实际需求进行灵活配置,以确保程序的正常运行。
5.OB20:OB20是一个中断组织块,用于处理外部中断事件。
当PLC接收到外部中断信号时,OB20将被触发,执行相应的任务。
这些中断事件可以是硬件设备的故障信号、紧急停机信号等。
OB20可以确保及时处理这些中断事件,并采取相应的措施。
6.OB40:OB40是一个硬件故障组织块,用于监测和处理与硬件设备相关的故障。
当硬件设备发生故障时,OB40将负责处理该故障,比如停止相应的操作、记录故障信息等。
OB40可以保护设备免受损坏,并防止故障进一步扩大。
7.OB80:OB80是一个厂商特定组织块,用于定制特殊功能和特定的控制逻辑。
它可以根据用户的需要进行编程,添加一些定制化的功能,比如与外部设备的通信、数据处理等。
OB80可以根据不同的应用场景进行灵活配置和调整。
除了以上介绍的几个典型的OB组织块外,西门子PLC还提供了其他一些特殊的组织块,如OB5、OB100等,它们各自具有不同的功能和作用。
S7PLC的功能和功能块
4. 结构化程序
所谓结构化程序,就是处理复杂自动化控制任务的过程 中,为了使任务更易于控制,常把过程要求类似或相关的功 能进行分类,分割为可用于几个任务的通用解决方案的小任 务,这些小任务以相应的程序段表示,称为块(FC或FB)。 OB1通过调用这些程序块来完成整个自动化控制任 务。
结构化程序的特点是每个块(FC或FB)在OB1中可能会 被多次调用,以完成具有相同过程工艺要求的不同控制对象。 这种结构可简化程序设计过程、减小代码长度、提高 编程效率,比较适合于较复杂自动化控制任务的设计。
例:正反转编程实例
(二)编辑并调用有参功能(FC)——结构化程序设计
所谓有参功能(FC),是指编辑功能(FC)时,在局部 变量声明表内定义了形式参数,在功能(FC)中使用了虚拟 的符号地址完成控制程序的编程,以便在其他块中能重复调 用有参功能(FC)。这种方式一般应用于结构化程序编写。
例:电机顺序启动编程实例
三、功能(FC)
(一)编辑并调用无参功能(FC)——模块化程序设计
所谓无参功能(FC),是指在编辑功能(FC)时,在局 部变量声明表不进行形式参数的定义,在功能(FC)中直接 使用绝对地址完成控制程序的编程。这种方式一般应用于分 部式结构的程序编写,每个功能(FC)实现整个控制任务的 一部分,不重复调用。
二、功能(FC)和功能块(FB)说明
功能块(FB)有一个数据结构与该功能块的参数完全相 同的数据块,称为背景数据块,背景数据块依附于功能块, 它随着功能块的调用而打开,随着功能块的结束而关闭。 存放在背景数据块中的数据在功能块结束时继续保持。而 功能(FC)则不需要背景数据块,功能调用结束后数据不 能保持。
3.编写控制程序
编写逻辑块(FC和FB)程序时,可以用以下两种方式使 用局部变量:
西门子PLC中FB和FC区别、管脚定义、临时变量引起的麻烦
西门子PLC中FB和FC区别、管脚定义、临时变量引起的麻烦FB和FC区别FB--功能块,带背景数据块 FC--功能,相当于函数FB,FC块均相当于子程序,既可以调用其它FB,FC块,也可以被OB,FB,FC块调用。
他们之间的主要区别是:1. FB使用背景数据块作为存储区,FC没有独立的存储区,使用全局DB或M区2. FB局部变量有STAT和TEMP,FC由于没有自己的存储区因此不具有STAT,TEMP本身不能设置初始值。
本质上,FB,FC的实现目的是相同的;无论何种逻辑要求,FB,FC均可实现。
只是实现方式效率不同,这也和工程师个人编程习惯有关。
FB块优点:1. 易于移植性,对于相同控制逻辑不同参数的被控对象,只要使用不同的背景DB,同一个FB块就可以方便2. 多重背景,减少重复工作,提高效率3. 多次调用时,参数修改方便4. 有独立的存储区FC块优点:1. 小巧灵活,对于非多次调用的程序更易理解2. 不占用额外的存储资源FB,FC块管脚定义IN---------变量是外部输入的,只能被本程序块读,不能被本程序块写;OUT-------是本程序块输出的,他可以被本程序块读写,其他程序通过引脚只能读值不能写;IN_OUT--- 输入输出变量本程序块和其他程序都可以读写这个引脚的值。
TEMP -----临时变量,顾名思义是暂时存储数据的变量。
这些临时的数据存储在CPU工作存储区的局部数据堆栈(L堆栈)中。
STAT-------在PLC运行期间始终被存储。
S7 将静态变量定义在背景数据块(仅对FB而言,FC和OB无静态变量),当被调用块运行时,能读出或修改静态变量;被调用块结束后,静态变量保留在数据块中。
为何定义的FB,FC块,多次调用后程序混乱?对于,多次调用的程序块,FB块建议更换调用不同的背景DB;FC则需要确保使用的存储地址不重复,即每次调用,块中调用的地址不重复。
为何含有定时器或计数器的FB或FC单次调用ok,多次调用时定时器或计数器混乱?对于多次调用的FB,FC,如为S7定时器,计数器,则需要在IN 接口中定义TIMER或Counter,每调用一次FB或FC,均赋不同的定时器或计数器号。
西门子PLC中OB块的作用
OB1(Free Cycle)顺序扫描OB10~OB17(Time-Of-Day Interrupt)时间-日期中断OB20~OB23(Time-Delay Interrupt)时间延迟中断OB30~OB38(Cyclic Interrupt)周期性中断OB40~OB47(Hardware Interrupt)硬件中断OB55(Status Interrupt)状态中断OB56(Update Interrupt)升级中断OB57 (Manufacturer Interrupt)厂商专用中断OB61~OB64(Synchronous Cycle Interrupt)异步周期中断OB70(I/O Redundancy Error)I/O冗余错误OB72(CPU Redundancy Error)CPU冗余错误OB73(Communication Error)通信错误OB80(Time Error)时间错误OB81(Power Supply Error)电源错误OB82 (Diagnostic Interrupt)诊断中断OB83(Insert/Remove Interrupt)插/拔中断OB84(CPU Hardware Fault)CPU硬件错误OB85(Priority Class Error)优先级错误OB86(Rack Failure)机架错误OB87(Communication Error)通信错误OB88 (Processing Interrupt)过程错误OB90(Background OB)背景OBOB100(Warm Restart)暖启动OB101(Hot Restart)热启动OB102(Cold Restart冷启动OB121(Programming Error)编程错误OB122(I/O Access Error)I/O存储错误注:OB55,OB56,OB57,OB61,OB62,OB63,OB64,OB81,OB84,OB87,OB88,OB90是NOP(空操作)用户不需要用户不需要修改调用空操作的程序。
什么是PLC的FB,FC,DB,OB,这些块是什么意思?怎么用?
什么是PLC的FB,FC,DB,OB,这些块是什么意思?怎么⽤?朋友们好,我是电⼦及⼯控技术,我来回答这个问题。
很多不管是学习西门⼦PLC的还是学习施耐德或者是三菱的PLC,在PLC的编程软件中我们会常常遇见到“FB”、“FC”、“DB”、“OB”这样的程序块,以⾄于使初学PLC编程的朋友常常对此很容易产⽣混淆,甚⾄⽤错。
今天利⽤闲暇时间给朋友们梳理⼀下这些程序块到底是是代表什么意思,我们⼜该如何去⽤它们。
学过PLC的朋友都知道,在对软件编写程序的时候我们常常⽤三种编程⽅法,⼀种是结构化编程,另⼀种是线性化编写程序,还有⼀种是模块化的程序编写。
特别是在模块化编程和结构化编程中就会常常⽤到上述⽤户块的功能。
⾸先我们先解答⼀下什么是“块”。
“块”的诞⽣和功能1、“块”的功能在PLC程序中有两种程序,⼀种是⼚家在⽣产PLC时把它固化在PLC内部CPU中的系统程序,还有⼀种就是我们需要⾃⼰编写且能够随意“擦写”和下载的⽤户程序。
我们在编写PLC程序时,为了使我们的程序条理清晰和便于管理维护和阅读,软件制作者给我们规制制作了不同功能的块,我们在编写程序时就把不同功能的程序写在不同的程序块中,当PLC运⾏时,它的CPU就会按照程序需要运⾏的条件去命令相应的“块”来完成特定的控制任务,这就是块的功能。
“FC”函数的意义及使⽤在PLC编程软件中的'FC'是指函数的意思,它是⽤户⾃⼰编写的程序块。
在函数(FC)中是没有数据存储器的,它是可以通过调⽤使⽤,在调⽤时要给它的形式参数送⼀个具体的数值才可以⽤。
另外在这个“FC”函数⾥⾯是有局部变量表和块参数的,⽐如这些变量可以是有输⼊、输出和输⼊/输出和临时变量等。
它有点类似⼀个⼦程序,可以在主程序中调⽤。
举个PLC启停控制的简单例⼦,我们可以在主函数中建⽴⼀个⼦函数“FC”命名为“启停控制FC1”,建⽴好函数后给启动按钮与停⽌按钮以及输出继电器关联⼀个具体的实际参数就可以了。
PLC功能FC与功能块FB的本质区别
FB块与FC块的区别
首先创建一个电机启停的FC块,输入INPUT定义如下
输出OUTPUT定义如下
FC程序如下,
如果创建一个FB块,跟FC的程序和输入输出定义都一样,这时我们看到二者都是一样的功能,确实只是有无背景数据块的差别,但如果我需要知道更详的一些处理过程数据,比如:
要知道过载是什么时候发生的,或者电机是什么时候启动的等,这时FB块就派上用场了。
如下程序
1,创建一个电机启停FB块
2,编写FB块程序接口定义如下
3,FB块程序在FC的程序上增加如下程序
4,在OB1组织块中调用FB1电机启停块,DB1自动生成为背影数据块
5,在背景数据块DB1中,我们就能看到电机过载发生时的时间和电机运行时的时间
6,总结
当然,在FC块中通过编程,重新增加接口定义,也能实现,但这不是它的的初衷。
这里只是一个简单的电机启停的功能块,如果要是复杂的功能块,我要求知道功能里面更多的过程数据,更多的细节,用FC块编写程序时就会非常麻烦甚至很难,因为这不是FC的作用。
而在FB块只需在接口STATIC里面增加定义就能方便实现。
这就是FB块天生自带个背景数据块的作用。
故FC与FB块的区别就是前者只需要知道结果,而后者不公需要有结果还能方便处理功能里面的过程数据。
这就是二者的区别
如果我们的实现的功能非常简单,不需要知道功能里面的细节,只需要结果。
其实还是建议创建FC 块就够了,毕竟FB块需要增加个背景数据块,还是会占用PLC内存的。
PLC初学者不知道什么是FC、FB、OB、DB块,一定要明白
PLC初学者不知道什么是FC、FB、OB、DB块,⼀定要明⽩
最近经常有初学西门⼦PLC编程的朋友,对于FC、FB、OB、DB块特别迷茫,⼀开始的时候可
能很多⼈都会遇到类似的问题
⼀. 组织块,组织块是操作系统和⽤户程序之间的接⼝。
OB ⽤于执⾏具体的程序,我们最常⽤
的就是OB1,所有的FB和FC块都需要直接或者间接的接受调⽤,才能执⾏,如下图是创建组织
块,每个不同组织块是不同的功能
1、在 CPU 启动时;
2、在⼀个循环或延时时间到达时;
3、当发⽣硬件中断时;
4、当发⽣故障时;
5、组织块根据其优先级执⾏。
初学者先知道OB1的功能如何使⽤,如下图所⽰,所有的FB或者FC做成的⼦程序都需要间接或者直接的接受调⽤。
⼆. FC函数和FB函数块的区别在哪⾥呢,⾸先FB块有⾃⼰的背景数据块,就是专有的存储区,我们什么时候选择建⽴FB块呢,根据我⾃⼰以往的经验来说,就是需要重复使⽤的标准功能,例如⼀个项⽬⾥⾯有50个⽓缸需要控制30个电机需要控制,在这种情况下,我们就可以选择做两个电机和⽓缸的标准FB块,其余的都可以⽤FC。
三. FB块优点:1. 易于移植性,对于相同控制逻辑不同参数的被控对象,只要使⽤不同的背景DB,同⼀个FB块就可以⽅便
2. 多重背景,减少重复⼯作,提⾼效率
3. 多次调⽤时,参数修改⽅便
4. 有独⽴的存储区
四. FC块优点:1. ⼩巧灵活,对于⾮多次调⽤的程序更易理解
2. 不占⽤额外的存储资源
五. 数据块DB:数据块分为全局数据块和背景数据块,背景数据块即前⾯提到的FB块的专⽤存
储空间,如下图是建⽴的背景数据块
便调⽤
说明能够帮助到⼤家,感谢!。
西门子PLC中如何使用FB、FC
西门子PLC中如何使用FB、FCFC,功能。
因为是一个功能,如果这个功能在多处都能用到,那么这段FC就具有通用性。
我们在程序的其他地方就可以调用,简化代码,这个是FC的模块式的作用。
当然,FC也可以作为我们被调用的一个子程序,用OB1去调用他,以实现结构化编程。
因此,得出结论,FC可以干两个事:第一,实现功能化编程。
比如,我们有大车,小车,起升3个结构。
我们就可以定义3个FC,跟这3个机构一一对应,然后用OB1依次调用。
为什么这样做,为什么不都放在OB1里。
你也可以放OB1里,对段数比较少,很简单的项目就把代码都放在OB1里。
如果功能,机构多了,最好还是分开来,这样有利于程序的可读可调,更符合规范。
否则一个小故障都会导致你把OB1翻个遍,会很麻烦的。
找准故障机构,在相应的FC里再去找会少看很多代码。
这个道理比较简单。
第二个事,就是我上面说的模块化编程,我的描述不是很准确,因为是自己的总结。
这个意思就是我们平常讨论说的,把所有功能都写到一个块里,然后去调用整个块。
FC可以干这个事(当然,FB也可以干,区别后面说),新建好FC,确定好输入,输出接口,然后编写逻辑,一个FC就搞定了。
大家可以写一些简单的功能,来感受下FC。
写好FC之后,在主程序OB1或者其他FC里就可以调用该块,程序界面右边“FC BLOCK”里就有该块,相信做到这里的话大家都应该知道怎么做了。
我这里要说明其他问题。
关于FC的编写,这里就不得不说一些概念性的东西,FC是不带背景数据块的,就这句话。
因为FC是不带背景数据块,所以我们在调用FC时,关于FC这些逻辑的计算完全靠的是我们输入输出接口上的这些地址位,给FC提供数据来源。
我们在编写FC的时候,需要注意的是,如果需要中间变量,考虑使用temp,临时变量满足需要。
但是使用临时变量需要注意的是,在一个周期没有完成扫描时,A段程序调用FC1,使用了临时变量X,改变了其值。
那么B段程序再次调用FC1时,X的值已经被改变了。
什么是PLC的FB,FC,DB,OB,这些块是什么意思?怎么用?
什么是PLC的FB,FC,DB,OB,这些块是什么意思?怎么⽤?⾸先你说的这些是在西门⼦的PLC编程软件中才有的程序块,⽽在其他⼚牌的PLC中也有相似功能的程序块但是就不是叫这些名字了!--⽐如STEP7软件和博图软件中就有这些,且这些程序块的规划也是西门⼦300/400/1200/1500系列的PLC中才有的。
像西门⼦200系列的PLC中就没有这样的程序块规划了,虽然200系列的PLC中也有主程序,⼦程序和数据块等说法,但是和你提问的这些数据块有很⼤的差别!⾄于这些块是什么含义,最好是来看⼀下STEP7帮助⽂件中的解释,如下图:这个图⽚是来⾃STEP7的帮助⽂件中,从这个图⽚可以看到OB块就叫做组织块,FB叫功能块,FC叫功能,DB是数据块(但是DB其实可以分为共享数据块和背景数据块)。
这个图上还可以看到有SFB和SFC这些是系统提供的预定义过的功能块和功能!我来简要的说⼀下这些块通常怎么使⽤,因为像组织块OB就有很类型,即很多个OB块的,每个块的作⽤不同,⽤法也就不同,所以这⾥只简要说⼀点常规的。
OB组织块中最普通常⽤的就是OB1它就像西门⼦200PLC中的主程序⼀样,根据扫描周期⼀遍⼜⼀遍的⾃动执⾏OB1中的程序,所有的其他的FB、FC等的⼦程序都需要在OB1中被调⽤,它们中的程序才能被执⾏,因为只有OB1才是⼀个⾃动循环执⾏的主程序,CPU上电后这个OB1块就不断的⾃动执⾏。
⽽像OB35是⼀个100ms的根据时间来⾃动执⾏的循环中断OB组织块,OB40是⼀个硬件中断组织块,这⾥中断的意思主要就是中断OB1的程序循环,先执⾏中断,中断执⾏后再继续执⾏OB1中的程序。
FB功能块,就是可以创建你想创建的⼦程序,但是FB块的在调⽤的时候必须配合DB块来使⽤。
FC功能,它和FB块的作⽤⼀样,都是⽤来创建⼦程序的时候使⽤,但是FC就不需要配合DB块使⽤。
FB和FC块中写好⼦程序后,必须在OB1中被调⽤,它们块中的程序才能被执⾏。
SFC,SFB,FC,FB功能
SFC的公共参数使用输出参数RET_VAL判断错误异步SFC的REQ、RET_VAL和BUSY参数含义复制功能和块功能使用SFC 20"BLKMOV"复制变量使用SFC 81"UBLKMOV"不中断地复制变量使用SFC 21"FILL"初始化存储区使用SFC 22"CREAT_DB"创建数据块使用SFC 23"DEL_DB"删除数据块使用SFC 24"TEST_DB"测试数据块使用SFC 25"PRESS"压缩用户存储器使用SFC 44"REPL_VAL"将替换值传送到累加器1中使用SFC 82"CREA_DBL"在装载存储器中创建一个数据块使用SFC 83"READ_DBL"从装载存储器中读取一个数据块使用SFC 84"WRIT_DBL"在装载存储器中写入一个数据块使用SFC 85"CREA_DB"创建数据块用于控制程序执行的SFC使用SFC 43"RE_TRIGR"重新触发循环时间监视使用SFC 46"STP"将CPU切换到STOP使用SFC 47"WAIT"延迟执行用户程序使用SFC 35"MP_ALM"触发一个多值计算中断使用SFC 104 "CiR"控制CiR使用SFC 109 "PROTECT"激活和取消激活CPU访问保护用于处理系统时钟的SFC使用SFC 0"SET_CLK"设置时间使用SFC 101"RTM"处理系统时钟使用SFC 1"READ_CLK"读取时间使用SFC 48"SNC_RTCB"同步TOD从站使用SFC 100 "SET_CLKS"设置日时钟和TOD状态用于处理运行系统计时器的SFC运行系统计时器使用SFC 2"SET_RTM"设置运行系统计时器使用SFC 3"CTRL_RTM"启动和停止运行系统计时器使用SFC 4"READ_RTM"读取运行系统计时器使用SFC 64"TIME_TCK"读取系统时间用于传送数据记录的SFC读写数据记录使用SFC 54 "RD_DPARM"读取定义的参数用SFC 102 "RD_DPARA"读取预定义参数使用SFC 55"WR_PARM"写动态参数使用SFC 56 "WR_DPARM"写默认参数使用SFC 57"PARM_MOD"将参数分配给模块使用SFC 58 "WR_REC"写数据记录使用SFC 59 "RD_REC"读数据记录使用SFC 55至59"RD_REC"读取数据记录使用SFB 81"RD_DPAR"读取预定义的参数" DPV1-SFB到PNO AK 1131用SFB 52 "RDREC"读取数据记录使用SFB 53"WRREC"写入数据记录用SFB 54 "RALRM"接收中断用SFB 75 "SALRM"向DP主站发送中断用SFB 73 "RCVREC"接收数据记录用SFB 74 "PRVREC"提供数据记录用于处理时间中断的SFC处理时间中断SFC 28到31的特征使用SFC 28 "SET_TINT"设置时间中断使用SFC 29 "CAN_TINT"取消时间中断使用SFC 30 "ACT_TINT"激活时间中断使用SFC 31 "QRY_TINT"查询时间中断用于处理延时中断的SFC处理延时中断使用SFC 32 "SRT_DINT"启动延时中断使用SFC 34 "QRY_DINT"查询延时中断使用SFC 33 "CAN_DINT"取消延时中断用于处理同步错误的SFC屏蔽同步错误使用SFC 36 "MSK_FLT"屏蔽同步错误使用SFC 37 "DMSK_FLT"取消屏蔽同步错误使用SFC 38 "READ_ERR"读取错误寄存器用于处理中断和异步错误的SFC延迟和禁用中断和异步错误使用SFC 39 "DIS_IRT"禁用新中断和异步错误的处理使用SFC 40 "EN_IRT"启用新中断和异步错误的处理使用SFC 41 "DIS_AIRT"延迟更高优先级中断和异步错误的处理使用SFC 42 "EN_AIRT"启用更高优先级中断和异步错误的处理用于诊断的SFC系统诊断使用SFC 6 "RD_SINFO"读取OB启动信息使用SFC 51 "RDSYSST"读取系统状态列表或部分列表使用SFC 52 "WR_USMSG"将用户自定义诊断事件写入诊断缓冲区使用SFC 78"OB_RT"确定OB程序循环时间使用SFC 87"C_DIAG"确定当前的连接状态使用SFC 103"DP_TOPOL"确定DP主站系统中的总线拓扑用于更新过程映像和处理位域的SFC和SFB使用SFC 26 "UPDAT_PI"更新过程映像输入表使用SFC 27 "UPDAT_PO"更新过程映像输出表使用SFC 126"SYNC_PI"识别一个同步周期的过程映像分区输入表使用SFC 127"SYNC_PO"识别一个同步周期的过程映像分区输出表使用SFC 79"SET"设置输出围使用SFC 80"RSET"复位输出围使用SFB 32 "DRUM"实现操作序列用于寻址模块的系统功能使用SFC 5 "GADR_LGC"查询模块的逻辑基址使用SFC 49"LGC_GADR"查询属于一个逻辑地址的模块插槽使用SFC 50 "RD_LGADR"查询模块的所有逻辑地址使用SFC 70"GEO_LOG"确定模块的起始地址使用SFC 71"LOG_GEO"确定属于一个逻辑地址的插槽用于分布式I/O或PROFINET IO的SFC用SFC 7 "DP_PRAL"触发DP主站上的硬件中断用SFC 11 "DPSYC_FR"同步DP从站组用SFC 12 "D_ACT_DP"激活和取消激活DP从站/PROFINET IO设备用SFC 13 "DPNRM_DG"读取DP从站的诊断数据(从站诊断)用SFC 14 "DPRD_DAT"读取DP标准从站/PROFINET IO设备的连续数据用SFC 15 "DPWR_DAT"向DP标准从站/PROFINET IO设备写入连续数据PROFINET关于SFC 112、113和114的信息使用SFC112 "PN_IN"更新PROFINET组件的用户程序接口的输入使用SFC113 "PN_OUT"更新PROFINET组件的PROFINET接口的输出使用SFC114 "PN_DP"更新DP互连用于PROFINET CPU的SFC和SFB使用SFC99 ""启用或同步用户Web页面使用SFB104 "IP_CONF"设置IP组态PROFIenergyFB 815 "PE_START"FB 816 "PE_CMD"FB 817 "PE_I_DEV"FC 0 "PE_ERR"FC 1 "PE_STRT"FC 2 "PE_END"FC 3 "PE_Q_LIST"FC 4 "PE_Q_GET"FC 5 "PE_STAT"FC 6 "PE_IDENT"FC 7 "PE_M_LST"FC 8 "PE_M_VAL"FB 53 "PE_DS3_W"用于根据PNO循环访问用户数据的FB介绍用于根据PNO来循环访问用户数据的FB使用FB20 "GETIO"读取DP标准从站/PROFINET IO设备的所有输入使用FB21 "SETIO"写入DP标准从站/PROFINET IO设备的所有输出使用FB22 "GETIO_PART"读取DP标准从站/PROFINET IO设备的部分输入使用FB23 "SETIO_PART"写入DP标准从站/PROFINET IO设备的部分输出用于全局数据通讯的SFC通过SFC 60"GD_SND"发送GD信息包通过SFC 61 "GD_RCV"编程接受已接收到的GD信息包S7通讯用于已组态S7连接的SFB/FB和SFC/FC的公共参数用于已组态S7连接的通讯SFB的启动例行程序用于已组态S7连接的SFB如何响应故障使用SFB/FB 8"USEND"发送不协调的数据使用SFB/FB 9"URCV"接收不协调的数据使用SFB 12"BSEND"发送分段数据使用SFB 13"BRCV"接收分段数据使用FB 28"USEND_E"发送不协调的数据使用FB 29"URCV_E"接收不协调的数据用FB 34 "GET_E"从远程CPU读取数据使用FB 35 "PUT_E"将数据写入到远程CPU使用SFB 14"GET"从远程CPU中读取数据使用SFB 15"PUT"将数据写入到远程CPU通过SFB 16 "PRINT"将数据发送到打印机通过SFB 19 "START"在远程设备上启动暖启动或冷启动通过SFB 20 "STOP"将远程设备切换到STOP状态通过SFB 21 "RESUME"在远程设备上启动热启动通过SFB 22"STATUS"查询远程伙伴的状态使用SFB 23"USTATUS"接收远程设备的状态使用SFC 62"CONTROL"查询属于一个通讯SFB背景的连接状态通过FC 62 "C_TRL"查询连接状态S7基本通讯通讯SFC的公共参数用于未组态S7连接的通讯SFC的错误信息GET和PUT SFC的数据一致性通过SFC 65"X_SEND"发送数据到本地S7站以外的通讯伙伴通过SFC 66 "X_RCV"从本地S7站以外的通讯伙伴中接收数据通过SFC 68 "X_PUT"将数据写入本地S7站以外的通讯伙伴通过SFC 67 "X_GET"从本地S7站以外的通讯伙伴中读取数据通过SFC 69"X_ABORT"中止已存在的、到本地S7站以外的通讯伙伴的连接通过SFC 73 "I_PUT"将数据写入本地S7站的通讯伙伴通过SFC 72 "I_GET"从本地S7站的通讯伙伴中读取数据通过SFC 74 "I_ABORT"中止已存在的、到本地S7站的通讯伙伴的连接用于未组态S7连接的通讯SFC的出错信息通过Industrial Ethernet的开放通讯概述开放通讯的FB如何在Industrial Ethernet上工作使用TCP native和ISO-on-TCP的通讯连接的参数使用UDP的本地通讯接入点的参数使用UDP的远程通讯伙伴地址信息的结构使用的CPU和协议变量(connection_type)和可传送数据长度之间的关系通讯连接的参数分配的实例使用FB 65 "TCON"建立连接使用FB 66 "TDISCON"终止连接使用FB 63 "TSEND"通过TCP native和ISO-on-TCP发送数据使用FB 64 "TRCV"通过TCP native和ISO-on-TCP接收数据使用FB 67 "TUSEND"通过UDP发送数据使用FB 68 "TURCV"通过UDP接收数据通过FB 210 "FW_TCP"经TCP使用FETCH和WRITE服务连接到一个外部系统通过FB 220 "FW_IOT"经ISO on TCP使用FETCH和WRITE服务连接到一个外部系统生成与块相关的消息组态消息关于使用SFB生成块相关消息的介绍使用SFB 36 "NOTIFY"生成无需确认的块相关消息使用SFB 31"NOTIFY_8P"生成不带确认显示的与块相关的消息使用SFB 33 "ALARM"生成需要确认的块相关消息使用SFB 35 "ALARM_8P"生成针对八个信号的伴随值的块相关消息使用SFB 34 "ALARM_8"生成不带8个信号伴随值的与块相关的消息使用SFB 37 "AR_SEND"发送归档数据使用SFC 10 "DIS_MSG"禁用块相关、符号相关和组状态消息使用SFC 9 "EN_MSG"启用块相关、符号相关和组状态消息用于生成块相关消息的SFB的启动特性用于生成块相关消息的SFB如何对问题做出反应关于使用SFC生成块相关消息的介绍使用SFC 17 "ALARM_SQ"生成可确认的块相关消息及使用SFC 18 "ALARM_S"生成永久确认的块相关消息使用SFC 19 "ALARM_SC"查询上一ALARM_SQ/ALARM DQ进入事件消息的确认状态使用SFC 107"ALARM_DQ"和108"ALARM_D"使用SFC 105"READ_SI"使用SFC 106 "DEL_SI"动态释放被占用的系统资源IEC定时器和IEC计数器使用SFB 3 "TP"生成脉冲使用SFB 4 "TON"生成接通延迟使用SFB 5 "TOF"生成断开延迟使用SFB 0 "CTU"递增计数使用SFB 1 "CTD"递减计数使用SFB 2"CTUD"进行递增和递减计数用于集成控制的SFB使用SFB 41 "CONT_C"连续控制使用SFB 42/FB "CONT_S"步进控制使用SFB 43/FB "PULSEGEN"生成脉冲PULSEGEN块的实例用于紧凑型CPU的SFB通过SFB 44 "Analog"使用模拟量输出进行定位通过SFB 46 "DIGITAL"使用数字量输出进行定位使用SFB 47 "COUNT"控制计数器使用SFB 48 "FREQUENC"控制频率计数器使用SFB 49 "PULSE"控制脉宽调制使用SFB 60 "SEND_PTP"发送数据(ASCII,3964(R))使用SFB 61 "RECV_PTP"接收数据(ASCII,3964(R))使用SFB 62 "RES_RECV"复位输入缓冲区(ASCII、3964(R)) 使用SFB 63 "SEND_RK"发送数据(RK 512)使用SFB 64 "FETCH RK"获取数据(RK 512)使用SFB 65 "SERVE_RK"接收和提供数据(RK 512)用于H CPU的SFC在H系统中使用SFC 90 "H_CTRL"控制操作集成的功能(对于具有集成输入/输出的CPU)SFB29 (HS_COUNT)SFB30 (FREQ_MES)SFB38 (HSC_A_B)SFB39 (POS)塑料技术SFC63 (AB_CALL)SFC 0 (SET_CLK) / SFC 1 (READ_CLK)的实例任务解决方案STL源代码SFC 2 (SET_RTM) / SFC 3 (CTRL_RTM) / SFC 4 (READ_RTM)的实例任务解决方案STL源文件SFC 20 (BLKMOV)的实例任务解决方案STL源代码SFC 28 (SET_TINT) / SFC 29 (CAN_TINT) / SFC 30 (ACT_TINT) / SFC 31 (QRY_TINT)的实例任务解决方案STL源文件SFC 32 (SRT_DINT) / SFC 33 (CAN_DINT) / SFC 34 (QRY_DINT)的实例任务解决方案STL源代码SFC 36 (MSK_FLT) / SFC 37 (DMSK_FLT) / SFC 38 (READ_ERR)的实例任务解决方案STL源代码SFC 39 (DIS_IRT) / SFC 40 (EN_IRT)的实例任务解决方案STL源文件SFC 41 (DIS_AIRT) / SFC 42 (EN_AIRT)的实例任务解决方案STL源文件SFC 47 (WAIT)的实例任务解决方案STL源代码SFC 51 (RDSYSST) / SFC 52 (WR_USMSG)的实例任务解决方案STL源文件SFC 55 (WR_PARM)的实例任务STL源文件SFC 57 (PARM_MOD)的实例任务STL源代码SFC 64 (TIME_TCK)的实例STL源代码使用SFC 51 (RDSYSST)进行模块诊断的实例任务解决方案STL源代码诊断数据诊断数据结构概述诊断数据与通道有关的诊断数据结构系统状态列表(SSL)系统状态列表(SSL)概述部分SSL列表的结构SSL-ID可能的部分系统状态列表SSL-ID W#16#xy11 - 模块标识SSL-ID W#16#xy12 - CPU特征SSL-ID W#16#xy13 - 存储区SSL-ID W#16#xy14 - 系统区域SSL-ID W#16#xy15 - 块类型SSL-ID W#16#xy1C - 组件标识SSL-ID W#16#xy22 - 中断状态SSL ID W#16#xy25 - 过程映像分区和OB之间的分配SSL-ID W#16#xy32 - 通讯状态数据SSL-ID为W#16#0132、索引为W#16#0005的部分列表摘录的数据记录SSL-ID为W#16#0132、索引为W#16#0008的部分列表摘录的数据记录SSL-ID为W#16#0132、索引为W#16#000B的部分列表摘录的数据记录SSL-ID为W#16#0132、索引为W#16#000C的部分列表摘录的数据记录SSL-ID为W#16#0232、索引为W#16#0004的部分列表摘录的数据记录SSL-ID W#16#xy71 - H CPU组信息SSL-ID W#16#xy74 - 模块LED的状态SSL-ID W#16#xy75 - H系统中的开关式DP从站SSL-ID W#16#xy90 - DP主站的系统信息SSL-ID W#16#xy91 - 模块状态信息SSL-ID W#16#xy92 - 机架/站状态信息SSL-ID W#16#0x94 - 机架/站的状态信息SSL-ID W#16#xy95 - 扩展的DP主站系统/PROFINET IO信息SSL-ID W#16#xy96 - 模块状态信息PROFINET IO和PROFIBUS DPSSL-ID W#16#xy9C - 工具变换装置信息(PROFINET IO)SSL-ID W#16#xyA0 - 诊断缓冲区SSL-ID W#16#00B1 - 模块诊断信息SSL-ID W#16#00B2 - 带物理地址的诊断数据记录1SSL-ID W#16#00B3 - 对应逻辑基址的模块诊断数据SSL-ID W#16#00B4 - DP从站的诊断数据事件事件和事件ID事件等级1 - 标准OB事件事件等级2 - 同步错误事件等级3 - 异步错误事件等级4 - 停止事件和其它模式更改事件类别5 - 模式运行事件事件等级6 - 通讯事件事件等级7 - H/F事件事件等级8 - 模块的诊断事件事件等级9 - 标准用户事件事件类别A和B - 自由用户事件保留的事件类别数据类型数据类型词汇表词汇表参考书目/30/使用入门:使用STEP 7/70/手册:PLC S7-300,CPU规,CPU 312 IFM至CPU 318-2 DP及S7-300 CPU 31xC和CPU 31x:技术规/71/参考手册:S7-300 S7-300模块数据*/72/指令列表:S7-300可编程控制器/101/参考手册:S7-400、M7-400可编程控制器模块规/102/指令列表:S7-400可编程控制器/231/手册:使用STEP 7配置硬件和通讯连接/232/参考手册:S7-300和S7-400的语句表(STL) /233/参考手册:S7-300和S7-400的梯形图(LAD) /234/手册:使用STEP 7编程/236/参考手册:S7-300和S7-400的功能块图(FBD) /250/手册:用于S7-300和S7-400编程的结构控制语言(SCL)/251/手册:用于S7-300和S7-400的S7-GRAPH,顺序控制系统编程/252/手册:用于S7-300和S7-400的S7-HiGraph,状态图编程/270/手册:用于S7-300和S7-400的S7-PDIAG "组态LAD、STL和FBD的过程诊断"/350/用户手册:SIMATIC 7,标准控制器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西门子 PLC中OB、FC、FB、SFC、SFB中功能块使用概述
(2013-12-05 16:13:52)
S7-300/400PLC程序采用结构化程序,把程序分成多个模块,各模块完成相应的功能。
结合起来就能实现一个复杂的控制系统。
就像高级语言一样,用子程序实现特定的功能,再通过主程序调用各子程序,从而能实现复杂的程序。
在S7-300/400PLC中写在OB1模块里和程序就是主程序,子程序写在功能(FC),功能块(FB)。
FC运行是产生临时变量执行结束后数据就丢失-----不具有储存功能
FB运行时需要调用各种参数,于是就产生了背景数据块DB。
例如用FB 41来作PID控制,则它的PID控制参数就要存在DB里面。
FB具有储存功能系统功能块(SFB)和系统功能(SFC)也是相当于子程序,只不过SFB 和SFC是集成在S7 CPU中的功能块,用户能直接调用不需自已写程序。
SFC与FC不具有储存功能,FB和SFB具有储存功能。
OB模块相当于子程序,负责调用其他模块。
如果程序简单只需要OB就可以实现。
用西门子PLC编程时,可以用到功能块FB和功能FC(FB、FC都是组织块)资料上说FB与FC都可以作为用户编写的子程序,但是我不明白这两个组织块之间到底有什么区别阿?在应用上到底有什么不同之处吗?
FB--功能块,带背景数据块
FC--功能,相当于函数
他们之间的主要区别是:FC使用的是共享数据块,FB使用的是背景数据块
举个例子,如果您要对3个参数相同的电机进行控制,那么只需要使用FB编程外加3个背景数据块就可以了,但是,如果您使用FC,那么您需要不断的修改共享数据块,否则会导致数据丢失。
FB确保了3个电机的参数互不干扰。
FB,FC本质都是一样的,都相当于子程序,可以被其他程序调用(也可以调用其他子程序)。
他们的最大区别是,FB与DB配合使用,DB中保存着F B使用的数据,即使FB退出后也会一直保留。
FC就没有一个永久的数据块来存放数据,只在运行期间会被分配一个临时的数据区。
在实际编程中,是使用FB还是FC,要看实际的需要决定。
FB与FC没有太大的差别,FB带有背景数据块,而FC没有。
所以FB 带上不同的数据块,就可以带上不同的参数值。
这样就可以用同一FB和不同的背景数据块,被多个对象调用。
FC和FB像C中的函数,只不过FB可以生成静态变量,在下次函数调用
时数据可以保留,而FC的变量只在调用期内有效,下次调用又重新更换。
这是一般的理解;FB需要背景数据块,而FC是没有的;参数的传递方式不同,FB的输入输出对应着背景数据块地址,而FC的输入输出是没有实际地址对应的,只有的程序调用时,才会和实际的地址产生对应关系。
FB参数传递的是数据,FC参数传递的是数据的地址。
FB(功能块)的处理方式是围绕着数据块处理数据,他的入口参数和出口参数都是数据块里的数据,以及STAT的数据都是数据块里,入口参数和出口参数、STAT可以认为是静态数据,这些数据不会因为函数消失而逝去,他会一直保存在数据块里。
FB里的变量与他的背景数据块是一一对应的,而他的对应并不是一层不变的。
更确切的说,FB里的变量在调用时将根据AR2的值当作偏移量与背景数据块是一一对应。
如果一个FB功能块里没有入口参数、出口参数及STAT数据,他将不需要背景数据块,这时的FB和没有入口出口参数的FC就没有什么区别了,就只能使用临时变量和全局变量了。
用很多人认为,FB 的背景数据块必须由FB生成、FB里的第一个变量对应着背景数据块的第一个变量,还有就是由FB生成的数据块只能作为FB的背景数据块使用。
其实这些理解是错误的,FB的背景数据块不一定是通过FB生成的,可以像生成共享数据块一样生成FB的背景数据块,换句话说,普通的数据块也可以作为FB的背景数据块,不过这种做法是有一定前提的,就是这个数据块的字节数必须大于等于FB所需的字节数,如果小于FB所需的字节数时,FB访问到超出背景数据块的变量时就会找不到变量的地址,肯定会出错了。
FB里的第一个变量对应可以对应数据块字节数减去FB所需背景数据块字节数里的任意位置的变量,我觉得这个比较好理解,在多重背景里不就是这样吗。
谈到这里我得说点别的,好像这种情况下,FB里不可以有多重背景,在S7里,多重背景好像是不允许嵌套的,说道这里我马上在S7做了测试,证明我的想法是错误的,多重背景是可以嵌套的。
话回正题,由FB生成的数据块也是可以像访问普通数据块一样通过共享数据块方式访问,不信,你可以自己试一试。
说说如何使用普通的数据块作为FB的背景数据块,会不会有人现在就开始自己试了,怎么不行呢,一调用程序就程序红色,有错误啊。
告诉你,使用CALL指令编写时SETP7会自动检查DB块和FB的关系,要是时间标记和大小不一致就会报错。
在这里我们可以使用UC指令调用FB,UC指令是不传递参数的(对于这个说法,我不太认同,我将会在使用UC调用FC时是如何传递参数一节讲述),那么我们如何将参数传递给FB呢?又如何将FB的输出读出来呢?
我在前面说过,背景数据块是可以像访问普通数据块一样使用共享数据块访问,这就解决了我们参数传递的问题。