• No results found

Os elementos textuais especificados na norma devem ser comuns com as linguagens textuais (IL e ST). Em particular, os seguintes elementos de estrutura de programa devem ser comuns com as linguagens textuais.

TYPE…END_TYPE (2.3.3) VAR…END _VAR (2.4.3) VAR_INPUT…END_VAR (2.4.3) VAR_OUTPUT…END_VAR (2.4.3) VAR_IN_OUT…END_VAR (2.4.3) VAR_EXTERNAL…END_VAR (2.4.3) FUNCTION…END_FUNCTION (2.5.1.3) FUNCTION_BLOCK...END_FUNCTION_BLOCK (2.5.2.2) PROGRAM…END_PROGRAM (2.5.3) STEP…END_STEP (2.6.2) TRANSITION…END_TRANSITION (2.6.3) ACTION…END_ACTION (2.6.4)

3.2. Lista de Instruções

A norma define a semântica e sintaxe formal da linguagem Lista de Instruções de modo detalhado.

Instruções

Uma lista de instruções é composta de uma seqüência de instruções. Cada instrução deve começar em uma nova linha e deve conter um operador com modificadores opcionais e, se necessário para a operação particular, um ou mais operandos separados por vírgulas. Operandos podem ser qualquer representação de dados definida para literais e para variáveis.

A instrução pode ser precedida por uma etiqueta de identificação seguida por dois pontos (:). Um comentário, se

necessário e presente, deve ser o último elemento na linha. Linhas vazias podem ser inseridas entre instruções.

Tab. 51 - Exemplos de campos de instrução

Etiqueta Operador Operando

Comentário

START LD %IX1 (* PUSH BUTTON *) ANDN %MX5 (* NOT INHIBITED *) ST %QX2 (* FAN ON *)

Operadores, Modificadores e Operandos

Operadores padrão com seus modificadores permitidos e operandos estão listados na norma.

A não ser que seja definido diferente, a semântica do operador deve ser a

seguinte:

result := result OP operando Isto é, o valor da expressão sendo calculada é substituído por seu valor corrente operado pelo operador com relação ao operando. Por exemplo, a instrução AND%IX1 é interpretada como:

result := result AND %IX1

Os operadores de comparação devem ser interpretados com o resultado corrente à esquerda da comparação e o operando à direita., com um resultado booleano. Por exemplo, a instrução GT %IW10 terá o resultado booleano igual a 1, se o

resultado corrente for maior do que o valor da palavra de entrada 10 e o resultado sejam zero, nos outros casos.

O modificador N indica a negação booleana do operando. Por exemplo, a instrução ANDN %IX2 é interpretada como

