2005-10-19
mpro_twcplc.pdf (v1.0)
Beckhoff TwinCAT The Windows Control and Automation Technology
Introdução ás instruções “standard” do “TwinCAT PLC”
ÍNDICE
I – TIPO DE DADOS E VARIÁVEIS I.1 – Identificadores (“Identifiers”) I.2 – Prefixos (“Prefix”) I.3 – Tipo de dados (“Data type”) I.4 – Operandos (“Operands”) I.5 – Variáveis e endereços II – LISTA DE INSTRUÇÕES “STANDARD” II.1 – Instruções numéricas II.2 – Instruções aritméticas II.3 – Instruções lógicas II.4 – Instruções de deslocação de bit II.5 – Instruções de selecção II.6 – Instruções de comparação II.7 – Instruções de conversão II.8 – Instruções várias III – FUNÇÕES BLOCO “STANDARD” III.1 – Funções bloco “Standard” - Biestavel III.2 – Funções bloco “Standard” – “Trigger” III.3 – Funções bloco “Standard” - Temporizadores III.4 – Funções bloco “Standard” – Contadores IV – FUNÇÕES “STANDARD” IV.1 – Funções “Standard” – “String” V – EXEMPLOS PRÁTICOS V.1 – Arranque directo de motor trifásico V.2 – Inversão de rotação de motor trifásico V.3 – Arranque estrela-triangulo de motor trifásico A – RESUMO DE INSTRUÇÕES E FUNÇÕES “STANDARD” A.1 – Resumo de instruções do “TwinCAT PLC” A.2 – Resumo das funções bloco “standard” A.3 – Resumo das funções “standard” B – LISTA DE ERROS DE COMPILAÇÃO DE PROGRAMA B.1 – Erros de compilação
TWINCAT PLC – Tipo de Dados e Variaveis
BECKHOFF New Automation Technology
I – TIPO DE DADOS E VARIAVEIS 1 – IDENTIFICADORES (“Identifiers”) 2– PREFIXOS (“Prefix”) 3 – TIPO DE DADOS (“Data type”) 4 – OPERANDOS (“Operands”) 5 – VARIAVEIS E ENDEREÇOS
BRESIMAR
Cap. I – 1 de 9
TWINCAT PLC – Tipo de Dados e Variaveis
BRESIMAR
BECKHOFF New Automation Technology
Cap. I – 2 de 9
TWINCAT PLC – Tipo de Dados e Variaveis
BECKHOFF New Automation Technology
1 – IDENTIFICADORES (“Identifiers”) Cada identificador de variáveis , funções , etc é assinalado com um tipo de dados que dita o espaço de memoria que será reservado na CPU . Um identificador é um nome que designa uma variável , função ou outro tipo de dados e que deverá cumprir os seguintes requisitos : y y y
Começar por uma letra ou “underscore” Seguido por números , letras e “underscore” Não existe diferenças entre letras maiúsculas e minúsculas
e não serão permitidos os seguintes caracteres y y y
Caracteres especiais (!,“ ,*,&,$,#, etc) Caracteres em branco “Underscore” seguidos
2– PREFIXOS (“Prefix”) Para uma melhor identificação do tipo de identificador é de boa prática colocar um prefixo no inicio de cada nome , para uma melhor organização e clarificação do programa , tal como é usado nas linguagens de alto nível ( Visual Basic ,etc. ) . Todavia não é obrigatório para o bom funcionamento do programa . As primeiras letras deverão ser o prefixo ( letras minúscula ) do identificador seguido do nome da variável que deverá começar por uma letra maiúsculas . Aqui vão as nossas sugestões para alguns tipos de dados : PREFIXO b
TIPO de DADOS BOOL
EXEMPLO bNomevariavelbool
by
BYTE
byNomevariavelbyte
w
WORD
wNomevariavelbool
dw
DWORD
dwNomevariavelbool
si
SINT
syNomevariavelsinteiro
i
INTEGER
byNomevariavelinteiro
di
DINT
dyNomevariaveldinteiro
r
REAL
wNomevariavelreal
s
STRING
dwNomevariavelstring
t
TIME
tNomevariaveltempo
tod
TIME_OF_DAY
todNomevariaveltempodia
dt
DATE_AND_TIME
dtNomevariaveldatatempo
d
DATE
dNomevariaveldata
pt
POINTER
ptNomevariavelponteiro
str
STRUCT
strNomevariavelestrutura
BRESIMAR
Cap. I – 3 de 9
TWINCAT PLC – Tipo de Dados e Variaveis
BECKHOFF New Automation Technology
3 – TIPO DE DADOS (“Data type”) Conforme o que foi dito inicialmente todos os identificadores sejam variáveis ou não terão de ser assinalados com um tipo de dados que definirá o tamanho de memoria a ser reservado na CPU . Podemos dividir em dois grupos os tipos de dados : y
Tipo de dados ELEMENTARES .
y
Tipo de dados COMPLEXOS ou ESTRUTURADOS em que o formato dos dados é definido pelo programador .
3.1 - DADOS ELEMENTARES Tipo
Tamanho
Limites
BOOL BYTE WORD DWORD
1 bit 8 bit 16 bit 32 bit
TRUE .. FALSE 16#00 .. FF 16#0000 .. FFFF 16#0000_0000 .. FFFF_FFFF
USINT UINT UDINT SINT INT
8 bit 16 bit 32 bit 8 bit 16 bit
0 .. 255 0 .. 65 535 0 .. 4 294 967 295 -128 .. 127 -32 768 .. 32 767
DINT REAL LREAL DATE TOD DT
32 bit 32 bit 64 bit 32 bit 32 bit 32 bit
-2 147 483 648 .. 2 147 483 647
D#1970-01-01 .. 2106-02-06 TOD# 00:00:00 .. 1193:02:47.295 DT#1970-01-01-00:00 .. 2106-02-06-06:28:15
Configuração da representação do tipo de dados AT : = ;
BRESIMAR
Cap. I – 4 de 9
TWINCAT PLC – Tipo de Dados e Variaveis
BECKHOFF New Automation Technology
3.2 - DADOS COMPLEXOS ou ESTRUTURADOS Tipo ARRAY POINTER SUBRANGE
:ARRAY [..,..] OF ; : POINTER TO ; TYPE : (..); END_TYPE;
ALIAS
TYPE : ; END_TYPE
ENUM
TYPE : ( ,, ..,); END_TYPE
STRUCT
BRESIMAR
Configuração
TYPE : STRUCT ; . ; END_STRUCT END_TYPE
Cap. I – 5 de 9
TWINCAT PLC – Tipo de Dados e Variaveis
BECKHOFF New Automation Technology
4 – OPERANDOS (“Operands”) Neste paragrafo iremos apresentar num pequeno resumo , as diversas maneiras de representar dentro do programa , constantes para cada um dos tipos (“Types”) de dados existentes no TwinCAT PLC . 4.1 - Constantes em BOOL As constantes em BOOL são representadas por FALSE e TRUE . 4.2 - Constantes em BYTE , WORD , DWORD , INT , REAL etc As constantes em BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, poderão ser representadas em binário , octal , decimal ou hexadecimal . Na representação de um numero real a parte decimal é separada da parte inteira por um ponto (formato americano) e não uma virgula. As constantes terão a seguinte configurações : Exemplos em ST : (* Representação em decimal inteiro e real *) byConstante:= -255 iConstante:=-INT#3565 (*nº inteiro negativo) diConstante:=DINT#199978 rConstante:=-REAL#123.89 (*nº real negativo) rConstante:= 1895.567 rConstantee:= 1.5e+010 (* Representação em binario *) byConstante1:= 2# 1001_1111 wConstante1:= 2# 1001_1111_0000_10101 (* Representação em octal *) byConstante2:= 8# 77 (* Representação em hexadecimal *) byConstante3:= 16# FF wConstante2:= 16# FF_FF dwConstante1:= 16# FF_FF_FF_FF 4.3 - Constantes em TIME No TwinCAT podemos declarar constantes temporais. Geralmente são usadas na definição do tempo nos temporizadores (Função bloco standard TON , TOF , TP) . A constante terá a seguinte configuração : # diadhorahminutosmsegundossmilisegms Exemplos em ST : (* Valores correctos *) tTempo1:= T#14ms tTempo2:= TIME#100s12ms tTempo3:= t#23d12h45m3s (* Valores incorrectos *) tTempo4:= TIME#100m69s (*Limite excedido em seg.*) tTempo5:= T#100ms12d (*Ordem incorrecta*) 4.4 - Constantes em DATE Geralmente são usadas na definição de datas . A constante terá a seguinte configuração : # ano-mes-dia Exemplos em ST : (* Valores correctos *) dData1:= d#2005-12-01 dData2:= DATE#2000-06-02
BRESIMAR
Cap. I – 6 de 9
TWINCAT PLC – Tipo de Dados e Variaveis
BECKHOFF New Automation Technology
4.5 - Constantes em TIME OF DAY Geralmente são usadas na definição do tempo (hora) do dia . A constante terá a seguinte configuração : # hora:minuto:segundo Exemplos em ST : (* Valores correctos *) todTod1:= tod#15:12:10.250 (* Podemos ter fracção de seg.*) todTod2:= TIME_OF_DAY#23:59:59 4.6 - Constantes em DATE AND TIME Geralmente são usadas na definição da data/hora . A constante terá a seguinte configuração: #ano-mes-dia-hora:minuto:segundo Exemplos em ST : (* Valores correctos *) dtDT1:= dt#1972-03-29-00:00:00 dtDT2:= DATE_AND_TIME#1999-06-19-23:00:15 4.7 - Constantes em STRING Um STRING é uma sequência de caracteres . As constantes em STRING são precedidas e finalizadas com aspas ´. Podemos por espaços e caracteres especiais e serão tratados como qualquer outro carácter . A combinação do símbolo $ seguido de um numero hexadecimal representa o código de 8 bits da tabela de caracteres standard. Comandos especiais poderão ser representados por um $ seguido de outro carácter como podemos ver a seguir . Caracteres comando $$ $’ $L ou $l $N ou $n $P ou $p $R ou $r $T ou $t
Descrição Representar o sinal de dolar($) Representar o sinal de aspas(´) “Line feed” “New Line” “Page feed” “Line break” “Tab”
Exemplos em ST : (* Valores correctos *) stTexto1:= ‘BRESIMAR(ASA)’
5 – VARIAVEIS E ENDEREÇOS Neste paragrafo iremos apresentar num pequeno resumo as diversas maneiras de representar dentro do programa tais como as variáveis e os endereços absolutos na memoria do “hardware” no TwinCAT . 5.1 – Variáveis As variáveis podem ser declaradas tanto localmente , dentro do grupo de declaração dos POU´s ou na lista das variáveis globais . O identificadores das variáveis não deverão conter espaços em branco ou caracteres especiais como já anteriormente tínhamos dito . Letras maiúsculas não serão reconhecidas o que significa que VAR1 , Var1 e var1 são todas a mesma variável . O sinal de “underscore” é reconhecido nos identificadores ( por exemplo : A_BCD e AB_CD são duas variáveis diferentes ) .Um identificador de uma variável pode ter mais que um carácter “underscore” numa linha . Podemos identificar uma variável com o máximo de 32 caracteres . Dentro do editor de programa TwinCAT , tempos acesso as variáveis através do “Input Assistant” – “Local Variables” ou “Global Variables” ( pressionar a tecla função F2) e se desejarmos declarar novas variáveis utilizamos o “Auto Declare” (pressionar shift+F2). BRESIMAR
Cap. I – 7 de 9
TWINCAT PLC – Tipo de Dados e Variaveis
BECKHOFF New Automation Technology
Podemos aceder a variáveis em “ARRAYS” , “STRUCTURES” e POU´s utilizando as seguintes configurações : Varáveis em ARRAY ( ex. 2 dimensões) [index1 , index2] Variaveis em STRUCT . Variáveis em FUNÇÕES BLOCO ou PROGRAMAS .
5.2 – Endereços A indicação directa de uma posição individual de memoria ou das entradas ou saídas do “hardware” utilizado é feito através de uma sequencia de caracteres especiais.. Esta sequencia tem a seguinte configuração : % Prefixos do tipo de endereço Tipo % % %
Descrição
I O M
Entrada (“Input”) Saida (“Output”) Memoria (“Memory”)
Prefixos do tamanho de endereço Tamanho
Descrição
X B W D
Exemplos : %QX75.1 %IW215 %QB7 %MD48
bit Byte (8 bit) Word (16 bit) Dupla word (32 bit)
(* Bit 1 do byte de saída 75 *) (* Word de entrada 125 *) (* Byte de saida 7 *) (* Dupla Word da posição de memoria 48 *)
Para acedermos a uma dada localização de memoria podemos utilizar qualquer tamanho ( bit , byte , Word ou duplo Word ) . Por exemplo o endereço %MD48 são os seguintes endereços no formato byte : %MD48 ======= > ( 48 x 4 )
%MB192 %MB193 %MB194 %MB195
No mapeamento da memoria o 1º byte tem o endereço 0 (zero) . BRESIMAR
Cap. I – 8 de 9
TWINCAT PLC – Tipo de Dados e Variaveis
BECKHOFF New Automation Technology
Podemos no TwinCAT dentro de variáveis do tipo SINT, INT, DINT, USINT, UINT, UDINT, BYTE, WORD, DWORD , se desejarmos , aceder a bit´s individualmente . Para fazermos isto , o índex do bit a ser endereçado é colocado como um apêndice na variável e separado por um ponto . O índex base é o 0 ( zero) . Exemplo : (* Campo da declaração das variaveis *) (* Não deve ser assinalada no campo VAR_IN_OUT *) a: INT; b:INT; (* Campo no POU - Main *) a.2 := b; (* O 3º bit da variável “a” é igual ao valor lógico de “b” *) Se o índex é maior que o tamanho do tipo da variável escolhido surgirá a seguinte mensagem de erro : “ Index outside the valid range for variable “ Se o tipo da variável não permitir este modo de programação surgirá a seguinte mensagem de err : “ Invalid data type for direct indexing “
BRESIMAR
Cap. I – 9 de 9
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
IV – LISTA DE INSTRUÇÕES 1 - INSTRUÇÕES NUMÉRICAS 2 - INSTRUÇÕES ARITMÉTICAS 3 - INSTRUÇÕES LÓGICAS 4 - INSTRUÇÕES de DESLOCAÇÃO de BIT 5 - INSTRUÇÕES de SELECÇÃO 6 - INSTRUÇÕES de COMPARAÇÃO 7 - INSTRUÇÕES de CONVERSÃO 8 - INSTRUÇÕES VÁRIAS
BRESIMAR
Cap. II – 1 de 20
TWINCAT PLC - Lista de Instruções
BRESIMAR
BECKHOFF New Automation Technology
Cap. II – 2 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
1 - INSTRUÇÕES NUMÉRICAS ABS Calcula o valor absoluto do numero . IN e OUT poderão ter as seguintes combinações : IN OUT INT INT, REAL, WORD, DWORD, DINT REAL REAL BYTE INT, REAL, BYTE, WORD, DWORD, DINT WORD INT, REAL, WORD, DWORD, DINT DWORD REAL, DWORD, DINT SINT REAL USINT REAL UINT INT, REAL, WORD, DWORD, DINT, UDINT, UINT DINT REAL, DWORD, DINT UDINT REAL, DWORD, DINT, UDINT Exemplo em ST: Var1:INT; Var1:= ABS(-2); (*Resultado é 2) Exemplo em IL: LD -10 ABS ST Var1 (* Resultado é 10*)
ACOS Calcula o arco de co-seno (inverso de co-seno ) do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL .
ASIN Calcula o arco de seno (inverso de seno ) do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL .
ATAN Calcula o arco de tangente (inverso de tangente ) do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT , e OUT deve ser do tipo REAL .
COS Calcula o co-seno do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL .
EXP Calcula o exponencial do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL .
BRESIMAR
Cap. II – 3 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
EXPT Calcula o exponencial de numero levantado a outro numero . IN1 e IN2 pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL . Exemplo em ST: Var1:REAL; Var1:= EXPT(7,2); (*Resultado é 2) Exemplo em IL: LD 7 EXPT 2 ST Var1 (* Resultado é 49.0*)
LN Calcula o logaritmo natural do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL .
LOG Calcula o logaritmo de base 10 do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL .
SIN Calcula o seno do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL .
SQRT Calcula a raiz quadrada do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL .
TAN Calcula a tangente do numero . IN pode ser do tipo BYTE WORD DWORD INT DINT REAL SINT USINT UINT UDINT e OUT deve ser do tipo REAL . Notas :
BRESIMAR
Cap. II – 4 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
2 - INSTRUÇÕES ARITMÉTICAS ADD Calcula a soma aritmética de variáveis de diversos tipos : BYTE WORD DWORD SINT USINT INT UINT DINT UDINT REAL e LREAL. Duas variáveis TIME podem ser somadas resultando um outro TEMPO (ex. T#45s + T#50s = T#1m35s) . Exemplo em ST: Var1:= 7+2+4+7; (*Resultado é 20) Exemplo em IL: LD 7 ADD 2,4,7 ST Var1 (* Resultado é 20*) Exemplo em FBD:
MUL Calcula o produto aritmético de variáveis de diversos tipos : BYTE WORD DWORD SINT USINT INT UINT DINT UDINT REAL e LREAL Exemplo em ST: Var1:= 7*2*4*7; Exemplo em IL: LD 7 MUL 2,4,7 ST Var1 Exemplo em FBD:
SUB Calcula a subtracção aritmética de variáveis de diversos tipos : BYTE WORD DWORD SINT USINT INT UINT DINT UDINT REAL e LREAL. Duas variáveis TIME podem ser subtraídas resultando um outro TEMPO . Um valor TIME negativo é um valor indefinido. Exemplo em ST: Var1:= 7-2; Exemplo em IL: LD 7 SUB 2 ST Var1 Exemplo em FBD:
BRESIMAR
Cap. II – 5 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
DIV Calcula a divisão aritmética de variáveis de diversos tipos :BYTE WORD DWORD SINT USINT INT UINT DINT UDINT REAL e LREAL . Exemplo em ST: Var1:= 7/2; Exemplo em FBD:
Nota : Usando CheckDivByte ; CheckDivWord ; CheckDivDWord e CheckDivReal podemos verificar o valor do divisor de maneira a evitar a divisão por zero .
MOD Calcula o modulo de divisão (resto da divisão) de variáveis de diversos tipos : BYTE WORD DWORD SINT USINT INT UINT DINT UDINT . Duas variáveis TIME podem ser subtraídas resultando um outro TEMPO . Um valor TIME negativo é um valor indefinido. Exemplo em ST: Var1:= 9 MOD 2; Exemplo em IL: LD 9 MOD 2 ST Var1 (*Resultado é 1*) Exemplo em FBD:
Notas :
BRESIMAR
Cap. II – 6 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
3 - INSTRUÇÕES LOGICAS AND Calcula o produto lógico ( “E”) de variáveis de diversos tipos : BOOL BYTE WORD DWORD . Exemplo em ST: Var1:= 2#1001_0011 AND 2#1000_1010; Exemplo em IL: Var1:BYTE; LD 2#1001_0011 AND 2#1000_1010 ST Var1 (* Resultado é 2#1000_0010*) Exemplo em FBD:
OR Calcula a soma lógica ( “OU”) de variáveis de diversos tipos : BOOL BYTE WORD DWORD . Exemplo em ST: Var1:= 2#1001_0011 OR 2#1000_1010; Exemplo em IL: Var1:BYTE; LD 2#1001_0011 OR 2#1000_1010 ST Var1 (* Resultado é 2#1001_1011*) Exemplo em FBD:
XOR Calcula a soma lógica exclusiva ( “OU-Exclusivo”) de variáveis de diversos tipos : BOOL BYTE WORD DWORD . Exemplo em ST: Var1:= 2#1001_0011 XOR 2#1000_1010; Exemplo em IL: Var1:BYTE; LD 2#1001_0011 XOR 2#1000_1010 ST Var1 (* Resultado é 2#0001_1001*) Exemplo em FBD:
Nota : Usando mais que 2 entradas o resultado é feito aos pares .
BRESIMAR
Cap. II – 7 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
NOT Calcula a negação lógica (“NÃO”) de variáveis de diversos tipos: BOOL BYTE WORD DWORD . Exemplo em ST: Var1:= NOT 2#1000_1010; Exemplo em IL: Var1:BYTE; LD 2#1001_0011 NOT ST Var1 (* Resultado é 2#0110_1100*) Exemplo em FBD: Notas :
BRESIMAR
Cap. II – 8 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
4 - INSTRUÇÕES de DESLOCAÇÃO de BIT
SHL Deslocação de IN em “n” bits á esquerda e preenchendo de zeros os bits á direita . A:= SHL(IN, N) . IN e OUT serão do tipo BYTE WORLD ou DWORLD . Exemplo em ST:
Exemplo em IL: LD 1 SHL 1 ST Var1 (* Resultado é 2 *)
SHR Deslocação de IN em “n” bits á direita e preenchendo de zeros os bits á esquerda . A:= SHR(IN, N) . IN e OUT serão do tipo BYTE WORLD ou DWORLD . Exemplo em ST:
Exemplo em IL: LD 32 SHR 2 ST Var1 (* Resultado é 8 *)
BRESIMAR
Cap. II – 9 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
ROL Deslocação de IN em “n” bits á esquerda e com realimentação á direita . A:= ROL(IN, N) . IN e OUT serão do tipo BYTE WORLD ou DWORLD . Exemplo em ST:
Exemplo em IL: Var1: BYTE; LD 2#1001_0011 ROL 3 ST Var1 (* Resultado é 2#1001_1100 *)
ROR Deslocação de IN em “n” bits á direita e com realimentação á esquerda . A:= ROR(IN, N) . IN e OUT serão do tipo BYTE WORLD ou DWORLD . Exemplo em ST:
Exemplo em IL: Var1: BYTE; LD 2#1001_0011 ROR 3 ST Var1 (* Resultado é 2#0111_0010 *)
BRESIMAR
Cap. II – 10 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
5 - INSTRUÇÕES de SELECÇÃO SEL Selector binario . OUT := SEL(G, IN0, IN1) . Significa que OUT := IN0 se G=FALSE; OUT := IN1 se G=TRUE. IN0, IN1 e OUT pode ser de qualquer tipo de dados , G deve ser BOOL . O resultado da selecção é IN0 se G for FALSE e IN1 se G for TRUE . Exemplo em IL: LD TRUE SEL 3,4 ST Var1 (* Resultado é 4 *) ou LD FALSE SEL 3,4 ST Var1 (* Resultado é 3 *) Exemplo em FBD:
MAX Selecção do maior dado . OUT := MAX(IN0, IN1) . IN0, IN1 e OUT pode ter qualquer tipo de dados . Exemplo em IL: LD 90 MAX 30 MAX 40 MAX 77 ST Var1 (* Resultado é 90 *) Exemplo em FBD:
MIN Selecção do menor dado . OUT := MIN(IN0, IN1) . IN0, IN1 e OUT pode ter qualquer tipo de dados . Exemplo em IL: LD 90 MIN 30 MIN 40 MIN 77 ST Var1 (* Resultado é 30 *) Exemplo em FBD:
BRESIMAR
Cap. II – 11 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
LIMIT Selecção de limites . OUT := LIMIT(Min, IN , Max). Significa que MAX é o limite superior e MIN o limite inferior . Se o valor em IN ultrapassar o MAX o valor na saída OUT será o MAX . Se o valor inferior a MIN o valor na saída OUT será MIN. MIN, MAX, IN e OUT pode ser de qualquer tipo de dados . Exemplo em IL: LD 90 LIMIT 30,80 ST Var1 (* Resultado é 80 *)
MUX Multiplexador . OUT := MUX(K, IN0,...,INn) . Significa que o numero colocado em K indicará que o valor da entrada correspondente IN(K) será colocada na saida OUT . IN0, IN1, INn, OUT pode ser de qualquer tipo de dados . K deve ser BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT ou UDINT. Exemplo em IL: LD 0 MUX 30,40,50,60,70,80 ST Var1 (* Resultado é 30 *) Notas :
BRESIMAR
Cap. II – 12 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
6 - INSTRUÇÕES de COMPARAÇÃO GT Comparação maior que (“>”) . OUT:= IN1 GT IN2 . O valor do resultado OUT será TRUE quando o 1º operando for maior que o 2º operando . Os operandos podem ser do tipo BOOL, BYTE, WORD, DWORLD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, TIME_OF_DAY, DATE_AND_TIME e STRING. Exemplo em ST: Var1:= 20 > 30 > 40; Exemplo em IL: LD 20 GT 30 ST Var1 (* Resultado é FALSE *) Exemplo em FBD:
LT Comparação menor que (“<”) . OUT:= IN1 LT IN2 . O valor do resultado OUT será TRUE quando o 1º operando for menor que o 2º operando . Os operandos podem ser do tipo BOOL, BYTE, WORD, DWORLD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, TIME_OF_DAY, DATE_AND_TIME e STRING. Exemplo em ST: Var1:= 20 < 30 < 40; Exemplo em IL: LD 20 LT 30 ST Var1 (* Resultado é TRUE *) Exemplo em FBD:
GE Comparação maior ou igual a (“>=”) . OUT:= IN1 GE IN2 . O valor do resultado OUT será TRUE quando o 1º operando for maior ou igual ao 2º operando . Os operandos podem ser do tipo BOOL, BYTE, WORD, DWORLD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, TIME_OF_DAY, DATE_AND_TIME e STRING. Exemplo em ST: Var1:= 20 > =20; Exemplo em IL: LD 20 GE 20 ST Var1 (* Resultado é TRUE *) Exemplo em FBD:
BRESIMAR
Cap. II – 13 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
LE Comparação menor ou igual a (“<=”) . OUT:= IN1 LE IN2 . O valor do resultado OUT será TRUE quando o 1º operando for menor ou igual ao 2º operando . Os operandos podem se r do tipo BOOL, BYTE, WORD, DWORLD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, TIME_OF_DAY, DATE_AND_TIME e STRING. Exemplo em ST: Var1:= 20 > 30 > 40; Exemplo em IL: LD 20 LE 30 ST Var1 (* Resultado é TRUE *)
EQ Comparação igual (“=”) . OUT:= IN1 EQ IN2 . O valor do resultado OUT será TRUE quando o 1º operando for igual ao 2º operando . Os operandos podem ser do tipo BOOL, BYTE, WORD, DWORLD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, TIME_OF_DAY, DATE_AND_TIME e STRING. Exemplo em ST: Var1:= 20 ; Exemplo em IL: LD 20 EQ 20 ST Var1 (* Resultado é TRUE *) Exemplo em FBD:
NE Comparação não igual (“<>”) . OUT:= IN1 <> IN2 . O valor do resultado OUT será TRUE quando o 1º operando for diferente do 2º operando . Os operandos podem ser do tipo BOOL, BYTE, WORD, DWORLD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, TIME_OF_DAY, DATE_AND_TIME e STRING. Exemplo em ST: Var1:= 40 <> 40 ; Exemplo em IL: LD 40 NE 40 ST Var1 (* Resultado é FALSE *) Exemplo em FBD:
BRESIMAR
Cap. II – 14 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
7 - INSTRUÇÕES de CONVERSÃO BOOL_TO conversão Converte uma variável BOOL para qualquer outro tipo . Para variáveis numéricas o resultado é 1 quando o operando é TRUE e 0 quando o operando é FALSE. O resultado é “TRUE” ou “FALSE” respectivamente para variáveis STRING. Exemplo em ST: i:=BOOL_TO_INT(TRUE); (* Resultado é 1 *) str:=BOOL_TO_STRING(TRUE); (* Resultado é 'TRUE' *) t:=BOOL_TO_TIME(TRUE); (* Resultado é T#1ms *) tof:=BOOL_TO_TOD(TRUE); (* Resultado é TOD#00:00:00.001 *) dat:=BOOL_TO_DATE(FALSE); (* Resultado é D#1970-01-01 *) dandt:=BOOL_TO_DT(TRUE); (* Resultado é DT#1970-01-01-00:00:01 *)
Conversão TO BOOL Converte qualquer tipo de variável para o tipo BOOL . O resultado é TRUE quando o operando não é 0 . O resultado é FALSE quando o operando é igual a 0 . O resultado é TRUE no tipo de variável STRING quando o operando é “TRUE” , caso contrário o resultado é FALSE . Exemplo em ST: b := BYTE_TO_BOOL(2#11010101); (* Resultado é TRUE *) b := INT_TO_BOOL(0); (* Resultado é FALSE *) b := TIME_TO_BOOL(T#5ms); (* Resultado é TRUE *) b := STRING_TO_BOOL('TRUE'); (* Resultado é TRUE *)
STRING_TO conversão Converte uma variável STRING para qualquer outro tipo . O operando da variável do tipo STRING deve conter um valor que seja valido no tipo de variável que se deseja converter , caso contrário o resultado é 0 . Exemplo em ST: b :=STRING_TO_BOOL('TRUE'); (* Resultado é TRUE *) w :=STRING_TO_WORD('abc34'); (* Resultado é 0 *) t :=STRING_TO_TIME('T#127ms'); (* Resultado é T#127ms *)
Conversão TO STRING Converte qualquer tipo de variável para o tipo STRING . Exemplo em ST: str :=TIME_TO_STRING(T#12ms); (* Resultado é 'T#12ms' *) str :=DATE_TO_STRING(D#2002-08-18); (* Resultado é 'D#2002-08-18' *) str:=TOD_TO_STRING(TOD#14:01:05.123); (* Resultado é 'TOD#14:01:05.123' *) str:=BOOL_TO_STRING(TRUE); (* Resultado é 'TRUE' *) str:=DT_TO_STRING(DT#1998-02-13-14:20); (* Resultado é 'DT#1998-02-13-14:20' *) k := LREAL_TO_STRING(1.4); (* Resultado is '1.4' *)
TIME_TO conversão Converte uma variável do tipo TIME para qualquer outro tipo . Os dados serão armazenados internamente numa DWORD em milissegundos . Só depois é que este valor será convertido . Quando ocorre uma conversão de um valor de um tipo maior para um menor corremos o risco de perda de informação . Para o tipo de STRING o resultado é uma constante que corresponde a um tempo. Exemplo em ST: dw:=TIME_TO_DWORD(T#5m); (* Resultado é 300000 *) str :=TIME_TO_STRING(T#12ms); (* Resultado é 'T#12ms' *)
BRESIMAR
Cap. II – 15 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
DATE_TO conversão Converte uma variável do tipo DATE para qualquer outro tipo . Os dados serão armazenados internamente numa DWORD em segundos a contar a partir do dia 1 de Janeiro de 1970. Só depois é que este valor será convertido . Quando ocorre uma conversão de um valor de um tipo maior para um menor corremos o risco de perda de informação . Para o tipo de STRING o resultado é uma constante que corresponde a uma data. Exemplo em ST: b :=DATE_TO_BOOL(D#1970-01-01); (* Resultado é FALSE *) i :=DATE_TO_INT(D#1970-01-15); (* Resultado é 29952 *) str :=DATE_TO_STRING(D#2002-08-18); (* Resultado é 'D#2002-08-18' *) vdt:=DATE_TO_DT(D#2002-08-18); (* Resultado é DT#2002-08-18-00:00 *) udw:=DATE_TO_DWORD(D#2002-08-18); (* Resultado é 16#3D5EE380 *)
TOD_TO conversão Converte uma variável do tipo TIME_OF_DATE para qualquer outro tipo . Os dados serão armazenados internamente numa DWORD em milissegundos a contar a partir das 12:00 AM. Só depois é que este valor será convertido . Quando ocorre uma conversão de um valor de um tipo maior para um menor corremos o risco de perda de informação . Para o tipo de STRING o resultado é uma constante que corresponde a uma constante de tempo. Exemplo em ST: si:=TOD_TO_SINT(TOD#00:00:00.012); (* Resultado é 12 *) str:=TOD_TO_STRING(TOD#14:01:05.123); (* Resultado é 'TOD#14:01:05.123' *) tm:= TOD_TO_TIME(TOD#14:01:05.123); (* Resultado é T#841m5s123ms *) udi:= TOD_TO_UDINT(TOD#14:01:05.123); (* Resultado é 16#03020963 *)
DT_TO conversão Converte uma variável do tipo DATE_AND_TIME para qualquer outro tipo . Os dados serão armazenados internamente numa DWORD em segundos a contar a partir do dia 1 de Janeiro de 1970. Só depois é que este valor será convertido . Quando ocorre uma conversão de um valor de um tipo maior para um menor corremos o risco de perda de informação . Para o tipo de STRING o resultado é uma constante que corresponde a uma data e tempo. Exemplo em ST: byt :=DT_TO_BYTE(DT#1970-01-15-05:05:05); (* Resultado é 129 *) str:=DT_TO_STRING(DT#1998-02-13-14:20); (* Resultado é 'DT#1998-02-13-14:20' *) vtod:=DT_TO_TOD(DT#1998-02-13-14:20); (* Resultado é TOD#14:20 *) vdate:=DT_TO_DATE(DT#1998-02-13-14:20); (* Resultado é D#1998-02-13 *) vdw:=DT_TO_DWORD(DT#1998-02-13-14:20); (* Resultado é 16#34E45690 *)
REAL_TO / LREAL_TO conversão Converte uma variável do tipo REAL ou LREAL para qualquer outro tipo . Os dados serão arredondados para cima ou para baixo conforme o valor decimal e convertidos em um novo tipo de variável excepto para as variáveis de tipo STRING, BOOL, REAL e LREAL. Quando ocorre uma conversão de um valor de um tipo maior para um menor corremos o risco de perda de informação . Para o tipo de STRING o numero total de dígitos é limitado a 16 . Se o numero (L)REAL tem mais dígitos o 16º digito será arredondado . Se o comprimento do STRING é definido curto ele será truncado começando no fim do lado direito . Exemplo em ST: i := REAL_TO_INT(1.5); (* Resultado é 2 *) j := REAL_TO_INT(1.4); (* Resultado é 1 *) k := LREAL_TO_STRING(1.4); (* Resultado é '1.4' *)
BRESIMAR
Cap. II – 16 de 20
TWINCAT PLC - Lista de Instruções
BYTE TO conversão WORD TO conversão DWORD TO conversão
BECKHOFF New Automation Technology
USINT TO conversão UINT TO conversão UDINT TO conversão
SINT TO conversão INT TO conversão DINT TO conversão
Quando ocorre uma conversão de um valor de um tipo maior para um menor corremos o risco de perda de informação . Se o numero convertido excede o limite máximo, o primeiro “ byte” será ignorado . Exemplo em ST: si := INT_TO_SINT (4223); (* Resultado é 127 . Como o numero inteiro 4223 em Hex é 16#107F em SINT ( 1 “byte”) só será representado o “byte menos significativo 16#7F que representa 127 *) Exemplo em IL: LD 5 INT_TO_REAL MUL 3.5 ST Var1 (* Resultado é REAL , 17.5*)
TRUNC Converte uma variável de tipo REAL para INT . Quando ocorre uma conversão de um valor de um tipo maior para um menor corremos o risco de perda de informação . Se o numero convertido excede o limite máximo, o primeiro “ byte” será ignorado . Exemplo em ST: i:=TRUNC(1.9); (* Result is 1 *) i:=TRUNC(-1.4); (* Result is -1 *) Exemplo em IL: LD 5.5 TRUNC MUL 3.5 ST Var1 (* Resultado é REAL , 17.5*) Notas :
BRESIMAR
Cap. II – 17 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
Notas :
BRESIMAR
Cap. II – 18 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
8 - INSTRUÇÕES VÁRIAS INDEXOF Calcula o índex (posição de memória) interno do POU (“Program Organization Unit”) . Exemplo em ST: Var1:= TRUNC (POU2); Exemplo em IL: Var1:DINT; LD POU2 (* Nome da programa , função ou bloco funcional *) INDEXOF ST Var1
SIZEOF Calcula o numero de “bytes” requerido para um dado tipo de dados . Exemplo em ST: arr1:ARRAY [0..5] OF INT; Var1:INT; Var1:= TRUNC (arr1); (* O resultado é 12 *) Exemplo em IL: arr1:ARRAY [0..6] OF INT; Var1:INT; LD arr1 SIZEOF ST Var1 (* O resultado é 14 *)
ADR Calcula o endereço absoluto de uma variável em DWORLD . Esta função é utilizada para ser tratada pelos PONTEIROS . Exemplo em IL: LD var1 ADR ST var2
^ Esta identificação referência um PONTEIRO . Exemplo em ST: pt:POINTER TO INT var_int1:INT; var_int2:INT; pt:=ADR(var_int1); var_int2:=pt^;
BITADR Retorna com o endereço do bit d a variável indicada . Exemplo em IL: var1: AT %IX1.0 : BOOL out : BYTE LD var1 BITADR ST out (*Retorna com 08) Exemplo em ST bOFF AT %QX10.1 : BOOL iBitAdr : BYTE iBit := BITADR (bOFF) ; (*Retorna com 81)
BRESIMAR
Cap. II – 19 de 20
TWINCAT PLC - Lista de Instruções
BECKHOFF New Automation Technology
CAL Chama em IL uma função bloco . As variáveis que servem como entradas estão colocadas entre parênteses á direita depois do nome da função bloco . Exemplo em IL: CAL INST (par1: 0 , par2:= TRUE) Notas :
BRESIMAR
Cap. II – 20 de 20
TWINCAT PLC – Funções bloco “standard”
BECKHOFF New Automation Technology
III – FUNÇÕES BLOCO “STANDARD” 1 – FUNÇÕES BLOCO “STANDARD” – BIESTAVEL 2 – FUNÇÕES BLOCO “STANDARD” – “TRIGGER” 3 – FUNÇÕES BLOCO “STANDARD” – TEMPORIZADORES 4 – FUNÇÕES BLOCO “STANDARD” – CONTADORES
BRESIMAR
Cap. III – 1 de 8
TWINCAT PLC – Funções bloco “standard”
BRESIMAR
BECKHOFF New Automation Technology
Cap. III – 2 de 8
TWINCAT PLC – Funções bloco “standard”
BECKHOFF New Automation Technology
1 – FUNÇÕES BLOCO “STANDARD” - BIESTAVEL
FUNCTION_BLOCK RS Biestavel com RESET prioritário Q1 = RS (SET, RESET1) . Equação lógica implementada internamente no FB , Q1 = NOT RESET1 AND (Q1 OR SET) . Nome das livrarias : Standard.lb (*Para PC*) e Standard.lb (*Para PC*) VAR_INPUT VAR_INPUT SET : BOOL; RESET1 : BOOL; END_VAR VAR_OUTPUT VAR_OUTPUT Q1 : BOOL; END_VAR
FUNCTION_BLOCK SR Biestavel com SET prioritário Q1 = SR (SET1, RESET) . Equação lógica implementada internamente no FB , Q1 := (NOT RESET AND Q1) OR SET1 . VAR_INPUT VAR_INPUT SET1 : BOOL; RESET : BOOL; END_VAR VAR_OUTPUT VAR_OUTPUT Q1 : BOOL; END_VAR
FUNCTION_BLOCK SEMA Função semáforo .Equação lógica implementada internamente no FB ,é a seguinte : BUSY := X; IF CLAIM THEN X:=TRUE; ELSIF RELEASE THEN BUSY := FALSE; X:= FALSE; END_IF VAR_INPUT VAR_INPUT CLAIM : BOOL; REALEASE : BOOL; END_VAR VAR_OUTPUT VAR_OUTPUT Q1 : BOOL; END_VAR
BRESIMAR
Cap. III – 3 de 8
TWINCAT PLC – Funções bloco “standard”
BECKHOFF New Automation Technology
2 – FUNÇÕES BLOCO “STANDARD” – “TRIGGER”
FUNCTION_BLOCK F_TRIG Accionamento pelo flanco descendente . A saída Q e a variável interna M manter-se-á FALSE enquanto a entrada CLK é TRUE . Logo que ocorra a transição de TRUE para FALSE em CLK a saída Q ficará TRUE e M será posto a TRUE (set) . Isto significa que cada vez que esta função bloco seja chamada a saída Q mantém-se FALSE até que ocorra uma transição do CLK de TRUE para FALSE . Nome das livrarias : Standard.lb (*Para PC*) e Standard.lb6 (*Para BC*) VAR_INPUT VAR_INPUT CLK : BOOL; (* Sinal a detector*) END_VAR VAR_OUTPUT VAR_OUTPUT Q : BOOL; END_VAR VAR M : BOOL; END_VAR
(* Transição detectada *)
FUNCTION_BLOCK R_TRIG Accionamento pelo flanco ascendente . A saída Q e a variável interna M manter-se-á FALSE enquanto a entrada CLK é FALSE . Logo que ocorra a transição de FALSE para TRUE em CLK a saída Q ficará TRUE e M será posto a TRUE (set) . Isto significa que cada vez que esta função bloco seja chamada a saída Q mantém-se FALSE até que ocorra uma transição do CLK de FALSE para TRUE . VAR_INPUT VAR_INPUT CLK : BOOL; (* Sinal a detector*) END_VAR VAR_OUTPUT VAR_OUTPUT Q : BOOL; END_VAR VAR M : BOOL; END_VAR
BRESIMAR
(* Transição detectada *)
Cap. III – 4 de 8
TWINCAT PLC – Funções bloco “standard”
BECKHOFF New Automation Technology
3 – FUNÇÕES BLOCO “STANDARD” – TEMPORIZADORES
FUNCTION_BLOCK TOF Temporizador ao atraso . VAR_INPUT VAR_INPUT IN : BOOL;(* Iniciar temporização quando FALSE*) PT : TIME; (* Temporização *) END_VAR VAR_OUTPUT VAR_OUTPUT Q : BOOL; (*FALSE passado PT seg depois de PT ter passado T RUE=>FALSE *) PT: TIME; (* Tempo já decorrido *) END_VAR
FUNCTION_BLOCK TON Temporizador ao trabalho . VAR_INPUT VAR_INPUT IN : BOOL;(* Iniciar temporização quando TRUE *) PT : TIME; (* Temporização *) END_VAR VAR_OUTPUT VAR_OUTPUT Q : BOOL; (*TRUE passado PT seg depois de PT ter passado FALSE=>TRUE *) PT: TIME; (* Tempo já decorrido *) END_VAR
BRESIMAR
Cap. III – 5 de 8
TWINCAT PLC – Funções bloco “standard”
BECKHOFF New Automation Technology
FUNCTION_BLOCK TP Temporizador ao trabalho por impulso . VAR_INPUT VAR_INPUT IN : BOOL;(* Iniciar temporização na transição de TRUE para FALSE*) PT : TIME; (* Temporização *) END_VAR VAR_OUTPUT VAR_OUTPUT Q : BOOL; (*TRUE durante PT tempo, impulso *) PT: TIME; (* Tempo já decorrido *) END_VAR
BRESIMAR
Cap. III – 6 de 8
TWINCAT PLC – Funções bloco “standard”
BECKHOFF New Automation Technology
4 – FUNÇÕES BLOCO “STANDARD” – CONTADORES
FUNCTION_BLOCK CTD Contador decrescente . Quando LOAD é TRUE a variável CV será inicializada com o valor que se encontra na variável PV . Se CD transitar de FALSE para TRUE , CV decrementa 1. Quando CV for menor ou igual a zero Q irá a TRUE . VAR_INPUT VAR_INPUT IN : BOOL;(* Contar com a transição positiva (FALSE=>TRUE) *) LOAD : BOOL; (* Ordem de carregar valor inicial PV *) PV : WORD; (* Valor inicial *) END_VAR VAR_OUTPUT VAR_OUTPUT Q : BOOL; (* Finalização de contagem *) CV: WORD; (* Contagem corrente *) END_VAR
FUNCTION_BLOCK CTU Contador crescente . A variável CV será inicializada com o RESET a TRUE . Quando ocorre uma transição de FALSE para TRUE o contador incrementa 1 . Quando CV for maior ou igual a PV Q irá a TRUE . VAR_INPUT VAR_INPUT CU : BOOL;(* Contar com a transição positiva (FALSE=>TRUE) *) RESET : BOOL; (* Ordem de por a zero o contador *) PV : WORD; (* Valor final *) END_VAR VAR_OUTPUT VAR_OUTPUT Q : BOOL; (* Finalização de contagem *) CV: WORD; (* Contagem corrente *)
BRESIMAR
Cap. III – 7 de 8
TWINCAT PLC – Funções bloco “standard”
BECKHOFF New Automation Technology
FUNCTION_BLOCK CTUD Contador crescente e decrescente . Combinação das mesmas características dos blocos funcionais de contagem anteriores .( CTU e CTD ) . VAR_INPUT VAR_INPUT CU : BOOL;(* Contagem crescente *) CU : BOOL;(* Contagem crescente *) RESET : BOOL; (* Ordem de por a zero o contador *) LOAD : BOOL; (* Ordem de carregar valor inicial PV *) PV : WORD; (* Valor final *) END_VAR VAR_OUTPUT VAR_OUTPUT QU : BOOL; (* Finalização de contagem *) QD : BOOL; (* Finalização de contagem a zero *) CV: WORD; (* Contagem corrente *) Notas :
BRESIMAR
Cap. III – 8 de 8
TWINCAT PLC – Funções “standard”
BECKHOFF New Automation Technology
IV – FUNÇÕES “STANDARD” 1 – FUNÇÕES “STANDARD” – “STRING”
BRESIMAR
Cap. IV – 1 de 7
TWINCAT PLC – Funções “standard”
BRESIMAR
BECKHOFF New Automation Technology
Cap. IV – 2 de 7
TWINCAT PLC – Funções “standard”
BECKHOFF New Automation Technology
1 – FUNÇÕES “STANDARD” – “STRING”
CONCAT Combina 2 “strings” . Nome das livrarias : Standard.lb (*Para PC*) e Standard.lb (*Para PC*) FUNCTION CONCAT : STRING(255) VAR_INPUT VAR_INPUT STR1 : STRING(255); STR2 : STRING(255); END_VAR Exemplo em ST: Var1: CONCAT (‘SUSI’ , ‘WILLI’) ; Exemplo em IL: LD ‘SUSI’ CONCAT ‘WILLI’ ST Var1 (* Resultado é ‘SUSIWILLI’ *)
DELETE Apaga uma parte de um STRING a partir de uma dada posição . DELETE (STR, L, P) significa o seguinte : Apaga L caracteres do “string” STR a partir do carácter nº P . FUNCTION DELETE : STRING(255) VAR_INPUT VAR_INPUT STR : STRING(255); LEN : INT; POS : INT; END_VAR Exemplo em ST: Var1: = DELETE (‘SUXYSI’ , 2 , 2 ) ; Exemplo em IL: LD ‘SUXYSI’ DELETE 2,2 ST Var1 (* Resultado é ‘SYSI’ *)
BRESIMAR
Cap. IV – 3 de 7
TWINCAT PLC – Funções “standard”
BECKHOFF New Automation Technology
FIND Função de procura de uma parte (frase) dentro de um STRING . FIND (STR1, STR2) significa o seguinte : Encontra a posição , desde o 1º carácter , da frase STR1 dentro da STR2 . FUNCTION FIND : INT VAR_INPUT VAR_INPUT STR1 : STRING(255); STR2 : STRING(255); END_VAR Exemplo em ST: Var1: = FIND (‘SUXYSI’ , ‘XY’ ) ; Exemplo em IL: LD ‘SUXYSI’ FIND ‘XY’ ST Var1 (* Resultado é 3 *)
INSERT Função de inserção de uma parte (frase) dentro de um STRING . INSERT (STR1, STR2, POS) significa o seguinte : Insere STR2 depois da posição POS na frase STR1 . FUNCTION INSERT : STRING(255) VAR_INPUT VAR_INPUT STR1 : STRING(255); STR2 : STRING(255); POS : INT; END_VAR Exemplo em ST: Var1: = INSERT (‘SUSI’ , ‘XY’ , 2) ; Exemplo em IL: LD ‘SUSI’ INSERT ‘XY’ , 2 ST Var1 (* Resultado é ‘SUXYSI’ *)
BRESIMAR
Cap. IV – 4 de 7
TWINCAT PLC – Funções “standard”
BECKHOFF New Automation Technology
LEFT Selecciona um nº caracteres de um STRING a começar pela esquerda . LEFT (STR, SIZE) significa o seguinte : Selecciona na frase STR , SIZE caracteres a começar pela esquerda . FUNCTION LEFT : STRING(255) VAR_INPUT VAR_INPUT STR : STRING(255); SIZE : INT; END_VAR Exemplo em ST: Var1: = LEFT (‘BRESIMAR’ , 2) ; Exemplo em IL: LD ‘BRESIMAR’ LEFT 2 ST Var1 (* Resultado é ‘BR’ *)
LEN Calcula o tamanho de um STRING (nº de caracteres) . FUNCTION LEN : INT VAR_INPUT VAR_INPUT STR : STRING(255); SIZE : INT; END_VAR Exemplo em ST: Var1: = LEN (‘BRESIMAR’ ) ; Exemplo em IL: LD ‘BRESIMAR’ LEN ST Var1 (* Resultado é 8 *)
BRESIMAR
Cap. IV – 5 de 7
TWINCAT PLC – Funções “standard”
BECKHOFF New Automation Technology
MID Selecciona um nº caracteres de um STRING a partir de uma dada posição . MID (STR, LEN, POS) significa o seguinte : Selecciona na frase STR , LEN caracteres a começar da posição POS (a contar da esquerda). FUNCTION MID : STRING(255) VAR_INPUT VAR_INPUT STR : STRING(255); LEN : INT; POS : INT; END_VAR Exemplo em ST: Var1: = MID (‘BRESIMAR’ , 2 , 3) ; Exemplo em IL: LD ‘BRESIMAR’ MID 2 , 3 ST Var1 (* Resultado é ‘ES’ *)
REPLACE Cola um STRING a partir de uma dada posição de um dado STRING e eliminando um nº de caracteres definidos . REPLACE (STR1, STR2, L, P) significa o seguinte : Cola a frase STR2 a partir da posição P da frase STR1 e eliminando em STR1 L caracteres . FUNCTION REPLACE : STRING(255) VAR_INPUT VAR_INPUT STR1 : STRING(255); STR1 : STRING(255); L : INT; P : INT; END_VAR Exemplo em ST: Var1: = REPLACE (‘BRESIMAR’ , ‘ASA’ , 2 , 3) ; Exemplo em IL: LD ‘BRESIMAR’ REPLACE ‘ASA’ , 2, 3 ST Var1 (* Resultado é ‘BASAIMAR’ *) BRESIMAR
Cap. IV – 6 de 7
TWINCAT PLC – Funções “standard”
BECKHOFF New Automation Technology
RIGTH Selecciona um nº caracteres de um STRING a começar pela direita . RIGTH (STR, SIZE) significa o seguinte : Selecciona na frase STR , SIZE caracteres a começar pela direita . FUNCTION RIGTH : STRING(255) VAR_INPUT VAR_INPUT STR : STRING(255); SIZE : INT; END_VAR Exemplo em ST: Var1: = RIGTH (‘BRESIMAR’ , 3) ; Exemplo em IL: LD ‘BRESIMAR’ RIGTH 3 ST Var1 (* Resultado é ‘MAR’ *)
BRESIMAR
Cap. IV – 7 de 7
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
V – EXEMPLOS PRÁTICOS 1 – ARRANQUE DIRECTO DE MOTOR TRIFÁSICO 2 – INVERSÃO DE ROTAÇÃO DE MOTOR TRIFÁSICO 3 – ARRANQUE ESTRELA-TRIANGULO DE MOTOR TRIFÁSICO
Neste capitulo vão ser apresentados exemplos de automatismos e respectivas soluções utilizando instruções pertencentes a PLC´s “Beckhoff” . As aplicações abordam circuitos eléctricos simples e comuns nos automatismos electromecânicos industriais . O estudo destes exemplos tem por finalidade aprofundar os conhecimentos adquiridos nos capítulos anteriores e , ao mesmo tempo , possibilitar a prática das instruções base do “TwinCAT-PLC” . Compreendidos os exemplos propostos , adquirem-se os conhecimentos necessários para se abordar situações mais complexas , ou seja , o caminho fica aberto para que se torne possível enfrentar a concepção , realização e manutenção de automatismos usando o “TwinCAT” . Chamo á atenção , que os exemplos de programação apresentados foram escritos a titulo didáctico . Por isso , podem não estar previstas todas as situações de funcionamento real . Deste modo , o seu uso em programas de aplicação industrial pode necessitar de adaptações que assegurem todas as possibilidades de utilização e o respeito pelas normas de segurança em vigor no sector de actividade onde vão ser utilizadas .
BRESIMAR
Cap. V – 1 de 35
TWINCAT PLC – Exemplos práticos
BRESIMAR
BECKHOFF New Automation Technology
Cap. V – 2 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1 – ARRANQUE DIRECTO DE MOTOR TRIFÁSICO Com este circuito pretende-se comandar um motor trifásico através de duas botoneiras com contactos normalmente abertos (N.A.) “S1” e “S2” e executado por um algoritmo ( programa de PLC - “Beckhoff“) . A colocação em marcha do motor é feita quando se pressiona “S2” e a paragem quando se pressiona “S1”. A paragem também ocorre se a protecção térmica do motor contra sobrecargas for actuada. Se tal acontecer , é actuado o contacto normalmente fechado (N.F.) “F2” (circuito abre ) . Equação lógica do circuito : KM1 = /F2 . /S1 . ( S2 + KM1)
BRESIMAR
Cap. V – 3 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1.1 - Edição a texto 1.1.1 - ST - “Structured Text”
BRESIMAR
Cap. V – 4 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1.1.2 - IL - “Instruction List”
BRESIMAR
Cap. V – 5 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1.2 - Edição gráfica 1.2.1 - LD - “Ladder Diagram”
BRESIMAR
Cap. V – 6 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1.2.2 - FBD - “Function Block Diagram”
BRESIMAR
Cap. V – 7 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1.2.3 - CFC - “Continuos Function Chart”
BRESIMAR
Cap. V – 8 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1.3 - Edição por GRAFCET Para quem utilizar o método de diagrama funcional GRAFCET , teremos para o circuito anterior a seguinte estrutura : GRAFCET NÍVEL 1 (Especificações funcionais)
GRAFCET NÍVEL 2 (Especificações tecnológicas) Na etapa inicial (etapa 0) o automatismo não executa qualquer acção , estando o sistema em repouso (motor parado) . Para que o motor trabalhe é necessário que o GRAFCET evolua para a etapa 1. A etapa 1 é activada se a transição for válida , ou seja , se a etapa 0 estiver activa e a condição lógica de transição ( F2 . /S1 . S2 ) for verdadeira ( o botão de pressão “S2“ foi pressionado , não está pressionado o botão “S1“ e nem o relé térmico “F2” foi actuado ). Nesta situação o GRAFCET evolui para a etapa 1 e a acção associada a esta etapa é realizada (bobina do contactor é alimentada e o motor M1 é accionado). Estando o motor em funcionamento (etapa 1) se desejarmos desligar o motor teremos de passar , no GRAFCET , para a etapa 0 . Isso acontece quando a condição lógica ( /F2 + S1 ) for verdadeira ( o botão de pressão “S1“ foi pressionado ou o relé térmico “F2” disparou ) .
BRESIMAR
Cap. V – 9 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1.3.1 - SFC - “Sequencial Function Chart”
BRESIMAR
Cap. V – 10 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
1.3.2 - “GRAFCET com instruções Set / Reset (Biestavel)”
BRESIMAR
Cap. V – 11 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2 – INVERSÃO DE ROTAÇÃO DE MOTOR TRIFÁSICO Com este circuito pretende-se comandar o sentido de rotação de um motor trifásico através de duas botoneiras com contactos normalmente abertos (N.A.) “S7” (marcha para a direita) e “S8” (para a esquerda) . A paragem efectua-se quando se pressiona o botão “S6” (N.A)ou se a protecção térmica do motor contra sobrecargas for actuada . Se tal acontecer , é actuado o contacto normalmente fechado (N.F.) “F2” ( contacto abre) . Equação lógica do circuito : KM5 = /F2 . /S6 . /KM6 . ( S7 + KM5) KM6 = /F2 . /S6 . /KM5 . ( S8 + KM6)
BRESIMAR
Cap. V – 12 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2.1 - Edição a texto 2.1.1 - ST - “Structured Text”
BRESIMAR
Cap. V – 13 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2.1.2 - IL - “Instruction List”
BRESIMAR
Cap. V – 14 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2.2 - Edição gráfica 2.2.1 - LD - “Ladder Diagram”
BRESIMAR
Cap. V – 15 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2.2.2 - FBD - “Function Block Diagram”
BRESIMAR
Cap. V – 16 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2.2.3 - CFC - “Continuos Function Chart”
BRESIMAR
Cap. V – 17 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2.3 - Edição por GRAFCET Para quem utilizar o método de diagrama funcional de GRAFCET , teremos para o circuito anterior a seguinte estrutura : GRAFCET NÍVEL 1 (Especificações funcionais)
GRAFCET NÍVEL 2 (Especificações tecnológicas) Na etapa inicial (etapa 0) o automatismo não executa qualquer acção , o motor está parado . Para que o motor trabalhe é necessário que o GRAFCET evolua para a etapa 1 ou 2. A etapa 1 é activada se a transição for válida , ou seja , se a etapa 0 estiver activa e a condição lógica de transição ( F2 . /S6 . /S8 . S7 ) for verdadeira ( o botão de pressão “S7“ foi pressionado e não está pressionado o botão “S6“ nem o “S8” e nem o relé térmico “F2” foi actuado ). Nesta situação o GRAFCET evolui para a etapa 1 e o motor irá rodar para a direita . Para o motor rodar para a esquerda , a etapa 2 terá de ser activada , em alternativa á etapa 1 , sendo necessário que o motor esteja parado ( etapa 0) e a condição de transição ( F2 . /S6 . /S7 . S8 ) seja verdadeira . Estando o motor em funcionamento (etapa 1 ou 2) se desejarmos desligar o motor teremos de passar , no GRAFCET , para a etapa 0 . Isso acontece quando a condição lógica ( /F2 + S6 ) for verdadeira ( o botão de pressão “S6“ foi pressionado ou o relé térmico “F2” disparou ) .
BRESIMAR
Cap. V – 18 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2.3.1 - SFC - “Sequencial Function Chart”
BRESIMAR
Cap. V – 19 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
2.3.2 - “GRAFCET com instruções Set / Reset (Biestavel)”
BRESIMAR
Cap. V – 20 de 35
TWINCAT PLC – Exemplos práticos
BRESIMAR
BECKHOFF New Automation Technology
Cap. V – 21 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3 – ARRANQUE ESTRELA-TRIANGULO DE MOTOR TRIFÁSICO Com este circuito pretende-se efectuar o arranque estrela - triangulo de um motor assíncrono trifásico com rotor em curto-circuito. O arranque ocorre quando se pressiona o botão de pressão “S10”. A paragem efectua-se quando se pressiona o botão “S9” (N.A) ou se a protecção térmica do motor “F2” (N.F.)contra sobrecargas for actuada . Equação lógica do circuito : KM1 = /F2 . /S9 . ( S10 + KM2 . KM1) . /KM2(t1) . /KM3 KM2 = /F2 . /S9 . ( S10 . KM1+ KM2) KM3 = /F2 . /S9 . ( S10 . KM1+ KM2) . /KM1
BRESIMAR
Cap. V – 22 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3.1 - Edição a texto 3.1.1 - ST - “Structured Text”
BRESIMAR
Cap. V – 23 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3.1.2 - IL - “Instruction List”
BRESIMAR
Cap. V – 24 de 35
TWINCAT PLC – Exemplos práticos
BRESIMAR
BECKHOFF New Automation Technology
Cap. V – 25 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3.2 - Edição gráfica 3.2.1 - LD - “Ladder Diagram”
BRESIMAR
Cap. V – 26 de 35
TWINCAT PLC – Exemplos práticos
BRESIMAR
BECKHOFF New Automation Technology
Cap. V – 27 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3.2.2 - FBD - “Function Block Diagram”
BRESIMAR
Cap. V – 28 de 35
TWINCAT PLC – Exemplos práticos
BRESIMAR
BECKHOFF New Automation Technology
Cap. V – 29 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3.2.3 - CFC - “Continuos Function Chart”
BRESIMAR
Cap. V – 30 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3.3 - Edição por GRAFCET Para quem utilizar o método de diagrama funcional de GRAFCET , teremos a seguinte estrutura : GRAFCET NÍVEL 1 (Especificações funcionais)
GRAFCET NÍVEL 2 (Especificações tecnológicas) Na etapa inicial (etapa 0) o automatismo não executa qualquer acção , o motor esta parado . A etapa 1 é activada se a transição for válida , ou seja , se a etapa 0 estiver activa e a condição lógica de transição ( F2 . /S9 . S10 ) for verdadeira ( o botão de pressão “S10“ foi pressionado e não está pressionado o botão “S9“ e nem o relé térmico “F2” foi actuado ). Nesta situação o GRAFCET evolui para a etapa 1 e o motor irá arrancar em modo “estrela” durante o tempo “t1” (seg.) . Nesta etapa está accionado o contactor “KM1” e “KM2” .Passado esse tempo “t1” o sistema passará para a etapa 2 , que corresponde ao modo “triangulo” . Nesta etapa o contactor “KM1” está desligado , o contactor “KM2” mantém-se ligado e é ligado o contactor “KM3” . Estando o motor em funcionamento (etapa 1 ou 2) se desejarmos desligar o motor teremos de passar , no GRAFCET , para a etapa 0 . Isso acontece quando a condição lógica ( /F2 + S9) for verdadeira ( o botão de pressão “S9“ foi pressionado ou o relé térmico “F2” disparou ) .
BRESIMAR
Cap. V – 31 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3.3.1 - SFC - “Sequencial Function Chart”
BRESIMAR
Cap. V – 32 de 35
TWINCAT PLC – Exemplos práticos
BRESIMAR
BECKHOFF New Automation Technology
Cap. V – 33 de 35
TWINCAT PLC – Exemplos práticos
BECKHOFF New Automation Technology
3.3.2 - “GRAFCET com instruções Set / Reset (Biestavel)”
BRESIMAR
Cap. V – 34 de 35
TWINCAT PLC – Exemplos práticos
BRESIMAR
BECKHOFF New Automation Technology
Cap. V – 35 de 35
TWINCAT PLC – Resumo de Instruções
BECKHOFF New Automation Technology
Anexo A – RESUMO DE INSTRUÇÕES E FUNÇÕES “STANDARD” 1 – RESUMO DE INSTRUÇÕES DO “TwinCAT PLC” 2 – RESUMO DAS FUNÇÕES BLOCO “STANDARD” 3 – RESUMO DAS FUNÇÕES “STANDARD”
BRESIMAR
Anexo A – 1 de 9
TWINCAT PLC – Resumo de Instruções
BRESIMAR
BECKHOFF New Automation Technology
Anexo A – 2 de 9
TWINCAT PLC – Resumo de Instruções
BECKHOFF New Automation Technology
1 – RESUMO DE INSTRUÇÕES DO “TwinCAT PLC” NUMERICAS ABS - Valor absoluto
IL LD in ABS ST out
ACOS - Arco de coseno
LD in ACOS ST out
out:=COS(in);
ASIN - Arco de seno
LD in ASIN ST out
out:=ASIN(in);
ATAN - Arco de tangente
LD in ATAN ST out
out:=ATAN(in);
COS - Co-seno
LD in COS ST out
out:=COS(in);
EXP - Exponencial
LD in EXP ST out
out:=EXP(in);
EXPT - Expo. de in1 levantado a in2
LD in1 EXPT in2 ST out
out:=EXPT(in1, in2);
LN - Logaritmo natural
LD in LN ST out
out:=LN(in);
LOG - Logaritmo de base 10
LD in LOG ST out
out:=LOG(in);
SIN - Seno
LD in SIN ST out
out:=SIN(in);
SQRT - Raiz quadrada
LD in SQRT ST out
out:=SQRT(in);
TAN - Tangente
LD in TAN ST out
out:=TAN(in);
ARITMETICAS ADD - Soma
IL LD in1 ADD in2 ST out
MUL - Multiplicação
LD in1 MUL in2,in3 ST out
out:= in1*in2*in3;
SUB - Subtracção
LD in1 SUB in2 ST out
out:= in1-in2;
BRESIMAR
ST
LD
out:=ABS(in);
ST
LD
out:= in1+in2;
Anexo A – 3 de 9
TWINCAT PLC – Resumo de Instruções
BECKHOFF New Automation Technology
DIV - Divisão
LD in DIV in2 ST out
out:= in1 / in2;
MOD - Resto da divisão
LD in MOD in2 ST out
out:= in1 MOD in2;
LOGICAS AND - “E” (produto lógico)
IL LD in1 AND in2 ST out
ST out:= in1 AND in2;
LD in OR in2 ST out
out:= in1 OR in2;
LD in XOR in2 ST out
out:= in1 XOR in2;
LD in NOT ST out
out:= NOT in;
IL LD in SHL n ST out
ST out:= SHL (in,n);
LD in SHR n ST out
out:= SHR (in,n);
LD in ROL n ST out
out:= ROL (in,n);
LD in ROR n ST out
out:= ROR (in.n);
SELECÇÃO SEL - Selector binário
IL LD TRUE SEL in1,in2 ST out
ST out:=SEL(g,in1,in2);
MAX - Selecção do maior dado
LD in1 MAX in2 MAX in3 ST out
out:=MAX (in1,in2,in3);
MIN - Selecção do menor dado
LD in1 MIN in2,in3 ST out
out:=MIN(in1,in2,in3);
( BOOL , BYTE , WORD , DWORD )
OR - “OU” (soma lógica) ( BOOL , BYTE , WORD , DWORD )
XOR - “OU EX” ( “OU” exclusivo) ( BOOL , BYTE , WORD , DWORD )
NOT - “NÃO” (negação lógica) ( BOOL , BYTE , WORD , DWORD )
DESLOCAÇÃO SHL - Deslocação de in em n bits a direita com preenchimento á esquerda
LD
LD
( BYTE , WORD , DWORD )
SHR - Deslocação de in em n bits á esquerda com preenchimento á direita ( BYTE , WORD , DWORD )
ROL - Deslocação de in em n bits á direita com entrada á esquerda ( BYTE , WORD , DWORD )
ROR - Deslocação de in em n bits á esquerda com entrada á direita ( BYTE , WORD , DWORD )
BRESIMAR
LD
Anexo A – 4 de 9
TWINCAT PLC – Resumo de Instruções
BECKHOFF New Automation Technology
LIMIT - Selecção de limites
LD min LIMIT in , max ST out
out:=LIMIT(min,in,max);
MUX - Multiplexador
LD k MUX in0,in1,in2, In3,in4 ST out
out:=MUX(K,in0,in1,in2,in3,in4) ;
COMPARAÇÃO GT – “>” (maior que)
IL LD in1 GT in2 ST out
ST out:= in1 > in2;
LT – “<” (menor que)
LD in1 LT in2 ST out
out:= in1 < in2;
GE – “>=” (maior ou igual a)
LD in1 GE in2 ST out
out:= in1 >= in2;
LE – “<=” (menor ou igual a)
LD in1 LE in2 ST out
out:= in1 <= in2;
EQ – “=” (igual a)
LD in1 EQ in2 ST out
out:= in1 = in2;
NE – “<>” (não igual a)
LD in1 NE in2 ST out
out:= in1 <> in2;
CONVERSÃO BOOL_TO_tipo (16 conversões) BYTE_TO_tipo (16 conversões) WORD_TO_tipo (16 conversões)
IL LD in ST out LD in
out:=BYTE_TO_WORD(in);
BYTE_TO_WORD
LD
ST out LD in
out:=WORD_TO_INT(in);
WORD_TO_INT
ST out LD in
USINT_TO_tipo (16 conversões)
LD in
UINT_TO_tipo (16 conversões)
LD in
UDINT_TO_tipo (16 conversões)
LD in
LD
BOOL_TO_INT
DWORD_TO_tipo (16 conversões)
BRESIMAR
ST out:=BOOL_TO_INT(in);
LD
out:=DWORD_TO_BOOL(in);
DWORD_TO_BOOL
ST out out:=USINT_TO_INT(in);
USINT_ TO_DINT
ST out out:=UINT_TO_USINT(in);
UINT_ TO_USINT
ST out out:=UDINT_TO_USINT(in);
UDINT_ TO_USINT
ST out
Anexo A – 5 de 9
TWINCAT PLC – Resumo de Instruções SINT_TO_tipo (16 conversões)
LD in
INT_TO_tipo (16 conversões)
LD in
DINT_TO_tipo (16 conversões)
LD in
REAL_TO_tipo (16 conversões)
LD in
LREAL_TO_tipo (16 conversões)
LD in
STRING_TO_tipo (16 conversões)
LD in
TIME_TO_tipo (16 conversões)
LD in
TOD_TO_tipo (16 conversões) “TIME_OF_DAY” DATE_TO_tipo (16 conversões) DT_TO_tipo (16 conversões) “DATE_AND_TIME”
BECKHOFF New Automation Technology out:=SINT_TO_USINT(in);
SINT_ TO_USINT
ST out out:=INT_TO_USINT(in);
INT_ TO_USINT
ST out out:=DINT_TO_USINT(in);
DINT_ TO_USINT
ST out out:=REAL_TO_USINT(in);
REAL_ TO_USINT
ST out out:=LREAL_TO_USINT(in);
LREAL_ TO_USINT
ST out out:=STRING_TO_USINT(in);
STRING_TO_USINT
ST out out:=TIME_TO_USINT(in);
TIME_ TO_USINT
ST out LD in
out:=TOD_TO_UINT(in);
TOD_ TO_UINT
ST out LD in
out:=DATE_TO_UINT(in);
DATE_TO_UINT
ST out LD in
out:=DT_TO_UINT(in);
DT_TO_UINT
ST out
TRUNC – Truncar variável
LD in TRUNC ST out
out:=TRUNC(in);
VÁRIAS INDEXOF – index interno do POU
IL LD in INDEXOF ST out
ST out:=INDEXOF(in);
SIZEOF – nº de “bytes” da variável
LD in SIZEOF ST out
out:=SIZEOF(in);
ADR – endereço absoluto da variável ^ – indicação de ponteiro BITADR – endereço do bit na variável
BRESIMAR
LD
pt:POINTER TO INT var_int1:INT; var_int2:INT;
LD in
pt:=ADR(var_int1); var_int2:=pt^; out:=BITADR(in);
BITADR
ST out
Anexo A – 6 de 9
TWINCAT PLC – Resumo de Instruções
BECKHOFF New Automation Technology
CAL – chamada de uma função bloco
2 – RESUMO DAS FUNÇÕES BLOCO “STANDARD” BIESTAVEL RS – Biestavel com RESET prioritário
SR – Biestavel com SET prioritário
SEMA – Função semáforo
”TRIGGER” F_TRIG – Accionamento pelo flanco descendente R_TRIG – Accionamento pelo flanco ascendente
TEMPORIZADORES TOF – Temporizado ao repouso
IL CAL rs1 (SET := in1, RESET1 := in2) LD rs1.Q1 ST out1 LD in1 ST sr1.SET1 CAL sr1 (RESET:=in2) LD rs1.Q1 ST out1 CAL sema1 (CLAIM:=in1, RELEASE:=in 2, BUSY=>out1)
ST rs1(SET:=in1 , RESET1:=in2 , Q1=> out1);
IL CAL ftrig1 (CLK := in1)
ST ftrig1(CLK:=in1 , Q=>out1 );
LD ftrig1.Q ST out1 CAL rtrig1 (CLK := in1)
LD
sr1(SET1:=in1 , RESET:=in2 , Q1=> out1);
sema1(CLAIM:=in1,RESET:=in 2,BUSY=>out1);
LD
rtrig1(CLK:=in1 , Q=>out1 );
LD rtrig1.Q ST out1 IL CAL tof1 (IN := in1 , PT := T#2s , Q=>out1 , ET=>tempor)
ST tof1(IN:=in1 , PT:=T#2s , Q=>out1 , ET=>tempor );
LD
LD tof1.Q ST out1 LD tof1.ET ST tempor TON – Temporizado ao trabalho
BRESIMAR
CAL ton1 (IN := in1 , PT := T#4s , Q=>out1 , ET=>tempor)
ton1(IN:=in1 , PT:=T#4s , Q=>out1 , ET=>tempor );
Anexo A – 7 de 9
TWINCAT PLC – Resumo de Instruções TP – Temporizado ao trabalho por impulso
BECKHOFF New Automation Technology
CAL tp1 (IN := in1, PT:=T#6000ms )
tp1(IN:=in1, PT:=T#6s );
LD tp1.Q ST out1
tempor:=tp1.ET;
out1:=tp1.Q;
LD tp1.ET ST tempor CONTADORES CTD – Contador decrescente
IL CAL tof1 (IN := in1 , PT := T#2s , Q=>out1 , ET=>tempor)
ST tof1(IN:=in1 , PT:=T#2s , Q=>out1 , ET=>tempor );
LD
LD tof1.Q ST out1 LD tof1.ET ST tempor CTU – Contador crescente
CAL ton1 (IN := in1 , PT := T#4s , Q=>out1 , ET=>tempor)
ton1(IN:=in1 , PT:=T#4s , Q=>out1 , ET=>tempor );
CTUD – Contador crescente / decrescente
CAL tp1 (IN := in1, PT:=T#6000ms )
tp1(IN:=in1, PT:=T#6s );
LD tp1.Q ST out1
tempor:=tp1.ET;
out1:=tp1.Q;
LD tp1.ET ST tempor
3 – RESUMO DAS FUNÇÕES “STANDARD” BIESTAVEL CONCAT – Combina 2 “strings” .
IL LD ‘S.’ CONCAT ‘WILLI’ ST Var1 LD ‘SUXYSI’ DELETE 2,2 ST Var1
ST (* Resultado é ‘S.WILLI’ *) Var1:=CONCAT(‘S.’,‘WILLI’);
FIND – Função de procura de uma parte (frase) dentro de um STRING .
LD ‘SUXYSI’ FIND ‘XY’ ST Var1
(* Resultado é 3 *) Var1: = FIND (‘SUXYSI’ , ‘XY’ );
INSERT – Função de procura de uma parte (frase) dentro de um STRING .
LD ‘SUSI’ INSERT ‘XY’,2 ST Var1
(* Resultado é ‘SUXYSI’ *) Var1: = INSERT (‘SUSI’ , ‘XY’ , 2) ;
DELETE – Apaga uma parte de um STRING a partir de uma dada posição .
BRESIMAR
LD
(* Resultado é ‘SYSI’ *) Var1: = DELETE (‘SUXYSI’ , 2 ,2);
Anexo A – 8 de 9
TWINCAT PLC – Resumo de Instruções
BECKHOFF New Automation Technology
LEFT – Selecciona um nº caracteres de um STRING a começar pela esquerda .
LD ‘BRESIMAR’ LEFT 2 ST Var1
(* Resultado é ‘BR’ *) Var1: = LEFT (‘BRESIMAR’ , 2) ;
LEN – Calcula o tamanho de um STRING (nº de caracteres) .
LD ‘BRESIMAR’ LEN ST Var1
(* Resultado é 8 *) Var1: = LEN (‘BRESIMAR’ ) ;
MID – Selecciona um nº caracteres de um STRING a partir de uma dada posição .
LD ‘BRESIMAR’ MID 2 , 3 ST Var1
(* Resultado é ‘ES’ *) Var1: = MID (‘BRESIMAR’ , 2 , 3) ;
REPLACE – Cola um STRING a partir de uma dada posição de um dado STRING e eliminando um nº de caracteres definidos .
LD ‘BRESIMAR’ REPLACE ‘ASA’ , 2, 3 ST Var1
(* Resultado é ‘BASAIMAR’ *) Var1: = REPLACE (‘BRESIMAR’ , ‘ASA’ , 2 , 3) ;
RIGTH – Selecciona um nº caracteres de um STRING a começar pela direita .
LD ‘BRESIMAR’ RIGTH 3 ST Var1
(* Resultado é ‘MAR’ *) Var1: = RIGTH (‘BRESIMAR’ , 3) ;
BRESIMAR
Anexo A – 9 de 9
TWINCAT PLC – Lista de erros
BECKHOFF New Automation Technology
Anexo B – LISTA DE ERROS DE COMPILAÇÃO DE PROGRAMA 1 – ERROS DE COMPILAÇÃO
BRESIMAR
Anexo B – 1 de 18
TWINCAT PLC – Lista de erros
BRESIMAR
BECKHOFF New Automation Technology
Anexo B – 2 de 18
TWINCAT PLC – Lista de erros
BECKHOFF New Automation Technology
1 – ERROS DE COMPILAÇÃO Neste capitulo encontrará as mensagens de erro ( em “italics” ) e as suas possíveis causas . Para uma melhor interpretação e como o software TwinCAT é o usado a versão inglesa , optamos em deixar a tabela na mesma língua . 1.1 - CHAMADAS DE ATENÇÃO (“Warnings”) Nº men.
Mensagem de atenção
1100
Unknown function '' in library.
1101
Unresolved symbol ''.
1102
Invalid interface for symbol ''.
1103
The constant '' at code address '' overwrites a 16K page boundary! Task '%s', call of '% Access variables in the parameter list are not updated File not found ''
1200
1300 1301
1302
1400 1401 1500 1501
1502
Analyze-Library not found! Code for analyzation will not be generated. New externally referenced functions inserted. Online Change is therefore no longer possible! Unknown Pragma '' is ignored! The struct '' does not contain any elements. Expression contains no assignment. No code was generated. String constant passed as 'VAR_IN_OUT': '' must not be overwritten! Variable '' has the same name as a POU. The POU will not be called!
Possível causa An external library is used. Please check, whether all functions, which are defined in the .hex file, are also defined in the .lib file. The code generator expects a POU with the name . It is not defined in the project. Define a function/program with this name. The code generator expects a function with the name and exactly one scalar input, or a program with the name and no input or output. A string constant exceeds the 16K page boundary. The system cannot handle this. It depends on the runtime system whether the problem could be avoided by an entry in the target file. Please contact the PLC manufacturer. Variables, which are only used at a function block call in the task configuration, will not be listed in the cross reference list. The file, to which the global variable object is pointing, does not exist. Please check the path. The analyze function is used, but the library analyzation.lib is missing. Add the in the library manager. Since the last download you have linked a library containing functions which are not yet referenced in the runtime system. For this reason you have to download the complete project. This pragma is not supported by the compiler. See keyword ‘pragma’ for supported directives. The structure with name does not contain any elements. But Variables of this type will use 1 Byte of memory. The result of this expression is not used. For this reason there is no code generated for the whole expression. The constant may not be written within the POU, because there no size check is possible. A variable is used, which has the same name Example: PROGRAM a ... VAR_GLOBAL a: INT; END_VAR ... a; (* Not POU a is called but variable a is loaded.. *)
BRESIMAR
Anexo B – 3 de 18
TWINCAT PLC – Lista de erros 1503 1504
1505 1506
1600 1700 1800
1801 1900 1901
1902 1903
The POU ‘’ has no outputs. Box result is set to 'TRUE'. ’ (‘’): Statement may not be executed due to the evaluation of the logical expression Side effect in ''! Branch is probably not executed ! Variable '%s' has the same name as a local action. The action will not be called! Open DB unclear (generated code may be erroneous). Input box without assignment. (element #): Invalid watchexpression '%s' ' (number): No Input on Expression '' possible POU '' (main routine) is not available in the library Access Variables and Variable Configurations are not saved in a library! '': is no Library for the current machine type! : is no valid Library
BECKHOFF New Automation Technology The Output pin of a POU which has no outputs, is connected in FBD or KOP. The assignment automatically gets the value TRUE. Eventually not all branches of the logic expression will be executed. Example: IF a AND funct(TRUE) THEN If a has is FALSE then funct will not be called. The first input of the POU is FALSE, for this reason the side branch, which may come in at the second input, will not be executed. Rename the variable or the action.
The original Siemens program does not tell, which POU is openend. An input box is used in CFC which has no assignment. For this no code will be generated. The visualization element contains an expression which cannot be monitored. Check variable name and placeholder replacements. In the configuration of the visualization object at field input a composed expression is used. Replace this by a single variable. The Start-POU (z.B. PLC_PRG) will not be available, when the project is used as library. Access variables and variable configuration are not stored in the library. The .obj file of the lib was generated for another device. The file does not have the format requested for the actual target.
1.2 – ERROS DE COMPILAÇÃO Nº erro 3100
3101
3110 3111 3112 3113 3114 3115
Mensagem de erro Code too large. Maximum size: '' Byte (K) Total data too large. Maximum size: '' Byte (K) Error in library file ''. Library '' is too large. Maximum size: 64K Nonrelocatable instruction in library. Library code overwrites function tables. Library uses more than one segment. Unable to assign constant to VAR_IN_OUT. Incompatible data types .
BRESIMAR
Possível causa The maximum program size is exceeded. Reduce project size. Memory is exceeded. Reduce data usage of the application.
The .hex file is not in INTEL Hex format. The .hex file exceeds the set maximum size. The .hex file contains a nonrelocatable instruction. The library code cannot be linked. The ranges for code and function tables are overlapping. The tables and the code in the .hex file use more than one segment. The internal pointer format for string constants cannot get converted to the internal pointer format of VAR_IN_OUT, because the data are set "near" but the string constants are set " huge" or "far". If possible change these target settings.
Anexo B – 4 de 18
TWINCAT PLC – Lista de erros 3120 3121 3122 3130
3131
3132
3150
3160 3161 3162
3163
3200
3201
3202
3203 3204 3205
3206 3207
Current code-segment exceeds 64K. POU too large." A POU may not exceed the size of 64K. Initialisation too large. Maximum size: 64K User-Stack too small: '' DWORD needed, '' DWORD available. User-Stack too small: '' WORD needed, '' WORD available. System-Stack too small: '' WORD needed, '' WORD available. Parameter of function '': Cannot pass the result of a IEC-function as string parameter to a Cfunction. Can't open library file ''. Library '' contains no codesegment Could not resolve reference in Library ''(Symbol '', Class '', Type '') Unknown reference type in Library '' (Symbol '' , Class '' , Type '') "%s (%d): Boolean expression to complex (): A network must not result in more than 512 bytes of code Stack overrun with nested string/array/structure function calls Expression too complex (too many used address registers). A jump exceeds 32k Bytes Internal Error: Too many constant strings" In a POU there at the most 3000 string constants may be used. Function block data exceeds maximal size Array optimization
BRESIMAR
BECKHOFF New Automation Technology The currently generated code is bigger than 64K. Eventually to much initializing code is created. A POU may not exceed the size of 64K. The initialization code for a function or a structure POU may not exceed 64K. The nesting depth of the POU calls is to big. Enter a higher stack size in the target settings or compile build project without option ‚Debug’ (can be set in dialog ‘Project’ ‘Options’ ‘Build’). Please contact the PLC manufacturer.
Please contact the PLC manufacturer.
Use a intermediate variable, to which the result of the IEC function is assigned.
A library is included in the library manager for this project, but the library file does not exist at the given path. A .obj file of a library at least must contain one C function. Insert a dummy function in the .obj file, which is not defined in the .lib file. The .obj file contains a not resolvable reference to another symbol. Please check the settings of the C-Compiler.
The .obj file contains a reference type, which is not resolvable by the code generator. Please check -the settings of the C-Compiler.
The temporary memory of the target system is insufficient for the size of the expression. Divide up the expression into several partial expressions thereby using assignments to intermediate variables. Internal jumps can not be resolved. Activate option "Use 16 bit Sprungoffsets" in the 68k target settings. A nested function call CONCAT(x, f(i)) is used. This can lead to data loss. Divide up the call into two expressions. Divide up the assignment in several expressions. Jump distances may not be bigger than 32767 bytes. In a POU there at the most 3000 string constants may be used.
A function block may produce maximum 32767 Bytes of code. The optimization of the array accesses failed because during
Anexo B – 5 de 18
TWINCAT PLC – Lista de erros 3208 3209 3210 3211 3250 3251 3252 3253 3254 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410
Conversion not implemented yet Operator not implemented Function '' not found Max string usage exceeded Real not supported for 8 Bit Controller date of day types are not supported for 8 Bit Controller size of stack exceeds bytes Could not find hex file: '' Call to external library function could not be resolved. An error occurred during import of Access variables An error occurred during import of variable configuration An error occurred during import of global variables Could not import An error occurred during import of task configuration An error occurred during import of PLC configuration Two steps with the name '' not found Successor step '' not found No successional transition for step ‘<´name>'
BECKHOFF New Automation Technology index calculation a function has been called. A conversion function is used, which is not implemented for the actual code generator. A operator is used, which is not implemented for this data type and the actual code generator. MIN(string1,string2). A function is called, which is not available in the project. A variable of type string can be used in one expression 10 times at the most. The target is currently not supported. The target is currently not supported. The target is currently not supported. The target is currently not supported. The target is currently not supported. The .exp file contains an incorrect access variables section. The .exp file contains an incorrect configuration variables section. The .exp file contains an incorrect global variables section. The section for object in the .exp file is not correct. The section for the task configuration the .exp file is not correct. The section for the PLC configuration in the .exp file is not correct. The section for the SFC POU in the .exp file contains two steps with equal names. Rename one of the steps in the export file. The step is missing in the .exp file. The step is missing in the .exp file. In the .exp file a transition is missing, which requires step as preceeding step.
No successional step for transition '' Step '' not reachable from initial step
In the .exp file a step is missing which requires the transition as preceeding condition. In the .exp file the connection between step and the initial step is missing.
3450
PDO'': Missing COB-Id!
3451
Error during load: EDSFile '' could not be found, but is referenced in hardware configuration! The module '' couldn't be created!
Click on the button ‚Properties’ in the PLC configuration dialog for the module and enter a COB ID for the PDO . Eventually the device file needed for the CAN configuration is not in the correct directory. Check the directory setting for configuration files in ‚Project' 'Options' 'Directories'.
3411
3452 3453
The channel '' couldn't be created!
3454
The address ''
BRESIMAR
The device file for module does not fit to the current configuration. Eventually it has been modified since the configuration has been set up or it is corrupted. The device file for channel does not fit to the current configuration. Eventually it has been modified since the configuration has been set up or it is corrupted. Option 'Check for overlapping addresses' is activated in the
Anexo B – 6 de 18
TWINCAT PLC – Lista de erros points to an used memory! 3455
3456 3457 3500 3501 3502 3503 3504 3505 3506 3507
3550 3551 3552 3553 3554
3555 3600 3601 3610 3611 3612
Error during load: GSDFile '' could not be found, but is referenced in hardware configuration! The profibus device '' couldn't be created! Error in module description! No 'VAR_CONFIG' for '' No address in 'VAR_CONFIG' for ''. Wrong data type for '' in 'VAR_CONFIG
BECKHOFF New Automation Technology dialog ‚Settings’ of the PLC configuration and an overlap has been detected. Regard, that the area check is based on the size which results of the data types of the modules, the size which is given by the entry ‚size’ in the configuration file. Eventually the device file required by the Profibus configuration is not in the correct directory. . Check the directory setting for configuration files in ‚Project' 'Options' 'Directories'. The device file for module does not fit to the current configuration. Eventually it has been modified since the configuration has been set up or it is corrupted. Please check the device file of this module. Insert a declaration for this variable in the global variable list which contains the 'Variable_Configuration'. Assign an address to this variable in the global variable list which contains the 'Variable_Configuration'.
In the global variables list which contains the‚ ‘Variable_Configuration’ the variable is declared with a different data type than in the POU. In the global variables list which contains the‚ Wrong data type for '' in 'VAR_CONFIG' ’Variable_Configuration’ the variable is declared with a different address than in the POU. A variable of the ‚Variable_Configuration’ is declared with Initial values are not address and initial value. But an initial value can only be supported for defined for input variables without address assignment. 'VAR_CONFIG The Variable_Configuration contains a nonexisting variable. '’is no valid instance path In the global variable list for Access Variables the access Access path expected path for a variable is not correct. Correct: :'': The global variable list for Access Variables contains an No address address assignment for a variable. This is not allowed. Valid specification for variable definition: :'': 'VAR_ACCESS' variables There are two tasks are defined with an identic same name. Duplicate definition of Rename one of them. identifier '' Insert a program call or delete task. The task '' must contain at least one program call There is an event variable set in the ‘Single’ field of the task Event variable properties dialog which is not declared globally in the project. '' in task '%s' Use another variable or define the variable globally. not defined Use a variable of type BOOL as event variable in the ‘Single’ "Event variable field of the task properties dialog. '' in task '%s' must be of type 'BOOL' In the field ‚Program call’ a function or a not defined POU is Task entry '' entered. Enter a valid program name. must be a program or global function block instance In the field ‚Append program call’ there are parameters used The task entry which do not comply with the declaration of the program '' contains POU. invalid parameters Use command ‚Rebuild all’. If nevertheless you get the error Implicit variables not message again please contact the PLC manufacturer. found! The given variable is declared in the project, although it is is a reserved reserved for the codegenerator. Rename the variable. variable name The given feature is not supported by the current version of '' not supported the programming system. There is an invalid directory given in the ‚Project’ ‚Options’ The given compile ‚Directories’ for the Compile files. directory '' is invalid Too many POUs and data types are used in the project. Maximum number of Modify the maximum number of POUs in the Target POUs () Settings / Memory Layout. exceeded! Compile is aborted.
BRESIMAR
Anexo B – 7 de 18
TWINCAT PLC – Lista de erros 3613 3614
3615 3616 3617 3618 3700 3701
Build canceled Project must contain a POU named '' (main routine) or a task configuration (main routine) must be of type program Programs musn't be implemented in external libraries Out of memory BitAccess not supported in current code generator! POU with name ‘' is already in library '' Name used in interface is not identical with POU Name
3702
Overflow of identifier list
3703
Duplicate definition of identifier '' data recursion: -> > .. -> Address expected after 'AT' Only 'VAR' and 'VAR_GLOBAL' can be located to addresses Only 'BOOL' variables allowed on bit addresses Invalid type '' at address: ''
3905 3720 3721 3722 3729
3740 3741 3742 3743 3744
3745 3746 3747 3748 3749
Invalid type: '' Expecting type specification Enumeration value expected Integer number expected Enum constant '' already defined.
Subranges are only allowed on Integers! Subrange '' is not compatible with Type '