功能FC和功能块FB的使用
西门子 PLC中OB、FC、FB、SFC、SFB中功能块

西门子 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就没有一个永久的数据块来存放数据,只在运行期间会被分配一个临时的数据区。
西门子PLC FC和FB用法讲解

西门子PLC FC和FB用法讲解FC块讲解首先,我们从两者的名字就可以进行区分,可以用一个公式即FB=FC+DB来表示,FB是具有DB背景块的特殊FC,也就是说FB具有FC的功能,同时拥有一个DB块。
FC全称是Function函数。
注:DB块全称DataBlock 数据存储区域,类似数据库中关系表结构。
那首先什么函数呢?函数函数f(x)就像机器或黑箱,给予输入值x便产生唯一输出值f (x)。
x是自变量,f(x)是因变量。
举一个我们常见的公式,求圆的面积,S=π*r*r。
输入r值,便得到圆的面积S,这就是最简单的函数,r是自变量,S是因变量。
图1 变量声明图2 FC函数内容Input:输入型参数,提供外部输入接口。
类似于函数f(x)中的x,是一个自变量。
Input类型参数,是外部变量的拷贝副本,修改其值,外部变量无变化。
假设在程序中修改R的值,从图2编译信息发现,传递的并不是实际参数,所以修改外部接口变量无变化。
Output:输出型参数,提供外部输出接口。
该类型参数由于直接引用外部变量地址,可以修改其值。
InOut:输入输出型参数,既做输入又做输出。
同Output类型一样,可以修改外部接口变量的值。
在适当地方,使用InOut类型变量,可以减少占用PLC的变量声明空间。
Temp:局部变量,在函数内部使用,不提供外部的接口。
我们常常把temp变量用于数据转换的中间值,或者用于循环变量,比如用于For 或者While循环。
由于Temp是局部变量,它的值是随机,使用必须初始化,对其赋值。
Constant:常量,在函数内部使用,意思是恒定不变的变量,只能在声明处修改。
比如我们这里的π圆周率是固定不变的,可能调用的地方有几十处,若程序中直接引用3.1415,后期修改,需要把每个地方都修改过去,很麻烦。
在声明处修改π值,所有函数中的π变量都会修改。
假设我们在程序中修改π常量,从图2中编译信息可以发现,常量不能在程序中修改。
西门子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的值已经被改变了。
FB和FC使用注意事项

用西门子PLC编程时,可以用到功能块FB和功能FC(FB、FC都是组织块)资料上说FB与FC都可以作为用户编写的子程序,但是我不明白这两个组织块之间到底有什么区别阿?在应用上到底有什么不同之处吗?FB--功能块,带背景数据块FC--功能,相当于函数他们之间的主要区别是:FC使用的是共享数据块,FB使用的是背景数据块举个例子,如果您要对3个参数相同的电机进行控制,那么只需要使用FB编程外加3个背景数据块就可以了,但是,如果您使用FC,那么您需要不断的修改共享数据块,否则会导致数据丢失。
FB确保了3个电机的参数互不干扰。
FB,FC本质都是一样的,都相当于子程序,可以被其他程序调用(也可以调用其他子程序)。
他们的最大区别是,FB与DB配合使用,DB中保存着FB使用的数据,即使FB退出后也会一直保留。
FC就没有一个永久的数据块来存放数据,只在运行期间会被分配一个临时的数据区。
在实际编程中,是使用FB还是FC,要看实际的需要决定。
FB的好处楼上以讲得很好了。
FB与FC没有太大的差别,FB带有背景数据块,而FC没有。
所以FB带上不同的数据块,就可以带上不同的参数值。
这样就可以用同一FB和不同的背景数据块,被多个对象调用。
FC和FB像C中的函数,只不过FB可以生成静态变量,在下次函数调用时数据可以保留,而FC的变量只在调用期内有效,下次调用又重新更换。
S7-300plc中的FB和FC的分别?FB带有自己的背景DB而FC没有自己的背景DB,用FC 和FB 有什么分别呢,他们都能实现控制功能,到底该用FB还是该用FC,什么时候用FB什么时候用FC?FB与FC没有太大的差别,FB带有背景数据块,而FC没有。
所以FB带上不同的数据块,就可以带上不同的参数值。
这样就可以用同一FB和不同的背景数据块,被多个对象调用。
FC和FB像C中的函数,只不过FB可以生成静态变量,在下次函数调用时数据可以保留,而FC的变量只在调用期内有效,下次调用又重新更换。
详解西门子PLC 中函数FC与FB的应用与区别

