Você está na página 1de 13

SUPORTE DE CURSO

IEC 1131-3
Instruction
List
Livro Texto:

Programming industrial control systems using IEC 1131-3


R.W. Lewis

UFMG Informtica Industrial


Prof. Constantino Seixas Filho
IEC1131-3 - Instruction List

IEC 1131-3 Instruction List


Structured Text (ST)
Instruction List (IL)
Function Block Diagram (FBD)
Ladder Diagram (LD)
Sequential Function Charts (SFC)

Textuais

Grficas

SFC
ST

IL

TEXTUAIS

LD

FBD
GRFICAS

uma linguagem textual, de baixo nvel, usada


para descrever o comportamento de :

Funes
Blocos de funes
Programas
Em SFC para expressar o comportamento, aes e transies.

Princpios bsicos
Linguagem textual de baixo nvel semelhante ao assembly. Ideal para resolver
problemas simples e pequenos onde existem poucas quebras no fluxo de
execuo do programa.

A linguagem mais fcil de implementar que o texto estruturado e a


linguagem preferida por pequenos implementadores de CLPs.

considerada por muito implementadores como a linguagem para a qual todas


as demais linguagens devem ser traduzidas. Este no entretanto um
requerimento do standard.

Outros a encaram como a linguagem preferencial de pequenos CLPs e


enxergam o Texto Estruturado como a linguagem base.
IEC1131-3 - Instruction List

Na verdade apenas uma linguagem adicional, menos amigvel e flexvel e


que deve ser usada para produzir cdigo otimizado para trechos de
performance crtica em um programa.

Estrutura da linguagem
Cada instruo ocupa uma linha
Instruo = Operador + Operandos
Cada instruo usa ou muda o valor de um nico registrador denominado registro
de resultado ou acumulador.
Sempre no
final da linha

Exemplo:

Label

Linha de
espaamento

Operador

Operando

Comentrio

LD

Velocidade

(* Carregue Velocidade e *)

GT

1000

(* Teste se maior que 1000 *)

JMPCN

VOLTS_OK

(* Jump se no *)

LD

Volts

(* Carregue Volts *)

SUB

10

(* Retirar 10 *)

ST

Volts

(* Armazenar em Volts *)

(* Carregue 1 e armazene *)

%Q75

(* na sada 75 *)

VOLTS_OK: LD
ST

O programa acima equivalente ao seguinte trecho em Texto Estruturado:


IF Velocidade > 1000 THEN
Volts := Volts - 10;
END_IF;
%Q75 = 1;

IEC1131-3 - Instruction List

Semntica das Instrues:


Instrues Gerais:
Operador

Operando eqivale a :

Acumulador := Acumulador Operador Operando


Exemplo:

SUB

10

Acumulador := Acumulador SUB 10

A instruo Load:
LD

Acumulador := Operando

Exemplo:

LD

Velocidade

Acumulador := Velocidade

A instruo Store:
ST

Operando := Acumulador

Exemplo:

ST

VOLTS

IEC1131-3 - Instruction List

VOLTS := Acumulador

