Lista de instruções

Lista de Instruções, do inglês, Instruction List (IL), é uma das 5 linguagens amparadas pela norma IEC 61131-3, e é designada para programação de CLPs. Se assemelha ao assembly, pois define mneumônicos, como é feito na mesma. Ideal para programas com poucas quebras no fluxo de execução, para resolução de problemas pequenos e, consequentemente, adequadas para CLPs de mesmo porte. As funções e variáveis são padronizadas todas de acordo com a norma em que está contida, fazendo com que mais que uma linguagem possa ser usada num mesmo programa.

Estrutura[editar | editar código-fonte]

A estrutura da linguagem, como o assembly, utiliza um acumulador para armazenar os resultados parciais durante a execução. Possui comandos load e store. Todas as instruções usam como base o acumulador, ou utilizam ou modificam um registro de valor no mesmo. Operações algébricas entre o valor atual e o operando são definidas pelo operador. O resultado é armazenado no próprio acumulador.

Algumas regras para a estruturação de um programa em IL devem ser seguidas:

·        Cada instrução deve começar numa nova linha;

·        Toda instrução pode ser precedida de um rótulo, seguido de dois pontos “:”;

·        O operador pode incluir um modificador;

·        Comentários devem ficar no final da linha, ou em linhas sem instruções;

·        O programa pode conter linhas em branco.

VANTAGENS E DESVANTAGENS[editar | editar código-fonte]

Vantagens[editar | editar código-fonte]

·        Interação entre a linguagem e o código assembly do CLP;

·        Documentação mais compacta que a equivalente com relés.

Desvantagens[editar | editar código-fonte]

·        Necessidade de noção de programação assembly;

·        Necessidade de familiarização do operador com álgebra booleana;

·        Difícil de alterar o código já implementado.

RÓTULO (ETIQUETA)[editar | editar código-fonte]

Em IL, rótulos podem ser utilizados como saltos entre as instruções. Na estrutura do programa, um rótulo pode ser definido como um nome seguido do caractere “:” ou pode ser colocado em uma linha que não contenha nenhuma instrução.

Um programa não pode conter dois rótulos com nomes iguais. O nome dado a um rótulo não deve conter mais de 16 caracteres de cumprimento, sendo que o primeiro caractere deve ser obrigatoriamente uma letra e que os demais caracteres podem ser letras, números ou símbolo “_” (sublinhado). 

OPERADORES E MODIFICADORES[editar | editar código-fonte]

A tabela 1 apresenta os principais operandos e modificadores da linguagem lista de instruções.

Operador

Modificador

Operando

Descrição/Significado

LD

N

Carrega o operando para o acumulador

ST

N

Armazena o conteúdo do acumulador no local especificado pelo operando

S

BOOL

Valor do operando = 1

R

BOOL

Valor do operando = 0

AND

