The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

BECKHOFF-TC3 _PLC-003- TwinCAT 3 PLC_IEC ST (2017)

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by Vidal Jovan, 2020-12-08 06:18:30

BECKHOFF-TC3 _PLC-003- TwinCAT 3 PLC_IEC ST (2017)

BECKHOFF-TC3 _PLC-003- TwinCAT 3 PLC_IEC ST (2017)

Keywords: beckhoff,twincat,bresimar,asatek,andril

TwinCAT PLC

Capitulo 3 – 2ª Parte

Introdução à programação “TwinCAT 3”
ST – “Structured Text”

asaTek / J. Andril

[email protected]

2017

1

ST „Structured Text“

OPERAÇÕES EM ORDEM DECRESCENTE

OPERAÇÕES SIMBOLO PRIORIDADE
maior
Por entre parêntesis (expressão)
Chamar função Nome_função (lista parametros) menor
Exponencial EXPT
Negação NOT
Multiplicação
Divisão *
Modulo /
Soma MOD
Subtracção +
Comparação -
Igual a <,>,<=,>=
Não igual a =
Bool AND (“E”) <>
Bool XOR AND
Bool OR (“OU”) XOR
OR

2

ST „Structured Text“

LISTA DE INSTRUÇÕES EM „ST“

INSTRUÇÕES EXEMPLO
PosWert := 10;
Atribuição := Ton1(IN:=Start, PT:=T2s); Output:= Ton1.Q
Chamar uma função bloco RETURN;
RETURN Ver as paginas seguintes
IF
CASE ;
FOR
WHILE
REPEAT
EXIT
Linha vazia (sem instrução)

3

ST „Structured Text“

INSTRUÇÕES „IF“ (1)

+ Se desejarmos saltar uma instrução PALAVRAS CHAVE :
de programa , dependendo de uma
condição . IF THEN
ELSIF
+ Com a instrução IF não é possível saltar ELSE
para trás num ciclo de PLC . END_IF

+ „GOTO“ não está disponível

4

ST „Structured Text“ Condição Não
Sim
INSTRUÇÕES „IF“ (2)

IF Condição THEN
Bloco instruções ;

END_IF

Bloco instruções

5

ST „Structured Text“

INSTRUÇÕES „IF“ (3)

Condição Não
Sim
IF Condição THEN
Bloco instruções A; Bloco instruções A Bloco instruções B

ELSE
Bloco instruções B;

END_IF

6

ST „Structured Text“ IF Condição 1 THEN
Bloco instruções A;
INSTRUÇÕES „IF“ (4)
ELSE
Condição 1 No IF Condição 2 THEN
Yes Bloco instruções B;
Condição 2 ELSE
IF Condição 3 THEN
No Bloco instruções C;
ELSE
Yes Bloco instruções D;
END_IF
END_IF

END_IF

Condição 3 No

Yes

Bloco instruções A Bloco instruções B Bloco instruções C Bloco instruções D

7

ST „Structured Text“ IF Condição 1 THEN
Bloco instruções A;
INSTRUÇÕES „IF“ (5)
ELSIF Condição 2 THEN
Condição 1 Não Bloco instruções B;
Não
Condição 3 ELSIF Condição 3 THEN
Sim Bloco instruções C;
Sim
Condição 2 ELSE
Bloco Instruções D;
Sim
END_IF

Não

Bloco instruções A Bloco instruções B Bloco instruções C Bloco instruções D

8

ST „Structured Text“

INSTRUÇÕES „IF“ (6)

• Que „condição logica“ podemos ter num IF ?

Condição logica : IF bVar THEN THEN
•Variavel BOOLEANA .
•Comparação
•Chamar Função (FUN) IF a>b THEN
•Chamar instancias FB .
•Nao se pode chamar FB !
IF LEFT(STR:= strVar, SIZE:=7): = 'TwinCAT'
.

IF Ton1.Q THEN
.

