西门子博途:SCL编程调用函数/调用函数块介绍

描述

调用函数的语法

以下语法用于调用函数:

<函数名称> (参数列表); //标准调用

<操作数>:=<函数名称> (参数列表); //在表达式中调用

函数值

在 SCL 中,提供返回值的函数可在任何表达式中代替操作数。因此,返回值也称为 SCL 中的“函数值”。

函数的调用选项取决于函数是否将函数值返回到调用块。

在 RET_VAL 参数中定义函数值。如果 RET_VAL 参数为 VOID 数据类型,则函数不会向调用块返回值。如果 RET_VAL 参数为另一种数据类型,则函数会返回该数据类型的函数值。

在 SCL 中,RET_VAL 参数可以使用除 ANY、ARRAY、STRUCT 和 VARIANT,以及 TIMER 和 COUNTER 参数类型之外的所有数据类型。

调用选项

SCL 中的调用函数有两种可能:

函数(有和没有函数值)的标准调用

使用标准调用,可以将函数的结果作为输出参数或输入输出参数。

在有函数值的函数中调用表达式

返回函数值的函数可以在任何表达式中代替操作数,例如,在赋值表达式中。

函数计算函数值(与函数同名),并将其返回到调用块。这里,该值可替换此函数调用。

调用后,函数的结果将作为函数值或作为 output 和 in-out 参数提供。

递归块调用

用户可采用递归方式进行块调用。即,块可以自我调用。请注意,此类调用的深度限值为 24 级,且不支持多重背景。

参数列表

如果要从 SCL 块调用另一个代码块,则需要为被调用块的形参提供实参。

可以通过赋值指令指定这些参数。该赋值指令可以为被调用块中定义的参数进行赋值(实参)。

调用后将在括号内直接列出被调用代码代的形参。输入参数和输入输出参数的赋值标识符为“:=”,输出参数的赋值标识符为“=>”。参数后面的灰色占位符表示所需的数据类型和参数类型。

参数的指定规则

下列规则适用于为函数指定参数:

必须提供该函数的所有参数。

赋值的顺序不重要。

常数、变量和表达式可作为实参。

形参和实参的数据类型需匹配。也选择某些特定实参,其数据类型可隐式转换为形参的数据类型。

各赋值操作通过逗号进行分隔。

如果被调用的块中只有一个参数,那么在括号中指定的就是实参。无需再指定形参。

在 SCL 中调用函数时,无法通过 EN 使用释放机制。可以使用 IF 声明代替有条件调用函数。

  调用函数快的语法 下列语法用于以单个背景或多重背景方式调用函数块:

单个背景:

如果函数块来自项目: (参数列表)

如果函数块来自“指令”(Instructions) 任务卡: .<指令名称> (参数列表) 或 <指令名称> (参数列表)

多重背景 <#背景名称> (参数列表)

以单个背景或多重背景的方式调用

可以单个背景或多重背景方式调用函数块。

以单个背景方式进行调用

调用的函数块将其数据存储在自身的数据块中。

以多重背景方式进行调用

调用的函数块将其数据存储在调用函数块的背景数据块中。

关于调用类型的更多信息,请参见“另请参见”。

递归块调用

用户可采用递归方式进行块调用。即,块可以自我调用。请注意,此类调用的深度限值为 24 级,且不支持多重背景。

参数列表

如果要从 SCL 块调用另一个代码块,可以为被调用块的形参提供实参。

可以通过赋值指令指定这些参数。该赋值指令可以为被调用块中定义的参数进行赋值(实参)。

调用后将在括号内直接列出被调用代码代的形参。输入参数和输入输出参数的赋值标识符为“:=”,输出参数的赋值标识符为“=>”。参数后面的占位符表示所需的数据类型和参数类型。

参数的指定规则

下列规则适用于指定参数:

常数、变量和表达式可作为实参。

赋值的顺序不重要。

形参和实参的数据类型需匹配。也选择某些特定实参,其数据类型可隐式转换为形参的数据类型。

各赋值操作通过逗号进行分隔。

如果被调用的块中只有一个参数,那么在括号中指定的就是实参。无需再指定形参。

  SCL 中调用函数的示例

标准调用

以下为标准函数调用 FB 的示例:

SCL
// 标准函数调用
"MyFC" (MyInput := 10, MyInOut := "Tag1");

结果

执行 "MyFC" 块之后,输入/输出参数 "MyInOut" 中确定的值可用于调用块的 "Tag1" 中,而且需要在此做进一步处理。

以赋值方式调用

以下为以赋值方式调用函数的示例:

SCL
(*在赋值表达式中调用,为 "MyFC" 定义了函数值*)
#MyOperand := "MyFC" (MyInput1 := 3, MyInput2 := 2, MyInput3 := 8.9, MyInOut := "Tag1");

结果

"MyFC" 的函数值将传输到 "#MyOperand" 中。

以算术表达式方式进行调用

以下为以算术表达式的方式调用函数的示例:

SCL
(*在数学表达式中调用,为 "MyFC" 定义了函数值*)
#MyOperand := "Tag2" + "MyFC" (MyInput1 := 3, MyInput2 := 2, MyInput3 := 8.9);

结果

"MyFC" 的函数值将加到 "Tag2" 上,并将结果传送到 "MyOperand"。

在 SCL 中调用函数块的示例

  以单个背景方式进行调用 以下为以单个背景方式调用 FB 的示例:    

SCL
// 以单个背景方式调用 "MyDB" (MyInput:=10, MyInout:= "Tag1");

结果

执行调用之后,输入/输出参数 "MyInout" 中确定的值可用于 "MyDB" 数据块的 "Tag1" 中。

以多重背景方式进行调用

以下为以多重背景方式调用 FB 的示例:

SCL
// 以多重背景方式进行调用
#MyFB (MyInput:= 10, MyInout:= "Tag1");

结果

执行 "#MyFB" 块之后,in/out 参数 "MyInout" 中确定的值可用于调用代码块中该数据块内的 "Tag1"。

 





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分