详解西门子PLC中函数FC与FB的应用与区别一、FB和FC区别1、FB功能块,带背景数据块FC——功能,相当于函数;2、FB,FC块均相当于子程序,既可以调用其它FB,FC块,也可以被OB,FB,FC块调用;二、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块管脚定义1、IN——变量是外部输入的,只能被本程序块读,不能被本程序块写;2、OUT——是本程序块输出的,他可以被本程序块读写,其他程序通过引脚只能读值不能写;3、IN_OUT——输入输出变量本程序块和其他程序都可以读写这个引脚的值;4、TEMP——临时变量,顾名思义是暂时存储数据的变量,这些临时的数据存储在CPU工作存储区的局部数据堆栈(L堆栈)中;5、STAT——在PLC运行期间始终被存储,S7将静态变量定义在背景数据块(仅对FB而言,FC和OB无静态变量),当被调用块运行时,能读出或修改静态变量,被调用块结束后,静态变量保留在数据块中;六、为何定义的FB,FC块,多次调用后程序混乱?对于,多次调用的程序块,FB块建议更换调用不同的背景DB,FC则需要确保使用的存储地址不重复,即每次调用,块中调用的地址不重复;七、为何含有定时器或计数器的FB或FC单次调用ok,多次调用时定时器或计数器混乱?对于多次调用的FB,FC,如为S7定时器,计数器,则需要在IN 接口中定义TIMER或Counter,每调用一次FB或FC,均赋不同的定时器或计数器号,如为IEC定时器,计数器,则需要在IN接口定义Block_DB,每调用一次FB或FC,均赋不同的DB块给其中的IEC 定时器或计数器;八、临时变量引起的麻烦临时变量可以在组织快OB、功能FC和功能块FB中使用,当块执行时它们被用来临时存储数据,一旦块执行结束,堆栈的地址将被重新分配用于其它程序块使用,此地址上的数据不会被清零,直到被其他程序块赋予新值,需要遵循“先赋值,再使用”的原则;九、有常见的几种情况导致程序运行不正常1、某个块程序运行时好时坏,其中某个数值或多个数值偶尔不正常此问题在于,一定遵循“先赋值,再使用”,否则,TEMP的数值在每个扫描周期开始未有明确的赋值,此地址的数值将是随机的;2、多个块使用TEMP,单独使用任意一个都正常,无法一起正常使用此问题在于,TEMP未能先赋值,再使用,程序块1的TEMP中的数值并没有清零,而是CPU运行机制调用此地址使用或直接分配给程序块2使用,导致这个TEMP地址并不为0,因此程序混乱,由于内存运行机制并不公开,因此,这一分配过程看起来是随机的,这可能导致,程序多次运行情况下正常,运行一段时间后出现问题,只要遵循“先赋值,再使用”的原则,就可避免;3、TEMP无法实现自锁此问题在于,TEMP数值无法像M点或Q点一样保持上一个周期的数值,TEMP需要在每个扫描周期有一个明确的赋值,即先赋值(写),再使用(读写),解决方式,FB可使用STAT静态变量,FC可使用M区或全局DB地址;十、总结在使用临时变量TEMP时:1、不能先使用,再赋值;2、不适用于自锁线圈;3、不适用于上升,下降沿;4、遇到如上情况,FC块可采用M区或全局DB地址,FB块也可采用自身背景DB的STAT静态变量,在FB,FC中使用第一次调用的某个临时变量,必须先对其赋值即写指令,而不能是读指令。
FB和FC区别

