Você está na página 1de 10

NORMA IEC 61131

Diagrama de Texto Estruturado (ST)


Conceito

A linguagem de programao Texto Estruturado, Structured Text (FBD), uma linguagem de


alto nvel com sintaxe similar ao Pascal da norma ISSO 7185. Foi desenvolvida,
especificamente, para controle industrial. usada para descrever o comportamento de:

Funes;
Blocos funcionais;
Programas;
Passos, aes e transies em SFC.

uma linguagem muito flexvel e de fcil assimilao para os desenvolvedores de software


em geral. Permite uma fcil interpretao do programa por usar identificadores de fcil
entendimento, associados a comentrios. uma linguagem muito til para o
desenvolvimento de:
Tomada de decises (IF... THEN... ELSE, CASE, etc);
Declaraes (Variveis, POUs, Configuraes, etc);
Clculos diversos;
Implementao de algoritmos;
Definio de aes (SFC);
Utilizao de literais.

Definies
Atribuio

A atribuio feita atravs do operador := que usado para alterar o valor armazenado
em uma varivel ou o retorno de uma funo.

Ex.: Variavel := dado; (*o valor de dado atribudo a Variavel*)

Expresses

Uma expresso uma construo que retorna um valor aps a sua avaliao. So compostas
de operadores e operandos. Um operando pode ser uma constante, uma varivel, uma
chamada de funo ou outra expresso.
Avaliao de Expresses

A avaliao de uma expresso ocorre por meio do processamento dos operadores de acordo
com certas regras de ligao. O operador com a ligao mais forte processado primeiro,
em seguida, o operador com a prxima ligao mais forte, e assim por diante, at que todos
os operadores sejam processados. Operadores com ligao de mesma fora so
processados da esquerda para a direita.

A seguir voc encontra uma tabela de operadores ST na ordem de sua fora de ligao:

Operao Smbolo Caracterstica


Entre parnteses (expresso) Ligao mais forte
Chamada de funo Nome da funo
(lista de parmetros)
Exponencial EXPT
Negao -
(complemento) NOT
Multiplicao *
Diviso /
Mdulo MOD
Adio +
Subtrao -
Comparao <,>,<=,>=
Igual a =
Diferente de <>
E Booleano AND
OU exclusivo Booleano XOR
OU Booleano OR Ligao mais fraca

Tipo de instruo Exemplo


Atribuio: A:=B; CV := CV + 1; C:=SIN(X);
Chamando um bloco CMD_TMR(IN := %IX5, PT := 300);
funcional e usando uma
sada FB:
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
Instrues IF

Com a instruo IF voc pode verificar uma condio e, dependendo desta condio,
executar instrues.

Sintaxe:

IF <Expresso booleana1> THEN


<IF_instructions>
{ELSIF <Expresso booleana2> THEN
<ELSIF_instrues1>
ELSIF <Expresso booleana n> THEN
<ELSIF_instrues n-1>
ELSE
<ELSE_instrues>}
END_IF;

A parte entre chaves{} opcional.

Se a <Expresso booleana1> retorna TRUE, ento apenas as <IF_Instrues> so executadas.


Caso contrrio, as expresses booleanas comeando com <Expresso booleana2>, so
avaliadas uma aps a outra at que uma das expresses retorne TRUE. Ento, somente essas
instrues, aps essa expresso Booleana e antes do prximo ELSE ou ELSIF so avaliadas. Se
nenhuma das expresses booleanas produz TRUE, somente as <ELSE_instrues> so
avaliadas.

Exemplo:

IF temp<17
THEN heating_on := TRUE;
ELSE heating_on := FALSE;
END_IF;

Aqui o aquecimento ativado quando a temperatura dos coletores for abaixo de 17 graus.
Caso contrrio, ele permanece desativado.

Instruo CASE

Com as instrues CASE possvel combinar vrias instrues condicionadas com a mesma
varivel de condio em uma construo.

Uma instruo CASE processada de acordo com o seguinte modelo: Se a varivel em


<Var1> tiver o valor <Valor i>, ento a instruo <Instruo i> ser executada. Se <Var 1> no
tem nenhum dos valores indicados, ento <ELSE Instruo> ser executada.
Sintaxe:

CASE <Var1> OF
<Valor1>: <Instruo 1>
<Valor2>: <Instruo 2>
<Valor3, Valor4, Valor5>: <Instruo 3>
<Valor6.. Valor10>: <Instruo 4>
...
<Value n>: <Instruo n>
ELSE <ELSE Instruo >
END_CASE;

Se a mesma instruo est para ser executada em diversos valores das variveis, ento,
esses valores so escritos um aps o outro, separados por vrgulas e, em seguida, a condio
da execuo comum.

Se a mesma instruo est para ser executada para um intervalo de valor de uma varivel,
escreve-se o valor inicial e o valor do final, separados por dois pontos, um aps o outro. Na
sequencia vem a condio comum.

Exemplo:

CASE INT1 OF
1,5: BOOL1 := TRUE;
BOOL3 := FALSE;
2: BOOL2 := FALSE;
BOOL3 := TRUE;
10..20: BOOL1 := TRUE;
BOOL3:= TRUE;
ELSE
BOOL1 := NOT BOOL1;
BOOL2 := BOOL1 OR BOOL2;
END_CASE;

Lao FOR

Com o lao FOR possvel programar processos repetidos.

Sintaxe:

INT_Var :INT;
FOR <INT_Var> := <INIT_VALUE> TO <END_VALUE> {BY <Step size>} DO
<Instructions>
END_FOR;
A parte entre chaves {} opcional.
As <Instrues> so executadas desde que o contador <INT_Var> no seja maior do que o
<END_VALUE>. Isso verificado antes de executar as <Instrues> para que as <instrues>
nunca sejam executadas se <INIT_VALUE> for maior do que <END_VALUE>.

Quando <Instrues> so executadas, <INT_Var> sempre incrementado em <Step size>. O


tamanho da etapa pode ter qualquer valor inteiro. Se estiver faltando, ento ele definido
para 1. O lao tambm deve terminar se <INT_Var> ficar maior.

Exemplo:

FOR Counter:=1 TO 5 BY 1 DO
Var1:=Var1*2;
END_FOR;
Erg:=Var1;

Vamos presumir que a configurao padro para Var1 o valor 1. Ento, ele ter o valor 32
aps o lao FOR.

Lao WHILE

O lao WHILE pode ser usado como o lao FOR com a diferena de que a condio de
interrupo pode ser qualquer expresso booleana. Isso significa que voc indica uma
condio que, quando atendida, o lao ser executado.

Sintaxe:

WHILE <EXPRESSO BOOLEANA>


<Instrues>
END_WHILE;

As <Instrues> so repetidamente executadas, desde que a <Expresso booleana> retorne


TRUE. Se a <Expresso booleana> j for FALSE na primeira avaliao, ento as <Instrues>
nunca so executadas. Se <Expresso booleana> nunca assume o valor FALSE, ento as
<Instrues> so repetidas indefinidamente, o que causa um retardo relativo.

Nota: o programador deve certificar-se de que nenhum lao sem fim gerado. Ele faz isso, alterando a
condio do lao, por exemplo, via contador bidirecional.

Exemplo:

WHILE counter<>0 DO
Var1 := Var1*2;
Counter := Counter-1;
END_WHILE;
Os laos WHILE e REPEAT so, em um determinado sentido, mais eficientes do que o lao
FOR, uma vez que no precisam saber o nmero de ciclos antes de executar o lao. Em
certos casos possvel trabalhar com esses dois tipos de laos. Se, no entanto, o nmero de
ciclos de lao claro, ento um lao FOR prefervel, pois ele no permite lao sem fim.

Lao REPEAT

O lao REPEAT diferente do lao WHILE porque a condio de interrupo verificada


somente aps o lao ter sido executado. Isso significa que o lao ser executado pelo menos
uma vez, independentemente do texto da condio de interrupo.

Sintaxe:

REPEAT
<Instrues>
UNTIL <Expresso booleana>
END_REPEAT;

As <Instrues> so realizadas at que a <Expresso booleana> retorne TRUE. Se <Expresso


booleana> produzir j na primeira avaliao TRUE, ento as <Instrues> so executadas
apenas uma vez. Se <Expresso booleana> nunca assumir o valor TRUE, ento, as
<Instrues> so repetidas indefinidamente, o que causa um retardo relativo.