Execuo adiada
Algumas instrues permitem o uso do modificador parntesis : (
Este modificador permite que resultados intermedirios sejam obtidos sem
alterao do acumulador. O efeito o mesmo de se usar parntesis em expresses
aritmticas normais e em expresses booleanas.
Exemplo: execuo adiada

Operador

Operando

Comentrio

LD

(* Adicione A e B *)

ADD

(* Mantenha o resultado no acumulador *)

MUL(

(* Adie at (A-B) ser calculado *)

SUB

(* agora multiplique por (A-B) *)

Quando o primeiro parntesis, depois de MUL alcanado, o resultado de A + B


mantido no acumulador principal e A carregado num acumulador temporrio.
A operao de MUL ser adiada at que o fecha parntesis seja alcanado. SUB B
produz A - B que mantido no acumulador temporrio. ')' alcanado e o valor
do acumulador temporrio multiplicado pelo valor do acumulador principal.
Este programa equivalente a :
resultado := (A + B) * (A - B)

No existe precedncia operadora com os operadores IL

O exemplo abaixo realiza a operao:


X + (B * ( C + D))
Operador

Operando

Comentrio

LD

(* Carregue X *)

ADD(

(* Adie ADD, carregue B *)

MUL(

(* Adie MUL, carregue C *)

ADD

(* Some D *)

(* multiplique acumulador *)

(* some *)

IEC1131-3 - Instruction List

Este conjunto de operaes equivalente s seguintes operaes em uma pilha :


PUSH X
PUSH B
PUSH C
PUSH D
ADD
MUL
ADD
Operaes:
PUSH X

PUSH B

PUSH C

PUSH D

ADD

D+C
B
X

B*(D+C)
X

MUL

ADD

Situao da Pilha:

TOS

B
X

C
B
X

D
C
B
X

X + B*(D+C)

No use jumps dentro de uma seo entre parntesis.

Modificadores:
N - Nega um valor booleano.
C - Denota jump condicional.
S pode ser utilizado com a instruo JMP.
Exemplo:

LD

%IX10

(* Carrega Entrada 10 *)

ANDN

Switch1

(* AND NOT Switch1 *)

JMPNC

Label1

(* Jump se no verdadeiro *)

IEC1131-3 - Instruction List

Operadores
Operador Modificador

Operando Comentrios

LD

Qualquer1

ST

Carrega operando no acumulador

Qualquer

Armazena acumulador no operando

BOOL

Seta operando para TRUE

BOOL

Reseta operando para False

AND

N,(

BOOL

AND booleano

&

N,(

BOOL

equivalente a AND

OR

N,(

BOOL

OR booleano

XOR

N,(

BOOL

OU exclusivo

ADD

Qualquer1

Adio

SUB

Qualquer1

Subtrao

MUL

Qualquer1

Multiplicao

DIV

Qualquer1

Diviso

Pode representar qualquer tipo simples: SINTY, INT, DATE_AND_TIME,


REAL, etc.

Operadores comparativos e de desvio (jump):


Operador Modificador

Operando Comentrios

GT

Qualquer

Comparao maior que

GE

Qualquer

Comparao maior ou igual

EQ

Qualquer

Comparao igual

NE

Qualquer

Comparao diferente

LE

Qualquer

Comparao menor ou igual

LT

Qualquer

Comparao menor

JMP

C,N

Label

Salta para label

CAL

C,N

Nome

Chamada de bloco de funo

RET

C,N

IEC1131-3 - Instruction List

Retorno de funo ou bloco de funo


Execute o ltimo operador adiado

Os operadores que possuem dois modificadores podem ser usados com ambos:

Operador

Semntica

AND

AND booleano

AND(

AND adiado

ANDN(

Adia a execuo e inverte o resultado (NAND adiado)

ANDN

Funo NAND

Chamada de funes e blocos de funes:


Existem trs diferentes formatos de chamada:

Usando lista de entrada:

CAL LOOP1(SP:= 300.0, PV := %IW20)

Carregando as entradas antes da chamada

LD

300.0

ST

LOOP1.SP

LD

%IW20

ST

LOOP1.PV

CAL

LOOP1

Usando operadores de entrada

Apenas alguns blocos de funes permitem chamada direta atravs de instrues


especiais em IL.
Exemplo:
Biestvel ST (Set/reset) e bloco de contagem up/down (CTU).
S1

Latch1

(* Seta instncia do bloco de funo SR *)

LD

10

(* Acumulador = 10 *)

PV

CTU1

(* Copia 10 no parmetro PV do contador CTU1 *)

CU

CTU1

(* Chama contador up/down habilitado para contar *)

IEC1131-3 - Instruction List

Operadores de blocos de funo:


Operador
S1, R
S, R1
CLK
CLK
CU, R, PV

Tipo de bloco de
funo
Biestvel SR
Biestvel RS
R_Trig, detector de
borda de subida
F_Trig, detector de
borda de descida
CTU, contador
incremental

CD, LD, PV CTU, contador


decremental

CU, CD, R, CTUD, contador


LD, PV
universal
IN, PT

TP, temporizador de
pulso

IN, PT

TON, temporizador de
atraso de subida.

IN, PT

TOF, temporizador de
atraso de descida.

Comentrios
Seta e Reseta o biestvel SR
Seta e Reseta o biestvel RS
Entrada de clock do bloco lgico
detector de borda de subida.
Entrada de clock do bloco lgico
detector de borda de descida.
Parmetros de controle para o
bloco de controle CTU contador
incremental: CU incrementa, R
Reset e PV Carrega contador.
Parmetros de controle para o
bloco de controle CTD contador
decremental: CD incrementa, LD
Carrega e PV Carrega contagem
mnima.
Parmetros de controle para o
bloco de controle CTUD contador
universal.
Parmetros de controle para o
timer de pulso: IN inicia
temporizao, PT seta o tempo de
pulso.
Parmetros de controle para o
timer de atraso de subida: IN
inicia temporizao, PT seta o
tempo de pulso.
Parmetros de controle para o
timer de atraso de descida: IN
inicia temporizao, PT seta o
tempo de pulso.

Deficincias do padro IL:


No descreve o comportamento da mquina virtual que executar a
linguagem.

No explica como o acumulador armazenar dados de tipos diferentes.


No explica como o acumulador armazenar dados estruturados:
matrizes ou vetores.
IEC1131-3 - Instruction List

No descreve como erros de run-time so tratados.


Padro dever ser revisto.

Portabilidade entre IL e outras linguagens IEC


Traduo de outras linguagens para IL mais fcil que de IL para outras
linguagens.
Exemplo:

AND

SW1

SR

%IX3
S1

OR

Test1
Test2

Q1

Start

Reset

Programa em IL:
Operador

Operando

Comentrio

LD

Test1

(* Acumulador = Test1 *)

OR

Test2

(* Acc = Test1 OR Test2 *)

AND

SW1

(* AND SW1 *)

AND

%IX3

(* AND input 3 *)

ST

StartSR.S1

(* Seta entrada de StartSR *)

LD

Reset

(* Carrega valor de Reset *)

ST

StartSR.R

(* Armazena na entrada Reset *)

CAL

StartSR

(* Chama bloco de funo StartSR *)

LD

StartSR.Q1

(* Carrega sada Q1 *)

ST

Start

(* e armazena em Start *)

IEC1131-3 - Instruction List

10

Definindo funes e blocos de funes


IL pode ser usado para definir funes e bloco de funes.
Quando usada para definir uma funo, o valor retornado ltimo valor
no acumulador.
Exemplo:

Distncia de deslocamento
uma superfcie plana.

entre

x1, y1

dois

furos

em

TRAVEL

y1 - y2

REAL

X1

REAL

X2

REAL

Y1

REAL

Y2

REAL

TMax

x2,y2
x1 - x2

ENO

BOOL
REAL

Distncia = SQRT((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));

A sada EN0 deve indicar se o valor de distncia menor que Tmax, o


alcance mximo da mquina.
FUNCTION TRAVEL: REAL
VAR_INPUT
X1, X2, Y1, Y2: REAL; (* coordenadas dos pontos extremos *)
Tmax: REAL;
END_VAR
VAR
temp: REAL; (* Valor temporrio *)
END_VAR
LD Y1
SUB Y2
ST
Temp
MUL Temp
ADD( X1
IEC1131-3 - Instruction List

(* Acumulador = Y1 - Y2 *)
(* Salva resultado intermedirio em Temp *)
(* Acumulador = Temp ^2*)
(* Acc2 = X1, empilha soma *)
11

SUB X2
(* Acc2 = X1 - X2 *)
ST
Temp
(* Salva em Temp *)
MUL Temp
(* Acc2 = Temp^2 *)
)
(* Executa soma suspensa *)
ST
Temp
(* Salva em Temp *)
CAL SQRT(Temp)(* Funo raiz quadrada *)
ST
TRAVEL
(* Estabelece sada da funo *)
GT Tmax
(* Testa se maior que Tmax *)
JMPC ERR
(* Sim, v para erro *)
S
ENO
(* Set ENO *)
RET
(* Retorno normal *)
ERR:
RET
END_FUNCTION

(* Retorno sem setar ENO *)

Agora desenhe o equivalente em Block Language.

IEC1131-3 - Instruction List

12

Leitura Complementar:
q Bonfatti, Monari, Sampieri, IEC1131-3 Prograrmming Methodology, CJ
International, 1997.

Exerccios:
1. Escreva um bloco de funo em IL para calcular a seguinte funo de
variveis complexas:

zn +1 = z 2 n + p , onde p = x + jy
2. D trs exemplos de situaes onde voc acha vantajoso utilizar a linguagem
IL:
a) ____________________________________________________________
b) ____________________________________________________________
c) ____________________________________________________________
3. Comente a seguinte frase: "No vantagem se utilizar linguagens de muito
baixo nvel na programao de aplicaes, porque o baixo nvel de abstrao
resulta em programas ilegveis e de alta complexidade".
4. Leia na Internet sobre a linguagem Step 5 da Siemens e a compare com a
linguagem IL.
5. Escreva um programa que converta expresses na forma infixada para
expresses na forma posfixada.
Exemplo:
Inorder:

(a + b / c) * d

Postorder:

abc/+d*

6. Escreva um programa em IL para calcular a expresso:


Exp = X + A * (B+C) (A * (B-C));

IEC1131-3 - Instruction List

13

Você também pode gostar