Você está na página 1de 30

Programação de Sistemas de

Controle com Padrão IEC


61131-3
Aula 06
Linguagens 1 – Texto Estruturado e
Lista de Instruções

1
Carmela Maria Polito Braga, DELT/UFMG
GVAS-LVAS/UFMG
Li
Linguagens IEC 61131-3
61131 3
„ Textuais
‡ IL - Lista de Instruções
‡ ST - Texto Estruturado
„ Gráficas
‡ LD – Diagrama Ladder
‡ FBD - Diagrama de Blocos Funcionais
„ Organização
g ç de Programas
g
‡ SFC – Sequenciamento Gráfico de Funções
„ Outras não definidas pela norma(dependente do
p
produto)
)
‡ Flow Chart
‡ C
‡ Etc.

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


TEXTO ESTRUTURADO

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ Pode ser usada para expressar o comportamento de funções, blocos
funcionais e programas
programas. Pode ser usado,
usado também,
também com SFC para
expressar o comportamento de steps, ações e transições.

‡ Características
„ Linguagem de alto nível - flexível
„ Semelhante ao Pascal (ISO 7185)
„ Ideal para:
‡ Tomada de decisões

‡ Declarações (Variáveis, POUs, Configurações, etc.)

‡ Cálculos diversos

‡ Implementação de algoritmos

‡ Definição de ações (SFC)

‡ Utilização de literais

‡ Criação de POUs, etc. (na prática, muito usada para a


4
programação do corpo de funções e blocos funcionais)
GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG
Texto Estruturado
„ Atribuição
‡ X := Y;
„ Expressões
‡ Vazao[3] := 10.3 + SQRT((Rate + 2.0) * (A1/2.3));
‡ StartUp := A AND B AND D AND E;
„ Avaliação de expressões:
‡ Quando os operadores têm a mesma precedência, eles
são avaliados da esquerda para a direita. Expressões
em pparêntesis tem a maior p
precedência,, ou seja,
j , devem
ser avaliadas antes das demais, de dentro para fora.

O número de níveis em q
que as expressões
p p
podem ser aninhadas
depende da implementação de cada fabricante.
5

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


T t Estruturado
Texto E tr t r d
‡ Operadores
Operador Descrição Precedência
(…) Expressão com parêntesis Maior
Função(…) Lista de parâmetros de uma função
** Exponenciação
- Negação
NOT Complemento booleano
* Multiplicação
p ç
/ Divisão
:
MOD Operador de módulo
:
+ Soma
:
- ç
Subtração
<,>,<=,>= Comparação
= Igualdade
<> Desigualdade
AND,, & E booleano
XOR OU Exclusivo booleano
OR OU booleano Menor 6

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado

‡ Chamada de blocos funcionais


„ Podemos chamar ou invocar um bloco funcional por
meio do seu nome, tendo como parâmetros valores
válidos para os parâmetros de entrada.
‡ Forma Geral:
„ InstanciaBlocoFunc(ParamEntrada1:=Expressão1,
ParamEntrada2:=Expressão2
ParamEntrada2: Expressão2, …);
);
‡ Se algumas entradas ficarem indefinidas na
chamada do bloco funcional, e o bloco estiver
sendo chamado pela primeira vez
vez, o valor
default do parâmetro será assumido. Se o
bloco já tiver sido chamado anteriormente o
último valor da entrada será assumido.
assumido
7

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ Exemplo: considere LOOP1 a instância de um
controlador

(* Primeira chamada *)
Loop1(PV:= Input1.Out + Offset, SP := 100.0);
„ O valor default para Modo é assumido como AUTO.
AUTO
(* Chamada Posterior *)
p (
Loop1(PV:= Input1.Out
p + Offset,, Modo := MANUAL);
);
„ SP não é definido.
„ O último valor utilizado é assumido: 100.00.

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ Comando condicional IF .. THEN .. ELSE
IF A> B THEN
D := 1;;
ELSEIF A = B + 2 THEN
D := 2;
ELSEIF A = B - 3 THEN
D :=4;
ELSE
D := 3;
END IF;
END_IF;
9

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ Comando condicional CASE
CASE <expressão inteira> OF
< valor 1 do seletor inteiro> : < comandos>
< valor 2 do seletor inteiro> : < comandos>
< valor
l 3d do seletor
l inteiro> : < comandos>
d
ELSE
<comandos>
END CASE;
END_CASE;
‡ O valor do seletor inteiro pode definir um
único, vários ou uma faixa de valores:
1: (* Valor 1 *)
2,3,4: (* Valores 2, 3 e 4 *)
5..10 (* Valores de 5 a 10 *)

10

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ Exemplo:
p
CASE seletor_velocidade OF
1: velocidade := 10.0;
2: velocidade :=
: 20.4;
20 4;
3: velocidade := 30.0; Ventilador1 := ON;
4,5: velocidade := 50; Ventilador2 := ON;
6..10: velocidade := 60.0; Agua := ON;

