西门子scl语言编程手册_西门子SCL语言编程,常用指令介绍(收藏了)

指令

SCL作为一种编程语言,可以实现LAD/FBD所有的功能,大多数的指令与LAD/FBD都是相同的,只是在编辑器中的外形不同。只有一些指令使用是不太一样的甚至LAD/FBD没有的,这里只介绍这些不同的。

SCL特殊的指令有以下几种,如图1-3红框中的指令:

878697fd0686d7f051ab6e4c575d6e87.png

图1 读写存储器

e1bf3437bc65340942ef7f71436e01bf.png

图2 转换操作

1366f99a33b76872ca1cc9bf968e9713.png

图3 程序控制指令

在这三部分中,读写存储器的PEEK POKE指令可以参考链接,转换操作可以参考链接,这里只介绍图3的程序控制指令。

程序控制指令

程序控制指令见以下表格。

0803b83677987918c721455ec3b715af.png

程序控制指令是SCL编程的基础,接近高级语言的指令,虽然这些功能通过LAD/FBD也可以实现,但使用SCL编写会更加方便,逻辑条理也更加清晰。

IF:条件执行

说明:使用"条件执行"指令,可以根据条件控制程序流的分支。该条件是结果为布尔值(True 或 False)的表达式。可以将Bool变量、逻辑表达式或比较表达式作为条件。

执行该条件执行指令时,将对指定的表达式进行运算。如果表达式的值为 True,则表示满足该条件;如果其值为 False,则表示不满足该条件。

参数

根据分支的类型,可以对以下形式的指令进行编程:

  • IF...THEN... 分支:IF THEN END_IF;
63ee84010bd6bf785c350e3a3e84dea1.png

图4 IF...THEN... 分支

如果满足该条件,则将执行 THEN 后编写的指令。如果不满足该条件,则程序将从 END_IF 后的下一条指令开始继续执行。

  • IF...THEN... ELSE...分支:IF THEN ELSE END_IF;
81eb24eebeb08037b5029e20300992b4.png

图5 IF...THEN... ELSE...分支

如果满足该条件,则将执行 THEN 后编写的语句。如果不满足该条件,则将执行 ELSE 后编写的语句。不论执行哪一个语句,之后都将从 END_IF 后的下一条指令开始继续执行。

  • IF...THEN... ELSIF...分支:IF THEN ELSIF THEN END_IF;
43b567f197ab90f79c2f2169acdbb948.png

图6 IF...THEN... ELSIF...分支

如果满足条件1,则将执行 THEN 后的语句1,执行这些语句后,程序将从 END_IF 后继续执行。

如果不满足条件1,则将检查条件2。如果满足条件2,则将执行 THEN 后的语句2。执行这些语句后,程序将从 END_IF 后继续执行。

如果不满足任何条件,则直接执行 END_IF 后的程序部分。

在 IF 指令内可以嵌套任意多个 ELSIF 和 THEN 组合。可以选择对 ELSE 分支进行编程。

参数

下表列出了该指令的参数:

55f24a1f29913ce38f84beacaf3dabc6.png

示例

1bce4dbb052c35a52246aa693614560a.png

图7 IF示例

下表展示了不同的操作数数值对目标变量的影响:

c2fb1f8a5be1e6487c4c1d1891b969e1.png

CASE:创建多路分支

说明:使用"创建多路分支"指令,可以根据数字表达式的值执行多个指令序列中的一个。

按如下方式声明此指令:

CASE OF

: ;

: ;

......

: ;

ELSE ;

END_CASE;

22f474c77c15fa991b1791f7cb86e6c8.png

图8 CASE语句

参数

下表列出了该指令的参数:

9a17848aec6d2ea0f4949bc9b077707a.png

* TIA PORTAL V16开始支持位序列数据类型的变量

示例

6cda8cd63a1a7ea9e3d8c0d66cf628e4.png

图9 CASE示例

