西门子SCL常用控制语句解析
指令
SCL作为一种编程语言,可以实现LAD/FBD所有的功能,大多数的指令与LAD/FBD都是相同的,只是在编辑器中的外形不同。只有一些指令使用是不太一样的甚至LAD/FBD没有的,这里只介绍这些不同的。
SCL特殊的指令有以下几种,如图1-3红框中的指令:
图1 读/写存储器
图2 转换操作中的变量
图3 程序控制指令
这里只介绍图3的程序控制指令。
程序控制指令解释
类型 | 程序控制语句 | 说明 |
---|---|---|
选择语句 | IF-THEN语句 | 用于将程序执行转移到两个备选分支之一 (取决于条件为 True 还是False)判断两个量的真假 |
选择语句 | CASE语句 | 用于选择执行 n 个备选分支之一 (取决于变量值,变量值等于2,设定的备选分支等于2的话,就会执行2这个分支。) |
选择语句 | FOR语句 | 只要控制变量在指定值范围内,就重复执行某一语句序列 |
循环语句 | WHILE-DO语句 | 只要仍满足执行条件,就重复执行当前一语句序列, |
循环语句 | REPEAT-UNTIL语句 | 重复执行某一语句序列,直到满足终止条件为止 |
循环语句 | CONTINUE语句 | 停止执行当前循环迭代 |
程序跳转 | EXIT语句 | 无论是否满足终止条件,都会随时退出循环 |
程序跳转 | GOTO语句 | 使程序立即跳转到指定标签 |
程序跳转 | RETURN语句 | 使程序立刻退出正在执行的块,返回到调用块 |
程序控制指令是SCL编程的基础,接近高级语言的指令,虽然这些功能通过LAD/FBD也可以实现,但使用SCL编写会更加方便,逻辑条理也更加清晰。
IF 条件执行
说明:使用“条件执行”指令,可以根据条件控制程序流的分支。该条件是结果为布尔值 (True或 False)的表达式。可以将Bool变量、逻辑表达式或比较表达式作为条件。
执行该条件执行指令时,将对指定的表达式进行运算。如果表达式的值为 True,则表示满足该条件;如果其值为 False,则表示不满足该条件根据分支的类型,可以对以下形式的指令进行编程
1 |
|
在这里我建议,如果没有特别的要求,我们的变量表的名称可以化成英文或者是拼音的形式,这样我们在写起来的时候就可很大程度上避免来回切换中英文。
CASE:创建多路分支
说明:使用”创建多路分支”指令,可以根据数字表达式的值执行多个指令序列中的一个。
按如下方式声明此指令:
CASE <变量> OF
<常数1>: <语句1>;
<常数2>: <语句2>;
……
<常数n>: <语句n>;
ELSE <语句>;
END_CASE;
1 |
|
FOR:在计数循环中执行
说明:使用”在计数循环中执行”指令,重复执行程序循环,直至运行变量不在指定的取值范围内。
也可以嵌套程序循环。在程序循环内,可以编写包含其它运行变量的其它程序循环。
通过指令”复查循环条件”(Continue),可以终止当前正在运行的程序循环。通过指令”立即退出循环”(Exit)终止整个循环的执行。
用FOR计算数组里面所有数据的和
1 |
|
用FOR计算数组里面所有数据的最大值
通过建立0-20的数组,使用FOR语句循环,在0到20 的数组中,用IF语句判断数组2中的最大值,最终在循环到第20的数组中时,IF判断出最大的值,循环停止,求最大值输出最后的结果。
1 |
|
WHILE语句
在满足条件时,要执行的语句。如果不满足条件,则程序将从 END_WHILE 后继续执行。
1 |
|
REPEAT语句
REPEAT语句先执行循环体,再判断条件是否成立,
1 |
|
FOR语句循环实现有限次循环
WHLIE语句的条件为真时执行循环体
REPEAT语句的条件为否时执行循环体
GOTO:跳转
说明:使用”跳转”指令,可以从标注为跳转标签的指定点开始继续执行程序。
跳转标签和”跳转”指令必须在同一个块中。在一个块中,跳转标签的名称只能指定一次。每个跳转标签可以是多个跳转指令的目标。不允许从”外部”跳转到程序循环内,但允许从循环内跳转到”外部”。
注意:LAD/FBD语言内的SCL段,不能使用GOTO指令。
跳转标签遵循以下语法规则:
- 字母(a 至 z,A 至 Z)
- 字母和数字组合;请必须字母为开始
可按如下方式声明此指令:
GOTO <跳转标签>;
…
<跳转标签>: <语句>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21CASE "状态值" OF //当状态值为1.2.3中的某个数时,
//相应跳转至MyLABEL1,MyLABEL2,MyLABEL3,相反则跳转至MyLABEL4。
1:
GOTO MyLABEL1 ; // Statement section case 1
2:
GOTO MyLABEL2// Statement section case 2 to 4
;
3:
GOTO MyLABEL3;
ELSE // Statement section ELSE
GOTO MyLABEL4; ;
END_CASE;
MyLABEL1:
"参数1" += 1;
MyLABEL2:
"参数2" += 2;
MyLABEL3:
"参数3" += 3;
MyLABEL4:
"参数4" += 4;
RETURN:退出块
说明:使用”退出块”指令,可以终止当前处理块中的程序执行,并在调用块中继续执行。
如果该指令出现在块结尾处,则可以跳过。
1 |
|
小结
以上就是西门子SCL语句的程序控制指令,需要灵活多变使用,重点注意语法格式。还有程序扫描逻辑