ELSE
velocidade :=0; FalhaVelocidade := TRUE;

END CASE;
END_CASE;
11

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ Comando de repetição FOR .. DO
FOR <inicializa variável de iteração >
TO < valor final da expressão>
BY < expressão incremental> DO A expressão
<comandos> precedida por
END_FOR; BY é opcional.
Se este
comando for
‡ Exemplo: omitido a
variável de
FOR I := 100 TO 1 BY -1 DO
iteração será
Canal[I].status
[ ] := ON;; incrementada
END_FOR; de 1.

FOR T := NumTanques
q -1 TO TanqueMax*2
q DO
NumTanque := T; volume(tanque:= T);
END_FOR 12

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ Comando de repetição
p ç WHILE .. DO
WHILE <Expressão booleana> DO
<comandos…>
END WHILE
END_WHILE

‡ Exemplo:
WHILE Valor < (ValorMax -10.0) DO
MovePonte();
Valor :=
: Valor + Posição_Ponte;
Posição Ponte;
END_WHILE

Permite a execução de comandos enquanto o valor de uma


expressão é verdadeiro (TRUE).
13

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ Comando de repetição REPEAT .. UNTIL
REPEAT
<comandos>
UNTIL <expressão booleana>
END_REPEAT
_

‡ Exemplo:
Tentativas := 0;
REPEAT
Tentativas : = Tentativas + 1;
CambioMotor1(Modo := DESABILITADO);
UNTIL (CambioMotor1.Estado = OFF) OR (Tentativas > 4)
END_REPEAT

Permite a execução de comandos até que o valor de uma expressão seja


verdadeiro (TRUE). A expressão é testada após a execução dos
comandos. 14

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Texto Estruturado
‡ EXIT
„ O comando d Exit
E it só
ó pode
d ser usado
d dentro
d t ded iterações,
it õ
abortando a mesma e forçando a execução do programa para o
fim da interação. Para iterações aninhadas o comando EXIT
aborta somente a iteração
ç do nível em q
que ele se encontra.
‡ Exemplo:
Falha := FALSE;
FOR I := 1 TO 20 DO
FOR J := 0 TO 9 DO
IF ListaEquipamentosFalha[I, J] THEN
NumeroFalha ::= II*10
10 + J;
Falha := TRUE; EXIT;
END_IF;
END FOR;
END_FOR;
IF Falha THEN EXIT; END IF;
15
END_FOR;
GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG
T t Estruturado
Texto E tr t r d
‡ O comando RETURN Só FUNCTION_BLOCK TEST
pode ser usado dentro do VAR_INPUT
corpo de funções e blocos CURRENT, VOLTS1, VOLTS2 :
REAL;
funcionais sendo usado
funcionais, END_VAR
para abortar VAR_OUTPUT
prematuramente a OVERVOLTS: BOOL;

execuçãoã dos
d mesmos, END_VAR

forçando a execução para o IF VOLTS1*CURRENT > 100 THEN


OVERVOLTS := TRUE; RETURN;
fim do corpo.
p O uso de END IF
END_IF
RETURN não deve ser IF VOLTS2*(CURRENT+10) >100
THEN
demasiado para não
OVERVOLTS : =TRUE; RETURN;
dificultar o entendimento END_IF
do algoritmo. END_FUNCTION_BLOCK; 16

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


T t Estruturado
Texto E tr t r d

17

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


LISTA DE INSTRUÇÕES - IL

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ
‡ Características
„ Linguagem de Baixo Nível, semelhante ao Assembly.
„ Modelo de execução baseado em acumulador simples.
„ Baseado no padrão Alemão ‘Anweisungsliste’, AWL.
„ Recomendada para pequenos programas. Ideal para resolver
problemas simples, em que existam poucas quebras no fluxo
de execução.
„ Mais
M i fácil
fá il de
d implementar
i l t (d
(da parte
t dos
d fabricantes)
f b i t ) que o ST.
ST
Normalmente o CP interpreta a IL, não sendo necessário o uso
de compiladores, como ocorre com ST.
„ Ideal para resolver pequenos problemas,
problemas diretos,
diretos onde existem
poucas decisões e onde há um número limitado de mudanças
no fluxo de execução do programa. Pode ser usada, ainda,
para produzir código otimizado em trechos de desempenho
crítico.
í
Na prática recomenda-se o uso de linguagens mais estruturadas sempre que
19
possível, deixando IL para pequenas otimizações
GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG
Lista de Instruções
„ Na linguagem Lista de Instruções – IL cada instrução
ocupa uma linha
li h formada
f d por:
Instrução = Operador + Operandos
O operando é o dado manipulado pelo operador. Alguns
operadores
d podem
d utilizar
tili mais
i dde um operando,
d sendod
que, nestes casos, estes devem ser separados por
vírgulas.

„Cada instrução muda o valor de um único registrador


denominado resultado ou acumulador. Todas as
p ç
operações são feitas utilizando o acumulador e o resultado
de cada operação é armazenado no próprio acumulador.