下表展示了不同的操作数数值对目标变量的影响:

00d9d4b9585d7ac1e02d61c9677d5168.png

FOR:在计数循环中执行

说明:使用"在计数循环中执行"指令,重复执行程序循环,直至运行变量不在指定的取值范围内。

也可以嵌套程序循环。在程序循环内,可以编写包含其它运行变量的其它程序循环。

通过指令"复查循环条件"(Continue),可以终止当前正在运行的程序循环。通过指令"立即退出循环"(Exit)终止整个循环的执行。

注意:

有关运行次数和运行变量的信息:

程序运行时无法更改运行次数。出于性能原因,应在块接口的"Temp"部分中声明运行变量。在循环中,该运行变量无法更改。

按如下方式声明此指令:

FOR := TO BY DO

;

END_FOR;

如果增量为1,可以简写为:

FOR := TO DO

;

END_FOR;

64d422f403f5cb1c85409372e71cc6ba.png

图10 FOR语句

下表列出了该指令的参数:

8d2d007aca5f034a8d40f4277c07b834.png

*TIA PORTAL V16开始支持无符号整数类型的变量

示例

c0cbdc8e4806e91aa45e7c60eee2083c.png

图11 FOR示例

Tag_Value 操作数乘以b_array 数组变量的元素 (2, 4, 6, 8)。并将计算结果读入到a_array 数组变量的元素 (2, 4, 6, 8) 中。

下表展示了给定 Tag_Value 与 b_array[i] 的值得到 a_array[i] 的结果:

a25547cbb2c9104b33b0f31998c69afe.png

WHILE:满足条件时执行

说明:使用"满足条件时执行"指令可以重复执行程序循环,直至不满足执行条件为止。该条件是结果为布尔值(True 或 False)的表达式。可以将逻辑表达式或比较表达式作为条件。

执行该指令时,将对指定的表达式进行运算。如果表达式的值为 True,则表示满足该条件;如果其值为 False,则表示不满足该条件。

也可以嵌套程序循环。在程序循环内,可以编写包含其它运行变量的其它程序循环。

通过指令"复查循环条件"(Continue),可以终止当前连续运行的程序循环。通过指令"立即退出循环"(Exit)终止整个循环的执行。

可按如下方式声明此指令:

WHILE

DO ;

END_WHILE;

6adfff517baa11bd2d30666044d453d1.png

图12 WHILE语句

参数

下表列出了该指令的参数:

9304bc57e0abb3ad69325866e5c44f9f.png

示例

9af1e04ad93ade29ab08d6b6f9b4d222.png

图13 WHILE示例

下表展示了循环初始和循环结束时变量值的变化

2409acc6bcdaa9a9673e41b2a99e5b13.png

REPEAT:不满足条件时执行

说明:使用"不满足条件时执行"指令可以重复执行程序循环,直至不满足执行条件为止。该条件是结果为布尔值(True 或 False)的表达式。可以将逻辑表达式或比较表达式作为条件。

执行该指令时,将对指定的表达式进行运算。如果表达式的值为 True,则表示满足该条件;如果其值为 False,则表示不满足该条件。

即使满足终止条件,至少也会执行一次循环内的语句。

也可以嵌套程序循环。在程序循环内,可以编写包含其它运行变量的其它程序循环。

通过指令"复查循环条件"(Continue),可以终止当前连续运行的程序循环。通过指令"立即退出循环"(Exit)终止整个循环的执行。

可按如下方式声明此指令:

REPEAT ;

UNTIL

END_REPEAT;

1f04b38c4d11a3dc45e6c53dcf9ece38.png

图14 REPEAT语句

参数

下表列出了该指令的参数:

42e5914660262895babe28911d3f961a.png

示例

cae53734d28d191558ab150fd4f317f9.png

图15 REPEAT示例

下表展示了循环初始和循环结束时变量值的变化

456e9d022856f5e527d8afd86d9035bd.png

