17838383235
西门子6ES7833-1CC02-0YK5
报价: 面议
最小起订: 1
有效期至: 长期有效
发布时间: 2024-07-18 03:12
发布IP: 175.13.200.42
浏览次数: 16
手机号: 17838383235
在线咨询: 点击这里给我发消息
17838383235
详细信息

函数 (FC) 的参数

函数没有可以存储块参数值的数据存储器。因此,调用函数时,必须给所有形参分配实参。

输入参数 (Input)

每次块调用前,只能读取输入参数一次。这样,在块中写入一个输入参数时,不会对实参造成影响;而仅写入形参。

输出参数 (Output)

每次块调用之后,只能读取输出参数参数一次。这样,就不会读取块中的输出参数。请注意,如果仍需读取输出参数,将只会读取该形参的值。无法读取该块中实参的值。

如果在函数中没有写入该函数的输出参数,那么将使用为特定数据类型预定义的值。例如,BOOL 类型的预定义值为“false”。但结构化的输出参数不会预先赋值。

为了防止对预定义的值或未定义的值进行其它意外处理,则需在进行块编程时注意以下事项:

对于块中的所有程序路径,请确保将值写入输出参数。为此,请注意跳转命令可能会跳过设置输出的指令序列。

请注意,置位和复位命令取决于逻辑运算的结果。如果输出参数值通过这些命令和 RLO = 0 来确定,则不会生成值。

可以的话,请为函数的输出参数分配一个默认值。

输入/输出参数 (InOut)

在块调用之前读取输入/输出参数并在快调用之后写入。如果在块中读取或写入参数,那么只能访问形参。

具有结构化数据类型的输入/输出参数不属于以上情况。结构化的数据类型中可包含多种数据元素,如 ARRAY 或 STRUCT。这些元素将通过一个指针传递给被调用块。因此,在块中读取或写入结构化输入/输出参数时,将始终访问实参。

函数的输入/输出参数不会写入该函数中,而是将之前的输出值或输入值用作为函数值。因此,需要注意上述有关输出参数的信息,这样才可对旧值处理得当。

临时局部数据 (Temp)

在进行块处理过程中,仅支持临时局部数据。具体的处理方式,取决于块的优化设置:

标准访问

下列规则适用于可标准访问的代码块以及设置了持久性“在 IDB 中设置”(Set in IDB) 的所有变量:

如果正在使用临时局部数据,则必须确保在使用前对值进行初始化。否则,这些值将为随机数。WSTRING 数据类型的 STRING 临时数据例外:系统将自动预分配实际长度 0。

优化访问

以下规则适用于可优化访问的代码块:

如果函数中未写入临时变量,则将使用指定数据类型的预定义值。

下表列出了一些预定义值示例:

数据类型预定义的值
BoolFalse
Int0
REAL0.0
Char' '
WcharWCHAR#' '
DTLDTL#
DATE_AND_TIMEDT#
DateD#

对于 PLC 数据类型的元素,将预先赋值 PLC 数据类型 (UDT) 声明中所指定的默认值。

即使应用于 PLC 数据类型中,STRING 和 WSTRING 均预指定为实际值“0”。

即使应用于 PLC 数据类型中,ARRAY 数据类型的元素将预指定为值“0”。

函数值 (Return)

通常,函数会计算函数值。可以通过输出参数 RET_VAL 将此函数值返回给调用块。为此,必须在函数的接口中声明输出参数 RET_VAL。RET_VAL 始终是函数的输出参数。参数 RET_VAL 可以是除 ARRAY 和 STRUCT 以及 TIMER 和 COUNTER 参数类型之外的所有数据类型。

在 SCL 编程语言中,函数可以在表达式中直接调用。然后,根据计算出的函数值得出表达式结果。因此,SCL 中函数值不能为数据类型 ANY。

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"。


相关产品
相关西门子产品
联系方式
  • 地址:中国(湖南)自由贸易试验区长沙片区开元东路1306号开阳智能制造产业园(一期)4#栋301
  • 手机:17838383235
  • 联系人:徐嘉泉
产品分类
最新发布
企业新闻
站内搜索