TwinCAT 3 PLC
Capitulo 2 – 1ª Parte
Introdução à programação “TwinCAT 3”
IEC 61131-3
asaTek / J. Andril
[email protected]
2017
1
IDENTIFICADORES (“Identifiers”)
Um IDENTIFICADOR é um nome que designa uma variável , função ou outro
tipo de dados …
• Começar por uma letra ou “underscore” (ex: _inout ; Ligth1 ; n1Input )
• Seguido por números , letras e “underscore” (ex: P12 ; Input10_fc1 )
• Não existe diferenças entre letras maiúsculas e minúsculas (ex: Out1 = out1)
NÃO É PERMITIDO
• Caracteres especiais (!,“,§,$,*,@,#..) (ex: In#1 ; @out1 )
• Caracteres em branco (ex: Input 21 )
• “Underscore” seguidos (ex: Ana__21 )
• Usar palavras-chave [“keyword”] (ex: bool ; false ; and ; dint ; int )
2
PREFIXOS (“Prefix”)
Os PREFIXOS não são obrigatórios , mas é de boa prática colocar um no
inicio de cada nome . Algumas sugestões :
A primeira letra , em minúscula , deverá ser o prefixo seguido do nome da
variável iniciada por uma letra maiúscula .
b - BOOL bAlarme_pressao
w - WORD wEntradas
r - REAL rTemperatura
d - DATE dData
t - TIME tTempo1
s - STRING sRxDados
ST_ - Declaração de uma STRUCT ST_ParaMotor (declaração)
st - Instancia de uma STRUCT stM1Parametro (instancia)
FB_ - Declaração de uma função bloco FB_Calculo (declaração)
fb - Instancia de uma função bloco fbM1Calculo (instancia)
3
PALAVRAS CHAVE (“Keyword”) E COMENTÁRIOS
Palavras chave (“keyword”) pré- Os comentários são delimitados com
definidas pela norma IEC61131-3. os caracteres de (* no principio
da frase e *) no fim ou // .
Esta syntax não poderá ser usada
como nomes de variáveis ou outros Os comentários poderão ser
fins na programação colocados em qualquer espaço em
branco .
TRUE, FALSE, AND, FUNCTION, … Exceção: dentro de caracteres
STRING.
TYPE, STRUCT, PROGRAM ...
(*Entradas digitais*)
Usando a opção “ Auto format ” as bIniciar AT%IX0.0:BOOL; // Iniciar posto
palavras chave são escritas em letras
maiúsculas . (*Entradas analogicas*)
TemK1 AT%IW10 (*Byte 10-11*) :WORD;
4
TIPO DE DADOS I (1)
O tipo de dados dita o espaço que será reservado e alocado na RAM da CPU .
Tipo (WORD)
Tamanho (2 Byte)
Valor inicial (0)
Gama (0..65535)
TIPO VALOR
STRING µ
SINT -75
USINT 181
BYTE 1 0 1 1 0 1 0 1
5
TIPO DE DADOS I (2)
Tipo (Prefixo) ANY-Tipo Palavra Tamanho Inicial Gama
(Bit)
Booleano (x ou b) ANY_Bit BOOL 1 FALSE TRUE/FALSE
BYTE 8 0 FF ( 0..255)
Bit string (by) WORD 16 0 FFFF (0..65535)
DWORD 32 0 FFFF_FFFF (0..4294967295)
Bit string (w) LWORD 64 0 FFFF_.._.._FFFF
SINT 8 0 -27...27-1 (-127..127)
Bit string (dw) INT 16 0 -215...215-1 (-32768..32767)
DINT 32 0 -231...231-1(-2147483648..2147483647)
Bit string (lw) LINT 64 0 -263...263-1
USINT 8 0 0...28-1 (0..255)
“Short integer” (si) ANY_Num UINT 16 0 0...216-1 (0..65535)
UDINT 32 0 0...232-1 (0..4294967295)
Inteiro (i) ULINT 64 0 0...264-1
“Double integer” (di)
“Long integer” (li)
“Unsi. S. integer” (usi)
“Unsigned integer” (ui)
“Unsi. L. integer” (uli)
“Unsi. D. integer” (udi)
6
TIPO DE DADOS I (3) 1 0000 0000 0000 0000
Tipo de dados com Overflow 0000h
1111 1111 1111 1111 Valor Minimo
FFFFh INT 0
Valor Maximo
INT -1
-+
8000h 7FFFh
Valor Minimo Valor Máximo
INT -32768 INT 32767
1000 0000 0000 0000 0111 1111 1111 1111
7
TIPO DE DADOS I (4)
Tipo de dados em carta de Entradas analógicas EL3102 (-10Vdc..+10Vdc)
Sinal de entrada Grandeza De acordo com a grandeza representada devemos
EL310x Decimal
+10V 32767 .declarar uma variável com o tipo de dado INT
+5V 16383 Hexadecimal
0x7FFF
0 0 0x3FFF
-5V -16383 0x0000
-10V -32768 0xC001
0x8000
8
TIPO DE DADOS I (5) Tamanho Inicial Gama
(Bit)
Tipo (Prefixo) ANY-Tipo Palavra 32
64
Virgula flutuante ANY_Real REAL 32 0.0 -1.18*10-38..
(r) LREAL 32 0.0 3.4*1038
DATE (D)
“Long real” (lr) 32 D#1970-01-01 -2.22*10-308..
1.798*10308
Data (date) ANY_Date 32
TOD#1070-01-01
(80+1)*8 TOD#2106-02-07
Hora real (tod) TIME_OF_DAY (80+1)*8 TOD#00:00 TOD#00:00:00
(TOD) TOD#23:59:59
Data e hora real DATE_AND_TIME DT#1970-01- ………………….
(dt) (DT) 01-00:00 DT#2106-02-07-
23:59:59
Tempo (tim) ANY_Time TIME T#0ms
d -day ; h -hour ;
Caracteres ANY_String STRING ‘‘ m -minute ; s –sec ;
sequenciais (s) WSTRING Ms -msec
(Código ASCII, ‘‘
C. Sequenciais – 80 caracteres Ex:
Unicode (ws) standard com o sVar: STRING(1)
máximo de 255, sVar:=‘A’
termina em zero)
Ex:
sVar: STRING(20)
sVar:=‘Обучение’
9
TIPO DE DADOS I (6)
Exemplo de tipo de dados
BOOL TRUE 2#1 16#1 1
0
FALSE 2#0 16#0 45054
WORD 2#1010111111111110 16#AFFE -32768
DWORD t#3600000ms
INT 2#1000000000000001 16#8001 t#43200000ms
TIME t#1h t#60m t#1818090ms
d day
h hours t#0.5d t#12h
m min
s sec t#30m18s90ms t#0.505025h
ms ms
REAL 0.3333 3.333e-1
10
TIPO DE DADOS I (7)
O modo de endereçamento, na norma IEC, é orientado em word
11
SEQUÊNCIA DE CARACTERES (“String”) (1)
+ Uma variável STRING VAR + Cada caracter dentro de um
pode conter qualquer strVar :STRING(3); STRING precisa de 1 “byte” .
sequência de caracteres . lenVar: INT;
sizeVar: INT; + O tamanho total de um STRING é
+ O tamanho definido na sempre “nºcaracteres+1” byte
declaração da variável END_VAR
determina a quantidade + O máximo é de 255 caracteres
de memoria reservada .
+ Para o formato Unicode utiliza-se
+ É definido o numero de o tipo de dados WSTRING
caracteres do STRING
entre ( x ) . 12
+ Se não for definido o nº
de caracteres , por defeito
será reservado espaço
para 80 caracteres .
+ Um STRING termina
sempre com um caracter
“zero” .
SEQUÊNCIA DE CARACTERES (“String”) (2)
Se desejarmos acrescentar um caracter especial dentro de uma variável STRING ,
deve inicia-lo com :
$<dois valores em Hex=8bits>
Ex: ‘ABcD$R$L’ ; ‘asaTek$0D$0A’
Caracteres especiais
Caracter Descrição
(65d) ‘A’ $$ Sinal dólar
(11d) [VT] $‘ Sinal plica
(49d) ‘1’ $L or $l “Line feed-LF“ (0AH)
(48d) ‘0’ $N or $n “New line-VT” (0BH)
(00d) [NULL] $P or $p “Page feed-FF” (0CH)
(00d) [NULL] $R or $r “Line break-CR” (0DH)
$T or $t “Tab“(09H)
13
SEQUÊNCIA DE CARACTERES (“String”) (3) 1)
ASCII <-> CHR 2)
Se desejarmos converter um 14
caracter para ASCII podemos
faze-lo da seguinte maneira :
1. Indiretamente , interpretando
cada posição de memoria (Ex:
%MB20) .
2. Diretamente utilizando as
funções ASC ou CHR incluída
na livraria „Tc2_SerialCom.lib“.
DECLARAÇÃO DE VARIÁVEIS (1)
Uma variável corresponde a um nome , por trás do qual se esconde um
valor (numérico , “string” , data , etc) . O nome da variável pode servir de
descrição da função da variável.
O nome (identificador) da variável é o meio de declarar o tipo de dado e o
valor inicial . Os seus dados podem ser alteradas em runtime.
Identificador Tipo dados Valor inicial Comentários
bIniciarProcesso1:BOOL:=TRUE; (* Podemos colocar comentários *)
A localização física-logica de
memoria, da variável, não é
conhecida pelo programador
(não endereçada)
15
DECLARAÇÃO DE VARIÁVEIS (2)
Na declaração de uma variável é possível endereça-la a um endereço físico
absoluto ( entradas , saídas digitais ou analógicas , memoria interna
absoluta , etc) . Para as Entradas e Saídas de hardware usamos %I* e %Q*.
Identificador AT Ent./Sai./Me. Tamanho Endereço :Tipo dados ;
Identifier AT %I X Byte Bit Data type
%Q B Byte
%M W Estas variáveis tem um único
D endereço fixo em memoria.
(endereçada)
bEstadoMaquina1 AT%MX0.0:BOOL:=TRUE; 16
NOTA: Podemos substituir uma variável %M por um UNION …. END_UNION
bSaidaDigital10 AT%Q*:BOOL:=TRUE;
bEntradaDigital1 AT%I*:BOOL;
DECLARAÇÃO DE VARIÁVEIS (3)
Divisão, dos endereços absolutos, nos diversos tipos de dados BIT, BYTE,
WORD e DWORD
IX10.7 IX10.6 IX10.5 IX10.4 IX10.3 IX10.2 IX10.1 IX10.0
IB10 Din0 AT %IX10.0: BOOL;
IB1 IB0 Ain AT %IB0: INT;
IW0
equivalente
Ain AT %IW0: INT;
IX22.7 IX22.6 IX22.5 IX22.4 IX22.3 IX22.2 IX22.1 IX22.0 BitVar AT %IX22.1: BOOL;
IB23 IB22 IB21 IB20 Pos AT %IB20: UDINT;
IW22 IW20
ID20 equivalente
Pos AT %ID20: UDINT;
DECLARAÇÃO DE VARIÁVEIS (4)
As VARIÁVEIS LOCAIS estão As VARIÁVEIS GLOBAIS são
limitadas ao bloco em que elas reconhecidas em todos os
são declaradas . blocos do projeto .
(* VARIÁVEIS LOCAIS *) (* VARIÁVEIS GLOBAIS *)
VAR_GLOBAL ..
VAR .. END_VAR
VAR_CONFIG ..
END_VAR END_VAR
VAR_INPUT .. (*Va. de Entrada*)
18
END_VAR
VAR_IN_OUT .. (*Va. Ent./Saida*)
END_VAR
VAR_OUTPUT .. (*Va. Saida*)
END_VAR
DECLARAÇÃO DE VARIÁVEIS (5)
No Programa A existe um acesso á variável local “locVar”, do Programa B ,
através do acesso direto ao endereço %MB2 .
Programa de uma maquina PROGRAM B
PROGRAM A VAR
VAR locVar AT%MB2:WORD;
END_VAR END_VAR
LD %MB2
19
DECLARAÇÃO DE VARIÁVEIS (6)
Programa maquina Nome do espaço Neste programa existe uma
(namespace): sobreposição de declarações
VAR_GLOBAL Gvl1 da variável “Var1” . Como
Var1:WORD; é mostrado no programa
apresentado .
END_VAR
Neste caso, a declaração local
PROGRAM A da variável “Var1” é carregada
no acumulador .
VAR
Var1 :WORD; As variáveis globais (Ex. Var1)
poderão ser acedidas através
END_VAR do Namespace (Ex. Gvl1.Var1)
LD Var1
LD Gvl1.Var1
20
DECLARAÇÃO DE VARIÁVEIS (7)
Atributos (“attributes”) poderão ser usados para definir aspectos especiais a uma
variável .
Exemplos:
As variáveis serão “armazenadas” quando desligamos (“shutdown”) o PLC , para
poderem serem de novo “carregadas” num novo iniciar do PLC .
(* Memoria retentiva , “On-line/reset”*) (*Memoria persistente, “Rebuild all*)
VAR RETAIN VAR PERSISTENT
Contador: UINT; Contador: UINT;
END_VAR END_VAR
O valor inicial será carregado com o valor pré-definido na declaração da variável no
Iniciar ou Reset do PLC .
VAR
TempoArranque : TIME := T#3s200ms;
END_VAR
21
DECLARAÇÃO DE VARIÁVEIS (8)
Programa máquina Se desejarmos usar constantes
(matemáticas, parâmetros máquina ,
VAR_GLOBAL CONSTANT etc ) poderemos usar nas palavras
chave VAR_GLOBAL .. END_VAR o
END_VAR atributo CONSTANT .
PROGRAM A Este atributo pode também ser usado
VAR CONSTANT em variáveis locais .
END_VAR Exemplo (só de leitura) :
VAR_GLOBAL CONSTANT
pi:REAL:=3.141592654;
END_VAR
VAR CONSTANT
pi:REAL:=3.141592654;
END_VAR
22
POU “program organisation units“ (1)
Na norma IEC61131-3 existem 3 tipos de POU´s
(“Program Organization Unit”) :
“Programas” (PRG)
“Funções bloco” (FB)
“Funções” (FUN)
Os programas são inicializados por
tarefas (“Task”) pré-configuradas .
23
POU “program organisation units“ (2)
Cada POU consiste de uma tabela de declaração das variáveis locais e de
uma zona em que será escrito o programa .
A tabela de declaração é sempre do mesmo formato (com 2 opções de
apresentação) independentemente do tipo de linguagem IEC que optamos
para programar .
Quadro de programação para programar em qualquer tipo de
linguagem IEC ( „IL“ , „ST“ , „SFC“ , „FBD“ , „LD“ ou „CFC“ ) .
24
POU “program organisation units“ (3)
“PROGRAMAS (PRG)” („Main“)
• Chamado por uma tarefa (“task”)
• Pode chamar : FB‘s, “Funções”, “Programas”
• Variáveis locais: estáticas (os dados locais estão
disponíveis no próximo ciclo)
• Entradas: geralmente 0, mas são possíveis
VAR_INPUT
• Saídas: geralmente 0, mas são possíveis
VAR_OUTPUT
• Transferência de variáveis: São possíveis
VAR_IN_OUT
• „Debug“: Os dados locais são visíveis em modo on-line
• Utilização: Programa principal , Manual, Automático ....
25
POU “program organisation units“ (4)
“FUNÇÕES BLOCO (FB)”
• Chamado por “Programas” ou FB´s
• Pode chamar : FB‘s, “Funções”
• Variáveis locais : estáticas ( os dados locais estão disponíveis no
próximo ciclo ). Em múltiplas chamadas (instancias) cada FB guarda as suas
próprias variáveis locais, em áreas de memoria RAM diferentes.
• Entradas: 0,1,2,3
VAR_INPUT
• Saídas: 0,1,2,3
VAR_OUTPUT
• Transferências de variáveis: 0,1,2,3
VAR_IN_OUT
• „Debug“: Em modo on-line no “PLC Control” as instancias tem de serem
declaradas . Depois disso, os dados locais são visíveis em cada chamada.
• Utilização: “Funções” com cálculos iguais mas com dados diferentes …
26
POU “program organisation units“ (5)
Criação de instancias PROGRAM MAIN PRG Instancia_1
VAR Var_In :WORD;
FB Var_Out :BYTE;
Instancia_1 :A; Var_1:WORD;
FUNCTION_BLOCK A Instancia_2 :A; Instancia_1
VAR _INPUT Instancia_3 :B; X :REAL;
END_VAR Y :REAL;
Var_IN :WORD;
END_VAR CAL Instancia_1
VAR _OUTPUT CAL Instancia_3
Var_Out :BYTE; FUNCTION_BLOCK B FB Instancia_2
END_VAR VAR_INPUT Var_In :WORD;
VAR Var_Out :BYTE;
X :REAL; Var_1:WORD;
Var1 :WORD; END_VAR Instancia_1
Instancia_1: B; VAR _OUTPUT X :REAL;
END_VAR Y :REAL;
Y :REAL;
LD Var1 END_VAR Instancia_3
CAL Instancia_1 X :REAL;
Y :REAL;
27
POU “program organisation units“ (6)
“FUNÇÕES (FUN)”
• Chamado por “Programas”, “Funções bloco” e outras “Funções”
• Pode chamar: “Funções”
• Variáveis locais : temporárias, (os dados locais estão só disponíveis dentro do
tempo de operação da função) .
• Entradas: 1,2,3........
VAR_INPUT
• Saídas: exactamente 1 ! . O nome da saída é ao mesmo tempo o nome da Função
.
• Transferência de variáveis: Não são possíveis
VAR_IN_OUT
• „Debug“: As variáveis locais em on-line apresentam os seguintes caracteres
“???” (valor indefinido) . Isto deve-se a que as variáveis são multiplamente
usadas pelas funções num mesmo ciclo. Para depurar o programa deverá usar
“breakpoints” .
• Utilização: Algoritmos em que o resultado deverá ser apresentado . Resultado de
comparação , cálculos de escala , conversões , etc …
28
POU “program organisation units“ (7) VALOR DE
RETORNO
NOME DA FUNÇÃO
(FUN) “Scale”
“Scale”
O nome da
Variáveis de entrada variável de saída
Variáveis locais só são
validas dentro do tempo (resultado) é
de operação da FUNÇÃO “Scale” .
A variável
“Scale” pode ser
usada como
variável local
dentro da
FUNÇÃO
(Ler / Escrever)
29