Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
1 Introdução ao S7 300
Figura 1.2 – Controle descentralizado por meio de rede industrial com S7 300.
O MMC (Micro Memory Card) é um memory card que contém a memória de carga
(Load Memory) da CPU, onde é armazenado o programa de usuário com todos os
blocos de programa necessários para sua execução, como FCs, FBs, SFCs, etc.
A Figura 1.12 mostra os destinos dos dados transferidos após um download para
o controlador.
Os módulos Siemens para S7 300 são montados numa estrutura perfilada de aço
denominada Rack, e interligados através de um conector de barramento (Bus Conector)
para comunicação entre eles e com a CPU, conforme Figura 1.13.
A montagem dos módulos também pode ser feitas num rack com barramento
ativo, onde o bus conector é substituído por um rack que interliga os módulos
paralelamente para fins de alimentação (Power supply) e comunicação, permitindo a
“troca a quente” dos módulos.
Uma CPU suporta até quatro racks com até oito módulos cada, como mostra a
Figura 1.16.
1.3 Endereçamento
ocorre dentro do cycle scan (ciclo de varredura) do CPU. Cada modelo de CPU possui
um limite de tamanho de imagem. As CPU’s da família S7-300 normalmente reservam
128 bytes de imagem, ou seja, os endereços de input e output podem ser endereçados
neste caso de IB0 a IB127 no caso de entradas e de QB0 a QB127 no caso de saídas.
Fora da imagem de processo da CPU os endereços são lidos na área periférica (PI -
peripheral input e PQ - peripheral output) consumindo um tempo maior de varredura. O
acesso à periferia do CLP é feito somente em unidades de Byte e Word, por exemplo:
PIB256, PQW268.
saídas analógicas. Essas variáveis têm o tamanho de uma Word e trabalham com
valores inteiros (INT) de 16 bits. As variáveis analógicas normalmente começam a ser
endereçadas a partir do endereço 256 para entradas e saídas, conforme Figura 1.22.
1.3.3 Memórias
Conforme mostrado no item 1.1, a CPU do S7 300 trabalha com três áreas de
memória: Load Memory (MMC), System Memory e Main Memory.
Os MB’s podem ser endereçados por Byte (8 bits), Word (16 bits), Double Word
(32 bits) ou bit-a-bit, como mostra a Figura 1.26.
Quando endereçadas bit-a-bit elas poder ser utilizadas como “flags” ou “saídas
auxiliares” nos blocos de programa, como mostra o exemplo de programa da Figura 1.27.
Exemplo: DT#1993-12-25-8:12:34.567
Exemplo: ARRAY[1..10]
• STRUCT
• UDT (user-defined data types)
• FBs and SFBs
No Step7 os ponteiros são descritos pela letra “P” seguida de “#”, conforme
mostra a Figura 1.30.
Exemplo: P#23.7 – Este ponteiro aponta para o endereço Byte=23 e Bit=7 de uma
variável qualquer.
Os data types tipo ANY são ponteiros de 80 bits utilizados para passagem de
parâmetros para blocos de programas, como FCs e FBs.
Exemplo:
P#M40.0 BYTE 10
Uma janela se abrirá solicitando o nome do projeto a ser criado (Figura 2.3. Deve-
se inserir o nome do projeto e clicar em ok.
O projeto com o nome escolhido é então criado e mostrado, conforme Figura 2.4.
Dentro desse projeto será criado um programa baseado numa CPU modelo S7
300. É necessário inserir o modelo CPU, através do comando:
Insert Station 2 SIMATIC 300 Station
Conforme Figura 2.5 ou clicando com o botão direito sobre o ícone do projeto,
conforme Figura 2.6.
Uma vez inserido o modelo da estação com a qual se vai trabalhar deve-se
configurar o hardware para ela, ou seja, informar ao programa o modelo da CPU e os
módulos existentes no rack fisicamente. Para isso deve-se abrir o ícone com o nome do
projeto onde foi inserido o tipo de estação (Figura 2.7) e abrir a janela de configuração de
hardware (Hardware Configuration, Figura 2.8) com um duplo click sobre o ícone
mostrado na Figura 2.7.
Figura 2.10 – Hardware configurado com 1 rack sem fonte Siemens (a) e com 2
racks interligados por meio do IM e com fonte Siemens (b).
As alterações feitas deverão ser salvas e o hardware deve ser compilado, para
isto basta clicar sobre o ícone Salvar, como mostra a Figura 2.12.
Após criar um novo arquivo, na janela “New File” clique sobre a aba Multiproject,
conforme figura Figura 2.14. Insira um nome no campo “Name” e clique em “OK”
Clique com o botão direito sobre a pasta com o nome do projeto e escolha a
opção “Creat in Multiproject” para inserir um novo projeto dentro desta pasta, conforme
Figura 2.15.
A Figura 2.17 mostra como fica estrutura Multiproject criada. A partir deste ponto
deve-se configurar o hardware conforme mostrado nos itens anteriores, a partir da Figura
2.5.
• Bit logic - instruções Booleanas, cujo o tratamento das informações bit a bit
• Comparator – instruções de comparação para variáveis no formato INT (16 bits),
DWORD (32 bits) e REAL (32 bits)
• Converter – Instruções de conversão de formato de dados
• Counter – Instruções de contagem de pulsos
• DB call – Instruções de chamada de Data Blocks
• Jumps – instruções de salto de programa
• Integer function – instruçõoes matemáticas com números inteiros de 16 bits
• Floating point function – instruções matemáticas com números reais de 32 bits
• Move – instrução de transferência de dados
• Program control – instruções de controle de programa
• Shift/Rotate – instruções para “rotacionar” dados
• Status bit – bits com funções especiais do registro status
• Timers – instruções de temporização
• Word logic – instruções para operações booleanas entre dados do tipo Word e
DWord.
3.1.1 Ladder
Para inserir uma instrução em linguagem Ladder ou FBD, basta clicar sobre a
instrução no catálogo à esquerda e arrastar até o ambiente de programação, como
mostrado na Figura 3.1.
Neste exemplo, o RLO da saída Q0.0 será igual a “1” quando o RLO da entrada
I0.0 também for igual a “1”.
Neste exemplo, o RLO da saída Q0.0 será igual a “1” quando o RLO das duas
entradas I0.0 e I0.1 forem iguais a “1”, simultaneamente. A saída permanece ligada
mesmo quando os contatos endereçados em I0.0 e I0.1 seja abertos, devido o contato de
“selo” de Q0.0 em paralelo com os dois contatos NA. O contato NF I0.2 abre quando seu
RLO é igual a “1”, interrompendo a passagem do sinal e desenergizando a saída Q0.0,
que permanece desacionada.
Quando o RLO de I0.0 é igual a “1” a saída Q0.0 é setada e permanece ligada
(RLO=1).
Quando o RLO de I0.1 é igual a “1” a saída Q0.0 é resetada e permanece
desligada (RLO=0).
Em STL:
Em STL:
S5T#aH_bM_cS_dMS
onde:
a, b, c, d são constantes definidas pelo usuário;
H = horas, M = minutos, S = segundos, MS = milisegundos.
W#16#<tbcd>
Onde:
t é a base de tempo;
b, c, d = valor de tempo em BCD (HEX).
Exemplo: W#16#13FF
3FFHEX = 1023DEC
Quando o RLO da entrada S for “1” o bloco liga a saída (RLO=1) e inicia a
contagem de tempo. Mesmo que o RLO da entrada mude de “0” para “1” o bloco continua
a contagem. A saída será desligada depois de decorrido o tempo programado em TV.
O RLO da saída Q será igual a 1 sempre que o valor de contagem for maior que
zero. A saída do contador só será resetada quando o valor da contagem for igual a zero.
Exemplo:
Exemplos de aplicação:
Quando o RLO da entrada for “1” a comparação será realizada. O bloco compara
se o conteúdo de MW0 é maior ou igual ao conteúdo de MW2, se o resultado da
comparação matemática retornar verdadeiro a saída Q4.0 será setada.
Quando o RLO da entrada for “1” a comparação será realizada. O bloco compara
se o conteúdo de MD0 é maior ou igual ao conteúdo de MD4, se o resultado da
comparação matemática retornar verdadeiro a saída Q4.0 será setada.
Quando o RLO da entrada for “1” a comparação será realizada. O bloco compara
se o conteúdo de MD0 é maior ou igual ao conteúdo de MD4, se o resultado da
comparação matemática retornar verdadeiro e o RLO da entrada for igual a “1” a saída
Q4.0 será setada.
Em STL as comparações também são feitas entre variáveis do tipo INT, DINT e
REAL. Os valores a serem comparados são carregados temporariamente dentro dos
acumuladores ACCU1 e ACCU2 por meio das instrução L (Load).
As comparações matemáticas possíveis são:
== igual
<> ACCU1 diferente de ACCU2
> ACCU1 maior que ACCU2
< ACCU1 menor que ACCU2
>= ACCU1 maior ou igual a ACCU2
<= ACCU1 menor ou igual a ACCU2
Em STL pode-se carregar valores do tipo HEX para comparação com números
inteiros tipo INT.
Exemplo de aplicação:
Quando o RLO da entrada I0.0 for igual a “1” o conteúdo de MW10 é transferido
para DW12 e a saída Q4.0 é igual a “1” para confirmar a execução da operação.
Exemplo:
L B#16#3F //Carrega o valor B#16#3F HEXA em ACCU1;
T MB10 //Transfere o conteúdo de ACCU1 (B#16#3F) para MB10.
Floating point function – Operações matemáticas com valores reais: além das
operações básicas são incluídas também as operações logarítimicas, trigonométricas,
dentre outras.
Operações Básicas:
Exemplo de aplicação:
Como essas operações trabalham apenas com valores inteiros, existe uma função
complementar à função de divisão denominada MOD_DI, capaz de recuperar o valor
“restante” de uma divisão entre dois números inteiros de 32 bits e armazenar numa
memória.
Quando I0.0 é acionado, o valor restante da divisão entre MD0 e MD4 (MD0/MD4)
será armazenado em MD10.
Operações Básicas:
Exemplo:
Quando o RLO de I0.0 for “1” o conteúdo da memória MD0 é somado ao conteúdo
de MD2. O resultado desta operação é armazenado em MD10 e a saída Q4.0 será
setada.
Operações Trigonométricas:
Demais Operações:
Até três tipos de operações lógicas podem ser realizadas: AND, OR e XOR.
Exemplo:
Quando o RLO de I0.0 for “1” o bloco efetua a operação lógica AND entre o
conteúdo de MW0 e o valor FFHEX. O resultado desta operação é armazenado em MW2 e
a saída Q4.0 será setada.
4 Estruturas de Programa
No Step7 300 cada OB tem uma função específica, sendo o OB1 o Main Program
e portanto o primeiro na lista de prioridade de execução. O OB1 é executado ciclicamente
pela CPU. Através do OB1 podem-se chamar outros blocos de programa, como as
Functions – FC’s e os Functions Block’s – FB’s, como subrotinas dentro de OB1.
Além de OB1 existem outras OB’s com funções específicas na CPU 31x. Elas são
divididas de acordo com suas funções: OB’s de inicialização (OB100, 101, 102), OB’s de
interrupção de tempo e data (OB10 a OB17), OB’s de interrupção cíclicas programadas
(OB30 a OB38), OB’s de interrupção de hardware (OB40 a OB47), OB’s de diagnóstico
de falhas (OB80 a OB87), dentre outras.
Os data blocks (DB’s) ou blocos de dados são blocos utilizados apenas para
armazenar dados, como memórias. Diferentemente dos blocos de programas, como os
que serão apresentados a seguir, os blocos de dados não possuem instruções e portanto
não executam rotinas de programa, eles apenas armazenam dados das variáveis dos
blocos de programas, como OB’s, FC’s e FB’s.
Os data blocks podem ser criados em dois formatos: Instance Data Blocks (DB
instance) ou Shared Data Blocks (DB Shared).
Uma janela deverá abrir, onde será configurado o tipo do Data Block a ser criado,
conforme mostra a Figura 4.4. Neste exemplo será mostrado como criar um DB shared
para ser usada por qualquer bloco de programa.
As informações que devem ser atribuídas a DB, conforme a Figura 4.5, são:
Para acessar estas variáveis e ler o seu conteúdo ou escrever um dado deve-se
utilizar a seguinte sintaxe:
As Functions ou FC’s são blocos de programas que não possuem uma área de
memória própria designada para ela. Os dados de suas variáveis são armazenados na
pilha (L stack) do controlador e são perdidos ao fim de sua execução.
Os Functions Blocks ou FB’s são blocos de programas que possuem uma área de
memória dedicada do tipo Data Block ou DB designado para armazenar
permanentemente os dados de suas variáveis durante e após a sua execução. Essas
memórias são do tipo Instance Data Block, pois são dedicadas ao bloco de programa a
que estão associadas.
Para isto o bloco deverá ser criado com variáveis locais, que permitem a
transferência dos sinais dos endereços absolutos de OB1 para o bloco, assim como do
bloco para OB1.
As variáveis locais das FC’s podem ser do tipo IN, OUT, IN/OUT ou TEMP. Essas
variáveis podem ainda ter o formato BOOL (booleanas, variáveis discretas 0 ou 1),
informações do tipo BYTE, WORD, DWORD (Double Word), INT (números inteiros),
REAL (números reais com ponto flutuante), S5TIME (variáveis de tempo no formato
Siemens), dentre outras, conforme Figura 4.8.
No exemplo sugerido o bloco de programa será criado usando uma FC. Foram
criadas para este bloco três variáveis do tipo IN, sendo S1 para ligar o motor, S0 para
desligar o motor e RT como contato do relé térmico de segurança em caso de
superaquecimento do motor. Como variável do tipo OUT foi criada apenas uma saída K
para o acionamento do contator de potencia, conforme mostra a Figura 4.9.
Uma vez inserido um FC, como mostrado na Figura 4.11, deve-se selecionar a
linguagem de programação desejada para implementar a rotina de programa, neste
exemplo será usada a linguagem Ladder de programação, conforme Figura 4.12.
Figura 4.14 – Descrição da estrutura dos blocos de programa criados num projeto.
Por fim, na aba attributes, Figura 4.15, podem ser inseridos atributos específicos
de controle dos blocos de programa, como por exemplo a ferramenta S7-pdiag, para que
o bloco seja capaz de processar diagnóstico de erros.
Após finalizar o programa, o mesmo deverá ser salvo e compilado, para isto,
basta clicar no ícone salvar, conforme Figura 4.21, e fechar o bloco.
O bloco de programa criado deverá ser chamado dentro de OB1 como rotina
padrão. Para isto, basta abrir o conteúdo de FC blocks dentro de OB1 e “arrastá-lo” para
a network criada, como mostram a Figura 4.22.
Uma vez criada, a Function FC1 pode ser chamada quantas vezes forem
necessárias dentro de OB1, conforme o programa da Figura 4.28.
4.6.1 Instance FB
Assim como os Functions (FC), os FB’s são blocos de programa criados como
subrotinas de OB1 ou de outros blocos. Cada Instance Function
ons Block criado e
“chamado” dentro de OB1, por exemplo, necessita de um Data Block (DB) para o
armazenamento temporário ou permanente dos dados processados pelo bloco.
bloco Em
resumo, nessa estrutura cada FB tem uma área de memória do tipo Data Block reservada
e dedicada a ele, conforme mostram a Figura 4.29 e Figura 4.30.
Como padrão, estes blocos devem ter uma entrada para receber os pulsos
externos, denominada C_UP e declarada como variável BOOL, uma entrada SET
(BOOL) para carregar o valor de contagem registrado em PRESET (INT) na memória
interna do contador, uma entrada RESET (BOOL) para resetar a saída Q (BOOL) do
contador e zerar sua memória interna de registros de pulsos e uma saída para
monitoramento do valor da contagem atual VALOR (INT), além da entrada EN para
habilitar o bloco e uma saída ENO, padrões do bloco.
Para esta aplicação existem três variáveis estáticas, uma denominada MEMORIA
(INT), onde é registrada a contagem de pulsos, essa memória é incrementada conforme
o contador recebe os sinais em sua entrada C_UP. Há também uma variável denominada
REF (INT) que recebe o valor de referencia limite da contagem por meio da variável de
entrada PRESET (INT). Por último há uma variável denominada FLAG (BOOL) para
registro da borda de subida do sinal no flanco positivo (P) utilizado neste programa. A
declaração destas variáveis é mostrada na Figura 4.37.
subida do sinal, não permitindo que o registro memória seja incrementado em mais de
uma unidade.
A rotina do bloco de programa FB1 deverá ser salvar afim de compilar o bloco.
4.6.2 Multi-Instance
Instance FB
A estrutura multi-instance
instance (Figura 4.45) consiste em chamar um bloco de
programa FB (FB1 por exemplo) dentro de outro FB (FB10 por exemplo) como variável
estática deste. Desta forma,
forma cada FB1 passa a ser uma variável interna de FB10
FB1 e ocupa
uma área específica dentro do data block que será criado apenas para FB10 e
compartilhado com cada bloco FB1 chamado.
chamado
A rotina de programa que será implementada dentro de FB1 será a mesma usada
no exemplo dado para a criação da FC, um programa criado para comando de partida
direta de motores. A Figura 4.48 mostra o programa implementado.
Figura 4.48 – Bloco de programa para partida direta de motores criado em FB1.
Dentro de FB10, em interface, crie uma variável tipo STAT com o nome de
motor_1 e no Data Type digite FB1, desta forma, o bloco de programa FB1 será uma
variável estática dentro de FB10 e ocupará uma área dentro da DB que será criada para
este bloco, conforme Figura 4.49.
Figura 4.51 – Criando uma tabela de variáveis para o bloco de programa multi-
instace.
Depois de criado, o bloco de programa FB10 pode então ser chamado dentro de
OB1 e um Data Block deverá ser criado para ele, conforme Figura 4.53.
Uma vez criado o bloco de programa ele deverá ser chamado como subrotina de
OB1, que também será implementado em linguagem STL, conforme mostrado na Figura
4.58.
Figura 4.59
• Etapa
• Ação
• Transição
Figura 5.2
Podemos atribuir um nome e comentários para este step, assim como defini-lo
como sendo a etapa inicial, conforme Figura 5.6.
A seleção das instruções também pode ser feita através da barra de menu usando
o comando Insert.
• Condições de processo
• Sequencia de movimentos
• Circuito Eletropneumático
• Programa
Block DB. Para isso basta clicar no ícone Salvar na barra de menu, conforme mostra a
Figura 5.13.
Caso não haja nenhum erro que impeça a execução da rotina do bloco de
programa S7 GRAPH será mostrado conforme Figura 5.14.
Depois de criado, o bloco de programa FB1 criado em S7 GRAPH pode então ser
chamado dentro de OB1, conforme Figura 5.16.
A seguir estão os procedimentos para a criação do source file. Abra o bloco criado
(FB1, por exemplo) e vá a File Generate Source, conforme Figura 6.1.
Uma janela se abrirá, insira o nome do source file que será criado em Object
name e clique em ok, como mostra a Figura 6.2.
Uma nova janela se abrira para que sejam selecionados os blocos de programa
que deverão ser protegidos pelo source file a ser criado. Selecione os blocos que deseja
proteger e clique em ok, a Figura 6.3.
É possível salvar o source file em outro lugar para poder deletá-la da guia source
do projeto e garantir que ninguém tenha acesso ao programa. Para isto basta clicar com
o botão direito sobre o bloco e mandar exportá-lo para qualquer outra unidade de disco,
conforme Figura 6.8.
Para abrir o bloco novamente é necessário importar o source file. Para isso vá em
source e clique com o botão direito. Clique em Insert new object External Source e
busque o arquivo fonte na unidade de disco onde ela foi gravada, conforme Figura 6.9 e
Figura 6.10.
Este recurso mostra também a estrutura do programa com todos os blocos e onde
cada variável está alocada.
Clicando no ícone Cross-refences, como mostrado na Figura 7.4. Uma lista com
todas as variáveis utilizadas nos programas e sua localização nos blocos de programa
será mostrada.
8 Forçando Variáveis
Outro recurso muito usado por equipes de manutenção é o Force and Modify
Variables.
Este recurso permite forçar uma variável para um determinado estado lógico a fim
de testar os dispositivos de campo nas entradas e saídas do CLP.
A variável forçada assume o valor desejado pelo usuário sem sofrer interferência
do programa, ela passa a responder apenas ao comando de “Force”.
Uma janela se abrirá permitindo que as variáveis que se deseja forçar sejam
inseridas, assim como o estado que ela deve assumir, conforme Figura 8.2.