ST语言学习心得
一、
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
的简介和建立工程
1.工程文件的结
工程文件的后缀名为pro,在新工程中建立的第一个程序结构单元(Program Organization Unit)将被自动命名为PLC_PRG,这个程序结构单元就类似于C
语言中的主程序。在PLC_PRG中可以调用各种函数及功能块,而函数和功能块都属于程序结构单元。
PLC-1131-3 DS能够区分在同一工程中的不同对象:
程序结构单元(POU)
数据类型(data types)
资源(resources)
2.工程的设置:
1) 首先应该设置PLC的输入输出以保证工程中使用的地址的准确性。
2)接着建立解决问题的程序结构单元
3) 选择适当的语言编写程序
4) 写好程序之后,对程序进行编译去除程序中的所有错误。
3.工程的测试:
当工程之中的所有错误被去除之后激活仿真模式,就是与仿真PLC连接,与此同时将工程下载到PLC中,这样 PLC-1131-3 DS就处于在线方式了。
现在能以适当的顺序测试工程了,手动改变输入变量的值,观察输出是否正确。
用PLC-1131-3DS调试程序
当程序发生错误时,你可以设置断点。当处理发生中断时,你就可以及时的在断点处检查所有工程变量的值。工作在单步方式(singlestep)下,可以检验程序的逻辑错误。
你可以强制输入或输出变量的值。使用流控制(flowcontrol)可以知道哪些程序段已经执行。采样轨迹(SamplingTrace)显示变量在长时间的变化过程曲线。
整个工程可以以文本文件的形式导出。
总而言之 PLC-1131-3 DS对于PLC编程是一种完善和方便的工具。
4.工程的组成
(1)工程 (Project)
一个工程包括了PLC程序中所有的对象,工程中包含了如下对象:
程序结构单元 POUs
数据类型 data types
资源 resources
库函数 libraries
(2)程序结构单元(POU)
函数 (Functions), 功能块(function blocks)和程序(programs)都是程序结构单元(POUs)。
每个POU包括了定义变量和程序主体两个部分。程序主体用IEC编程语言编写,其中包括:
指令表 (IL)
结构文本 (ST)
SFC
FBD
梯形图(LD).
PLC-1131-3 DS 支持所有的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
IEC程序结构单元。
POUs之间能够相互调用,但是不允许递归调用.
(3)函数(Function)
当定义函数的时候,不要忘记函数中必须含有返回值的数据类型,也就是说在函数名的后面必需紧跟冒号和一个数据类型。
二.ST结构化文本编程
1.定义
"结构"是指高水平的结构化编程能力,象一个"结构化的编程";"文本"是指应用文本而不是梯形图和顺序函功能表的能力。ST语言不能代替其它的语言,每种语言都有它自己的优点和缺点。ST主要的一个优点就是能简化复杂的数学方程。
2.特点
高级文本编程语言
结构化的编程
简单的标准结构
快速高效的编程
使用直观灵活
与PASCAL类似
有计算机编程经验的人可以很容易地使用它
符合IEC 61131-3 标准
3.功能
数字量和模拟量I/O
逻辑操作
逻辑比较表达式
算术运算
判断语句
机器的状态语句
循环语句
功能块
可选用的动态变量
诊断工具
4.结构文本基础
IF value < 7 THEN
WHILE value < 8 DO
value := value + 1;
END_WHILE;
END_IF;
4.1 表达式
表达式是指返回变量评估值的结构。表达式由操作符和操作数组成。操作数可以
是常量,变量,调用函数或其它表达式。
4.2赋值操作符
通过一个表达式和一个值来给变量赋值。赋值语句包括位于左边的变量,赋值操
作符":=",及后边需要计算的表达式。所有的语句,包括赋值语句,必须要以分
号";"结尾。
当这行程序执行后,变量"Var 1"的值是变量"Var 2"的两倍。
4.3注释
虽然注释经常被删掉,但它们是源代码中非常重要的一部分。它们解释了一部分
代码,使程序更易读懂。注释帮助你或其他人读你的程序,即使过去了很长时
间。注释不被编译,因此不会影响程序的执行。注释应该用一对星号和小括号括
起来"(*comment*)"。
4.4操作符优先级
如果在一个表达式中使用几个操作符,就会出现优先级的问题(执行的顺序)。
操作符按优先级的顺序来执行。
在任何一个表达式中,首先执行最高级别的操作符,接着执行低一级的操作符,
等等,直到执行完所有的操作符。具有相同级别的操作符按照书写顺序从左至右
依次执行。
操作符
符号/语言
优先级
括号
()
依次降低
函数调用
例子
Call argument(s)
LN(A), MAX(X), 等
注释
**
取反
NOT
乘
*
除
/
取模(取除法的余数)
MOD
加
+
减
-
比较
<, >, <=, >=
等于
=
不等于
<>
逻辑与
AND
逻辑异或
XOR
逻辑或
OR
4.5结构文本格式编程格式指令
指令类型
例子
赋值 (Assignment)
A:=B; CV := CV + 1; C:=SIN(X);
调用功能块或者函数的返回值(Calling a function block and use of the FB output)
CMD_TMR(IN := %IX5, PT := 300);
A:=CMD_TMR.Q
返回 (RETURN)
RETURN;
IF (条件)
D:=B*B;
IF D<0.0 THEN
C:=A;
ELSIF D=0.0 THEN
C:=B;
ELSE
C:=D;END_IF;
CASE(分支)
CASE INT1 OF
1: BOOL1 := TRUE;
2: BOOL2 := TRUE;
ELSE
BOOL1 := FALSE;
BOOL2 := FALSE;
END_CASE;
FOR(循环)
J:=101;
FOR I:=1 TO 100 BY 2 DO
IF ARR[I] = 70 THEN
J:=I;EXIT;
END_IF;
END_FOR;
WHILE(循环)
J:=1;
WHILE J<= 100 AND ARR[J] <> 70 DO
J:=J+2;END_WHILE;
REPEAT(重复)
J:=-1;
REPEAT
J:=J+2;
UNTIL J= 101 OR ARR[J] = 70
END_REPEAT;
EXIT(退出)
EXIT;
Empty instruction(空指令)
;
用结构文本编程格式编写的程序与其它格式的编程语言相比出错概率低,编写的程序具有可读性高的特点。
(1)调用功能块(Calling a function block)
结构文本编程格式通过在功能块名后面的括号里分配参数值来调用功能块的功能
在下面的例子中通过分配参数IN和PT的值调用一定时器功能块,它的结果变量的值被赋给变量A 。
CMD_TMR(IN := %IX5, PT := 300);
A:=CMD_TMR.Q
(2)返回指令(RETURN instruction )
返回指令用来结束函数调用,当条件满足时返回主程序
(3)条件指令(IF instruction)
使用IF指令检验是否满足条件,当条件满足时执行相应的的指令
语法:
IF <布尔表达式_1> THEN
{ELSIF <布尔表达式_2> THEN
.
.
ELSIF <布尔表达式_n> THEN
ELSE
}
END_IF;
{}里面的内容是可选的 。
如果<布尔表达式1>的返回值为真 (TRUE),那么只有被执行,而其它的指令
不执行。否则检验<布尔表达式2>的返回值是否为真,这样连续判断<布尔表达式n>的返回值,直到返回值为真时执行对应的指令。如果执行到最后表达式的返回值也没有为真,那么执行。
例:
IF temp<17
THEN heating_on := TRUE;
ELSE heating_on := FALSE;
END_IF;
这段程序控制加热功能的开启和关闭,当温度高于17度时不加热,当温度低于17度时就加热。
(4)分支指令(CASE instruction)
使用分支指令可以将一些具有相同条件变量的指令结合在一个结构中
语法:
CASE <变量1> OF
<=1>: <指令 1>
<=2>: <指令 2>
...
<=n>: <指令 n>
ELSE
END_CASE;
CASE指令根据下面的模式处理程序:
如果变量的值为i,那么执行<指令i>中的指令。
如果没有相应的变量的值,那么执行ELSE 指令
如果需要几个不同的变量值执行相同的指令,那么可以将几个变量值写在一起用逗号隔开,后面接需要执行的指令。
例:
CASE INT1 OF
1, 5:BOOL1 := TRUE;
BOOL3 := FALSE;
2: BOOL2 := FALSE;
BOOL3 := TRUE;
ELSE
BOOL1 := NOT BOOL1;
BOOL2 := BOOL1 OR BOOL2;
END_CASE;
(5)循环指令(FOR)
<步长Step size>} DO
<指令Instructions>使用FOR循环指令可以重复程序处理的过程。
语法:
整形变量INT_Var :INT;
FOR <整形变量INT_Var>:= <初始值INIT_VALUE> TO <终止值END_VALUE> {BY
END_FOR;
{}中的内容可选的.
只要中的计数值不大于就重复执行 中的指令。在执行指令之前就检验这个条件,如果条件得不到满足就不执行
中的指令。当指令被执行一次之后<整形变量INT_Var>就增加
中的相应值。当得到大于的条件时就
停止循环。
例:
FOR Counter:=1 TO 5 BY 1 DO
Var1:=Var1*2;
END_FOR;
Res:=Var1;
我们假设Var1的初始值为1,那么循环结束时变量 Var1的值为32。
(6)循环指令( WHILE loop)
WHILE循环指令的用法与FOR循环指令相似,它们的不同之处在于WHILE循环的判断条件有些不同,它可以是任何布尔表达式。也就是说只要满足你给定的条件时,就执行循环指令。
语法:
WHILE <布尔表达式>
<指令>
END_WHILE;
只要<布尔表达式>的返回值为真TRUE,也就是条件满足的时候,<指令>将重复执行 ,直到 <布尔表达式>的返回值为假FALSE。
如果在第一次判断条件时就不满足,那么没有执行一次指令循环就结束了。当<布尔表达式>的返回值始终为真时,指令就无限的循环执行下去,进入死循环状态。这在编程时要尽量避免。
例:
WHILE counter<>0 DO
Var1 := Var1*2;
Counter := Counter-1;
END_WHILE
WHILE循环和REPEAT循环在某种意义上来说比FOR循环更实用,因为在某种情况下我们不能确定循环的次数,在这种情况下只能用WHILE循环指令或者REPEAT循环指令。但是FOR循环指令的循环次数是一定的,所以用FOR循环指令编程可以避免死循环的出现。
(7)循环指令(REPEAT loop)
REPEAT循环指令不同于WHILE循环指令的地方在于指令执行条件的判定顺序,REPEAT循环指令在判断条件之前就执行指令,也就是说REPEAT循环指令至少可以执行一次而不考虑判定条件。WHILE循环指令就不同,可能指令一次也不执行就终止循环。
语法:
REPEAT
<指令>
UNTIL <布尔表达式>
END_REPEAT;
当<布尔表达式>的返回值为真时,就是说判定条件满足的时候就终止循环。
如果<布尔表达式>在第一次检验的时候满足条件,那么整个循环只执行一
次。如果条件始终得不到满足,进入死循环状态,编程时需尽量避免这种情况的发生。
例:
REPEAT
Var1 := Var1*2;
Counter := Counter-1;
UNTIL
Counter=0
END_REPEAT;
(8)退出指令(EXIT instruction)
如果EXIT指令出现在FOR、WHILE、REPET循环指令里面的时候,循环将不考虑中断条件是否满足就无条件中断正在进行中的循环。
4.6布尔逻辑操作
操作数不需要是BOOL类型。
布尔逻辑操作:
符号
逻辑操作
例子
NOT
取反
a:=NOT b;
AND
逻辑与
a:=b AND c;
OR
逻辑或
a:=b OR c;
XOR
异或
A:=b XOR c;
这些操作符可以形成一个逻辑表达式和条件语句,结果是真(TRUE)或(FALSE)。
4.7算术运算
4.7.1 基本的算术运算
ST为应用程序提供了以下基本的算术运算:
符号
算术操作
例子
:=
赋值
a:=b;
+
加
a :=b + c;
-
减
a :=b -c;
*
乘
a :=b * c;
/
除
a :=b / c;
MOD
取模(显示余数)
a :=b mod c;
数据类型是非常重要的参数,结果也依赖于语法和数据类型。表达式左边的数据类型应该等同于(或大于)右边的数据类型。
4.7.2隐形数据类型转换
该类型的转换由编译器完成。编译器将表达式中低的数据类型转换成高的数据类
型。如果有两种或多个类型的变量参与运算,那么必须将它们转换成相同的类型
以便执行运算。
数据类型
BOOL
SINT
INT
DINT
USINT
UINT
UDINT
REAL
BOOL
BOOL
\
\
\
\
\
\
\
SINT
\
INT
DINT
USINT
UINT
UDINT
REAL
INT
\
SINT
DINT
USINT
UINT
UDINT
REAL
DINT
\
SINT
INT
USINT
UINT
UDINT
REAL
USINT
\
SINT
INT
DINT
UINT
UDINT
REAL
UINT
\
SINT
INT
DINT
USINT
UDINT
REAL
UDINT
\
SINT
INT
DINT
USINT
UINT
REAL
REAL
\
SINT
INT
DINT
USINT
UINT
UDINT
4.7.3显性数据类型转换
当两个变量在计算时,所得结果超过了某一类型数据所表示的范围,只是就需要显示的进行数据转换。
4.7.4比较操作
高级编程语言ST或以允许比较操作的简单结构分枝。比较的结果是真(TRUE)或假(FALSE)。
符号
逻辑比较含义
例子
=
等于
If a=b then
<>
不等于
If a<>b then
>
大于
If a>b then
>=
不小于
If a>=b then
<
小于
If a
本文档为【ST语言】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。