Function...Fend

以Function语句开始并以Fend语句结束的、可执行程序的最小单位是1个函数。

格式
Function 函数名 [(自变量列表)] [As型(函数)]
语句
Fend

参数

函数名称
对以Function开始并以Fend命令结束的语句组,将名称指定在64个字母以内。还可以使用下划线。
自变量列表
指定调用时赋予函数自变量的变量列表。如果是多个变量,用逗号进行分隔。可省略。
自变量的格式如下。

[ {ByRef | ByVal}​ ] 变量名 [( )] As 型(自变量)

指定变量的传递方式为ByRef/ByVal之一。省略时,视为指定ByVal。

ByRef
参照要调用的函数的变量时,指定ByRef。此时,可以将函数内的自变量的变更反映到调用的变量中。
ByVal
是默认设置。如不变更调用函数参照的变量的值,可指定ByVal。可省略。
变量名[()]
自变量的变量名,是必要的参数。请按照变量名的命名方法的规则执行。如要将数组变量用作自变量,请务必指定ByRef,并在变量后面添加空括号“()”以表示数组。
As类型(自变量)
是必要的参数。请声明自变量的类型。
As类型(函数)
是要获取返回值时附加的参数。请声明返回值的类型。

返回值
是在函数声明的最后由As指定的数据类型(As类型(函数))。如果没有声明,则数值0为返回值。

说明
Function语句表示SPEL+语句组的开始。用Fend语句表示1个函数的结束。Function与Fend语句之间的所有语句都被认为是该函数的一部分。

Function与Fend、包括它们之间的所有语句,其本身是一个函数,可以认为是容器那样的语句段。还可以在一个程序文件中使用多个函数。

要使用返回值时,请将数值代入到与函数名同名的变量中,然后结束函数。

有以下调用函数的方法。

  1. 作为Xqt的自变量指定。作为其他任务调用函数。Xqt用于开始指定的函数并立即进行返回。
  2. 作为Call自变量指定。作为子例程调用函数。Call将程序控制移至指定的函数。
  3. 填入函数名称。视为通过Call调用。返回值为字符串时,会发生错误。
  4. 作为命令的自变量指定。函数作为子例程执行,该返回值作为调用方命令的自变量代入。如果作为任务名称指定至Quit等以任务识别符作为自变量的命令中,将不记录自变量和前后的括号。

参阅
Call, Function...Fend, Halt, Quit, Return, Xqt

Function...Fend使用示例
[例1] 下例为1个文件中包括3个函数的示例。task2和task3被main调用并与main一起同时执行。

Function main
  Xqt 2, task2 '同时执行任务2
  Xqt 3, task3 '同时执行任务3
  .
  .
  .
Fend

Function task2
  Do
    On 1
    On 2
    Off 1
    Off 2
  Loop
Fend

Function task3
  Do
    On 10
    Wait 1
    Off 10
  Loop
Fend

[例2] 如下所示为将外围装置的压力控制序列设为自变量、将发送到外部装置时的结果设为返回值并在画面上显示时的函数示例。

Function main
  Integer iResult
  Real Sequence1(200)
  .
  .
  iResult = PressureControl(ByRef Sequence1())   '自变量为数组
  .
  Print "Result:", iResult
  .
Fend

Function PressureControl(ByRef Array1() As Real) As Integer
  .
  (根据Array1数组对外围装置进行压力控制)
  .
  PressureControl = 3    '返回值
  .
  .
Fend

[例3]
下述是因调用函数的方法而有所不同的示例。

Function main

    ' 返回值和自变量均未定义的函数
    Print TaskInfo(SubFunction0, 0)       ' 获取任务名称"SubFunction0"的信息。
    Print TaskInfo((SubFunction0), 0)     ' 作为子例程执行后,返回值"0"超出范围并发生错误。

    ' 返回值已定义的函数
    Print TaskInfo(SubFunction1, 0)       ' 获取任务名称"SubFunction0"的信息。
    Print TaskInfo((SubFunction1), 0)     ' 作为子例程执行后,获取相当于返回值的任务编号信息。

    ' 返回值和自变量均已定义的函数
    Print TaskInfo(SubFunction2, 0)       ' 获取任务名称"SubFunction2"的信息。
    Print TaskInfo(SubFunction2(0), 0)    ' 作为子例程执行后,获取相当于返回值的任务编号信息。

    ' 返回值以字符串定义的函数
    Print TaskInfo(SubFunction1$, 0)      ' 获取任务名称"SubFunction1$"的信息。
    Print TaskInfo((SubFunction1$), 0)    ' 第一自变量的数据类型不同,因此发生创建错误。
Fend

Function SubFunction0
    ・
Fend

Function SubFunction1 As Integer
    ・
    SubFunction1 = 1
Fend

Function SubFunction2(i As Integer) As Integer
    ・
    SubFunction2 = 1
Fend

Function SubFunction1$ As String
    ・
    SubFunction1$ = "main"
Fend