2024年3月20日发(作者:惠思懿)
功能: Function , 简称 FC
功能块: Function Block , 简称 FB
FB和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所需背景数据块字节数里的任意位置的
2024年3月20日发(作者:惠思懿)
功能: Function , 简称 FC
功能块: Function Block , 简称 FB
FB和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所需背景数据块字节数里的任意位置的