Lista de instruções

artigo de lista da Wikimedia

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.

EstruturaEditar

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 DESVANTAGENSEditar

VantagensEditar

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

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

DesvantagensEditar

·        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

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 MODIFICADORESEditar

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

ModificadoresEditar

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.

OperadoresEditar

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 1Editar

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 2Editar

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 3Editar

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 SEditar

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 4Editar

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 FABRICANTESEditar

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.

TEMPORIZADORESEditar

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.

CONTADORESEditar

            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ênciasEditar