理论教育 结构文本:高效实现多数据类型算法

结构文本:高效实现多数据类型算法

时间:2023-06-28 理论教育 版权反馈
【摘要】:结构文本类似于BASIC语言,利用它可以很方便地建立、编辑和实现复杂的算法,特别是在数据处理、计算存储、决策判断、优化算法等涉及描述多种数据类型的变量应用中非常有效。下列规则适用于ST程序:●每个语句以分号(“;”)分隔符结束。

结构文本:高效实现多数据类型算法

结构文本(Structured Text)类似于BASIC语言,利用它可以很方便地建立、编辑和实现复杂的算法,特别是在数据处理、计算存储、决策判断、优化算法等涉及描述多种数据类型的变量应用中非常有效。

1.结构化文本(ST)主要语法

ST程序是一系列ST语句。下列规则适用于ST程序:

●每个语句以分号(“;”)分隔符结束。

源代码(例如变量、标识符、常量或语言关键字)中使用的名称用不活动分隔符(例如空格字符)分隔,或者用意义明确的活动分隔符(例如“>”分隔符表示“大于”比较)分隔。

●注释(非执行信息)可以放在ST程序中的任何位置。注释可以扩展到多行,但是必须以“(*”开头,以“*)”结尾。

注意:不能在注释中使用注释。

下面是基本ST语句类型:

赋值语句(变量:=表达式;)

函数调用

●功能块调用

●选择语句(例如IF、THEN、ELSE、CASE...)

●迭代语句(例如FOR、WHILE、REPEAT...)

●控制语句(例如RETURN、EXIT...)

●用于与其他语言链接的特殊语句

当输入ST语法时,下列项目以指定的颜色显示:

●基本代码(黑色)

●关键字(粉色)

●数字和文本字符串(灰色)

●注释(绿色)

在活动分隔符、文本和标识符之间使用不活动分隔符可增加ST程序的可读性。下面是ST不活动分隔符:

●空格

●Tab

●行结束符(可以放在程序中的任何位置)

使用不活动分隔符时,需要遵循以下规则:

●每行编写的语句不能多于一条。

●使用Tab来缩进复杂语句。

●插入注释以提高行或段落的可读性。

2.表达式和括号

ST表达式由运算符及其操作数组成。操作数可以是常量(文本)值、控制变量或另一个表达式(或子表达式)。对于每个单一表达式(将操作数与一个ST运算符合并),操作数类型必须匹配。此单一表达式具有与其操作数相同的数据类型,可以用在更复杂的表达式中。

示例:

(boo var1 AND boo var2)BOOL类型

not(boo var1)BOOL类型

(sin(3.14)+0.72)REAL类型

(t#1s23+1.78)无效表达式

括号用于隔离表达式的子组件,以及对运算的优先级进行明确排序。如果没有为复杂表达式加上括号,则由ST运算符之间的默认优先级来隐式确定运算顺序。

示例:(www.daowen.com)

2+3*6相当于2+18=20乘法运算符具有较高优先级

(2+3)*6相当于5*6=30括号给定了优先级

3.调用函数和功能块

ST编程语言可以调用函数。可以在任何表达式中使用函数调用。

函数调用包含的属性见表5-1。

表5-1 函数调用属性

978-7-111-45432-8-Chapter05-10.jpg

(续)

978-7-111-45432-8-Chapter05-11.jpg

当在函数主体中设置返回参数的值时,可以为返回参数赋予与该函数相同的名称:FunctionName:=;

示例

示例1:IEC 61131-3函数调用

(*主ST程序*)

(*获取一个整型值并将其转换成有限时间值*)

ana timeprog:=SPlimit(tprog cmd);

appl timer:=ANY TO TIME(ana timeprog*100);

(*被调用的FBD函数名为“SPlimit”*)

示例2:“C”函数调用-与IEC 61131-3函数调用的语法相同

(*复杂表达式中使用的函数:min、max、right、mlen和left是标准“C”函数*)

limited value:=min(16,max(0,input value));

rol msg:=right(message,mlen(message)-1)+left(message,1);

ST编程语言调用功能块。可以在任何表达式中使用功能块调用。

功能块调用属性见表5-2。

表5-2 功能块调用属性

978-7-111-45432-8-Chapter05-12.jpg

当在功能块主体中设置返回参数的值时,可以通过将返回参数的名称与功能块名称相连来分配返回参数:

FunctionBlockName.OutputParaName:=;

示例

(*调用功能块的ST程序*)

(*在变量编辑器中声明块的实例:*)

(*trigb1:块R TRIG-上升沿检测*)

(*从ST语言激活功能块*)

trigb1(b1);

(*返回参数访问*)

If(trigb1.Q)Then nb edge:=nb edge+1;End if;

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