TRIO-basic指令--函数FUNCTION
TRIO-basic支持函数(强类型)编程,与PLC来相比较的话类似于定义的功能块可以重复调用,和C,C#......等一些高级的编程语言的函数类似。上一次的demo中决定尝试TRIO的函数来做一些例子,以后大家在开发中可以更据自己的实际情况来决定是否使用函数。
下面介绍指令及例子:
FUNCTION
Type:
Function
Syntax:
FUNCTION name([param1 AS type[, param2 AS type[, param3 AS type …. ]]]) 函数 名称(参数1 AS 类型[, 参数2 AS 类型[, 参数3 AS 类型................]]])
Description:
User defined function residing in a function library for use by any BASIC program in the Motion Coordinator multi-tasking system. A function must as a minimum have a name and finish with the ENDFUNC keyword. The contents of the function can take any BASIC commands provided that they work in the context of the required function operation.
用户定义的函数驻留在函数库中,供Motion Coordinator多任务系统中的任何BASIC程序使用。 函数必须至少具有名称并以ENDFUNC关键字结束。 函数的内容可以采用任何BASIC命令,只要它们在所需的函数操作的上下文中工作。
FUNCTION requires a matching ENDFUNC keyword to complete a function definition. Parameters are optional (maximum of 16) and should be specified within parentheses; parameters of the same data type can be separated by commas.
FUNCTION需要匹配的ENDFUNC关键字才能完成函数定义。 参数是可选的(最多16个),应在括号内指定; 相同数据类型的参数可以用逗号分隔。
A return parameter is also optional and should be specified at the end of the line.
返回参数也是可选的,应在行尾指定
FUNCTION may be used only within a Function Library.
FUNCTION只能在函数库中使用。
BASIC Library files support a smaller subset of commands compared with standard program files. For example, GOSUB and GOTO are not supported within a BASIC Library file.
Library functions can have a nested hierarchy of calls to other library functions to a maximum depth of 5 levels, the maximum number of parameters that can traverse through this hierarchy is 200.
库函数可以具有对其他库函数的嵌套层次结构,最大深度为5级,可以遍历此层次结构的最大参数数为200。
Parameters:
param1: |
First optional parameter to be passed into the function 要传递给函数的第一个可选参数 |
param2: |
The second parameter if required 如果需要第二个参数 |
param3: |
The third parameter if required 如果需要第三个参数 |
paramN: |
Up to 16 parameters may be passed 最多可以传16个参数 |
Array parameters:
Support for passing arrays into functions is available and enabled by using optional brackets () after the parameter data type, note that there is no need to specify array dimensions, for example;
通过在参数数据类型之后使用可选的括号(),可以支持将数组传递给函数,例如,注意不需要指定数组维度;
FUNCTION f1(data AS INTEGER(), b AS FLOAT) AS BOOLEAN
Array attributes are provided to support generic arrays. Therefore a function can be re-used with arrays of varying dimensions.
提供数组属性以支持通用数组。 因此,函数可以与不同维度的数组一起使用。
<array name>.dims – integer value indicating the number of array dimensions
<array name> .dims - 表示数组维数的整数值
<array name>.dimsize(n) – integer value indicating the length of the specified dimension
Note that array attributes may be used within any program and are not restricted to BASIC library files.
请注意,数组属性可以在任何程序中使用,并且不限于BASIC库文件。
Local variables:
Functions can declare their own local variables using DIM statements, for example
例如,函数可以使用DIM语句声明自己的局部变量
FUNCTION myfunc AS INTEGER
DIM a, b AS INTEGER
DIM t AS TARGET
DIM x AS FLOAT(5)
… ENDFUNC
Local variable names can be reused within multiple functions in the same library file. A variable named xx in one function is different to xx in another function.
可以在同一库文件中的多个函数中重用局部变量名。 一个函数中名为xx的变量与另一个函数中的xx不同。
Process variables:
Variables can be declared within a library file using DIM statements outside of the context of FUNCTION..ENDFUNC structures, these variables are visible to all functions within the library but each process that utilises the library functions maintains its own copy. The data contained within the variables is persistent; hence if one function changes a variable then another function will also see the changed value, but only within the same process.
可以使用FUNCTION..ENDFUNC结构上下文之外的DIM语句在库文件中声明变量,这些变量对库中的所有函数都是可见的,但是利用库函数的每个进程都维护自己的副本。 变量中包含的数据是持久的; 因此,如果一个函数更改了一个变量,那么另一个函数也会看到更改的值,但只能在同一个过程中。
Returning data to the caller:
The keyword RETURN is not new but behaves differently within the context of a function. Used within a function this command returns execution back to the caller but is also used to return data back to the caller when the function has a return data type defined. Multiple RETURN statements are permitted within a single function definition.
关键字RETURN不是新的,但在函数的上下文中表现不同。 在函数中使用此命令将执行返回给调用者,但也用于在函数定义了返回数据类型时将数据返回给调用者。 在单个函数定义中允许多个RETURN语句。
Examples:
下面是测试的一些简单的函数:
编写的函数库代码:
函数库代码:
'TRIO-basic函数库 'printf_function 输出函数
FUNCTION printf()
PRINT#,"hello,world"
ENDFUNC 'sun function 加法函数 num1 num2 整型的值
FUNCTION sum(num1 AS INTEGER,num2 AS INTEGER)
DIM sum_value AS INTEGER
sum_value = num1+num2
PRINT#,sum_value
ENDFUNC '比较函数 num1 num2 整型的值
FUNCTION return_fun(num1 AS INTEGER,num2 AS INTEGER) AS BOOLEAN
DIM return_value AS BOOLEAN
IF num1 > num2 THEN
return_value = TRUE
ELSE
return_value = FALSE
ENDIF
RETURN return_value
ENDFUNC '递归函数 value 输入的值
FUNCTION d_fun(value AS INTEGER) AS INTEGER
IF value <= THEN
RETURN
ELSE
RETURN value + d_fun(value - )
ENDIF
ENDFUNC
调用函数的代码:
DIM return_value,d_value AS INTEGER '调用函数
printf() 'hello world PRINT CHR() sum(,) ' PRINT CHR() return_value = return_fun(,) '比较函数
PRINT return_value 'false PRINT CHR() d_value = d_fun()
PRINT d_value '
若大家有不同的想法或者测试过一些函数等可以在评论区留言分享。
TRIO-basic指令--函数FUNCTION的更多相关文章
- Javascript自执行匿名函数(function() { })()的原理分析
匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hell ...
- JavaScript自运行函数(function(){})()的理解
今天打开JQuery源文件(jquery-1.8.3), 看到JQuery的初始化过程是这样的 (function( window, undefined ) { // .... })( window ...
- 深入理解javascript中的立即执行函数(function(){…})()
投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...
- javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)
写作缘由: 平时再用js写函数的时候,一般都是以惯例 function fn () {} 的方式来声明一个函数,在阅读一些优秀插件的时候又不免见到 var fn = function () {} 这种 ...
- 函数(Function)作用域 / 远程函数执行
函数跟变量一样也是有作用域的:Global.Script.Local.Private Global:作用于整个PowerShell会话,只要PowerShell会话不结束,被Global修饰的变量和函 ...
- Javascript自执行匿名函数(function() { })()的原理浅析
匿名函数就是没有函数名的函数.这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一 ...
- Javascript学习之函数(function)
在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...
- js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( ))
( function(){…} )() ( function (){…} () ) 是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达 ...
- 深入理解立即执行函数(function(){})();
( function(){-} )()和( function (){-} () )是两种javascript立即执行函数的常见写法,要理解立即执行函数,需要先理解一些函数的基本概念. 1,函数声明,函 ...
随机推荐
- 用百度地图API分析打交通大数据
百度地图API, 文档不全,例子不细致. 在网上还没有太多有用的例子.比如说下面几个需求的解决方案就找不到: 1. 如何用百度地图API查询一个地点的经纬度. 2. 如何用百度地图通过一个经纬度查询商 ...
- 应用生命周期终极 DevOps 工具包
[编者按]本文作者为 Kevin Goldberg,主要介绍了在开发.运营应用的完整生命周期当中,可能用到的 DevOps 工具大集合.文章系 OneAPM 工程师编译整理. DevOps工具包中合适 ...
- SQLServer基础之数据页类型:GAM,SGAM,PFS
简介 我们已经知道SQL Server IO最小的单位是页,连续的8个页是一个区.SQL Server需要一种方式来知道其所管辖的数据库中的空间使用情况,这就是GAM页和SGAM页. GAM页 GAM ...
- Linux内核线程kernel thread详解--Linux进程的管理与调度(十)
内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程 ...
- 下载Eclipse、下载Java各个版本,来这里就对了
Eclipse官网:http://www.eclipse.org/ 不信你去看看 Java官网:https://www.java.com/ 不信你去看看 可惜是,每次进入官网提示都是下面这样的:来,我 ...
- 【PAT】B1012 数字分类
注意逻辑的描述,只要认真看题,就能做对,如果自己结果一直不正确,请仔细推一下样例结果 #include<stdio.h> int arr[1005]; int main(){ int N, ...
- Git Extensions 使用小结
1.查看仓库 2.创建分支 然后会自动创建一个 Commit ,推送到远端分支即可. 3.合并分支 注意1.自动提交需要没有无法自动合并的冲突才行. 注意2.快进线指的是将别人的提交原封不动附加到自己 ...
- 【2018.05.09 Python学习及实践】个人项目中使用的Python库备忘-持续更新
科研中无论是使用C/C++.Python.Matlab,如果能找到合适的库可谓是事半功倍: 有时候忙活半天才发现本身就有成熟的库可用,自己实现的在功能.性能.安全性上都远远不及,虽然锻炼了能力,但存在 ...
- Java-Socket实现文件的断点续传
前段时间因为任务需要本人这个java渣渣开始研究如何用java实现简单的文件断点续传.所谓的文件断点续传,我的理解是文件在传输过程中因为某些原因程序停止运行文件终止传输,下一次重新传输文件的时候还能从 ...
- own address as source address
1222.762730] br0: received packet on nbif0 with own address as source address[ 1222.769697] br0: rec ...