IF Ton1(IN:=bVar, PT:=T#1s ) THEN

9

Exercício (1)

Construa um exemplo com estes segmentos de instruções

IF Var1 < Var2 (* Comparação: o resultado será TRUE ou FALSE *)

THEN (* Se TRUE: então (THEN) o bloco de instruções será executado *)

Output32:=TRUE

ELSE (* Se FALSE: este (ELSE) bloco de instruções será executado*)

Output32:=FALSE

END_IF

A instrução IF pode estar dentro de uma outra malha IF .

IF Condição1 IF Condição1
THEN THEN

Instrução Instrução
ELSE ELSIF Condição2

IF Condição2 THEN
THEN Instrução

Instrução ELSE
ELSE Instrução

Instrução END_IF
END_IF
END_IF

10

ST „Structured Text“

INSTRUÇÕES „CASE“ (1)

CASE Critério selecção OF

1: Instrução 1 Critério selecção = 1 Critério selecção = 1
2,4,6: Instrução 2 Não ou 2 ou 4 or 6
7..10 : Instrução 3
.. Sim Critério selecção = 7
ou 8 ou 9 ou 10?

Não
Sim

ELSE Não
Sim
Instrução de defeito

END_CASE Instrução 1 Instrução 2 Instrução 3 Instruções de defeito

Dois valores de critério
repetidos não poderão
estar na listagem .

11

ST „Structured Text“ CASE State OF

INSTRUÇÕES „CASE“(2) INIT: instruções;(*State=0*)

TIPO „Enum“ START: instruções;(*State=1*)
TYPE Operation_mode :
AUTOMATIC: instruções;(*State=2*)
( INIT:=0, START, AUTOMATIC, END);
END_TYPE END: instruções;(*State=3*)

END_CASE

Se a variável de selecção inteira é declarada
como “Enum” , o valor da variável é visível
em modo on-line .

VAR

State: Operation_mode;

(* „State“ declarada como INT também é
possível *)

END_VAR 12

ST „Structured Text“

INSTRUÇÕES „CASE“(3)

VAR CONSTANT CASE State OF
Step1 : INT:= 0;
Step2 : INT:= 1; Step1: instruções ; (*State=0*)
Step3 : INT:= 2;
Step4 : INT:= 3; Step2: instruções ; (*State=1*)

END_VAR Step3..Step4: instruções ; (*State=2 ou 3*)

VAR END_CASE
State:INT;

END_VAR

13

ST „Structured Text“

INSTRUÇÕES „CASE“ (4) (* Estrutura de GRAFCET feita com instruções CASE *)

TYPE Steps :

( INIT:=0, START, AUTOMATIC, END);

END_TYPE

CASE State OF Instruções de etapa
(Acções)
INIT: Q0:=TRUE;

IF Transição THEN state := START; END_IF „condição etapa“
(Transição)

START: Q1:=TRUE;

Etapa IF Transição THEN state := AUTOMATIC; END_IF

AUTOMATIC: Q2:=TRUE;

IF Transição THEN state := END; END_IF

END: Q3:=TRUE;

IF Transition THEN state := INIT; END_IF

END_CASE 14

ST „Structured Text“

INSTRUÇÕES DE REPETIÇÃO „Loop“ (1)

PALAVRAS CHAVE : Se um laço ( „loop“ ) continuo for
executado este não danifica o começo
FOR da fatia de tempo („Real-time“) . As
WHILE tarefas que terão uma prioridade mais
REPEAT elevada são executadas primeiro
sacrificando as tarefas de prioridade
mais baixa .

Desvantagens dos laços (“loop”): Inicio de uma
nova fatia de
Se não tivermos os cuidados necessários
(“bugs”) podemos ter “loops” infinitos . tempo

Passagem para Win
NT

1 1 2 1‘ 3 1‘‘ 4 1‘‘‘ 1‘

ex.: 1ms 2ms 3ms 4ms 5ms

15

ST „Structured Text“

INSTRUÇÕES DE REPETIÇÃO „Loop“ (2)

Todos os „loop“s serão finalizados com as instruções EXIT .

Expressão Fluxo de trabalho n ciclos fixo

FOR SINT/ INT / Controlo fluxo Sim
WHILE DINT feito no inicio . Não
BOOL
Controlo fluxo Não
feito no inicio .

REPEAT BOOL Controlo fluxo
feito no fim .

16

ST „Structured Text“ Inicio
i:=Valor inicial
INSTRUÇÕES DE REPETIÇÃO „FOR“ (3)
i Sim
No principio do “loop” a variavel “i” é >Valor final
definida com um valor inicial .
A variavel é incrementada ou decrementada Não
em cada ciclo dependendo da “largura
passo” ( valor que apareçe depois da Bloco instruções
palavra-chave BY )
Se “í” excede o valor final ( valor depois de i:= i+ largura passo
TO), o „loop“ termina .
ciclo n
FOR i:=1 TO 12 BY 2 DO

Field[i]:=i*2; (*instrução*)

END_FOR

17

ST „Structured Text“ ciclo n

INSTRUÇÕES DE REPETIÇÃO „WHILE“ (4)

O bloco de instruções de um “loop” Sim Expressão Não
WHILE é executado enquanto a booleana
expressão booleana é TRUE .
Bloco instruções
Se a expressão booleana é FALSE o i:= i+largura passo
bloco de instruções do WHILE “loop”
não é processado . ciclo n

i:=0;
WHILE i<100 DO

Field[i]:=i*2;(*Instrução*)
i:=i+1;
END_WHILE

18

ST „Structured Text“ Ciclo n

INSTRUÇÕES DE REPETIÇÃO „REPEAT“ (5)

O bloco de instruções de um “loop” Bloco de instruções
REPEAT é processado até (UNTIL) i:= i+ largura passo
que a expressão booleana não seja
mais válida .

O bloco de instruções é executado
pelo menos uma vez .

i:=0; Sim Expressão Não
booleana
REPEAT 19
Field[i]:=i*2;(*Instrução*) ciclo n
i:=i+1;

UNTIL i>100

END_REPEAT

ST „Structured Text“

CHAMADA de „FB“s em ST (1)

Declaração das variáveis

VAR
TON1:TON;

END_VAR

Programa executado em ST

TON1 (IN:= NOT TON1.Q , PT:=T#1s );
Q0:= TON1.Q ;

A partir de TwinCAT 2.8 :

TON1(IN:= NOT TON1.Q, PT:=T#1s , Q=>Q0 );

20

ST „Structured Text“ VAR
TON1:TON;
CHAMADA de „FB“s em ST (2)
END_VAR
Criar uma instancia de FB

Chamar com o nome da instancia

TON1 (IN:= NOT TON1.Q , PT:=T#1s );

Resultado (saida) Parametros de entrada

Q0:= TON1.Q

Não é possivel ter diversas saidas de FB 21

Q0:=TON1(IN:= NOT TON1.Q, PT:=T#1s);

ST „Structured Text“

CHAMADA de „FB“s em ST (3)

Declaração das variáveis

VAR

TON1:TON;

END_VAR

Programa executado em ST

TON1.IN:= NOT TON1.Q ,

TON1. PT:=T#1s;

TON1();

Q0:= TON1.Q;

22

ST „Structured Text“ VAR
TON1:TON;
CHAMADA de „FB“s em ST (4)
END_VAR
Declaração de instancia

TRANSFERÊNCIA SÓ DE
PARAMETROS DE ENTRADA .

Isto NÃO é uma chamada de FB !!!!!

TON1.IN:= NOT TON1.Q ;

TON1. PT:=T#1s; Chamar FB
TON1();

Resultado (saida) Q0:= TON1.Q; 23

ST „Structured Text“

CHAMADA de „FB“s em ST (5)

Result:=Scale (x:=input, xug:=0.0, xog:=32767.0, yug:=0.0,yog:=100.0);

(* Podemos tambem representar assim :*)

Result:=Scale (input, 0.0, 32767.0, 0.0, 100.0);

(* Podemos tambem representar assim :*)

Result:=Scale (
x:= input,
xug:= 0.0,
xog:= 32767.0,
yug:= 0.0,
yog:= 100.0
);

24

ST „Structured Text“

CHAMADA de „FB“s em ST (6)

Result := Scale (x:=input, xug:=0.0, xog:=32767.0, yug:=0.0,yog:=100.0);

Resultado CHAMADA da FB Parametros entrada

(* podemos tambem representar desta maneira :*)

Result:=Scale (

x:= input,

xug:= 0.0,

xog:= 32767.0,

yug:= 0.0,

yog:= 100.0

);

25


Click to View FlipBook Version