-
浅谈
FB
与
FC
块的区别及其实际的工程运用
简单的说
FB
是具有存储功能的,
FC
没有存储功能,这是一般的理解:
FB
需要背景数
据块,而
FC
是没有的;参数的传递方式不同,
FB
的输入输出对应背景
p>
DB
地址,而
FC
的
输入输出没有实际地址对应的,只有程序调用时,才会和实际的地址产生关系。
FB
参数传
递的是数据,
FC
参数传递的是数据的地址。
FB
功能块的处理方式是围绕着数据块处理数据,它的输入输出参数都是数据块里的数<
/p>
据,以及
STA
T
的数据都是数据块里的,入口参数和出口参数,这些数据不会因为函数消失
而消失,它
会一直保持在数据块里。
FB
里的变量与它的背景数据块是一一
对应的,而它的
对应并不是一层不变的,
更确切的说,
FB
里的变量在调用时将根据
AR2
的值当作偏移量与
背景数据块是一一对应的。如果一个
FB
功能块没有入口参数、出口参数及
STA
T
数据,它
将不需要背景数据块,这时的
FB
块和没有出、入口参数的
FC
就没什么区别了,也就只能
使用临时变量和全局变量,当然这时的
FB
块是没有实际作用了。
有人会认为,
FB
的背景数据块必须由
FB
生成、
FB
的第一个变量对应背
景数据块的第
一个变量,还有就是由
FB
块生成的数据块只能作
FB
的背景数据块使用。其实这些理解
都
是错误的,
FB
的背景数据块不一定
是通过
FB
生成的,可以像生成共享数据块一样生成
FB
的背景数据块,换句话说,普通的数据块也可以作为
< br>FB
的背景数据块使用,只是这种做发
是有前提的:就是
这个数据块的字节数必须大于或等于
FB
所需的字节数,如果小
于
FB
所
需的字节数,
FB
访问到超出背景数据块的变量时就会找不到变量的地址,
< br>当然也就出错了。
FC
功能块
里的参数没有实际的地址,都是使形参数,只有在调用时才会把实际的参数
地址传送到<
/p>
FC
的参数里。
FC
是没有存储能力的,这是一班的说法,给定入口参数,执行
完了,从出口参数读出数
据,
FC
的功能就消失。如果在
FC<
/p>
里使用全局变量,也可以达到
FB
块一样
的效果,但是这样的
FC
块是没有可移植性的。下面,我将介绍
我根据实际工程,
编写的
FC
与
FB
块
实例
1
:
FC
块(这是一
个用于西门子
PLC
向直流装置
6RA
70
写过程数据的
FC
块)
A(
L
#in0
L
#in1
>R
)
JNB
_001
L
#in1
T
#temp0
_001: NOP
0
A(
L
#in0
L
#in2
<
br>,
)
JNB
_002
L
#in2
T
#temp0
_002: NOP
0
L
#in0
L
#in1
<=R
=
#temp5
L
#in0
L
#in2
>=R
=
#temp5
A
#temp5
A
#temp5
JNB
_003
L
#in0
T
#temp0
_003: NOP
0
L
#in0
L
0.000000e+000
=
#out1
L
#temp0
ABS
T
#temp1
NOP
0
A(
L
#temp1
L
1.638400e+004
*R
T
#temp2
AN
OV
SA
VE
CLR
A
BR
)
JNB
_004
L
#temp2
L
#in1
/R
T
#temp3
_004: NOP
0
A(
L
#temp3
RND
T
#TEMP4
AN
OV
SA
VE
CLR
A
BR
)
JNB
_005
L
#TEMP4
T
#out0
_005: NOP
0
在
FC
块中调用
FC
CALL
FC
30
in0
:=2090
in1 :=6.000000e+002
in2
:=0.000000e+000
out0:=PQW590
out1:=M203.3
NOP
0
从这个程序我们可以看出,
p>
IN0
的地址是
2090
OUT0
的地址是
PQW59
0
。由此
可以看出,在
FC
块中调用
FC30
市并没有把有实际参数的数据传
递给
FC30
的参数里,而
是把地址传
递过去了。这时,在
FC30
里
IN0
的实际地址就是
2090
,
OUT0
的的
实际地址就是
PQW590
,也就是说程序调用
FC
时参数的传送就是传送变量的地址。但是还
有特殊的情况,
在
有传递的参数是立即数和指针时,
情况就不一样了,
在这种情况
下,
会将
数据先给一个局部变量,然后再把该局部变量的地址传
给
FC
的参数里。从这个例子我们可
以
看出
FC
的参数实际就是一个指针,我们在调用
FC
时就给
FC
的这些指针附
值,而这写
指针又是隐含着的。
实例
2
:
FB
块(
这是一个用于西门子
PLC
向
ABB<
/p>
变频器写控制字的
FB
块)
A(
O
#in0
O
#out1
)
AN
#out4
=
L
0.0
A
L
0.0
BLD
102
=
#out1
A
L
0.0
AN
#out2
AN
#out3
JNB
_001
L
#in5
T
#out0
_001: NOP
0
-
-
-
-
-
-
-
-
-
上一篇:细菌耐药性
下一篇:专四dictation 100篇