功能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 输入输出变量本程序块和其他程序都可以读写这个引脚的值,输入/输出参数在功能和功能块中使用,以将数据传递到调用块中,在调用块中处理数据,然后再将从调用块中发送的结果存储在相同的变量中。
29-FB块与FC块功能的区别
FB块和FC块FB和FC区别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,均赋不同的定时器或计数器号。
功能FC和功能块FB的使用
功能FC和功能块FB的使用功能(Functional Capabilities,FC)和功能块(Functional Blocks,FB)是软件开发中常用的概念,用于描述系统的功能和实现方式。
这两个概念可以帮助开发人员更好地组织代码和设计系统,并且在软件开发过程中起到了重要的作用。
下面将详细介绍功能FC和功能块FB的使用。
功能(Functional Capabilities,FC)是系统或软件所提供的一种特定功能或行为。
它描述了系统在特定情况下应具备的能力,可以是一个简单的操作或一个复杂的功能。
FC通常是对系统所需功能的高级描述,它不仅仅包括系统的输入和输出,还包括系统的行为和约束。
FC与用户需求息息相关,它是将用户需求转化为系统所需功能的中间步骤。
功能块(Functional Blocks,FB)是实现功能的基本单元。
一个功能块是具有特定功能的代码块,它接收输入,执行一系列操作,并生成输出。
功能块主要用于将系统的功能划分为更小的模块,以便于开发、维护和重用。
一个复杂的系统通常由多个功能块组成,每个功能块负责一个特定的功能或行为。
通过合理的组织和设计功能块,可以使系统更加模块化、可靠和可扩展。
在实际的软件开发过程中,我们通常会先进行功能分析和需求确定,然后将需求转化为功能,再将功能细化为功能块。
这个过程可以通过以下几个步骤实现:步骤一:功能分析和需求确定。
在这个阶段,我们需要与用户进行沟通,了解他们的需求和期望。
通过与用户的交流,我们可以确定系统所需的功能,并将其记录为功能描述。
步骤二:定义功能。
在功能分析阶段完成后,我们需要将功能描述转化为具体的功能。
例如,如果我们的系统需要实现一个登录功能,我们可以将其定义为一个“登录”功能。
步骤三:细化功能。
在细化功能时,我们需要将每个功能进一步分解为更小的功能块。
这些功能块可以是独立的,也可以依赖其他功能块。
通过细化功能,我们可以更好地组织代码,并确保每个功能块的责任清晰明确。
干货!西门子12001500PLC常用术语及FB、FC、DB各功能介绍
干货!西门子12001500PLC常用术语及FB、FC、DB各功能介绍1、块接口由形式参数和本地数据两部分组成:参数解析:输入参数:为调用模块提供数据,输入给逻辑模块输出参数:从逻辑模块输出数据结果输入/输出参数:参数值既可以输入,也可以输出变量解析:临时变量:存储在L堆栈中,块执行结束后,变量消失;静态变量:存储在背景数据块中,块调用结束后,变量被保留;(1)函数(FC)简介① 、函数(FC)是用户编写的程序块,是不带存储器的代码块。
由于没有可以存储块参数值的数据存储器,因此,调用函数时,必须给所有形参分配实参。
②、FC 里有一个局域变量表和块参数。
局域变量表里有:Input(输入参数)、Output(输出参数)、InOut (输入/输出参数)、Temp(临时数据)、Return(返回值 RET_VAL)。
Input(输入参数)将数据传递到被调用的块中进行处理。
Output(输出参数)是将结果传递到调用的块中。
InOut(输入/输出参数)将数据传递到被调用的块中,在被调用的块中处理数据后,再将被调用的块中发送的结果存储在相同的变量中。
Temp(临时数据)是块的本地数据,并且在处理块时将其存储在本地数据堆栈。
关闭并完成处理后,临时数据就变得不再可访问。
Return 包含返回值 RET_VAL。
(2)函数块(FB)的简介函数块(FB)属于编程者自己编程的块。
函数块是一种“带内存”的块。
分配数据块作为其内存(背景数据块)。
传送到FB 的参数和静态变量保存在实例DB 中。
临时变量则保存在本地数据堆栈中。
执行完FB 时,不会丢失DB 中保存的数据。
但执行完FB 时,会丢失保存在本地数据堆栈中的数据。
(3)数据块(DB)简介①、数据块用于存储用户数据及程序中间变量。
新建数据块时,默认状态是优化的存储方式,且数据块中存储的变量是非保持的。
数据块占用 CPU 的装载存储区和工作存储区,与标识存储器的功能类似,都是全局变量,不同的是,M 数据区的大小在 CPU 技术规范中已经定义且不可扩展,而数据块存储区由用户定义,最大不能超过工作存储区或装载存储区。
PLC编程中功能块与功能的区别
PLC编程中功能块与功能的区别
PLC编程中功能块(FB)与功能(FC)的区别
说的简单一点,FB是有背景数据块的,而FC没有。
如果你有几套一样的或者相似的参数要处理的话,用FB会方便一点。
例如,计算A同学和B同学的成绩,其实每个同学的成绩都是有数学,语文,英语组成,那么在计算每个同学的数据时都是三个科目成绩相加,算法是一样的,那么我们就可以做一个功能块,把这个算法写进去,在块里面定义变量数学,语文,英语,然后把算法写好,再去为A,B同学分别创建一个数据块,也就是FB的背景数据块,你会发现,你打开背景数据块后,里面的变量和FB里面的变量名称,个数是一样的,那么把数据块1,2分别分配给A,B的话,就可以把AB同学的成绩分别写到数据块里,然后由FB调用不同的数据块就可以计算A,B的成绩了,这样每组数据都有自己的数据块,不容易造成数据混乱。
如果用功能FC来做的话,也可以,但是你要自己去每个数据块里面定义变量,比较麻烦,或者也可以直接把所有同学的成绩的数据全写到一个块里面,但这样容易数据混乱。
还有就是FB里面是有静态变量的,而FC没有,FC有return,FB没有至于这两的用法,请参看相关资料。
qd75学习自用(功能块FB和功能FC)
qd75学习自用(功能块FB和功能FC)S7-300/400PLC程序采用结构化程序,把程序分成多个模块,各模块完成相应的功能。
结合起来就能实现一个复杂的控制系统。
就像高级语言一样,用子程序实现特定的功能,再通过主程序调用各子程序,从而能实现复杂的程序。
在S7-300/400PLC中写在OB1模块里和程序就是主程序,子程序写在功能(FC),功能块(FB)。
FC运行是产生临时变量执行结束后数据就丢失-----不具有储存功能FB运行时需要调用各种参数,于是就产生了背景数据块DB。
例如用FB41来作PID控制,则它的PID控制参数就要存在DB里面。
FB具有储存功能系统功能块(SFB)和系统功能(SFC)也是相当于子程序,只不过SFB和SFC是集成在S7CPU中的功能块,用户能直接调用不需自已写程序。
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中保存着FB使用的数据,即使FB退出后也会一直保留。
FC就没有一个永久的数据块来存放数据,只在运行期间会被分配一个临时的数据区。
在实际编程中,是使用FB还是FC,要看实际的需要决定。
step7系统功能和系统功能块的使用
要做西门子系统了,由于对STEP7中的FB和FC的区别还有点模糊,故查了些资料并做了些补充如下:
1)FC运行时的临时变量在执行结束后数据会丢失,不具有存储功能。
2)FB要和数据块(DB)联系起来使用具有存储功能。
由于在做系统时往往需要存储的变量较多,因此FB块使用的数量肯定要比FC多。
在工程中往往控制多个相同的设备,这时只要做一个FB或一个FC(如果中间数据不要保存的话),如果你使用FB块(不是FC)只要和相应数量的的DB块(数据块)联系起来就可以,比如要控制3台电机,只要做一个FB1块控制程序,在OB1中调用FB1时分别于3个电机的数据块DB1,DB2,DB3联系起来就可以。
如果3台电机的程序都用FB1来做,且把FB1放在同一个FB块中如(FB10)中,然后OB1调用FB10时,则只要FB10的数据块DB10,而FB1可不直接联系DB块,因为DB10已经包含了FB1的数据。
实例:
1)如下图是在FB10中的一段程序,图中#shuju是FB3 ,#shuju_1也是FB3。
FB10对应了DB10数据块
2)再来看看FB3的程序吧:
看看定义的变量和程序,FB3可没有联系到DB块哦。
3)在看看交叉参考图来说明FB10联系到了DB10,而FB3却没有直接联系到DB块,因为DB10的数据已经包含了FB3的数据:
4)这时再看看DB10的数据寻址的表达方式:
FC块编程和FB块很相似,就是不链接到DB快,如下图也能看出。
什么是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的FB,FC,DB,OB,这些块是什么意思?怎么用?
什么是PLC的FB,FC,DB,OB,这些块是什么意思?怎么
用?
首先FB块功能块,FC功能。
FC里面可以编程不同的程序就是没有共同程式的程序而后被OB块调用,OB是执行,它可以调用你所编的程序的每个块,调用你所编的块之后,然后PLC只能通过扫描OB 块来处理你所编程序,OB块可以调用很多块。
FB块里面主要编的就是一些有共同程式的一些程序,举例,三个电机要分别运行,都是通过星三角启动的,只是他们功率不一样,所以所选择的交流接触器,热保护型号也不一样,包括启动关闭开关形成的电路图都是一样的,所以此时他们三个电路图都是一样的,这就起他们的共同点形成的程式,这个共同的程式也就是电路图就编程在FB里面,每个FB块可以形成不同的DB,DB里面就是没有电机运行的参数。
三个电机就会调用共同的FB三次就形成3个DB块,每个DB对应每组的参数。
这个DB块我们称之为背景数据块,因为它是一个DB相对应一组电机的。
FC在编程的时候也会产生数据。
这个数据在共享数据块里,都可以调用的,公用的。
PLC编程中功能块与功能的区别
PLC编程中功能块与功能的区别
PLC编程中功能块(FB)与功能(FC)的区别
说的简单一点,FB是有背景数据块的,而FC没有。
如果你有几套一样的或者相似的参数要处理的话,用FB会方便一点。
例如,计算A同学和B同学的成绩,其实每个同学的成绩都是有数学,语文,英语组成,那么在计算每个同学的数据时都是三个科目成绩相加,算法是一样的,那么我们就可以做一个功能块,把这个算法写进去,在块里面定义变量数学,语文,英语,然后把算法写好,再去为A,B同学分别创建一个数据块,也就是FB的背景数据块,你会发现,你打开背景数据块后,里面的变量和FB里面的变量名称,个数是一样的,那么把数据块1,2分别分配给A,B的话,就可以把AB同学的成绩分别写到数据块里,然后由FB调用不同的数据块就可以计算A,B的成绩了,这样每组数据都有自己的数据块,不容易造成数据混乱。
如果用功能FC来做的话,也可以,但是你要自己去每个数据块里面定义变量,比较麻烦,或者也可以直接把所有同学的成绩的数据全写到一个块里面,但这样容易数据混乱。
还有就是FB里面是有静态变量的,而FC没有,FC有return,FB没有至于这两的用法,请参看相关资料。
- 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