.

如何学好SCL编程语言

去学PLC技术

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

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

▲图1读写存储器

▲图2转换操作

▲图3程序控制指令

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

程序控制指令SCL

程序控制指令是SCL编程的基础,接近高级语言的指令,虽然这些功能通过LAD/FBD也可

以实现,但使用SCL编写会更加方便,逻辑条理也更加清晰。

程序控制语句说明选择IF-THEN语句用于将程序执行转移到两个备选分支之一(取决于条件为True还是False);

CASE语句用于选择执行n个备选分支之一(取决于变量值)循环;

FOR语句只要控制变量在指定值范围内,就重复执行某一语句序列;

WHILE-DO语句只要仍满足执行条件,就重复执行某一语句序列;

REPEAT-UNTIL语句重复执行某一语句序列,直到满足终止条件为止;

程序跳转CONTINUE语句停止执行当前循环迭代;

EXIT语句无论是否满足终止条件,都会随时退出循环;

GOTO语句使程序立即跳转到指定标签;

RETURN语句使程序立刻退出正在执行的块,返回到调用块。

下面详细介绍各条指令的用法。

(1)IF:条件执行

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

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

参数

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

IF...THEN...分支:IF条件THEN语句1END_IF;

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

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

IF...THEN...ELSE...分支:IF条件THEN语句1ELSE语句2END_IF;

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

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

IF...THEN...ELSIF...分支:IF条件1THEN语句1ELSIF条件2THEN语句2END_IF;

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

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

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

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

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

参数

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

参数

数据类型

存储区

说明

条件

BOOL

I、Q、M、D、L

待求值的表达式。

语句

-

在满足条件时,要执行THEN后的语句。如果不满足条件,则执行ELSE后编写的语句。

示例:

▲图7IF示例

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

操作数值"Tag_1"TrueFalseFalseFalse"Tag_2"FalseTrueFalseFalse"Tag_3"FalseFalseTrueFalse"Tag_Value"

(2)CASE:创建多路分支

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

按如下方式声明此指令:

CASE变量OF

常数1:语句1;

常数2:语句2;

......

常数n:语句n;

ELSE语句;

END_CASE;

▲图8CASE语句

参数

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

参数

数据类型

存储区

说明

变量

整数、位序列*

I、Q、M、D、L

与设定的常数值进行比较的值。

常数

位序列

若为位序列,则常数可以为以下值:

二进制数(例如,2#10)

八进制数(例如,8#77)

十六进制数(例如,16#AD)

未定型的常数(例如,)

整数

作为指令序列执行条件的常数值。常数可以为以下值:

整数(例如,5)

整数范围(例如,15到20)

由整数和范围组成的枚举(例如,10、11、15到20)

语句

-

-

当表达式的值等于某个常数值时,将执行该常数后的各种指令。如果不满足条件,则执行ELSE后编写的指令。如果两个值不相等,则执行这些指令。

*TIAPORTALV16开始支持位序列数据类型的变量

示例:

▲图9CASE示例

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

操作数值"Tag_Value"01,3,56,7,8,9,,17,20,21,22,23,24,25其他"Tag_1"1----"Tag_2"-1---"Tag_3"--1--"Tag_4"---1-"Tag_5"----1

(3)FOR:在计数循环中执行

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

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

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

注意:

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

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

按如下方式声明此指令:

FOR运行变量:=起始值TO结束值BY增量DO

语句;

END_FOR;

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

FOR运行变量:=起始值TO结束值DO

语句;

END_FOR;

▲图10FOR语句

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

参数

数据类型

存储区

说明

运行变量

有符号整数、无符号整数*

I、Q、M、D、L

执行循环时会计算其值的操作数。执行变量的数据类型将确定其它参数的数据类型。

起始值

I、Q、M、D、L

表达式,在运行变量首次执行循环时,将为运行变量分配该表达式的值。

结束值

I、Q、M、D、L

表达式,在运行程序最后一次循环时会为运行变量分配该表达式的值。在每个循环后都会检查运行变量的值:

未达到结束值:执行符合DO的语句

达到结束值:最后执行一次FOR语句

超出结束值:完成FOR循环

执行该指令期间,不允许更改结束值。

增量

I、Q、M、D、L

表达式,根据增量表达式的值,执行变量在每次循环后都会递增(正增量)或递减(负增量)自身变量值。

如果未指定增量,则在每次循环后执行变量的值加1。

执行该指令期间,不允许更改增量。

语句

-

只要运行变量的值在取值范围内,每次循环都就会执行的语句。取值范围由起始值和结束值定义。

*TIAPORTALV16开始支持无符号整数类型的变量

示例:

▲图11FOR示例

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

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

设定Tag_Value值5设定b_array[2]b_array[4]b_array[6]b_array[8]值结果a_array[2]a_array[4]a_array[6]a_array[8]值

(4)WHILE:满足条件时执行

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

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

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

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

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

WHILE条件

DO语句;

END_WHILE;

▲图12WHILE语句

参数

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

参数

数据类型

存储区

说明

条件

BOOL

I、Q、M、D、L

表达式,每次执行循环之前都需要进行求值。

语句

-

在满足条件时,要执行的语句。如果不满足条件,则程序将从END_WHILE后继续执行。

示例:

▲图13WHILE示例

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

初始循环结束Tag_25Tag_

(5)REPEAT:不满足条件时执行

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

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

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

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

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

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

REPEAT语句;

UNTIL条件

END_REPEAT;

▲图14REPEAT语句

参数

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

参数

数据类型

存储区

说明

语句

-

在设定条件的值为False时执行的指令。即使满足终止条件,此指令也执行一次。

条件

BOOL

I、Q、M、D、L

表达式,每次执行循环之后都需要进行求值。如果表达式的值为False,则将再次执行程序循环。如果表达式的值为True,则程序循环将从END_REPEAT后继续执行。

示例:

▲图15REPEAT示例

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

初始循环结束Tag_25Tag_

(6)CONTINUE:复查循环条件

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

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

▲图16CONTINUE用在FOR循环

▲图17CONTINUE用在WHILE循环

▲图18CONTINUE用在REPEAT循环

示例:

▲图19CONTINUE示例

下表展示了计算结果:

变量计算结果"DB10".Test[0]-"DB10".Test[1]-"DB10".Test[2]-"DB10".Test[3]-"DB10".Test[4]-"DB10".Test[5]1"DB10".Test[6]1"DB10".Test[7]1

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

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

(7)EXIT:立即退出循环

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

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

▲图20EXIT语句

示例:

▲图21EXIT示例

下表展示了计算结果:

变量计算结果

"DB10".Test[0]1"DB10".Test[1]1"DB10".Test[2]1"DB10".Test[3]1"DB10".Test[4]1"DB10".Test[5]1"DB10".Test[6]-"DB10".Test[7]-

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

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

(8)GOTO:跳转

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

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

注意:

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

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

字母(a至z,A至Z)

字母和数字组合;请必须字母为开始

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

GOTO跳转标签;

...

跳转标签:语句

示例:

▲图22GOTO示例

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

操作数值Tag_Value其他

初始值结束值初始值结束值初始值结束值初始值结束值Tag_0Tag_20100Tag_Tag_

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

(9)RETURN:退出块

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

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

▲图23RETURN语句

示例:

▲图24RETURN示例

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

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

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

▲图1读写存储器

▲图2转换操作

▲图3程序控制指令

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

程序控制指令SCL

程序控制指令是SCL编程的基础,接近高级语言的指令,虽然这些功能通过LAD/FBD也可

以实现,但使用SCL编写会更加方便,逻辑条理也更加清晰。

程序控制语句说明选择IF-THEN语句用于将程序执行转移到两个备选分支之一(取决于条件为True还是False);

CASE语句用于选择执行n个备选分支之一(取决于变量值)循环;

FOR语句只要控制变量在指定值范围内,就重复执行某一语句序列;

WHILE-DO语句只要仍满足执行条件,就重复执行某一语句序列;

REPEAT-UNTIL语句重复执行某一语句序列,直到满足终止条件为止;

程序跳转CONTINUE语句停止执行当前循环迭代;

EXIT语句无论是否满足终止条件,都会随时退出循环;

GOTO语句使程序立即跳转到指定标签;

RETURN语句使程序立刻退出正在执行的块,返回到调用块。

下面详细介绍各条指令的用法。

(1)IF:条件执行

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

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

参数

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

IF...THEN...分支:IF条件THEN语句1END_IF;

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

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

IF...THEN...ELSE...分支:IF条件THEN语句1ELSE语句2END_IF;

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

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

IF...THEN...ELSIF...分支:IF条件1THEN语句1ELSIF条件2THEN语句2END_IF;

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

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

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

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

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

参数

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

参数

数据类型

存储区

说明

条件

BOOL

I、Q、M、D、L

待求值的表达式。

语句

-

在满足条件时,要执行THEN后的语句。如果不满足条件,则执行ELSE后编写的语句。

示例:

▲图7IF示例

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

操作数值"Tag_1"TrueFalseFalseFalse"Tag_2"FalseTrueFalseFalse"Tag_3"FalseFalseTrueFalse"Tag_Value"

(2)CASE:创建多路分支

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

按如下方式声明此指令:

CASE变量OF

常数1:语句1;

常数2:语句2;

......

常数n:语句n;

ELSE语句;

END_CASE;

▲图8CASE语句

参数

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

参数

数据类型

存储区

说明

变量

整数、位序列*

I、Q、M、D、L

与设定的常数值进行比较的值。

常数

位序列

若为位序列,则常数可以为以下值:

二进制数(例如,2#10)

八进制数(例如,8#77)

十六进制数(例如,16#AD)

未定型的常数(例如,)

整数

作为指令序列执行条件的常数值。常数可以为以下值:

整数(例如,5)

整数范围(例如,15到20)

由整数和范围组成的枚举(例如,10、11、15到20)

语句

-

-

当表达式的值等于某个常数值时,将执行该常数后的各种指令。如果不满足条件,则执行ELSE后编写的指令。如果两个值不相等,则执行这些指令。

*TIAPORTALV16开始支持位序列数据类型的变量

示例:

▲图9CASE示例

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

操作数值"Tag_Value"01,3,56,7,8,9,,17,20,21,22,23,24,25其他"Tag_1"1----"Tag_2"-1---"Tag_3"--1--"Tag_4"---1-"Tag_5"----1

(3)FOR:在计数循环中执行

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

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

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

注意:

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

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

按如下方式声明此指令:

FOR运行变量:=起始值TO结束值BY增量DO

语句;

END_FOR;

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

FOR运行变量:=起始值TO结束值DO

语句;

END_FOR;

▲图10FOR语句

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

参数

数据类型

存储区

说明

运行变量

有符号整数、无符号整数*

I、Q、M、D、L

执行循环时会计算其值的操作数。执行变量的数据类型将确定其它参数的数据类型。

起始值

I、Q、M、D、L

表达式,在运行变量首次执行循环时,将为运行变量分配该表达式的值。

结束值

I、Q、M、D、L

表达式,在运行程序最后一次循环时会为运行变量分配该表达式的值。在每个循环后都会检查运行变量的值:

未达到结束值:执行符合DO的语句

达到结束值:最后执行一次FOR语句

超出结束值:完成FOR循环

执行该指令期间,不允许更改结束值。

增量

I、Q、M、D、L

表达式,根据增量表达式的值,执行变量在每次循环后都会递增(正增量)或递减(负增量)自身变量值。

如果未指定增量,则在每次循环后执行变量的值加1。

执行该指令期间,不允许更改增量。

语句

-

只要运行变量的值在取值范围内,每次循环都就会执行的语句。取值范围由起始值和结束值定义。

*TIAPORTALV16开始支持无符号整数类型的变量

示例:

▲图11FOR示例

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

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

设定Tag_Value值5设定b_array[2]b_array[4]b_array[6]b_array[8]值结果a_array[2]a_array[4]a_array[6]a_array[8]值

(4)WHILE:满足条件时执行

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

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

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

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

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

WHILE条件

DO语句;

END_WHILE;

▲图12WHILE语句

参数

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

参数

数据类型

存储区

说明

条件

BOOL

I、Q、M、D、L

表达式,每次执行循环之前都需要进行求值。

语句

-

在满足条件时,要执行的语句。如果不满足条件,则程序将从END_WHILE后继续执行。

示例:

▲图13WHILE示例

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

初始循环结束Tag_25Tag_

(5)REPEAT:不满足条件时执行

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

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

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

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

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

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

REPEAT语句;

UNTIL条件

END_REPEAT;

▲图14REPEAT语句

参数

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

参数

数据类型

存储区

说明

语句

-

在设定条件的值为False时执行的指令。即使满足终止条件,此指令也执行一次。

条件

BOOL

I、Q、M、D、L

表达式,每次执行循环之后都需要进行求值。如果表达式的值为False,则将再次执行程序循环。如果表达式的值为True,则程序循环将从END_REPEAT后继续执行。

示例:

▲图15REPEAT示例

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

初始循环结束Tag_25Tag_

(6)CONTINUE:复查循环条件

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

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

▲图16CONTINUE用在FOR循环

▲图17CONTINUE用在WHILE循环

▲图18CONTINUE用在REPEAT循环

示例:

▲图19CONTINUE示例

下表展示了计算结果:

变量计算结果"DB10".Test[0]-"DB10".Test[1]-"DB10".Test[2]-"DB10".Test[3]-"DB10".Test[4]-"DB10".Test[5]1"DB10".Test[6]1"DB10".Test[7]1

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

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

(7)EXIT:立即退出循环

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

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

▲图20EXIT语句

示例:

▲图21EXIT示例

下表展示了计算结果:

变量计算结果

"DB10".Test[0]1"DB10".Test[1]1"DB10".Test[2]1"DB10".Test[3]1"DB10".Test[4]1"DB10".Test[5]1"DB10".Test[6]-"DB10".Test[7]-

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

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

(8)GOTO:跳转

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

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

注意:

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

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

字母(a至z,A至Z)

字母和数字组合;请必须字母为开始

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

GOTO跳转标签;

...

跳转标签:语句

示例:

▲图22GOTO示例

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

操作数值Tag_Value其他

初始值结束值初始值结束值初始值结束值初始值结束值Tag_0Tag_20100Tag_Tag_

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

(9)RETURN:退出块

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

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

▲图23RETURN语句

示例:

▲图24RETURN示例

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

去学PLC技术

预览时标签不可点收录于话题#个上一篇下一篇

转载请注明:http://www.abachildren.com/sstx/768.html