N, (

Função booleana AND

&

N, (

Função booleana AND

OR

N, (

Função booleana OR

XOR

N, (

Função booleana XOR

ADD

Soma

SUB

Subtração

MUL

Multiplicação

DIV

Divisão

GT

(

Comparação: Maior que (Greater than - >)

GE

(

Comparação: Maior ou igual que (Greater or Equal - >=)

EQ

(

Comparação: Igual a (Equal to - =)

NE

(

Comparação: Diferente de (Not Equal - !=)

LT

(

Comparação: Menor que (Less Than - <)

LE

(

Comparação: Menor ou igual que (Less or Equal - <=)

JMP

C, N

Nome do Rótulo

Desvia para o Rótulo “Nome_do_Rotulo

CAL

C, N

Nome da Função

Executa um bloco de funções

RET

C, N

Retorna de uma função ou bloco de funções

Tabela 1: Principais Operadores da lingugagem LI

Modificadores[editar | editar código-fonte]

Em LI, os modificadores devem ser colocados após o nome da instrução, sem caractere separador. São permitidos três tipos de modificadores, sendo eles:

·        C: Operação condicional;

·        N: Inversão lógica do operando;

·        (: Operação adiada;

O modificador “C” faz com que a instrução seja executada apenas se o conteúdo atual do acumulador possuir um valor lógico diferente de zero. Já o modificador “N” indica que o operando deve ser invertido antes de ser utilizado pela instrução. O modificador “(“, por sua vez, adia a execução da instrução até que seja encontrado o caractere “)” mais próximo no bloco de instruções.

Operadores[editar | editar código-fonte]

A seguir é apresentado um resumo dos operadores mais comuns na linguagem LI, suas operações e alguns exemplos.

5.2.1 – Operador LD

O operador LD, mnemônico do inglês “LOAD”, carrega um valor para o acumulador e deve ter como operando uma expressão constante.

5.2.2 – Operador ST

O operador ST, mnemônico do inglês “STORE”, carrega transfere o valor de um acumulador para uma variável e deve ter como operando uma variável interna ou de usuário.

Exemplo 1[editar | editar código-fonte]

Implemente um programa na linguagem Lista de instruções (LI) que acenda a lâmpada L sempre que a chave CH fechar e compare com um programa em Ladder.

Solução:

Lista de Instruções:

LD                             CH

ST                             L

Ladder:

Figura 1: Solução Exemplo 1

Exemplo 2[editar | editar código-fonte]

Implemente a função lógica L=I1.I2.I3 em diagrama Ladder e em Lista de Instruções.

Solução:

Lista de Instruções:

LD                           I1

AND                          I2

AND                          I3

ST                               L

Ladder:

Figura 2: Solução Exemplo 2

Exemplo 3[editar | editar código-fonte]

Implemente a função lógica L=I1+I2+I3 em diagrama Ladder e em Lista de Instruções.

Solução:

Lista de Instruções:

LD                              I1

OR                              I2

OR                           I3

ST                               L

Ladder:

Figura 3: Solução Exemplo 3

Operador S[editar | editar código-fonte]

O operador S, mnemônico do inglês “SET”, força uma variável booleana a ir para o estado lógico “1” se o acumulador estiver com o valor VERDADEIRO.

Operador R for 

O operador R, mnemônico do inglês “RESET”, transfere o valor “0” para o conteúdo da memória do operando em questão.

Exemplo 4[editar | editar código-fonte]

Faça um programa na linguagem Ladder e Lista de Instruções que corresponda a um contato I1, normalmente aberto, conectado em paralelo a um contato I2, normalmente fechado, e um contato I3, normalmente fechado, em série com ambos. Conectado a este esquema está uma bobina “L” do tipo SET.

Solução:

Lista de Instruções:

LD                              I1

OR                           I2

ANDN                         I3

ST                               L

Ladder:

Figura 4: Solução Exemplo 4

OPERAÇÕES ADIADAS

Na linguagem LI (Lista de Instruções) existe apenas um registrador e, devido a isso, é possível que algumas operações sejam adiadas para alterar a ordem de execução das instruções. Para tal, são utilizados os parênteses, sendo “(“ para dizer que a instrução anterior será adiada e “)” para que a instrução que foi adiada, seja executada. Quando o código chega no operador “(“, o conteúdo do acumulador juntamente ao operador são colocados em uma pilha e assim que o código encontra o operador “)”, o último elemento da pilha é retirado e se dá sequência à operação que foi adiada com o conteúdo agora presente no acumulador.

MNEMÔNICOS DE ALGUNS FABRICANTES[editar | editar código-fonte]

Antes da adoção da norma IEC 61131-3 os mnemônicos utilizados eram diferentes para cada fabricante de PLC, embora possuíssem algumas semelhanças. Com a norma muitos passaram a adotar os mesmo mnemônicos para facilitar a utilização aos usuários.

Há também variação na denominação do tipo de programação, por exemplo, a SIEMENS denomina Statement List (STL).

 A tabela abaixo apresenta algumas variações entre fabricantes.

IEC 61131-3

Mitsubishi

SIEMENS

OMRON

LD

LD

LD

LD

LDN

LDI

LDN

LD NOT

AND

AND

A

AND

ANDN

ANI

NA

AND NOT

OR

OR

O

OR

ORN

ORI

ON

OR NOT

ST

OUT

= 

OUT

Tabela 2: Diferença de mnemônicos de alguns fabricantes.

TEMPORIZADORES[editar | editar código-fonte]

Na programação de PLC os temporizadores são uma importante ferramenta. Existem diversos tipos, entre eles temos o TON e TOF.

TON (Timer on-delay): consiste em um temporizador para ativar ou desativar uma saída após um tempo predeterminado. É ativado quando suas condições forem verdadeiras e, enquanto forem mantidas, o valor o acumulador irá aumentando ate atingir o valor determinado, ligando sua saída. Se as condições são interrompidas, o valor do acumulador será resetado. Um exemplo de utilização é:

            TON    T1,100

no qual T1 é o nome do temporizador e 100 o tempo, em milissegundos, determinado pelo usuário.

TOF (Timer off-delay): este temporizador é ativador ao detectar uma borda de descida. Sua saída ficará ativa enquanto o sinal for baixo e ate ele atingir o tempo predeterminado. Se o valor da entrada passa a ser alto novamente o temporizador é resetado independente do seu estado. Um exemplo da sua utilização é

            TOF    T2,400

no qual T2 é o nome do temporizador e 400 o tempo, em milissegundos, determinado pelo usuário

                  Outros temporizadores utilizados no IL são TP, TONA e TOFA.

CONTADORES[editar | editar código-fonte]

            Na programação IL existem três tipos de contadores CTU, CTD e CTUD.

            O CTU detecta as bordas de subida do sinal, cada vez que acontece é incrementado o valor do acumulador. Quando este atinge o valor predeterminado a saída é ligada.

            O CTD começara com o acumulador em um valor determinado e, cada vez que detectar uma borda de descida no sinal, será decrementado em uma unidade ate atingir o valor zero. Quando este é atingido a saída é ligado.

            O funcionamento do CTUD é igual ao do CTU porem possui também uma entrada que diminui o valor do acumulador. A saída somente será ligada quando o valor predeterminado for atingido.           

Referências[editar | editar código-fonte]