„ Instruções: LD (carrega o valor do operando no


acumulador), ST (armazena o valor do acumulador no
operando). 20

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Em ST seria:
Li t de
Lista d Instruções
I tr õ IF Speed > 1000 then
Volts : = Volts-10;
END_IF
‡ Estrutura da linguagem
g g %Q75 := 1;

Label Operador Operando Comentário

LD Velocidade (* Carrega Velocidade no acumu


*)
GT 1000 (* Testa se é maior que 1000 *)
JMPCN VOLTS_OK (* Salta se não é *)
LD Volts (* Carrega Volts no acumulador *
SUB 10 (* Retira 10 *)
ST Volts (* Armazena valor do acumulado
operando
d Volts
V l *)

VOLTS_OK: LD 1 (* Carrega 1 e *)
ST %Q75 (* Armazena na saída 75 *)
21

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ
‡ Instrução LOAD (LD)
„ (Carrega operando no Acumulador)
LD Acumulador := Operando
‡ Exemplo:
LD Velocidade
‡ Equivale a:
Acumulador ::= Velocidade

22

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ
‡ Instrução STORE (ST)
„ (Armazena Acumulador no operando)
ST Operando := Acumulador
‡ Exemplo:
ST VOLTS
‡ Equivale a:
VOLTS ::= Acumulador

23

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ
‡ Execução
ç adiada
„ A execução adiada é feita por meio do uso de parêntesis
“(“.
„ Algumas instruções permitem o uso deste modificador.

‡ Exemplo: (A+B) * (A-B)


Operador Operando Comentário

LD A (* Carrega A *)
ADD B ((* Adiciona B a A *))
MUL( A (* Adia MUL, carrega A *)
SUB B (* Subtrai B de A *)
) ((* Multiplica pelo resultado de (A-B) *))
24

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ
‡ Modificadores
„ Alguns operadores IL podem utilizar uma letra
como modificador após o seu mnemônico,
alterando a semântica da instrução:
‡ N - Nega um valor booleano.
‡ C - Condicional (normalmente utilizado com a instrução
JMP).
JMP)

‡ Exemplo:
p
LD %IX10 (*Carrega Entrada 10*)
ANDN Switch1 (*AND NOT Switch1*)
JMPNC L b l1
Label1 (*S l se não
(*Salta ã é verdadeiro*)
d d i *)
25

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ
„ Operadores
Operador Modificador Operando Comentários
LD N Qualquer1 Carrega operando no acumulador
ST N Qualquer1 Armazena acumulador no operando
S BOOL Seta operando para TRUE
R BOOL Reseta operando para FALSE
AND N,( BOOL E booleano
& N,( BOOL equivalente a E
OR N,( BOOL OU booleano
XOR N,( BOOL OU exclusivo
ADD ( Qualquer1 Adição
SUB ( Qualquer1 Subtração
MUL ( Qualquer1 Multiplicação
1
DIV ( Qualquer
Q l Di i ã
Divisão
Não existe precedência com os operadores IL. Por isso é necessário o uso de 26
parêntesis. Eles funcionam como uma pilha, permitindo operações complexas.
GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG
Li t de
Lista d Instruções
I tr õ
„ Operadores
Operador Modificador Operando Comentários
GT ( Qualquer1 Comparação maior que
GE ( Q q 1
Qualquer Comparação
p ç maior ou igual
g
EQ ( Qualquer1 Comparação igual
NE ( Qualquer1 Comparação diferente
LE ( Qualquer1 Comparação menor ou igual
LT ( Qualquer1 Comparação menor
JMP C,N Label Salta para label
CAL C,N Nome Chamada de bloco funcional
RET C,N Retorno de função ou bloco
funcional
) Executa o último operador adiado
27

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ
‡ Chamada
C a ada de funções
u ções e blocos
b ocos funcionais
u co as
(com o uso da instrução CAL)
„ Usando lista de entrada
CAL LOOP1(SP := 300.0,
300 0 PV := %IW20)

„ Carregando as entradas antes da chamada


LD 300.0 (carrega valor no acumulador)
ST LOOP1.SP (carrega valor do acumulador no
operando)
LD %IW20
ST LOOP1.PV
CAL LOOP1 (chama função LOOP1)

28

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ
‡ Usando operadores de entrada
„ Apenas alguns blocos funcionais padrões permitem
chamada direta por meio de instruções especiais
em IL,
IL como é o caso dos blocos SR (bi-estável
(bi estável –
Set/Reset) e CTU (contagem crescente).

‡ Exemplo:
S1 Latch1 (* Seta instância do bloco funcional SR *)
LD 10 (* Carrega acumulador com valor 10 *)
PV CTU1 (* Copia 10 no PV do contador CTU1 *)
CU CTU1 (* Chama contador up/down habilitado
para contar *)
29

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG


Li t de
Lista d Instruções
I tr õ

30

GVAS- LVAS, Prof. Carmela Maria Polito Braga,DELT/UFMG

Você também pode gostar