Curso de Autómatos Programáveis
2
Índice
–
Deslocamento de Dados
–
Introdução aos Sistemas Numéricos
–
Instruções Aritméticas
–
Cartas Analógicas (Entradas e Saídas)
–
Instruções Especiais (PID, PIDAT)
–
Endereçamento Indirecto
–
Programação por Blocos de Função
–
SFC
4
SFT(10) controla-se mediante três condições de execução I, P e R.
SFT
Quando há
uma transição ascendente na entrada de deslocamento (P),
todos os bits do registo se deslocam uma posição, para a esquerda,
perdendo o bit da esquerda.
-
O mesmo canal pode designar-se para St
e E para criar um registo de
deslocamento de 16 bits (ou seja, um canal).
-
Quando a condição de execução R se coloca a ON, todos os bits no registo
de deslocamento ficarão a OFF e o registo não operará
até
que R fique OFF
de novo.
8
Tipos de Dados
•
O modo natural de representar os dados num Sistema Decimal (Números de 0 a
9)
•
Existem outros sistemas de Numeração:
•
Binário
•
BCD (Binário Codificado Decimal)
•
Hexadecimal
•
Vírgula flutuante
10
Tipos de dados
SISTEMAS DE NUMERAÇÃO
•
EM GERAL, QUANDO UMA QUANTIDADE (Nª
INTEIRO) SE REPRESENTA MEDIANTE UM SISTEMA
DE NUMERAÇÃO DE BASE B, SIGNIFICA QUE :
N
B
N-1
N
N-1
1
1
0
0
N = X B + X B + ... + X B + X B
Tipos de dados
Bin
Bin
á
á
rio (Base 2):
rio (Base 2):
1 0 1 1 1 0 1 0
Equivalente em Decimal:
Equivalente em Decimal:
1 0 1 1 1 0 1 0 27 26 25 24 23 22 21 20x
x
12
Tipos de dados
• Converter para decimal o seguinte número Binário:
1 1 0 0 0 0 1 0 27 26 25 24 23 22 21 20
x
x
2
7
+
+
2
6
+
+
0
+
+
0
+
+
0
+
+
0
+
+
2
1
+
+
0
=
=
EXEMPLO
EXEMPLO
194
Tipos de dados
EXEMPLO
EXEMPLO
• Converter para Binário o seguinte número Decimal:
194
194
97
97
0
0
2
2
48
48
1
1
2
2
24
24
0
0
2
2
12
12
0
0
2
2
6
6
0
0
2
2
3
3
0
0
2
2
2
2
1 1 0 0 0 0 1 01
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
14
Tipos de Dados
–
CÓDIGO MEDIANTE O QUAL CADA NÚMERO DO SISTEMA
DECIMAL (0..15) SE REPRESENTA EM BINÁRIO (0,1)
UTILIZANDO A PARTIR DO 9, AS LETRAS (A…F)
–
A CONVERSÃO DIRECTA É
A SEGUINTE…
CÓDIGO HEXADECIMAL
Tipos de Dados
CÓDIGO HEXADECIMAL
DECIMAL BINÁRIO HEXADECIMAL
0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B
16
Tipos de Dados
CONVERTER UM NÚMERO BINÁRIO PARA
HEXADECIMAL
BINÁRIO: 0010010011101111
DIVIDIR EM GRUPOS DE QUATRO DADOS BINÁRIOS
0010
0100
1110
1111
Tipos de Dados
CÓDIGO BCD
– CÓDIGO MEDIANTE O QUAL CADA NÚMERO DO SISTEMA DECIMAL (0..9) SE REPRESENTA EM BINÁRIO (0,1).
– A CONVERSÃO DIRECTA ÉA SEGUINTE :
DECIMAL BINÁRIO 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101
18
Tipos de Dados
NÚMEROS EM VÍRGULA FLUTUANTE
Parte Decimal
Expoente
...
31 30 23 22 21 ………... 2 1 0
(-1)
sinal
·2
expoente
-127
·(1+
Parte Decimal
·2
-23
)
Sinal
Sinal (s)
⇒ 1: negativo , 0: positivo (bit 31)
–
Parte decimal (M)
⇒ A parte decimal inclui 23 bits (bit 0.. 22).
Tipos de Dados
Números em VÍRGULA FLUTUANTE
Expressam números reais em 32 bits conforme o standard IEEE754:
•
(-1)
sinal·2
expoente-127·(1+
Parte Decimal
·2
-23)
•
1#10000000#11000000000000000000000
•
Sinal: (-1)
1= -1
•
Expoente: 2
128-127=2
1=2
20
Tipos de Dados
Números em VÍRGULA FLUTUANTE
Vantagens:
•
Permite expressar números reais
sem especificar o nº de posições
inteiras e decimais
•
Maior versatilidade na representação
de números reais
Tipos de Dados
A = 41 = 0100 0001
5 = 35 = 0011 0101
CÓDIGO ASCII
•
CÓDIGO INTERNACIONAL CUJAS SIGLAS SIGNIFICAM
AMERICAN STANDARD CODE INFORMATION
INTERCHANGE.
•
HOJE É
UTILIZADO EM COMUNICAÇÕES E TROCA DE
DADOS.
•
NESTE CÓDIGO UTILIZAM-SE 8 BIT’s
PARA A
REPRESENTAÇÃO DE CARACTERES.
22
Tipos de Dados
•
O código ASCII é
um
standard americano
para a troca de
informação.
•
Existem distintas
variedades de código
ASCII para distintas
linguagens, assim como
o ASCII Extended
em
que o 8º
bit é
utilizado.
Funções de operação em binário ou BCD
26
Funções de Operação em Binário ou BCD
Funções de Operação em Binário ou BCD
Símbolos para introduzir Constantes numéricas:
& - formato decimal
Funções de operação em binário - Soma
28
Funções de operação em binário - Subtracção
Funções de operação em binário - Multiplicação
30
Funções de operação em binário - Divisão
Funções de incrementar/decrementar
32
Funções de conversão
Funções de operação “Vírgula Flutuante”
Funções de operação “Vírgula Flutuante”
•
As famílias CS1 e CJ1 têm um potente leque de instruções
matemáticas em Vírgula Flutuante.
•
As instruções dividem-se em dois grandes grupos:
•
Simples (operandos com 32 bits)
•
Dupla precisão (operandos com 64 bits)
•
Estão disponíveis instruções de conversão, que facilitam a
programação.
•
Conversão:
• Vírgula Flutuante para binário (16 bits): FIX(450)
34
Funções de operação “Vírgula Flutuante”
Funções de operação “Vírgula Flutuante”
•
As instruções disponíveis são:
• Adição: +F(454)
• Subtracção: -F(455)
• Multiplicação: *F(456)
• Divisão: /F(457)
• Graus para Radianos: RAD(458)
• Radianos para Graus: DEG(459)
• Seno: SIN(460)
• Co-seno: COS(461)
• Tangente: TAN(462)
• Arco Seno: ASIN(463)
• Arco Co-seno: ACOS(464)
• Arco Tangente: ATAN(465)
• Raiz Quadrada: SQRT(466) • Exponente: EXP(467) • Logaritmo: LOG(468) • Potência de Expoente: PWR(840)
Funções de Comparação
( =F , <>F , <F , <=F , >F , >=F)
Existem as mesmas instruções
para dupla precisão (operados
a 64 bits).
38
Introdução às Cartas Analógicas
•
Sinais analógicos e digitais
•
Tipos de cartas analógicas para CJ
•
CJ1W-AD041
•
CJ1W-DA021
–
Características
–
Configuração
Introdução às cartas analógicas
•
Sinais analógicos e digitais
–
Diferença entre ambos
Sinal analógico Æ valores infinitos
Sinal digital Æ determinados valores
definidos por uma resolução
de conversão.
–
Resolução:
Intervalos em que se divide um sinal analógico para
40
Introdução às cartas analógicas
•
Relação de conversão
Relação que existe entre os sinais analógicos e os sinais digitais
Analógico Æ Digital: Valor hexadecimal de um canal associado ao valor
analógico de entrada.
Digital Æ Analógico: Valor analógico de saída associado ao valor hexadecimal
de um canal.Introdução às cartas analógicas
• Tipos de cartas analógicas para o CJ
– CJ1W-AD041 / 81 Æ 4 / 8 Entradas analógicas (Utilizaremos Carta 4 Entradas)
– CJ1W-DA021 / 41 / 81 Æ 2 / 4 / 8 Saídas analógicas (Utilizaremos Carta 2 Saídas)
– CJ1W-MAD42 Æ 4 Entradas e 2 saídas analógicas
Todas com as seguintes gamas configuráveis:
42
CJ1W-AD041 -> Características
·
4 Entradas analógicas configuráveis da seguinte forma:
1 a 5 V
0 a 10 V
-10 a 10 V
0 a 5 V
4 a 20 mA
·
Resolução de 4000 / 8000 pontos (12 bits / 13 bits)
·
Tempo de conversão é
de: 1ms / 0,5ms máx. por canal
• Funções dos sinais de entrada:Valor médio (sobre n amostras) Retenção do valor máximo
CJ1W-DA021 -> Características
·
2 Saídas analógicas configuráveis da seguinte forma:
1 a 5 V
0 a 10 V
-10 a 10 V
0 a 5 V
4 a 20 mA
·
Resolução de 4000 / 8000 pontos (12 bits / 13 bits)
·
Tempo de conversão é
de: 1ms / 0,5ms máx. por canal
• Funções dos sinais de entrada:Valor médio (sobre n amostras) Retenção do valor máximo
44
– Switch Æ entradas em tensão ou corrente – Nº de unidade Æ Parte Frontal da carta
Não deve coincidir com o de outra carta especial (por exemplo outra carta de entradas ou saídas analógica)
– Efectuar as ligações que se vão utilizar – Alimentar o PLC
– Utilizar a tabela E/S do CX-Programmer para configurar a carta
– …….
46
Cartas Analógicas -> Configuração
1º Entrar em Comunicação com o Autómato 2º Colocar Autómato em Modo Programação 3º
48
50
Instruções de Escalonamento
•
SCL –
Função Escala, Inteiros sem sinal BIN a BCD
SCL –
Função de Escala BIN a BCD
•
Executa uma função de escala que converte de forma linear um valor
de 4 dígitos hexadecimal (BIN) a um valor BCD de 4 dígitos. Converte
os dados para uma escala com um máximo de 9999, e mínimo de 0.
S -> Canal fonte
P1 -> Primeiro canal de parâmetros R -> Canal destino
52
SCL –
Função de Escala BIN a BCD
Primeiro canal de parâmetros P1
•
A partir deste canal introduz-se 4 pontos que vão definir a função
linear.
•
P1 Æ Ponto Ad em BCD (Dado 1 convertido).
•
P1+1 Æ Ponto As em Hex (Dado 1 antes da conversão).
•
P1+2 Æ Ponto Bd em BCD (Dado 2 convertido).
SCL2 –
Escala BIN a BCD
•
Realiza uma função de escala e converte linearmente um valor
hexadecimal com sinal de 4 dígitos a um valor BCD de 4 dígitos.
Converte os dados inteiros com sinal para uma escala de valor
máximo 9999 e mínimo -9999.
S -> Canal fonte
P1 -> Primeiro canal de parâmetros R -> Canal do resultado
54
SCL2 –
Escala BIN a BCD
Primeiro canal de parâmetros P1
•
Neste canal introduzimos o ponto de intercepção com o eixo X e o declive da
recta (incrementos de x e y).
•
P1 Æ Intercepção com o eixo X em Hex com sinal.
•
P1+1 Æ Intervalo de X em Hex com sinal
Instruções especiais
•
PID –
Controlo PID
56
PIDAT –
Controlo PID com Auto-tuning
• Efectua um controlo PID de uma determinada variável de entrada, obtendo-se a saída correspondente
PIDAT –
Controlo PID com Auto-tuning
•
Canais de controlo
Nestes 9 canais são estabelecidos os parâmetros PID, tempos de amostragem e
número de bits de entrada e saída.
58
Objectivo
Pretende-se controlar a frequência da Bomba mediante um variador de velocidade. O Sensor Ultra-sónico fornece o nível do depósito (saída 0 a 10V).
Quando o nível de água no depósito for superior a 200 litros, a bomba recebe ordem de marcha. A frequência mínima da Bomba é de 10Hz e a máxima é de 50Hz.
A frequência da bomba vai ser proporcional ao nível de água no depósito. A proporcionalidade é a seguinte: - 200 litros = 10Hz - 1000 litros = 50Hz Sensor ultra-sónico Bomba Variador de Frequência Depósito
Implementação Passo-a-Passo
Configurar a entrada analógica
1
¾ Sabemos que o sinal de entrada é em tensão e com os limites de 0 a 10V.
1- Colocar o Switch correspondente à entrada
analógica 1 na posição OFF (entrada em tensão). 2 - Efectuar as ligações físicas
SENSOR
+
-60 Implementação Passo-a-Passo
Configurar a entrada analógica
1
3 – Parametrizar o número de Carta Especial (ex: 00)
4 – Ligar o PLC e colocar em modo PROGRAM. Criar a tabela de Entradas/Saídas.
5 – Parametrizar o módulo (Zona D correspondente ou utilizar a Tabela de E/S do CX-Programmer)
Carta Especial nº 00: m = D20000 + (a x 100) onde a = 00
então m = D20000 + (00 x 100) m = 20000
Implementação Passo-a-Passo
Configurar a entrada analógica
1 Entradas Utilizadas: - Entrada 1, então: D(m) = 1 D20000 = 1 Limites do sinal: - 0 a 10V, então: D(m+1) = 01
62 Implementação Passo-a-Passo
Configurar a entrada analógica
1
6 – Desligar e voltar a ligar o PLC, para que as parametrizações sejam activadas. 7 – Colocar o PLC em modo MONITOR e verificar o funcionamento
da Entrada Analógica 1. - Canal CIO 2001 n = CIO2000 + (a x 10) onde a = 00 então n = CIO2000 + (00 x 10) n = 2000
Implementação Passo-a-Passo
Configurar a saída analógica
2
1 - Efectuar as ligações físicas
¾ Sabemos que o sinal de saída é em tensão e com os limites de 0 a 10V.
VARIADOR
+
-64 Implementação Passo-a-Passo
Configurar a saída analógica
2
2 – Parametrizar o número de Carta Especial (ex: 01)
3 – Ligar o PLC e colocar em modo PROGRAM. Criar a tabela de Entradas/Saídas.
4 – Parametrizar o módulo (Zona D correspondente ou utilizar a Tabela de E/S do CX-Programmer) Carta Especial nº 01: m = D20000 + (a x 100) onde a = 01 então m = D20000 + (01 x 100) m = 20100
Implementação Passo-a-Passo
Configurar a saída analógica
2 Saídas Utilizadas: - Saída 1, então: D(m) = 1 D20100 = 1 Limites do sinal: - 0 a 10V, então: D(m+1) = 01 D20101 = 01
66 Implementação Passo-a-Passo
Configurar a saída analógica
2
5 – Desligar e voltar a ligar o PLC, para que as parametrizações sejam activadas. 6 – Colocar o PLC em modo MONITOR e verificar o funcionamento
da Saída Analógica 1. - Canal CIO 2011 n = CIO2000 + (a x 10) onde a = 01 então n = CIO2000 + (01 x 10) n = 2010
Implementação Passo-a-Passo
Configurar a saída analógica
2
NOTA: Para que a saída fique activa, é necessário activar o bit correspondente de conversão habilita. CIO 2010.00
Ex: Colocar o valor 0FA0 no canal CIO 2011 e verificar se a saída tem 10V.
68 Implementação Passo-a-Passo
Programação Entrada Analógica
3
Vamos criar uma conversão do valor analógico (Hex para BCD) de forma a que represente o valor do nível em litros.
O Sensor Ultra-sónico fornece uma saída em tensão de 0 a 10V. Em Hexadecimal vai corresponder: 0V – 0(Hex) 10V – 0FA0(Hex)
Implementação Passo-a-Passo
Programação Entrada Analógica
3
O sensor foi configurado para ter a seguinte correspondência: 0V - 0 Litros
10V - 1000 Litros
então, podemos dizer que: 0 Litros – 0(Hex)
1000 Litros – 0FA0(Hex)
Necessitamos de efectuar uma
BCD 1000
70 Implementação Passo-a-Passo
Programação Entrada Analógica
3
Existe uma função que faz essa conversão proporcional: SCL
BCD HEX B D A C SCL(194) IN (Hex) OUT (BCD) Parâmetros P = A P+1 = B P+2 = C P+3 = D
Implementação Passo-a-Passo
Programação Entrada Analógica
3 No nosso exemplo: SCL(194) 2001 D100 D500 D500 = 0000 D501 = 0000 D502 = 1000 D503 = 0FA0 BCD 1000
Efectuar o Ladder correspondente e verificar o valor do D100.
Deve ser:
72 Implementação Passo-a-Passo
Programação Saída Analógica
4
Sabemos que o variador de Velocidade vai receber um valor em tensão de 0 a 10V. Este sinal é proveniente do PLC e vai fornecer a frequência de referência do variador.
0V = 0Hz 10V = 50Hz
O nosso objectivo é criar o controlo proporcional seguinte: 200 Litros = 10Hz
1000 Litros = 50Hz
O valor em litros temos disponível no D100. Agora necessitamos de criar uma conversão proporcional de BCD (200 a 1000) para HEX ( ? A 0Fa0).
Implementação Passo-a-Passo
Programação Saída Analógica
4
Se 10V (0FA0 Hex) = 50Hz quanto é 10Hz?
0FA0 50
X 10 0FA0 (hex) = 4000 (Dec) X = (4000 x 10) / 50 X = 800 (Dec) = 320 (hex)
Necessitamos de efectuar uma correspondência proporcional do valor em BCD (200 a 1000)
HEX 0FA0
74 Implementação Passo-a-Passo
Programação Saída Analógica
4
Existe uma função que faz essa conversão proporcional: SCL3
SCL3(487) IN (BCD) OUT (HEX) Parâmetros P = Offset (Hex) P+1 = Delta X (BCD) P+2 = Delta Y (Hex) P+3 = Max. (Hex) P+4 = Min. (Hex) HEX BCD 200 1000 0320 0FA0 X Y
Implementação Passo-a-Passo
Programação Saída Analógica
4 No nosso exemplo: SCL3(487) D100 2011 D510 D510 = 0000 D511 = 0800 D512 = 0C80 D513 = 0FA0 D514 = 0320 HEX BCD 0320 0FA0 Y
76 Implementação Passo-a-Passo
Programação Saída Analógica
4 D510 = 0000 D511 = 0800 D512 = 0C80 D513 = 0FA0 D514 = 0320 HEX BCD 200 1000 0320 0FA0 X Y Delta X = 1000 - 200 Delta Y = 0FA0 - 0320 Máximo = 50Hz (10V) Mínimo = 10Hz (2V) 0FA0 10V 0320 X 0FA0 (hex) = 4000 (dec)
Implementação Passo-a-Passo
Programação Saída Analógica
4
Efectuar o Ladder correspondente e verificar o funcionamento:
NOTA: Para que a saída fique activa, é necessário activar o bit correspondente de conversão habilita. CIO 2010.00
Verificar que quando o valor do nível é inferior a 200 Litros a saída tem um valor de 2 Volt e vai aumentando proporcionalmente até atingir os 10 Volt aos 1000 Litros.
78 Implementação Passo-a-Passo
Controlo da Bomba
5
O controlo da frequência de referência já está implementado. Falta agora criar a condição de colocação em marcha da bomba (RUN do variador de frequência) quando o nível for superior a 200 Litros.
Para isso basta efectuar a seguinte lógica, tendo em conta que a saída 60.00 esta ligada à entrada de RUN do variador:
Endereçamento BCD (*) ou Binário (@)
Endereçamento BCD (*) ou Binário (@)
•
O endereçamento indirecto, pode ser efectuado em BCD ou em
binário
•
O símbolo * significa que o endereçamento é em BCD
•
O símbolo @ significa que o endereçamento é em binário
•
Quando por necessário endereçar canais com endereço superior
a 9999, é necessário recorrer ao endereçamento indirecto em
binário.
D0 = 10 Se
83
Endereçamento BCD (*) ou Binário (@)
Endereçamento BCD (*) ou Binário (@)
D0 = 10 Se D16 = 1234 entãoEndereçamento BCD (*) ou Binário (@)
Endereçamento BCD (*) ou Binário (@)
•
Pretende-se efectuar um endereçamento indirecto para a área de
memória D32700.
@
Indica que o valor corresponde a um endereço em binário
Programação em Blocos de Funções (FB)
• Vantagens do ST (Texto Estruturado) ao Ladder
• Editor de Blocos de Funções
• Criar um Bloco de Função
• Reutilização
• Monitorização e Edição Online
89
Porquê Blocos de Função?
• Um programa criado com FB’s, esteticamente é melhor, e requer menos tempo de
desenvolvimento.
• Código de programa Reutilizado
Programar unicamente uma vez uma função/processo que se voltem a utilizar
Reutilizar o FB várias vezes
• Melhor vista / apresentação do programa no PLC
O programa é mais fácil de ser interpretado
Redução da extensão do código do programa
Redução de possíveis erros no código do programa
• É possível a programação com blocos de funções caso a versão do CX-programmer seja a partir de V5.0, e as CPU’s da série CS/CJ a partir da versão 3.0. Também se pode programar FB nas séries CP1H/L
91
Texto Estruturado vs Ladder
• Texto Estruturado
– O texto estruturado é uma linguagem de alto nível para fins gerais, para expressar diferentes tipos de comportamento que estão
envolvidos em diferentes tipos de dados.
– É utilizado para cálculos matemáticos complicados.
• Ladder
Blocos de Funções ≠
Diagramas de Blocos de Funções
FB (Function Block):Programa com funcionalidade própria em Texto Estruturado ou Ladder
FBD (Function BlockDiagram): Linguagem Gráfica para Ladder
EN
ENO
Ladder
ou
Texto
Estruturado
93
Definição de um Bloco Função
vs
Instância de um Bloco de Função
Definição de um Bloco de Funções
Instância da definição de um Bloco de Função
Editor da Definição de Blocos de Funções
Editor de
95
Criar um Bloco de Função
1
ou
Criar um Bloco de Função –
Inserir variáveis 1/2
Seleccionar o cabeçalho de FBInserir variáveis de FB:
– Inserir -> FB_Variable
– Botão direito do rato
2
97
Criar um Bloco de Função –
Inserir variáveis 2/2
Introduzir o nomeSeleccionar tipo de dados
Seleccionar tipo:
– Interno
– Entrada
– Saída
– Externo
– Entrada/Saída (apenas CPU’s v4.0)
4
5
Criar um Bloco de Função –
Variáveis como array
Seleccionar uso Interno / AvançadoUso de uma variável array
7.1
99
101
Inserir Parametros
Reutilização Bloco de Função
• Guardar FB para um ficheiro
103
Online
•
É possível editar contactos, bobinas ou instruções.
•
É possível editar os símbolos ou direcções conectadas aos terminais
de entrada e saída de uma chamada de FB.
•
É possível apagar a chamada de FB durante a edição online.
•
É possível adicionar uma nova chamada de um FB se a instância
desse FB já existe.
•
Não é possível apagar uma instância de um FB se existem chamadas a
essa instância.
•
Não é possível adicionar uma nova instância de FB durante a edição
online.
• Seleccionar o PLC
• Seleccionar o nome e a direcção
• Utilizar [i] para o índice da
Monitorização On-line –
Janela de Monitorização
• Monitorização
– Fluxo de alimentação
105
Administrador de Memória –
Atribuição de Memória FB
107
107
Precauções na estrutura do programa
• Não inserir instruções à esquerda da instância
Incorrecto Correcto
Incorrecto Correcto
• Sóuma instância por rede
Blocos de Funções (Especificações)
Número de definições de blocos de funções
Unidades de CPU do CS1
Unidades de CPU do CS1
-
-
H/CJ1
H/CJ1
-
-
H:
H
CPU44H/45H/64H/65H/66H/67H/64H-R/65H-R/66H-R/67H-R CPU42H/43H/63H 1,024 128Unidades de CPU do CJ1M
Unidades de CPU do CJ1M
CJ1M-CPU11/12/13/21/22/23 128Unidades de CPU do CP1H
Unidades de CPU do CP1H
CP1H-XA/X/Y 128Unidades de CPU do CP1L
Unidades de CPU do CP1L
CP1L-M/L 128109
109
Blocos de Funções (Especificações)
Número de instâncias
Unidades de CPU do CS1
Unidades de CPU do CS1
-
-
H/CJ1
H/CJ1
-
-
H:
H
CPU44H/45H/64H/65H/66H/67H/64H-R/65H-R/66H-R/67H-R CPU42H/43H/63H 2,048 256Unidades de CPU do CJ1M
Unidades de CPU do CJ1M
CJ1M-CPU11/12/13/21/22/23 256Unidades de CPU do CP1H
Unidades de CPU do CP1H
CP1H-XA/X/Y 256Unidades de CPU do CP1L
Unidades de CPU do CP1L
CP1L-M/L 256Controladores NSJ
Controladores NSJ
Todos os modelos 2,048Blocos de Funções (Especificações)
Nível de suporte
CX
CX
-
-
Programmer
Programmer
Ver 5.0
Ver 5.0
Não suportada.CX
CX
-
-
Programmer
Programmer
Ver. 6.0 ou superior
Ver. 6.0 ou superior
Suporta até 8 níveis.Número de parâmetros usados em FB
Variáveis de entrada/saída
16Variáveis de entrada
64 Não incluída EN111
111
Programação Estruturada
•
Criar um Bloco de Funções em 7 passos:
1. Considerar se uma FB é necessário e útil
2. Definir as Entradas
3. Definir as Saídas
4. Definir as Variáveis Internas
5. Decidir se utilizar Ladder ou Texto Estruturado
6. Programar o Bloco de Funções (FB)
Blocos de Funções em Texto
Estruturado (ST)
O que é, e para que serve o Structured
Text
(ST)?
Linguagem de alto Nível (similar a
PASCAL)
Linguagem de alto N
Linguagem de alto N
í
í
vel (similar a
vel (similar a
PASCAL)
PASCAL)
Utilizado em controlo industrial
Utilizado em controlo industrial
Utilizado em controlo industrial
Definido pela norma IEC 61131-3
Definido pela norma IEC 61131
115
Elementos de um programa em ST
Parte declarativa Parte declarativa Parte declarativa Parte de execução Parte de execuExpressões
São regras para calcular um valor
São regras para calcular um valor
São regras para calcular um valor
Os tipos podem ser...
booleanas, de tipo real, de tipo
inteiro, etc..
Os tipos podem ser...
Os tipos podem ser...
booleanas, de tipo real, de tipo
booleanas, de tipo real, de tipo
inteiro, etc..
inteiro, etc..
Os operadores podem ser...
Os operadores podem ser...
Os operadores podem ser...
Exemplos
Exemplos
2.0 * 3.1459 * raio
2.0 * 3.1459 * raio
ABS(
ABS( temptemp ) / pressão) / pressão
Valvula1 AND NOT Valvula2
117
Prioridade dos operadores
Opera
Operaççãoão SSíímbolombolo PrioridadePrioridade Parêntesis (expressão) array[índice] 1
Avaliação da Função identificador 2
Exponencial ** 3 Complemento NOT 4 Multiplicação * 5 Divisão / 5 Soma + 6 Subtracção - 6 Comparações <, >, <=, >= 7 Igualdade = 8 Diferença <> 8
AND Booleano & AND 9
XOR Booleano XOR 10
OR Booleano OR 11
Considerar a ordem
Considerar a ordem
de prioridade dos
de prioridade dos
operadores
operadores
Em caso de d
Em caso de d
ú
ú
vidas,
vidas,
colocar parêntesis
A instrução de atribuição
Define o valor da expressão da direita, para a variável da esquerda
Define o valor da expressão da direita, para a vari
Define o valor da expressão da direita, para a vari
á
á
vel da esquerda
vel da esquerda
Ex. C
Ex. Cáálculo lculo compcomp.. comp comp := 2 * := 2 * pipi * r* r R=5, PI=3,14159 R=5, PI=3,14159 comp comp := 2 * := 2 * pipi * r* r Valor actual da Valor actual da vari
variáável...vel...
O operador de atribuição é
:=
O operador de atribui
O operador de atribui
ç
ç
ão
ão
é
é
:=
:=
Importante. Não confundir o operador de atribuição com o de comparação
Importante
Importante
. Não confundir o operador de atribui
. Não confundir o operador de atribui
ç
ç
ão com o de compara
ão com o de compara
ç
ç
ão
ão
119
Delimitadores
Qualquer frase deve acabar sempre
Qualquer frase deve acabar sempre
com um delimitador (
com um delimitador (
;
;
)
)
Não usar um delimitador dentro de uma
Não usar um delimitador dentro de uma
expressão
expressão
(* --- Asignación ---*) a := a AND NOT b; (*--- Seleccción Simple ---*) IF a = TRUE THEN a := a AND b; END_IF; (*--- Selección Simple ---*) IF a = TRUE ; THEN a := a AND b; END_IF;Comentários
Os coment
Os coment
á
á
rios colocam
rios colocam
-
-
se
se
entre parêntesis e asteriscos
entre parêntesis e asteriscos
(
(
*
*
y
y
*
*
)
)
Pode
Pode
-
-
se utilizar qualquer
se utilizar qualquer
caractere
dentro dos
(* --- Atribuição ---*) a := a AND NOT b; (*--- Seleccção Simples ---*) IF a = TRUE THEN a := a AND b; END_IF;
121
Espaços, Tabulações e Separadores
(* --- Atribuição ---*) a := a AND NOT b; (*--- Selecção Simples ---*) IF a = TRUE THEN a := a AND b; END_IF;
•
Pode-se usar qualquer número de
caracteres dentro do código ST.
• Excepções:
•
Palavras reservadas, nomes de
variáveis, caracteres especiais,
constantes.
•
Usá-los sempre entre palavras
reservadas e variáveis.
Maiúsculas e Minúsculas
Uso de mai
Uso de mai
ú
ú
sculas e min
sculas e min
ú
ú
sculas
sculas
é
é
indiferente em qualquer frase
indiferente em qualquer frase
ou nome de vari
ou nome de vari
á
á
vel
vel
(*--- Selecção Simples ---*) if a = true then a := a and b; endif; (*--- Selecção Simples ---*) IF A = TRUE THEN A := A AND B;
123
Caracteres proibidos para os nomes das variáveis
Caracteres que não se podem
Caracteres que não se podem
usar aos nomes dados
usar aos nomes dados
à
à
s
s
vari
vari
á
á
veis:
veis:
!
!
“
“
# $ % &
# $ % &
‘
‘
( )
( )
-
-
= ^
= ^
\
\
| @
| @
[ ] { } ; : + * , < > . / ?
[ ] { } ; : + * , < > . / ?
¿
¿
(*--- Selecção Simples ---*)
if chic@= true then
a := a and b;
endif;
(*--- Selecção Simples ---*)
if chico_a = true then
a := a and b;
Introdução de Constantes
Os valores num
Os valores numééricos, podemricos, podem--se expressar em:se expressar em:
-- Decimal Decimal (sem prefixo)(sem prefixo)
-- Hexadecimal Hexadecimal ( 16# )( 16# )
-- OctalOctal ( 8# )( 8# )
-- BinBinááriorio ( 2# )( 2# )
Em constantes inteiras ou reais, podem-se usar ( _ ) literalmente para formatar, isto melhora a leitura do código.
(*---Selecção Simples ---*)
ifchico_a = true then
a := 10; b := 16#A; c := 8#12; d := 2#1010;
125
Constantes de Texto
•
O número de caracteres numa variável de tipo STRING é de 1 a 255.
•
Uma constante de texto colocam-se entre plicas →
'AAA'.
•
As maiúsculas e minúsculas são discriminadas.
•
Um caractere $ seguido de dois dígitos numéricos são interpretados como um
hexadecimal.
•
$02 → #02 hexadecimal
•
Um caractere $ seguido de uma letra é interpretado como:
$$:
caractere $
(Código ASCII: #24)
$':
plica simples
(Código ASCII: #27)
$L ó $l:
final de linha (LF)
(Código ASCII: #0A)
$N ó $n:
nova linha (CR + LF)
(Código ASCII: #0D0A)
$P ó $p:
final de página (FF)
(Código ASCII: #0C)
$R ó $r:
Terminador (CR)
(Código ASCII: #0D)
$T ó $t:
Tabulação horizontal (Tab) (Código ASCII: #09)
Tipos de dados (I)
S
Síímbolombolo ConteConteúúdodo TamanhoTamanho Intervalo de valoresIntervalo de valores
BOOL Dados de bit 1 0 (falso), 1 (verdadeiro)
INT Inteiro 16 -32.768 a +32.767
DINT Duplo Inteiro 32 −2,147,483,648 a +2,147,483,647 LINT Inteiro Largo 64 −9,223,372,036,854,775,808 a
+9,223,372,036,854,775,807
UINT Inteiro sem Sinal 16 &0 a 65,535
UINT BCD Inteiro sem Sinal BCD WORD ( #0000 a #FFFF ) ou ( &0 a 65,535 ) UDINT Duplo Inteiro sem Sinal 32 &0 a 4,294,967,295
UDINT BCD Duplo Inteiro sem Sinal
BCD
DWORD #00000000 a #FFFFFFFF ou &0 a 4,294,967,295
127
127
Tipos de dados (II)
S
Síímbolombolo ConteConteúúdodo TamanhoTamanho Intervalo de valoresIntervalo de valores
REAL Número Real 32 −3.402823 ×10 38 a −1.175494 × 10−38, 0,
+1.175494 × 10−38 a +3.402823 ×10 38
LREAL Número Real largo 64 −1.79769313486232 × 10308 a
−2.22507385850720 × 10−308 , 0, 2.22507385850720 × 10−308 a 1.79769313486232 × 10308
WORD Dado de 16-bits 16 ( #0000 a #FFFF ) ou ( &0 a 65,535 ) DWORD Dado de 32-bits 32 #00000000 a #FFFFFFFF ou
&0 a 4,294,967,295
LWORD Dado de 64-bits 64 #0000000000000000 a
#FFFFFFFFFFFFFFFF ou &0 a 18,446,744,073,709,551,615
STRING Array de texto Variável De 0 a 255 bytes. FUNCTION
BLOCK
Instância de bloco de funções ---
---CHANNEL Word WORD
Texto estruturado.
•
Funções matemáticas suportadas:
–
Soma (+)
–
Subtracção (-)
–
Multiplicação (*)
–
Divisão (/)
•
Funções de bit suportadas:
–
Bitwise AND (AND ou &)
–
Bitwise OR (OR)
129
129
Operadores
•
Operadores suportados:
–
Parêntesis ( brackets () )
–
Índice de Matriz ( square brackets [ ] )
–
Operador de Atribuição (:=)
–
Operador de Comparação Menor Que (<)
–
Operador de Comparação Menor ou Igual Que (<=)
–
Operador de Comparação Maior Que (>)
–
Operador de Comparação Maior ou Igual Que (>=)
–
Operador de Comparação Igual (=)
Operadores
Símbolo Tipo de operação Tipos de dados suportados pelos operadores. Prioridade 1: alta, 11:baixa
[ ] ( ) Expressão / Tabelas [ índices ] 1 Function
()
Designação de uma função Dependendo da função. 2
** Exponencial REAL, LREAL 3
NOT Complemento BOOL, WORD, DWORD, LWORD 4
* Multiplicação INT, DINT, UINT, UDINT, ULINT, REAL, LREAL 5 / Divisão INT, DINT, LINT, UINT, UDINT, ULINT, REAL,
LREAL
+ - Soma / Subtracção INT, DINT, LINT, UINT, UDINT, ULINT, REAL,
LREAL
6
< > <= >=
Comparações BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, WORD, DWORD, LWORD, REAL, LREAL
131
131
Palavras reservadas.
– TRUE, FALSE
– IF, THEN, ELSE, ELSEIF, END_IF
– DO, WHILE, END_WHILE
– REPEAT, UNTIL, END_REPEAT
– FOR, TO, BY, END_FOR
Tipos de Dados
Símbolo Tipo de dado Nº de bits
BOOL Booleano 1
INT Inteiro (Integer) 16
UINT Inteiro senSinal (Unsigned Integer) 16
DINT Duplo Inteiro (Doble Integer) 32
UDINT Duplo Inteiro sem Sinal (UnsigendDoble Integer) 32
LINT Inteiro Largo (LongInteger) 64
ULINT Inteiro Largo sem Sinal (Unsigned LongInteger) 64
WORD Sequência de bit de 16 bits 16
DWORD Sequência de bit de 32 bits 32 LWORD Sequência de bit de 64 bits 64
133
133
Instruções 1/2
Instru
Instruççõesões FunFunççãoão ExemploExemplo
; Final de instrução END_IF ;
(* *) Comentário (* Comentário *)
:= Atribuição A := B
IF, THEN, ELSE, ELSEIF, END_IF
Condicional simples IFa < b THEN c := a END_IF;
CASE OF, ELSE, END_CASE Condicional composta CASE a OF
1: b := 1; 2: b := 2; ELSE
b := 3; END_CASE;
Instruções 2/2
Instrução Função Exemplo
FOR, TO, BY, DO, END_FOR Loopcom n repetições. FOR d := 1 TO 5
b := d * 2; END_FOR;
WHILE, DO, END_WHILE Loopcom condição inicial. WHILE a < 15 DO
b := b + 3; END_WHILE;
REPEAT, UNTIL, END_REPEAT Loopcom condição final. REPEAT
d := d + 1; UNTIL d < 15 END_REPEAT;
EXIT Sair do processo de um loop. WHILE true
a := a + 1;
135
Cores usadas no código de programação
Palavras reservadas:
Palavras reservadas:
Azul
Azul
Coment
Coment
á
á
rios:
rios:
Verde
Verde
Erros:
Erros:
Rojo
Rojo
Restante:
Restante:
Negro
Negro
A atribui
A atribui
ç
ç
ão das cores, podem ser
ão das cores, podem ser
parametrizadas nas versões mais
parametrizadas nas versões mais
recentes do
Instrução
IF
•
Executa de forma condicional um grupo de instruções,
dependendo do valor de uma expressão.
•
Sintaxe:
IF
expression1
THEN
statement-list1
[
ELSIF
expression2
THEN
statement-list2 ]
[
ELSE
statement-list3 ]
137
137
Instrução
IF
(condição simples)
Sintaxe da declaração:
IF <condition> THEN
<expression_1>;
ELSE
<expression_2>;
END_IF;
Sintaxe da declaração:
IF
<condition>
THEN
<expression_1>;
ELSE
<expression_2>;
END_IF
;
Instrução
IF
(condição simples)
Sintaxe da declaração:
IF <condition_1> THEN
IF <condition_2> THEN
<expression_1>;
ELSE
<expression_2>:
END_IF;
END_IF;
Sintaxe da declaração:
IF
<condition_1>
THEN
IF
<condition_2>
THEN
<expression_1>;
ELSE
<expression_2>:
END_IF
;
END_IF
;
139
139
Instrução
IF
(múltiplas condições)
Sintaxe da declaração:
IF <condition_1> THEN <expression_1>;
ELSIF <condition_2> THEN <expression_2>;
ELSIF <condition_3> THEN <expression_3>;
...
ELSIF <condition_n> THEN <expression_n>;
ELSE
<expression_m>;
END_IF;
Sintaxe da declaração:
IF
<condition_1>
THEN
<expression_1>;
ELSIF
<condition_2>
THEN
<expression_2>;
ELSIF
<condition_3>
THEN
<expression_3>;
...
ELSIF
<condition_n>
THEN
<expression_n>;
ELSE
<expression_m>;
141
141
Instrução
IF
(Exemplos)
IF A>0 AND B>1 THEN
X:=10; Y:=20;
ELSE
X:=0; Y:=0;
END_IF;
IF A>0 AND B>1 THEN
X:=10; Y:=20; ELSE X:=0; Y:=0; END_IF; IF A>0 THEN X:=10; ELSIF B=1 THEN X:=1; ELSIF B=2 THEN X:=2; ELSE X:=0; END_IF; IF A>0 THEN X:=10; ELSIF B=1 THEN X:=1; ELSIF B=2 THEN X:=2; ELSE X:=0; END_IF; IF A>0 THEN X:=10; ELSE X:=0; END_IF; IF A>0 THEN X:=10; ELSE X:=0; END_IF; IF A THEN X:=10; ELSE X:=0; END_IF; IF A THEN X:=10; ELSE X:=0; END_IF;
Instrução
CASE
•
Executa um de vários grupos de instruções segundo o valor de
uma expressão.
•
Sintaxe:
CASE <ecuación_entera> OF <ecuación_entera_valor_1>:
<expresión_1>; <ecuación_entera_valor_2>:
<expresión_2>; ... <ecuación_entera_valor_n>:
<expresión_n>; ELSE <expresión_m>;143
143
Instrução
CASE
(Exemplos)
CASE A OF
1: X:=1;
2: X:=2;
3: X:=3;
ELSE
Y:=0;
END_CASE;
CASE
A
OF
1: X:=1;
2: X:=2;
3: X:=3;
ELSE
Y:=0;
END_CASE
;
CASE A OF
1: X:=1;
2,5: X:=2;
6..10: X:=3;
11,12,15..20: X:=4;
ELSE
Y:=0;
END_CASE;
CASE
A
OF
1: X:=1;
2,5: X:=2;
6..10: X:=3;
11,12,15..20: X:=4;
ELSE
Y:=0;
END_CASE
;
145
145
Instrução
FOR
•
Repete um grupo de instruções um número de vezes especificado.
•
Sintaxe:
FOR control variable := <integer_expression1>
TO <integer_expression2> [ BY <integer_expression3> ]
DO
<statement-list>;
END_FOR;
<integer_expression1> : valor inicial da variável de controle. <integer_expression2> : valor final da variável de controle.
<integer_expression3> : incrementos da variável de controle.
147
147
Instrução
FOR
(Exemplos)
FOR i:=0 TO 100 DO array[i]:=0; END_FOR; IF i=101 THEN a:=TRUE; ELSE a:=FALSE; END_IF; FOR i:=0 TO 100 DO array[i]:=0; END_FOR; IF i=101 THEN a:=TRUE; ELSE a:=FALSE; END_IF; FOR n:=0 TO 50 BY 5 DO SP[n]:=100; END_FOR; FOR n:=0 TO 50 BY 5 DO SP[n]:=100; END_FOR;
Instrução
WHILE
•
Executa uma série de instruções sempre que uma condição dada
seja True.
•
Sintaxe:
WHILE
<expression>
DO
<statement-list>;
149
149
Instrução
WHILE
(Exemplos)
A:=0; WHILE A<=1000 DO A:=A+7; END_WHILE; A:=0; WHILE A<=1000 DO A:=A+7; END_WHILE; n:=1; WHILE X<3000 DO X:=X*2; DATA[n]:=X; n:=n+1; END_WHIE; n:=1; WHILE X<3000 DO X:=X*2; DATA[n]:=X; n:=n+1; END_WHIE;151
151
Instrução
REPEAT
•
Executa uma série de instruções até que uma condição seja True.
•
Sintaxe:
REPEAT
<statement-list>;
153
153
Instrução
REPEAT
(Exemplos)
A:=1;
TOTAL:=0;
REPEAT
TOTAL:=TOTAL+A; A:=A+1;
UNTIL A>10 END_REPEAT;
A:=1;
TOTAL:=0;
REPEAT
TOTAL:=TOTAL+A; A:=A+1;
Instrução
EXIT
•
Força a saída de um loop ( FOR, WHILE, REPEAT )
•
Sintaxe:
FOR (WHILE, REPEAT) expression ...
IF <condition> THEN EXIT;
END_IF;
155
155
Instrução
RETURN
•
A operação de RETURN depende de onde se use no programa.
•
•
Programa ST
Programa ST
:
• Força o final da tarefa ST que está a ser executada e executa a tarefa seguinte.
•
•
ST usado em SFC
ST usado em SFC
:
• Força o final da acção que está a ser executada e executa o programa seguinte de acção ou programa de transição.
•
•
ST usado em FB
ST usado em FB
:
• Força o final do bloco de funções ST que contém o RETURN, retorna ao sítio onde foi chamado FB e executa a instrução seguinte.
•
Sintaxe:
Funções
Tipo de função Utilidade
Funções numéricas Valor absoluto, funções trigonométricas, etc… Funções para “manipular” strings Manipular array de caracteres.
Funções de expansão OMRON Funções de expansão de linguagem padrão. Conversão de tipos de dados Conversão entre tipos de dados.
157
157
Funções numéricas (I)
Função Tipo de dados dos argumentos
Tipo de dados devolvidos
Descrição
ABS (arg) INT, DINT, LINT, UINT,
UDINT, ULINT, REAL, LREAL
INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL
Valor absoluto
SQRT (arg) REAL, LREAL REAL, LREAL Raiz quadrada
LN (arg) REAL, LREAL REAL, LREAL Logaritmo natural: LOGe LOG (arg) REAL, LREAL REAL, LREAL Logaritmo: LOG10
EXP (arg) REAL, LREAL REAL, LREAL Exponencial natural: earg EXPT (arg) Base REAL, LREAL REAL, LREAL Exponencial: baseexpo
Expoente INT, DINT, LINT, UINT, UDINT, ULINT
Funções numéricas (II)
Função Tipo de dados dos argumentos
Tipo de dados devolvidos
Descrição
SIN (arg) REAL, LREAL REAL, LREAL Seno COS (arg) REAL, LREAL REAL, LREAL Coseno TAN (arg) REAL, LREAL REAL, LREAL Tangente ASIN (arg) REAL, LREAL REAL, LREAL Arco Seno ACOS (arg) REAL, LREAL REAL, LREAL Arco Coseno ATAN (arg) REAL, LREAL REAL, LREAL Arco Tangente