西门子博途:向块传递参数

科技   2024-11-10 20:27   吉林  

函数块 (FB) 和函数 (FC) 有三种不同接口类型:

● IN

● IN/OUT

● OUT

函数块和函数通过 IN 和 IN/OUT 接口类型接收参数。块对这些数据进行处理,此后,通过 IN/OUT 和 OUT 接口类型将返回值传回调用者。

用户程序采用以下两种方法中的某一种传递参数。

传值

用户程序以“传值”(call-by-value) 方式将参数传递给某个函数时,用户程序会将实际参数值复制给块的 IN 接口类型的输入参数。该操作期间,被复制值要求使用额外存储空间。

传引用 

用户程序以“传引用”(call-by-reference) 方式向某个函数传递参数时,用户程序将引用 IN/OUT 接口类型的实参地址,不进行值复制操作。该操作过程不需要额外的存储空间。

块优化和参数传递

对于简单数据类型(例如,INT、DINT 和 REAL 型),用户程序可以以“传值”方式传递函数块的参数。传递复杂数据类型(例如,STRUCT、ARRAY 和 STRING)时,可以采用“传引用”方式。

用户程序传递的函数块参数通常在和该函数块相关的背景数据块 (DB) 中:

● 通过将参数复制给背景数据块,或者,复制位于背景数据中参数,用户程序可以以“传值”方式传递简单数据类型(例如,INT、DINT 和 REAL)的参数。

● 用户程序将复杂数据类型(例如,STRUCT、ARRAY 和 STRING)复制到用于 IN 和 OUT 参数类型的背景数据块中,或者,复制位于该背景数据块中的复杂数据类型。

● 对于 IN/OUT 接口类型,用户程序以“传引用”方式传递复杂数据类型。

可以创建用来处理优化或非优化数据的函数块和函数。可以选择复选框“优化块访问” 

(Optimized block access),将其作为块的属性。默认情况下,用户程序会优化程序块;程序块期望传递给该块的数据采用优化格式。

用户向某个函数传递复杂参数(例如,STRUCT 结构的参数)时,系统会检查包含该结构的数据块的优化设置和程序块的优化设置。如果你同时优化该数据块和该函数,用户程序将以“传引用”方式传递该结构 (STRUCT)。如果选择了不优化该数据块和该函数,也采用“传引用”方式传递该结构。

但是,如果函数和数据块采用不同优化设置(即,优化了一个块且没有优化另一个块),则必须将 STRUCT 转换成函数所期望的格式。例如,如果选择了不优化该数据块但优化该函数,则数据块中的 STRUCT 须转换成优化格式后才能被该函数进行处理。该转换过程由系统完成,其方法是:先制作该 STRUCT 的一个“副本”,接着,将它转换成该函数所期望的优化格式。

总而言之,当用户程序将某个复杂数据类型(例如,STRUCT)作为 IN/OUT 参数传递给某个函数时,该函数希望用户程序以“传引用”方式传递 STRUCT。

● 对于含该结构的数据块和该函数,如果都选择了优化或者不优化,用户程序将以“传引用”方式传递数据。

● 如果对数据块和函数没有配置相同的优化设置(优化其中一个且不优化另一个),系统必须先制作 STRUCT 的一个副本,再将其传递给函数。由于系统必须制作该结构的副本,因此,该操作可以高效地将“传引用”转换成“传值”。

优化设置对用户程序的影响作用

如果 HMI 或中断组织块更改了结构中的元素,参数复制将可能导致用户程序出现问题。例

如,某个函数有一个 IN/OUT 参数(正常情况下以“传引用”方式传递),但是,数据块和

该函数采用了不同的设置,则:

1. 用户程序准备调用该函数时,系统必须制作该结构的一个“副本”,以将该数据的格式转换

成与该函数相匹配的格式。

2. 用户程序采用该结构的该“副本”的引用调用该函数。

3. 该函数运行期间出现了一个中断组织块,且该中断组织块更改了原结构中的某个值。

4. 该函数运行完毕。由于该结构是一个 IN/OUT 参数,因此,系统将该值以原来的格式复制回原结构。

采用制作结构副本的方式进行格式转换的后果:该中断组织块改写过的数据将被丢失。对于采用 HMI 写入的值,情况也同样如此。HMI 也可能中断用户程序的执行,并以和中断组织块相同的方式写入某个值。






机器人及PLC自动化应用
机器人技术讲解,PLC程序分析讲解,PLC机器人自动化培训. 以工业自动化培训为主.也会有些个人喜爱的军事和休闲.
 最新文章