功能块与数据块的关系
功能: Function , 简称 FC功能块: Function Block , 简称 FBFB和FC根本的区别是:FB支持静态变量,而FC只支持临时变量。静态变量:是调用FB返回时,仍然要为FB保留此变量区,因此不会改变这一区域的数据值。临时变量却没有这样的特*。所以在FC中如果在对临时数据变量处写入确定的数据前,就去读时就可能产生不可预见的结果,而对于静态变量却不会,因为它会保留你上次写入的结果。另外,楼下的某位大侠的回答也很详细,你可以看看——“我简单的说说FB和FC的区别,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的输出读出来呢?
¥
5
百度文库VIP限时优惠现在开通,立享6亿+VIP内容
立即获取
功能块和功能的区别
功能: Function , 简称 FC
功能块: Function Block , 简称 FB
FB和FC根本的区别是:FB支持静态变量,而FC只支持临时变量。
静态变量:是调用FB返回时,仍然要为FB保留此变量区,因此不会改变这一区域的数据值。临时变量却没有这样的特*。
所以在FC中如果在对临时数据变量处写入确定的数据前,就去读时就可能产生不可预见的结果,而对于静态变量却不会,因为它会保留你上次写入的结果。
第 1 页
另外,楼下的某位大侠的回答也很详细,你可以看看——
“
我简单的说说FB和FC的区别,FB是具有存储功能的,FC没有存储功能,这是一般的理解;FB需要背景数据块,而FC是没有的;参数的传递方式不同,FB的输入输出对应着背景数据块地址,而FC的输入输出是没有实际地址对应的,只有的程序调用时,才会和实际的地址产生对应关系。FB参数传递的是数据,FC参数传递的是数据的地址。
DB是共享数据块,程序中任何地方都可以调用,包括OB,FB,FC。
DI是背景数据块,其内容由调用它的FB创建,仅可由调用的FB来更改其中的数据,其他部分只能读取不能改变其数据。
FB就是需要单独的存储区域的,也就是需要为其分配背景数据块,而FC不需要分配。
在西门子中,上述的区别外,FB,FC是很类似的,但是西门子正在改变这个现状。
如果你要编写可以方便移植的FB,FC的话,你需要遵循下面的建议:
1、FB可以通过建立OUT变量或者IN_OUT变量来获得多个返回值,而FC只能通过功能名来返回单一返回值。
2、所有需要使用的全局变量均需要通过IN变量或者IN_OUT变量来引入FB或者FC中。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!