CONTINUE:复查循环条件

说明:使用"复查循环条件"指令,可以结束 FOR、WHILE 或 REPEAT 循环的当前程序运行。

执行该指令后,将再次计算继续执行程序循环的条件。该指令将影响其所在的程序循环。

68a21e3f8b535c4d32eb1807e8beb47c.png

图16 CONTINUE用在FOR循环

a9b099519260d5e596690a7e85c51f87.png

图17 CONTINUE用在WHILE循环

97c518f86b30a3cf527ddedfb67f143f.png

图18 CONTINUE用在REPEAT循环

示例

37d37920828b8a52c2a31af30fe5f147.png

图19 CONTINUE示例

下表展示了计算结果:

020ea25524d152ca14ba57b9fa20df35.png

如果满足条件 i < 5,则不执行后续值分配 ("DB10".Test[i] := 1)。运行变量 (i) 以增量"1"递增,然后检查其当前值是否在设定的循环取值范围内。如果执行变量在循环取值范围内,则将再次计算 IF 的条件。

如果不满足条件 i < 5,则将执行后续值分配 ("DB10".Test[i] := 1) 并开始一个新循环。在这种情况下,执行变量也会以增量"1"进行递增并接受检查。

EXIT:立即退出循环

说明:使用"立即退出循环"指令,可以随时取消 FOR、WHILE 或 REPEAT 循环的执行,而无需考虑是否满足条件,并在循环结束(END_FOR、END_WHILE 或 END_REPEAT)后继续执行程序。

该指令将影响其所在的程序循环。

08cd5dea69d731a3f8e024d602ecbc51.png

图20 EXIT语句

示例

f284e539d871b672bac33f50278cff59.png

图21 EXIT示例

下表展示了计算结果:

b58155d8f0c1b41686c4b4bc07c9845f.png

如果满足条件 i > 5,则将取消循环执行。程序将从 END_FOR 后继续执行。

如果不满足条件 i <= 5,则将执行后续值分配 ("DB10".Test[i] :=1) 并开始一个新循环。将运行变量 (i) 以 1 进行递增,并进行检查该变量的当前值是否在程序中设定的循环取值范围之内。如果执行变量 (i) 在循环取值范围内,则将再次计算 IF 的条件。

GOTO:跳转

说明:使用"跳转"指令,可以从标注为跳转标签的指定点开始继续执行程序。

跳转标签和"跳转"指令必须在同一个块中。在一个块中,跳转标签的名称只能指定一次。每个跳转标签可以是多个跳转指令的目标。不允许从"外部"跳转到程序循环内,但允许从循环内跳转到"外部"。

注意:

LAD/FBD语言内的SCL段,不能使用GOTO指令。

跳转标签遵循以下语法规则:

  • 字母(a 至 z,A 至 Z)
  • 字母和数字组合;请必须字母为开始

可按如下方式声明此指令:

GOTO ;

...

:

示例

ad0eeda4d8c63f20d26b03f644193cf6.png

图22 GOTO示例

下表展示了每个操作数数值对目标变量的变化影响:

94e99f3a1e8096f12a117f2eda5d42dd.png

根据"Tag_Value"操作数的值,程序将从对应的跳转标签标识点开始继续执行。例如,如果"Tag_Value"操作数的值为 2,则程序将从跳转标签"MyLABEL2"开始继续执行。在这种情况下,将跳过"MyLABEL1"跳转标签所标识的程序行。

RETURN:退出块

说明:使用"退出块"指令,可以终止当前处理块中的程序执行,并在调用块中继续执行。

如果该指令出现在块结尾处,则可以跳过。

a9ac5bdee8521d418d9b81a356842a5c.png

图23 RETURN语句

示例

c88ed911105dc65c41363dd65da48a6c.png

图24 RETURN示例

如果"Tag_Error"操作数的信号状态不为 0,则将终止当前处理块中的程序执行。

↓学习资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值