Caminho:  Programação > Texto Estruturado > Conceitos >

Laços de Repetição

Previous pageReturn to chapter overviewNext page

Laços de Repetição suportados e especificados pela IEC-61131-3

wpshelp_common_fig_note

NOTA!

 

Verificar se equipamento possui suporte a laços de repetição!

 

 

 

Laço de Repetição - FOR

 

A instrução FOR possibilita que uma sequência de instruções seja executada repetidamente, enquanto uma progressão de valores é atribuída a sua variável de controle. A instrução FOR incrementa ou decrementa a variável de controle de um valor inicial até um valor final determinado pelo valor de uma expressão. Se a construção BY for omitida, o valor de incremento será padronizado para 1. O valor inicial e o valor final da variável de controle devem ser expressões do mesmo tipo de número inteiro (por exemplo, USINT, INT, WORD e DINT).

 

 

 

FOR <contador> := <valor inicial> TO <valor final> {BY <incremento>} DO

 

   <instruções>

 

END_FOR

 

 

A seção dentro das chaves {} é opcional.

 

O WPS executa as <instruções> enquanto o <contador> não atingir o <valor final>. Para incrementos positivos, a execução ocorre até o <contador> ser maior que o <valor final>. Para incrementos negativos, a execução ocorre até o  <contador> ser menor que o <valor final>. Essa verificação é realizada antes da execução das <instruções>.

 

 

Exemplo

 

O exemplo abaixo exibe uma forma de usar o laço de repetição FOR para encontrar o maior valor em um array global do tipo USINT.

 

VAR

   addr : WORD;

   currentValue : USINT;

   maxValue : USINT;

   arr : ARRAY[0..5] OF USINT := [17, 9, 30, 25, 59, 41];

END_VAR

 

currentValue := 0;

maxValue := 0;

 

FOR addr := 0 TO 10 BY 1 DO

   currentValue := arr[addr];

  IF currentValue > maxValue THEN

       maxValue := currentValue;

  END_IF

END_FOR

 

Ao final da execução do código exemplo, o valor de maxValue será 59.

 

 

Laço de Repetição - WHILE

 

Na instrução WHILE, a sequência de instruções agrupadas até a palavra-chave END_WHILE é executada repetidamente até que a <expressão booleana>  seja falsa. Se inicialmente a <expressão booleana> for falsa, o grupo de instruções não será executado.

 

WHILE <expressão booleana> DO

 

   <instruções>

 

END_WHILE

 

 

 

Exemplo

 

O exemplo abaixo exibe um laço de repetição WHILE que se repete dez vezes.

 

VAR

   counter : USINT;

END_VAR

 

counter := 0;

WHILE counter < 100 DO

   counter := counter + 10;

END_WHILE    

 

Ao final da execução do código exemplo, o valor de counter será 100.

 

 

Laço de Repetição - REPEAT

 

Na instrução REPEAT, a sequência de instruções (<instruções>) agrupada até a palavra-chave UNTIL é executada repetidamente pelo menos uma vez, até que a condição booleana associada a ela (<expressão booleana>) seja verdadeira.

 

REPEAT

 

   <instruções>

 

UNTIL <expressão booleana>

END_REPEAT

 

 

Exemplo

 

O exemplo abaixo exibe uma forma de usar o laço de repetição REPEAT para encontrar o menor número divisível por 13 que seja diferente dele mesmo.

 

VAR

   number : INT;

   module : INT;

   result : INT;

   found : BOOL;

END_VAR

 

number := 1;

result := 1;

found := FALSE;

 

REPEAT

   module := number MOD 13;

   IF (module = 0) and (module <> 13) THEN

      result := number;

      found := TRUE;

   END_IF

   number := number + 1;

UNTIL found

END_REPEAT    

 

Ao final da execução do código exemplo, o valor de result será 26.

 

 

Instrução - CONTINUE

 

A instrução é utilizada para ignorar as instruções restantes da iteração atual do laço de repetição, a partir da palavra-chave CONTINUE até o terminador do laço (END_FOR, END_WHILE ou END_REPEAT).

 

Exemplo

 

O exemplo abaixo exibe uma forma de usar a instrução CONTINUE para encontrar a soma dos números pares de 0 a 9.

 

VAR

   number : INT;

   module : INT;

   result : INT;

END_VAR

 

number := 0;

module := 0;

result := 0;

 

WHILE number < 10 DO

   module := number MOD 2;

   IF module <> 0 THEN

      number := number + 1;

       CONTINUE

   END_IF

   result := result + number;

   number := number + 1;

END_WHILE        

 

Ao final da execução do código exemplo, o valor de result será 20.

 

 

Instrução - EXIT

 

A instrução EXIT é usada em um loop FOR, WHILE ou REPEAT para encerrar o loop independentemente de outras condições de término.

 

Quando a instrução EXIT está localizada dentro de iterações aninhadas, a saída ocorre do laço mais interno onde a palavra-chave EXIT está presente. Ou seja, o controle é transferido para a instrução seguinte ao primeiro terminador de loop (como END_FOR, END_WHILE ou END_REPEAT) após a declaração EXIT.

 

O exemplo abaixo demonstra como usar a instrução EXIT para sair do loop FOR ao encontrar o índice do array que corresponde ao número desejado.

 

VAR

   idx : WORD;

   currentValue : USINT;

   targetValue : USINT;

   found : BOOL;

   arr : ARRAY[0..5] OF USINT := [17, 9, 30, 25, 59, 41];

END_VAR

 

currentValue := 0;

targetValue := 25;

found := FALSE;

 

FOR idx := 0 TO 10 BY 1 DO

   currentValue := arr[idx];

  IF currentValue = targetValue THEN

       found := TRUE;

       EXIT

  END_IF

END_FOR

 

Ao final da execução do código, o valor de idx será 3, indicando o índice onde o número 25 está localizado no array.

.