result := result AND NOT %IX2 O modificador abre parêntesis ou parentização, “(“ indica que o cálculo do operador deve ser adiado até que o

encontrado, e.g., a seqüência de instruções

AND ( %IX1 OR %IX2 )

deve ser interpretada como

result := result AND( %IX1 OR %IX2) O modificador C indica que a instrução associada deve ser executada somente se o valor do resultado atualmente calculado seja o booleano 1 (ou booleano 0 se o operador é combinado com o modificador N)

Tab. 52 – Características de invocação do bloco de função para linguagem IL

No. Descrição – Exemplo 1 CAL com lista de entrada

CAL C10(CU := %IX10m PV :=15) CAL com carga ou entradas de armazenagem: LD 15 ST C10 . PV LD %IX10 ST C10.CU 2 CAL C10 Uso de operadores de entrada LD 15 PV C10 LD %IX10 3

CU C10

Nota: Uma declaração como VAR C10 : CTU ; END_VAR é assumida nos exemplos acima

Tab. 5 – Operadores de entrada padrão do bloco de função para linguagem IL

No. Operadores Tipo FB Reference 4 S1,R SR 2.5.2.3.1 5 S,R1 RS 2.5.2.3.1 6 CLK R TRIG 2.5.2.3.2 7 CLK F TRIG 2.5.2.3.2 8 CU,R,PV CTU 2.5.2.3.3 9 CD,LD.PV CTD 2.5.2.3.3 10 CU,CD,R,LD,PV CTUD 2.5.2.3.3 11 IN. PT TP 2.5.2.3.4 12 IN,PT TON 2.5.2.3.4 13 IN,PT TOF 2.5.2.3.4

Funções e blocos de função

Funções devem ser invocadas pela colocação do nome da função no campo do operador. O resultado corrente deve ser usado como o primeiro argumento da função. Argumentos adicionais, se

requeridos, devem ser dados no campo do operando. O valor retornado pela função depois da execução bem sucedida de uma instrução RET ou depois de atingir o fim físico da função deve se tornar o resultado corrente.

Blocos de Função podem ser invocados condicional ou

incondicionalmente via operador CAL (chamada – call). Como mostrado na norma, esta invocação pode ser de três formas diferentes, como mostrado na Tab. 53.

Tab. 52 – Operadores da linguagem Lista de Instruções (IL)

No Operador Modificador Operando Semântica

1 LD N Nota 2 Estabelece o resultado corrente igual ao operando 2 ST N Nota 2 Armazena o resultado corrente para o local do operando 3 S R Nota 3 Nota 3 BOOL BOOL

Coloca o operando booleano igual a 1 Coloca o operando booleano igual a 0 4 AND N, ( BOOL Booleano AND

5 & N, ( BOOL Booleano AND 6 OR N, ( BOOL Booleano OR

7 XOR N, ( BOOL Booleano OR Exclusivo 8 ADD ( Nota 2 Adição

9 SUB ( Nota 2 Subtração 10 MUL ( Nota 2 Multiplicação 11 DIV ( Nota 2 Divisão

12 GT ( Nota 2 Comparação : > 13 GE ( Nota 2 Comparação : >= 14 EQ ( Nota 2 Comparação : = 15 NE ( Nota 2 Comparação : <> 16 LE ( Nota 2 Comparação : <= 17 LT ( Nota 2 Comparação : < 18 JMP C, N LABEL Salte para label

19 CAL C, N NAME Chama o bloco de função (Nota 4)

20 RET C, N Retorna da função chamada ou bloco de função 21 ) C, N Avalia a operação adiada

Notas:

1. Ver explicação dos modificadores e avaliação das expressões (3.2.2)

2. Estes operadores devem ser sobrecarregados ou entrados conforme a norma (2.5.1.4). O resultado corrente e o operando devem ser do mesmo tipo

3. Estas operações são feitas se e somente se o valor do resultado corrente é o booleano 1. 4. O nome do bloco de função é seguido de um argumento entre parêntesis (3.2.3)

5. Quando uma instrução JMP é contida em uma construção ACTION...END_ACTION, o operando deve ser um label dentro da mesma construção.

Tab. 55. Operadores da Linguagem de Texto Estruturado

No Operação Símbolo Precedência

1 Parêntesis (Expressão) Mais alta 2 Avaliação da função Identificador (lista de argumentos)

Exemplos LN(A), MAX(S,Y), etc. 3 Exponenciação ** 4 Negação - 5 Complemento N 6 Multiplicação * 7 Divisão / 8 Módulo MOD 9 Soma + 10 Subtração - 11 Comparação <, >, <=, >= 12 Igualdade = 13 Desigualdade <> 14 Booleana AND & 15 Booleana AND AND 16 Booleana OR Exclusivo XOR

17 Booleana OR OR Mais baixa

Notas:

1. As mesmas restrições se aplicam aos operandos destes operadores quando as entradas das funções correspondentes definidas em 2.5.1.5

2. O resultado da avaliação da expressão A**B deve ser o mesmo que o resultado da avaliação da função EXPT(A, B)

Tab. 56 – Comandos da linguagem Texto Estruturado

No. Tipo de comando (Referencia) Exemplos

1 Atribuição (3.3.2.1) A := B; CV := CV+1 ; C := SIN(X) ; 2 Invocação do bloco de função e

uso da saída do bloco de função

CMD_TMR(IN := %IX5. PT := T#300ms) ; A:= CMD_TMR.Q ; 3 RETURN (3.3.2.2) RETURN; 4 IF (3.3.2.3) D:=.B*B – 4*A*C; IF D < 0.0 THEN NROOTS := 0 ; ELSIF D := 0.0 THEN NROOTS :=1; X1 := - B/ (2.0*A) ;. ELSE NROOTS := 2 ; X1 := (-B+SQRT(D))/(2.0*A) ; X2 := (-B-SQRT(D))/(2.0*A) ; END_IF ;

5 CASE (3.32.3) TW := BCD_TO _INT(THUMBWHEEL) ; TW_ERROR := 0 ; CASE TW OF 1.5 : DISPLAY := OVEN_TEMP ; 2 : DISPLAY := MOTOR_SPEED ; 3 : DISPLAY:= GROSS_TARE ; 4.6..10: DISPLAY := STATUS (TW-4) ; ELSE DISPLAY:= O ; TW_ERROR := 1 ; END_CASE ; QW100 := INT_TO_BCD(DISPLAY) ; 6 FOR (3.3.2.4) J := 101 ; FOR 1:= 1 TO 100 BY 2 DO IF WORDS[I] = ‘KEY' THEN J:=1;

EXIT; END IF ; END FOR ; 7 WHILE (3.3.2.4) J:= 1 ;

WHILE J <= 100 & WORDS[J] <> 'KEY' DO J:-J+2;

END_WHILE ;

8 REPEAT; J: =-1 ;

REPEAT J:= J+2;

UNTIL J := 101 OR WORDS[JJ = 'KEY' END_REPEAT

9 EXIT (3.3.2.4) EXIT; 10 Comando vazio ;