下面是我在西门子的一个资料里找到的有关FC的基本数据类型的参数传送机理的图:
下面是有关的文字说明:
传递机理
随着调用指令CALL,STL/LAD/FBD编辑器首先根据参数列表中给出的实际参数,计算交叉区域指针,并在FC调用指令之后立即存贮这些指针。
此时,如果在该FC内部访问形式参数(比如:A On_1),CPU就根据存储在B堆栈中的返回地址确定该FC调用指令。然后根据相关的参数列表,FC就可确定与形式参数对应的实际参数的交叉区域指针。于是,通过这个指针就实现了对实际参数的访问。
这种传递机理与”按引用调用”相一致,如果在某一FC中访问了形式参数,那么,结果也访问了相应的实际参数。 .
这种通过指针的访问机理要求:
在FC调用中,所有的块参数都必须赋值。
在参数声明里,不能对块参数进行初始化。
注意事项
如果是用DB中的实际参数来对块参数进行赋值,或者传递的是复杂类型参数,那么,参数传递将变得更加复杂。
下面的文字来源于STEP7的FC的在线帮助:
将实际参数分配给形式参数:
FC所使用的输入、输出以及输入/输出参数作为指针保存到调用FC的逻辑块的实际参数中。
通过地址(指针跨过区域边界指向目标)访问FC参数。当数据区(数据块)地址或调用块的局部变量用作实际参数时,实际参数的副本将临时保存到用于传送参数的调用块的本地数据区中。