功能FC和功能块FB的使用
- 格式:pdf
- 大小:712.51 KB
- 文档页数:29
西门子 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用法讲解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、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(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的应用与区别一、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的输入输出对应背景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。
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(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功能块的应用在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 输入输出变量本程序块和其他程序都可以读写这个引脚的值,输入/输出参数在功能和功能块中使用,以将数据传递到调用块中,在调用块中处理数据,然后再将从调用块中发送的结果存储在相同的变量中。