Nota: programador deve certificar-se de que nenhum lao sem fim causado. Ele faz isso, alterando a condio
na parte da instruo do lao, por exemplo, acionando um contador para cima ou para baixo.

Exemplo:

REPEAT
Var1 := Var1*2;
Counter := Counter-1;
UNTIL
Counter=0
END_REPEAT;

Instruo EXIT

Se a instruo EXIT aparece em um lao FOR, WHILE ou REPEAT, ento, o lao mais interno
encerrado, independentemente da condio de interrupo.
TON

Declarao:

TEMPO1 : TON;
MOTOR1 : BOOL;
LIGA1 : BOOL;

Ex. programa:

TEMPO1(IN := LIGA1, PT:= T#5s);


MOTOR1 := TEMPO1.Q;

TOF

Declarao:

TEMPO2 : TOF;
MOTOR2 : BOOL;
LIGA2 : BOOL;ST:

Ex. programa:

TEMPO2(IN := LIGA2, PT:= T#5s);


MOTOR2 := TEMPO2.Q;

TP

Declarao:

TEMPO3 : TP;
MOTOR3 : BOOL;
LIGA3 : BOOL;

Ex. programa:

TEMPO3(IN := LIGA3, PT:= T#5s);


MOTOR3 := TEMPO3.Q;
CTU

Declarao:

CTU1 : CTU ;
SINAL1 : BOOL;
CONTA1 : BOOL;
ZERA1 : BOOL;
VALOR : WORD;
CONTAGEM : WORD;

Ex. programa:

CTU1(CU:= CONTA1, RESET:= ZERA1, PV:= VALOR);


SINAL1 := CTU1.Q ;
CONTAGEM := CTU1.CV;

CTUD

Declarao:

CTUD2 : CTUD ;
SINAL2_U : BOOL;
SINAL2_D ; BOOL;
CONTA2 : BOOL;
ZERA2 : BOOL;
TOTAL2 : BOOL;
VALOR2 : WORD;
CONTAGEM2 : WORD;

Ex. programa:

CTUD2(CU:= CONTA2, RESET:= ZERA2, LOAD:=TOTAL2 , PV:= VALOR2);


SINAL2_U := CTUD2.QU ;
SINAL2_D := CTUD2.QD ;
CONTAGEM2 := CTUD2.CV;
Exerccio:

Objetivo
Regular o trfego num cruzamento, atravs da implementao de um sistema de controle
dos semforos existentes para os carros e pedestres.

Funcionamento
Num determinado cruzamento ser instalado um sistema que consiste em dois semforos
para os carros e dois semforos para os pedestres, agrupados aos pares. Cada grupo de
semforos complementar aos anlogos na via adjacente.
Um grupo de semforos constitudo por um semforo para os carros e outro para os
pedestres, de acordo com a Figura 1.
O cruzamento em que se pretende controlar o trfego representado pela Figura 2.

Figura 1

Figura 2

Os dois semforos devero ter a seguinte sequncia:


Semforo dos carros:
Verde (30 s)  Amarelo (10s)  Vermelho (30s)  Verde (30 s)
Semforos dos pedestres:
Vermelho (40 s)  Verde (20s)  Verde (10s)  Piscar a 0,5 Hz  Vermelho (30 s)

Este funcionamento interrompido quando um pedestre aperta um boto de chamada (sendo


apenas vlido quando o semforo dos carros se encontra em verde). Neste caso a sequncia passar
a ser:
Semforo dos carros:
Verde de imediato  Amarelo (10s)  Vermelho (5s)  Verde
Semforo dos pedestres:
Vermelho  Verde (5s)  Vermelho

Novos pedidos para atravessar a via, apenas so aceites aps 30 segundos.


Deve existir um segundo modo de funcionamento, em que a luz amarela dos carros deve piscar a
uma frequncia de 1 Hz e a luz verde dos pedestres a uma frequncia de 0,5 Hz.
Estudar a possibilidade de implementar um detector da passagem de carros, para que aps 10
segundos de ausncia de carros, o sinal verde ceda o lugar ao amarelo.

Você também pode gostar