FB与FC区别简单的说FB是具有存储功能的,FC没有存储功能,这是一般的理解:FB需要背景数据块,而FC是没有的;参数的传递方式不同,FB的输入输出对应背景DB地址,而FC的输入输出没有实际地址对应的,只有程序调用时,才会和实际的地址产生关系。
FB参数传递的是数据,FC参数传递的是数据的地址。
FB功能块的处理方式是围绕着数据块处理数据,它的输入输出参数都是数据块里的数据,以及STAT的数据都是数据块里的,入口参数和出口参数,这些数据不会因为函数消失而消失,它会一直保持在数据块里。
FB里的变量与它的背景数据块是一一对应的,而它的对应并不是一层不变的,更确切的说,FB里的变量在调用时将根据AR2的值当作偏移量与背景数据块是一一对应的。
如果一个FB功能块没有入口参数、出口参数及STAT数据,它将不需要背景数据块,这时的FB块和没有出、入口参数的FC就没什么区别了,也就只能使用临时变量和全局变量,当然这时的FB块是没有实际作用了。
有人会认为,FB的背景数据块必须由FB生成、FB的第一个变量对应背景数据块的第一个变量,还有就是由FB块生成的数据块只能作FB的背景数据块使用。
其实这些理解都是错误的,FB的背景数据块不一定是通过FB生成的,可以像生成共享数据块一样生成FB的背景数据块,换句话说,普通的数据块也可以作为FB的背景数据块使用,只是这种做发是有前提的:就是这个数据块的字节数必须大于或等于FB所需的字节数,如果小于FB所需的字节数,FB访问到超出背景数据块的变量时就会找不到变量的地址,当然也就出错了。
FC功能块里的参数没有实际的地址,都是使形参数,只有在调用时才会把实际的参数地址传送到FC的参数里。
FC是没有存储能力的,这是一班的说法,给定入口参数,执行完了,从出口参数读出数据,FC的功能就消失。
如果在FC里使用全局变量,也可以达到FB块一样的效果,但是这样的FC块是没有可移植性的。
下面,我将介绍我根据实际工程,编写的FC与FB块实例1:FC块(这是一个用于西门子PLC向直流装置6RA70写过程数据的FC块)A(L #in0L #in1>RJNB _001L #in1T #temp0_001: NOP 0A(L #in0L #in2)JNB _002L #in2T #temp0_002: NOP 0L #in0L #in1<=R= #temp5L #in0L #in2>=R= #temp5A #temp5A #temp5JNB _003L #in0T #temp0_003: NOP 0L #in0L 0.000000e+000= #out1L #temp0ABST #temp1NOP 0A(L #temp1L 1.638400e+004 *RT #temp2AN OVSAVECLRA BR)JNB _004L #temp2L #in1/RT #temp3_004: NOP 0A(L #temp3RNDT #TEMP4AN OVSAVECLRA BRJNB _005L #TEMP4T #out0_005: NOP 0在FC块中调用FCCALL FC 30in0 :=DB3.DBD2090in1 :=6.000000e+002in2 :=0.000000e+000out0:=PQW590out1:=M203.3NOP 0从这个程序我们可以看出,IN0的地址是DB3.DBD2090,OUT0的地址是PQW590。
西门子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: ...
FB与FC块的区别及其实际的工程运用
FB与FC块的区别及其实际的工程运用简单的说FB是具有存储功能的,FC没有存储功能,这是一般的理解:FB需要背景数据块,而FC是没有的;参数的传递方式不同,FB的输入输出对应背景DB地址,而FC的输入输出没有实际地址对应的,只有程序调用时,才会和实际的地址产生关系。
FB参数传递的是数据,FC参数传递的是数据的地址。
FB功能块的处理方式是围绕着数据块处理数据,它的输入输出参数都是数据块里的数据,以及STAT的数据都是数据块里的,入口参数和出口参数,这些数据不会因为函数消失而消失,它会一直保持在数据块里。
FB里的变量与它的背景数据块是一一对应的,而它的对应并不是一层不变的,更确切的说,FB里的变量在调用时将根据AR2的值当作偏移量与背景数据块是一一对应的。
如果一个FB功能块没有入口参数、出口参数及STAT数据,它将不需要背景数据块,这时的FB块和没有出、入口参数的FC 就没什么区别了,也就只能使用临时变量和全局变量,当然这时的FB块是没有实际作用了。
有人会认为,FB的背景数据块必须由FB生成、FB的第一个变量对应背景数据块的第一个变量,还有就是由FB块生成的数据块只能作FB的背景数据块使用。
其实这些理解都是错误的,FB的背景数据块不一定是通过FB生成的,可以像生成共享数据块一样生成FB的背景数据块,换句话说,普通的数据块也可以作为FB的背景数据块使用,只是这种做发是有前提的:就是这个数据块的字节数必须大于或等于FB所需的字节数,如果小于FB所需的字节数,FB访问到超出背景数据块的变量时就会找不到变量的地址,当然也就出错了。
FC功能块里的参数没有实际的地址,都是使形参数,只有在调用时才会把实际的参数地址传送到FC的参数里。
FC是没有存储能力的,这是一班的说法,给定入口参数,执行完了,从出口参数读出数据,FC的功能就消失。
如果在FC里使用全局变量,也可以达到FB块一样的效果,但是这样的FC块是没有可移植性的。
STEP7常用功能块教程
STEP7常用功能块教程STEP7(Siemens Totally Integrated Automation Portal)是西门子公司的一款集成的自动化工程软件,用于配置、程序和诊断西门子的可编程逻辑控制器(PLC)系统。
STEP7具有许多强大的功能块,可以帮助用户更高效地编程和管理PLC系统。
本文将介绍一些常用的STEP7功能块和它们的应用。
1.FC(函数块):函数块是一种可重用的程序单元,允许用户编写自定义函数。
通过使用函数块,可以将常用的代码片段封装为函数,以便在不同的程序中重复使用。
例如,可以创建一个函数块来实现PID控制算法,使其可以在不同的工程中重复使用。
2.FB(功能块):功能块是STEP7中的另一种可重用程序单元,类似于函数块。
不同之处在于,功能块可以包含状态信息,并可以在程序中直接调用。
功能块通常用于处理系统的输入和输出信号,并执行相关的逻辑操作。
例如,可以创建一个功能块来处理PLC的输入和输出模块,并根据逻辑条件执行相应的控制操作。
3.OB(组织块):组织块是STEP7中的一种特殊类型的函数块,用于定义PLC程序的执行顺序和事件触发条件。
组织块分为不同的类型,如主程序(OB1)和中断(OB35),每个类型都有不同的功能和触发条件。
通过使用组织块,可以精确控制PLC程序的执行流程,并根据需要触发特定的事件。
4.DB(数据块):数据块是STEP7中用于存储和管理数据的容器。
数据块包含一个或多个变量,可以在PLC程序中访问和使用。
通过使用数据块,可以将相关的数据组织在一起,并轻松地进行数据的传输和处理。
例如,可以创建一个数据块来存储传感器和执行器的输入和输出数据,并在程序中使用这些数据进行逻辑判断和控制操作。
5.SFC(顺序功能图):顺序功能图是一种图形化编程语言,用于描述程序的执行顺序和组织结构。
SFC可以将PLC程序分解为不同的步骤,并定义不同的条件和转换规则。
通过使用SFC,可以更直观地理解和设计复杂的PLC程序,并使其易于修改和维护。
现场实例详细介绍FC功能和FB功能块的应用
现场实例详细介绍FC功能和FB功能块的应用在STEP7的编程中,经常会用到FC功能和FB功能块来简化程序编制,减少程序空间占用。
本文通过现场实例详细介绍了FC功能和FB 功能块的应用1.FC和FB的主要区别FC和FB的主要区别是FB有背景块,能够保存上一次执行的数据,调用一次就需要建立一个DB块。
FC没有背景块,多次调用可以共用一个DB块FC 功能是没有存储能力的,给定入口的参数,执行完毕后,从输出参数读出结果。
FC功能也就完成了。
就像计算机高级编程语言中的子函数。
当然,FC可以访问全局的存储变量,M区,数据块等等。
但是影响程序的可移植性。
FC的参数是没有实际的地址的,只是在调用FC的时候,对应到一个实际的地址来读取参数。
而FB的参数都是有实际对应的地址的,也就是对应的背景数据块的地址。
FB参数传递的是数据。
FB可以生成静态变量,下次调用FB的时候,这些静态变量可以被保留。
而FC的变量只在调用期内有效。
FB与FC的区别在于入口参数,出口参数和使用静态变量。
如果一个FB对入口参数,出口参数和使用静态变量都不需要,那么与使用没有入口参数和出口参数的FC基本一样了。
FB可以和多个背景数据块配合使用,被用来控制多个对象。
例如控制多个电机或者泵的运行。
多个电机之间参数互不干扰。
如果使用FC达成同样功能,就需要不断地修改共享数据块,以避免对象的数据丢失。
FC没有一个永久的数据块来存储数据,只是在被调用的时候,被分配一个临时的数据区。
2.FC功能编程及调用实例:2.1在STEP7中完成硬件组态以后,开始编制PLC程序,插入一个功能FC,如图所示。
将FC设置成为一个模拟量数值超限报警程序,模拟量信号比较后输出报警值。
2.2在FC中创建接口,IN 变量是外部输入的,只能被本程序块读,不能被本程序块写,输入参数只能在功能和功能块中使用,以将数据传送到调用块进行处理。
OUT 是本程序块输出的,他可以被本程序块读写,其他程序通过引脚只能读值不能写,通过它将结果传送到调用块IN_OUT 输入输出变量本程序块和其他程序都可以读写这个引脚的值,输入/输出参数在功能和功能块中使用,以将数据传递到调用块中,在调用块中处理数据,然后再将从调用块中发送的结果存储在相同的变量中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DB100
第一次调用 FB20 的参数和静态参数
第二次调用 FB20 的参数和静态参数
Date: File:
2010-7-30 FCFBs.24
练习: 识别变量的类型
Statement
总结: 块的调用
语言
STL
LAD
无参数
• CALL FC1 • UC FC1 • CC FC1
FC1
( CALL )
FC1
EN
ENO
FC
有参数
• CALL FC2 Par1: ... Par2: ... Par3: ...
FC2
EN
ENO
Par1
Par2 Par3
无参数,无静态参数
• UC FB1 • CC FB1
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.9
不可以 分配参数的块
A( A I 1.0 R M 40.0 A I 1.1 FP M 40.1 S M 40.0 A M 40.0 ) A M 10.3 O A I 1.1 AN M 40.0 = Q 5.1
=
A
I
0.1
JNB _001
CALL FC
1
_001: A
BR
=
Q
5.0
例子
FC 1
FC 2
FC 3
?? . ? EN ENO
EN ENO
EN ENO
=
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.26
功能和功能块
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.1
目标
学习了本章之后,你将 ...
...
熟悉临时变量的用途
...
能够声明临时变量并在程序中使用
...
熟悉可赋值参数的块的用途
...
能够编程可赋值参数的功能和它们的调用
静态变量
•当相关块执行完毕后仍然 保留
• 永久存储在DB中
• 只能在FB中使用
SIMATIC® S7
Siemens AG 2003. All rights reserved.
绝对地址
符号地址
访问方式
Date: File:
2010-7-30 FCFBs.3
临时变量
SIMATIC® S7
Siemens AG 2003. All rights reserved.
功能块 ( FB )
FB块的变量声明表
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.16
用功能块实现的故障信息显示
FB的声明表
背景数据块
SIMATIC® S7
Siemens AG 2003. All rights reserved.
可以分配参数的块 调用FC 20 (e.g. in OB 1)
FC 20 I 1.3 Fault_Signal Display
I 1.0 M 10.3 M 40.0
Acknowledge Flash_freq Stored_Fault
M 40.1 Edge_Memory
Q 5.1
形式参数 实际参数
Date: File:
28 256 bytes
26
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.6
块所需要的局部数据区的长度
Right Click
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.18
之后插入/删除块的参数
Save
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.19
检查块的一致性
SIMATIC® S7
Siemens AG 2003. All rights reserved.
FB
有参数,和/或静态参数
• CALL FB2, DB3 Par1: ... Par2: ... Par3: ...
DB3
FB2
EN
ENO
Par1
Par2 Par3
FBD
FC1 CALL
FC1
EN
ENO
FC2
EN
Par3
Par1
Par2 ENO
DB3
...
了解功能(FC)和功能块(FB)之间的差别
...
熟悉背景模型和多重背景模型
...
熟悉静态变量的用途
...
能够声明静态变量并在程序中使用
...
能够编程可赋值参数的功能块和它们的调用
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
Date: File:
2010-7-30 FCFBs.13
练习: 编辑可以分配参数的FC块
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.14
练习: 调用可以分配参数的FC块
第一次调用FC20时 的参数分配
Date: File:
2010-7-30 FCFBs.7
练习: 使用临时变量
#Setpoint
#Setpoint
SIMATIC® S7
Siemens AG 2003. All rights reserved.
替换为临时变量 #Setpoint
Date: File:
2010-7-30 FCFBs.8
DB10 FB20
DB11 FB20
DB12 FB20
SIMATIC® S7
Siemens AG 2003. All rights reserved.
多重背景模型
OB 1
Call FB100, DB100
FB 100
stat Dist_1 FB20
stat Dist_2 FB20
Call Dist_1 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:=
SIMATIC® S7
Siemens AG 2003. All rights reserved.
可以分配参数的块
FC 20 的 STL程序
A( A #Acknowledge R #Stored_Fault A #Fault_Signal FP #Edge_Memory S #Stored_Fault A #Stored_Fault ) A #Flash_Freq. O A #Fault_Signal AN #Stored_Fault = #Display
第二次调用FC20时 的参数分配
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.15
OB 1
DB 2 FB 20
EN Fault_Signal Acknowledge Display Flash_Frequency ENO
执行的程序
启动程序 (只执行一次)
循环扫描程序
时间中断 事件驱动中断
日时钟中断 延时处理中断 循环处理中断 硬件中断 启动过程中的错误处理中断 循环扫描中的错误处理中断
对于 S7-300:
优先级局部堆栈大小来自27 256 bytes
1
2
256 bytes
3
256 bytes
12
256 bytes
16
256 bytes
Date: File:
2010-7-30 FCFBs.11
编辑可以分配参数的块
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.12
调用可以分配参数的块
SIMATIC® S7
Siemens AG 2003. All rights reserved.
Siemens AG 2003. All rights reserved.
Date: File:
2010-7-30 FCFBs.25
无条件调用
在块调用时使用EN/ENO参数
LAD/FBD
STL
?? . ?
FC 1 EN ENO
CALL FC
1
NOP 0
条件调用
FC 1
Q 5.0
I 0.1 EN ENO
2010-7-30 FCFBs.2
全局变量/数据 (在全部程序中有效)
• PII / PIQ • I/ O •M/T/C • DB areas