ST语言Word下载.docx
- 文档编号:21757547
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:15
- 大小:56.77KB
ST语言Word下载.docx
《ST语言Word下载.docx》由会员分享,可在线阅读,更多相关《ST语言Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
(3)函数(Function)
当定义函数的时候,不要忘记函数中必须含有返回值的数据类型,也就是说在函数名的后面必需紧跟冒号和一个数据类型。
二.ST结构化文本编程
1.定义
"
结构"
是指高水平的结构化编程能力,象一个"
结构化的编程"
;
文本"
是指应用文本而不是梯形图和顺序函功能表的能力。
ST语言不能代替其它的语言,每种语言都有它自己的优点和缺点。
ST主要的一个优点就是能简化复杂的数学方程。
2.特点
高级文本编程语言
结构化的编程
简单的标准结构
快速高效的编程
使用直观灵活
与PASCAL类似
有计算机编程经验的人可以很容易地使用它
符合IEC61131-3标准
3.功能
数字量和模拟量I/O
逻辑操作
逻辑比较表达式
算术运算
判断语句
机器的状态语句
循环语句
功能块
可选用的动态变量
诊断工具
4.结构文本基础
IFvalue<
7THEN
WHILEvalue<
8DO
value:
=value+1;
END_WHILE;
END_IF;
4.1 表达式
表达式是指返回变量评估值的结构。
表达式由操作符和操作数组成。
操作数可以
是常量,变量,调用函数或其它表达式。
4.2赋值操作符
通过一个表达式和一个值来给变量赋值。
赋值语句包括位于左边的变量,赋值操
作符"
:
="
,及后边需要计算的表达式。
所有的语句,包括赋值语句,必须要以分
号"
;
结尾。
当这行程序执行后,变量"
Var1"
的值是变量"
Var2"
的两倍。
4.3注释
虽然注释经常被删掉,但它们是源代码中非常重要的一部分。
它们解释了一部分
代码,使程序更易读懂。
注释帮助你或其他人读你的程序,即使过去了很长时
间。
注释不被编译,因此不会影响程序的执行。
注释应该用一对星号和小括号括
起来"
(*comment*)"
。
4.4操作符优先级
如果在一个表达式中使用几个操作符,就会出现优先级的问题(执行的顺序)。
操作符按优先级的顺序来执行。
在任何一个表达式中,首先执行最高级别的操作符,接着执行低一级的操作符,
等等,直到执行完所有的操作符。
具有相同级别的操作符按照书写顺序从左至右
依次执行。
操作符
符号/语言
优先级
括号
()
依次降低
函数调用
例子
Callargument(s)
LN(A),MAX(X),等
注释
**
取反
NOT
乘
*
除
/
取模(取除法的余数)
MOD
加
+
减
-
比较
<
>
<
=,>
=
等于
不等于
>
逻辑与
AND
逻辑异或
XOR
逻辑或
OR
4.5结构文本格式编程格式指令
指令类型
赋值(Assignment)
A:
=B;
CV:
=CV+1;
C:
=SIN(X);
调用功能块或者函数的返回值(CallingafunctionblockanduseoftheFBoutput)
CMD_TMR(IN:
=%IX5,PT:
=300);
=CMD_TMR.Q
返回(RETURN)
RETURN;
IF(条件)
D:
=B*B;
IFD<
0.0THEN
C:
=A;
ELSIFD=0.0THEN
ELSE
=D;
CASE(分支)
CASEINT1OF
1:
BOOL1:
=TRUE;
2:
BOOL2:
=FALSE;
END_CASE;
FOR(循环)
J:
=101;
FORI:
=1TO100BY2DO
IFARR[I]=70THEN
J:
=I;
EXIT;
END_IF;
END_FOR;
WHILE(循环)
=1;
WHILEJ<
=100ANDARR[J]<
70DO
=J+2;
END_WHILE;
REPEAT(重复)
=-1;
REPEAT
UNTILJ=101ORARR[J]=70
END_REPEAT;
EXIT(退出)
EXIT;
Emptyinstruction(空指令)
用结构文本编程格式编写的程序与其它格式的编程语言相比出错概率低,编写的程序具有可读性高的特点。
(1)调用功能块(Callingafunctionblock)
结构文本编程格式通过在功能块名后面的括号里分配参数值来调用功能块的功能
在下面的例子中通过分配参数IN和PT的值调用一定时器功能块,它的结果变量的值被赋给变量A。
(2)返回指令(RETURNinstruction)
返回指令用来结束函数调用,当条件满足时返回主程序
(3)条件指令(IFinstruction)
使用IF指令检验是否满足条件,当条件满足时执行相应的的指令
语法:
IF<
布尔表达式_1>
THEN
<
IF_指令>
{ELSIF<
布尔表达式_2>
ELSIF_指令1>
.
ELSIF<
布尔表达式_n>
ELSIF_指令n-1>
ELSE_指令>
}
{}里面的内容是可选的。
如果<
布尔表达式1>
的返回值为真(TRUE),那么只有<
IF_指令>
被执行,而其它的指令
不执行。
否则检验<
布尔表达式2>
的返回值是否为真,这样连续判断<
布尔表达式n>
的返回值,直到返回值为真时执行对应的指令。
如果执行到最后表达式的返回值也没有为真,那么执行<
例:
IFtemp<
17
THENheating_on:
ELSEheating_on:
这段程序控制加热功能的开启和关闭,当温度高于17度时不加热,当温度低于17度时就加热。
(4)分支指令(CASEinstruction)
使用分支指令可以将一些具有相同条件变量的指令结合在一个结构中
CASE<
变量1>
OF
=1>
指令1>
=2>
指令2>
...
=n>
指令n>
ELSE<
ELSE指令>
CASE指令根据下面的模式处理程序:
如果变量的值为i,那么执行<
指令i>
中的指令。
如果没有相应的变量的值,那么执行ELSE指令
如果需要几个不同的变量值执行相同的指令,那么可以将几个变量值写在一起用逗号隔开,后面接需要执行的指令。
1,5:
BOOL1:
BOOL3:
=NOTBOOL1;
=BOOL1ORBOOL2;
(5)循环指令(FOR)
步长Stepsize>
}DO
指令Instructions>
使用FOR循环指令可以重复程序处理的过程。
整形变量INT_Var:
INT;
FOR<
整形变量INT_Var>
=<
初始值INIT_VALUE>
TO<
终止值END_VALUE>
{BY
{}中的内容可选的.
只要<
INT_Var>
中的计数值不大于<
END_VALUE>
就重复执行<
Instructions>
中的指令。
在执行指令之前就检验这个条件,如果条件得不到满足就不执行
当指令被执行一次之后<
就增加
Stepsize>
中的相应值。
当得到<
大于<
的条件时就
停止循环。
FORCounter:
=1TO5BY1DO
Var1:
=Var1*2;
Res:
=Var1;
我们假设Var1的初始值为1,那么循环结束时变量Var1的值为32。
(6)循环指令(WHILEloop)
WHILE循环指令的用法与FOR循环指令相似,它们的不同之处在于WHILE循环的判断条件有些不同,它可以是任何布尔表达式。
也就是说只要满足你给定的条件时,就执行循环指令。
WHILE<
布尔表达式>
指令>
的返回值为真TRUE,也就是条件满足的时候,<
将重复执行,直到<
的返回值为假FALSE。
如果在第一次判断条件时就不满足,那么没有执行一次指令循环就结束了。
当<
的返回值始终为真时,指令就无限的循环执行下去,进入死循环状态。
这在编程时要尽量避免。
WHILEcounter<
0DO
Var1:
=Var1*2;
Counter:
=Counter-1;
END_WHILE
WHILE循环和REPEAT循环在某种意义上来说比FOR循环更实用,因为在某种情况下我们不能确定循环的次数,在这种情况下只能用WHILE循环指令或者REPEAT循环指令。
但是FOR循环指令的循环次数是一定的,所以用FOR循环指令编程可以避免死循环的出现。
(7)循环指令(REPEATloop)
REPEAT循环指令不同于WHILE循环指令的地方在于指令执行条件的判定顺序,REPEAT循环指令在判断条件之前就执行指令,也就是说REPEAT循环指令至少可以执行一次而不考虑判定条件。
WHILE循环指令就不同,可能指令一次也不执行就终止循环。
UNTIL<
当<
的返回值为真时,就是说判定条件满足的时候就终止循环。
在第一次检验的时候满足条件,那么整个循环只执行一
次。
如果条件始终得不到满足,进入死循环状态,编程时需尽量避免这种情况的发生。
UNTIL
Counter=0
(8)退出指令(EXITinstruction)
如果EXIT指令出现在FOR、WHILE、REPET循环指令里面的时候,循环将不考虑中断条件是否满足就无条件中断正在进行中的循环。
4.6布尔逻辑操作
操作数不需要是BOOL类型。
布尔逻辑操作:
符号
a:
=NOTb;
=bANDc;
=bORc;
异或
=bXORc;
这些操作符可以形成一个逻辑表达式和条件语句,结果是真(TRUE)或(FALSE)。
4.7算术运算
4.7.1 基本的算术运算
ST为应用程序提供了以下基本的算术运算:
算术操作
:
赋值
=b;
a:
=b+c;
=b-c;
=b*c;
=b/c;
取模(显示余数)
=bmodc;
数据类型是非常重要的参数,结果也依赖于语法和数据类型。
表达式左边的数据类型应该等同于(或大于)右边的数据类型。
4.7.2隐形数据类型转换
该类型的转换由编译器完成。
编译器将表达式中低的数据类型转换成高的数据类
型。
如果有两种或多个类型的变量参与运算,那么必须将它们转换成相同的类型
以便执行运算。
数据类型
BOOL
SINT
INT
DINT
USINT
UINT
UDINT
REAL
\
4.7.3显性数据类型转换
当两个变量在计算时,所得结果超过了某一类型数据所表示的范围,只是就需要显示的进行数据转换。
4.7.4比较操作
高级编程语言ST或以允许比较操作的简单结构分枝。
比较的结果是真(TRUE)或假(FALSE)。
逻辑比较含义
Ifa=bthen
Ifa<
bthen
大于
Ifa>
bthen
不小于
=bthen
小于
不大于
比较操作作为一个逻辑条件用在IF,ELSE,WHILE和UNTIL语句中.
4.8调用功能模块
ST中调用功能块的方法:
写出功能块的名称,并在括号中给的需的输入参数分
配变量名。
在调用功能块之前,需要给输入参数分配所需的值。
功能块调用放在一行里,以
分号结束。
在调用功能块之后才能读取FB输出值。
首先是功能块的名称,接着是位于括号里的输入参数。
输入参数用逗号隔开。
功
能块调用以分号结束。
4.9指针和动态变量
在运行时,系统给动态变量PV分配了一个内存地址,这个过程叫做动态变量的
寻参或初始化。
当一个动态变量被初始化后,根据数据类型它可以获得它所指向的存储器的内容。
//DynVarACCESSADR(statVar)
用ADR()操作符,返回的是小括号中变量的地址,为UDINT类型。
这行语句应该
以分号“;
”结束。
三梯形图与结构化文本间的转换
3.1梯形图的数据结构
梯形图的主要数据结构如下所示:
typedefstruct_node{
unsignedinttype;
//节点类型
Posp;
//节点位置
ParamList*Param;
//节点参数
void*firstin;
//入弧
void*firstou;
t//出弧
intIn;
//入度
intOu;
t//出度
intcurIn;
//当前入度
intcurOu;
//当前出度
intvisited;
//是否已访问标识
struct__node*nex;
t//下一节点
}Node;
//节点数据结构
typedefstruct__arc{
Node*tai;
l//弧指向的尾节点
Node*head;
//弧指向的头节点
struct__arc*hlink;
//指向弧头相同的另一条弧
struct__arc*tlink;
//指向弧尾相同的另一条弧
}Arc;
//弧数据结构
3.2梯形图存储结构
将梯形图转换为AOV图,然后再对其进行拓扑排序,对各节点进行处理。
3.3梯形图向结构文本的转换
梯形图向结构文本的转换主要是通过对本文前一部分建立的AOV图的各节点进行拓扑排序,然后对节点分类处理.拓扑排序的方法是,从上往下从左到右检索各节点,处理当前入度为0的节点,并将其访问位标识,将其每个出弧指向的头节点的当前入度减1,并删除该出弧,然后处理下一个当前入度为0的节点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ST 语言