Baixe o app para aproveitar ainda mais
Prévia do material em texto
ÍNDICE 1 Introdução ao S7 300 .................................................................................................. 3 1.1 Conceitos de memória para S7 300 ............................................................................ 10 1.2 Estrutura de Hardware ................................................................................................ 12 1.3 Endereçamento .......................................................................................................... 15 1.3.1 Entradas e saídas Digitais – DI/DO (Digital Input/Digital Output) ................................ 15 1.3.2 Entradas e saídas Analógicas – AI/AO (Analogic Input/Analogic Output) ................... 17 1.3.3 Memórias .................................................................................................................... 19 1.4 Tipo de dados ............................................................................................................. 23 1.5 Endereçamento indireto e Ponteiros ........................................................................... 24 1.5.1 Tipo de dado ANY ...................................................................................................... 27 2 Criando um novo projeto no SIMATIC Manager ........................................................ 28 2.1 Trabalhando com Multiproject ..................................................................................... 35 3 Linguagens de Programação para STEP7 300 .......................................................... 38 3.1 Instruções Booleanas ................................................................................................. 38 3.1.1 Ladder ........................................................................................................................ 38 3.1.2 Statement List (STL) ................................................................................................... 39 3.1.3 Function Blocks Diagram (FBD).................................................................................. 39 3.1.4 Exemplos de aplicação das linguagens Ladder, STL e FBD ....................................... 40 3.1.5 Memória elétrica ......................................................................................................... 41 3.1.6 Saídas Retentivas ...................................................................................................... 42 3.1.7 Contatos Impulsionais ................................................................................................ 43 3.1.8 Flanco Positivo ........................................................................................................... 44 3.1.9 Flanco Negativo .......................................................................................................... 45 3.2 Instruções de Temporização ....................................................................................... 46 3.2.1 Temporizador com retardo na ativação S_ODT .......................................................... 49 3.2.2 Temporizador retentivo com retardo na ativação S_ODTS ......................................... 50 3.2.3 Temporizador com retardo na desativação S_OFFDT ................................................ 51 3.2.4 Temporizador de pulso estendido S_PEXT ................................................................ 53 3.3 Instruções de Contagem de Pulsos ............................................................................ 53 3.3.1 Contador Crescente e Decrescente S_CUD ............................................................... 54 3.3.2 Contador Crescente S_CU ......................................................................................... 55 3.3.3 Contador Decrescente S_CD ..................................................................................... 56 3.3.4 Counters em STL ....................................................................................................... 57 3.4 Instruções de Comparação ......................................................................................... 58 Festo Didactic •••• E320S 2 Programação avançada com CLP Siemens S7 300 3.4.1 Instruções de comparação em STL ............................................................................ 60 3.5 Instrução de Transferência de dados .......................................................................... 61 3.6 Instrução de Transferência de dados em STL ............................................................ 62 3.7 Instruções Matemáticas com números inteiros (INT) e reais (REAL) .......................... 62 3.7.1 Integer function ........................................................................................................... 62 3.7.2 Floating point function ................................................................................................. 64 3.7.3 Instruções matemáticas em STL................................................................................. 67 3.8 Instruções lógicas – operações booleanas ................................................................. 67 3.8.1 Operações booleanas em STL ................................................................................... 69 4 Estruturas de Programa ............................................................................................. 70 4.1 Organization Blocks – OB’s ........................................................................................ 70 4.2 Data Blocks – Blocos de Dados (DB) ......................................................................... 70 4.3 Criando um Data Block Shared .................................................................................. 71 4.4 Programação Orientada – Blocos de Programa .......................................................... 75 4.5 Criando uma FC – Function ........................................................................................ 76 4.6 Criando um FB – Function Block ................................................................................ 90 4.6.1 Instance FB ................................................................................................................ 90 4.6.2 Multi-Instance FB ...................................................................................................... 102 4.6.3 Criando uma FB em Statement List – STL ................................................................ 109 5 Introdução à linguagem de programação GRAPH para S7 300 ............................... 114 5.1 Criando um bloco de programa em linguagem grafcet - GRAPH .............................. 116 5.2 Instruções básicas para S7 GRAPH ......................................................................... 123 5.3 Exemplo de aplicação ............................................................................................... 123 6 Source File – Utilizando atributos para proteger um bloco de programa .................. 131 7 Referencia Cruzada no S7 300 – Cross References ............................................... 138 8 Forçando Variáveis .................................................................................................. 144 Festo Didactic •••• E320S 3 Programação avançada com CLP Siemens S7 300 PROGRAMANDO COM SIEMENS S7-300 1 Introdução ao S7 300 O CLP S7-300 da Siemens é um controlador modular utilizado em aplicações centralizadas ou distribuídas, interligando os mais variados dispositivos de campo através de seus módulos de entrada e saída, digitais ou analógicas. Pode ainda ser integrado a outros dispositivos de controle através de rede industriais, com ampla gama de protocolos disponíveis. Figura 1.1 – Controle centralizado com S7 300 Siemens. Festo Didactic •••• E320S 4 Programação avançada com CLP Siemens S7300 Figura 1.2 – Controle descentralizado por meio de rede industrial com S7 300. O S7 300 possui interface com os seguintes softwares: Step 7 Lite – trata-se de uma ferramenta mais simples para implementação de programas em aplicações centralizadas. Esta ferramenta não é mais usual na atualidade. Figura 1.3: Ambiente de programação do Step 7 Lite Festo Didactic •••• E320S 5 Programação avançada com CLP Siemens S7 300 Step 7 Manager – É uma ferramenta mais completa para gerenciamento de projetos em automação, permitindo a integração de todos os dispositivos programáveis em um único ambiente, assim como a estruturação de projetos com redes industriais. Figura 1.4 - Ambiente de programação do Step 7 Manager A comunicação entre o meio de programação usando um computador pessoal (PC) e o CLP ocorre por meio de um conversor serial de RS 232 para RS 485 denominado PC adapter , que se comunica por meio de um protocolo proprietário da Siemens denominado MPI (Multi-Point Interface), conforme Figura 1.5. Esta comunicação também pode ocorrer via rede Profibus (conforme Figura 1.7) ou Ethernet através da placa de rede do computador (conforme Figura 1.8). O programa de usuário, com todos os blocos de programa e blocos dados, quando transferido para o CLP é gravado num cartão de memória denominado MMC (Micro Memory Card). Os LED’s na parte lateral do cabo indicam o estado de comunicação entre o dispositivo programador e o CLP. Festo Didactic •••• E320S 6 Programação avançada com CLP Siemens S7 300 Figura 1.5 – PC adapter MPI. Figura 1.6 – Programação via protocolo MPI. Festo Didactic •••• E320S 7 Programação avançada com CLP Siemens S7 300 Figura 1.7 - Programação via rede DP. Figura 1.8 - Programação via rede Ethernet. Festo Didactic •••• E320S 8 Programação avançada com CLP Siemens S7 300 Os recursos e especificações técnicas do CLP, como quantidade de entradas e saídas, interfaces de operação, interfaces de comunicação, quantidade de endereços para temporizadores e contadores, tamanho da imagem de entradas e saídas, dentre outras, variam de acordo com o modelo da CPU. As CPU’s Siemens S7 300 são definidas como Compactas ou Standard. Uma CPU compacta possui entradas e saídas digitais ou analógicas integradas, enquanto uma CPU standard não possui entradas e saídas integradas, necessitando de cartões adicionais, módulos de I/O, para fazer interface com os dispositivos do meio externo. A Figura 1.9 mostra duas CPU’s Siemens S7 300. Figura 1.9 – Modelos de CPU Siemens. Os LED’s na parte superior frontal da CPU indicam o estado do CLP, ou seja, o modo de operação da CPU. Abaixo segue a descrição das funções de cada LED. SF – System Fault: indica falha de software ou hardware; BF – Bus Fault: indica falha na rede DP; DC5V – Alimentação 5 volts: indica que a alimentação de 5 volts da CPU e dos módulos está ok. Festo Didactic •••• E320S 9 Programação avançada com CLP Siemens S7 300 FRCE – Force: indica modo de trabalho forçado de uma variável. RUN – indica que o programa está em execução. STOP – quando ligada constantemente indica a parada de execução do programa. Quando está piscando numa frequência de 0,5Hz indica que a CPU necessita de um reset em sua memória devido a algum erro ou falha do sistema. Se a CPU solicitar um reset de memória, fazendo o STOP LED piscar lentamente, pode-se resetar o MMC através da chave seletora de modo, como segue: 1. Posicione a chave para posição MRES e mantenha pressionada nesta posição até o STOP LED parar de piscar (ficar aceso constantemente – isto deverá levar alguns segundos); 2. Após o LED STOP acender e permanecer aceso, aguarde 3 segundos, solte a chave e volte a pressioná-la para a posição MRES. O LED de STOP pisca para indicar que a formatação está em processo. Figura 1.10 – CPU Siemens S7 300. Festo Didactic •••• E320S 10 Programação avançada com CLP Siemens S7 300 Por meio da chave seletora é possível alterar o modo de funcionamento do CLP para RUN (executa o programa), STOP (para a execução do programa) ou MRES (reseta as variáveis da memória do controlador). 1.1 Conceitos de memória para S7 300 A Figura 1.11 mostra a divisão das áreas de memória existentes no controlador, contendo três áreas de memórias distintas. Figura 1.11 – Estrutura do MMC. Load Memory (Memória de Carga): Está localizada no MMC (Micro Memory Card). Ela armazena o programa de usuário com seus blocos de programa (OBs, DBs, FCs, etc) assim como a configuração de hardware. O conteúdo desta memória influencia diretamente no funcionamento da CPU. System Memory (Memória do Sistema): Contém os endereços dos Bit Memories, Timers e Counters; da imagem de processo (PI - process image) das inputs e outputs; assim como do Local Data (variáveis temporárias da pilha local, tipo TEMP). A imagem de processo das entradas e saídas do controlador é acessada através da memória de sistema da CPU. Festo Didactic •••• E320S 11 Programação avançada com CLP Siemens S7 300 Main Memory (Memória Principal): É usada para execução do código de programa de usuário. O programa somente roda na Memória Principal, memória RAM integrada à CPU. 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. Após o download o programa de usuário é armazenado permanentemente na load memor y. Porém, as partes relevantes do programa são executadas em outra área de memória, denominada Work Memory , que se trata da Main Memory , memória RAM integrada a CPU. A Figura 1.12 mostra os destinos dos dados transferidos após um download para o controlador. Figura 1.12 – Dados que são gravados no MMC. Festo Didactic •••• E320S 12 Programação avançada com CLP Siemens S7 300 1.2 Estrutura de Hardware 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. Figura 1.13 – Montagem dos módulos no rack. Festo Didactic •••• E320S 13 Programação avançada com CLP Siemens S7 300 Os cartões Siemens para o S7 300 são divididos em três grupos: SM (Signal Modules) – Compreendem os módulos de entradas e saídas digitais (DI/DO) ou analógicas (AI/AO). CP (Communication Processor) – Compreendem os módulos de comunicação para rede ASi, Profibus (DP, PA, FMS), Ethernet Industrial e PtP (rede ponto-a-ponto). FM (Function Module) – Compreendem os módulos de entrada e saída com funções especiais para dispositivos de controle de posição, entradas e saídas rápidas de freqüência, etc. Figura 1.14 – Estrutura do rack Siemens. Um exemplo de configuração de rack é mostrado na Figura 1.15. Figura 1.15 – Exemplo de configuração do rack. Festo Didactic •••• E320S 14 Programação avançada com CLP Siemens S7 300 Uma CPU suporta até quatro racks com até oito módulos cada, como mostra a Figura 1.16. Figura 1.16 – CPU controlando até 4 racks. A comunicação entre os racks é feita por meio de um módulo denominado IM (interface module).Esta montagem utiliza uma fonte por rack. Festo Didactic •••• E320S 15 Programação avançada com CLP Siemens S7 300 1.3 Endereçamento 1.3.1 Entradas e saídas Digitais – DI/DO (Digital I nput/Digital Output) As entradas digitais são capazes de detectar uma variação de estado lógico correspondente a uma variação de tensão “discreta”, proveniente de dispositivos de sinais como botoeiras, sensores de proximidade, chaves fim-de-curso, dentre outros. Da mesma forma, as saída digitais enviam sinais discretos de tensão para os dispositivos que deverão ser acionados, como sinalizadores luminosos ou sonoros, relés, solenóides, etc. A variação de estado lógico entre os níveis “0” e “1” neste texto será representada pela sigla RLO, cujo significado é Resultado Lógico do Operador. Figura 1.17 – Sinais digitais Para endereçar pontos de entrada e saídas digitais o S7 300 usa o modelo “Byte.Bit” , onde cada módulo é dividido em 1 Byte de dados e endereçado bit-a-bit, conforme Figura 1.18. As interfaces de entrada são identificadas pela letra I (input), enquanto as interfaces de saída são identificadas pela letra Q (output). Fisicamente, elas são distribuídas nos módulos conforme Figura 1.20. Figura 1.18 – Endereçamento de entradas digitais. Festo Didactic •••• E320S 16 Programação avançada com CLP Siemens S7 300 Uma representação mais completa de endereços de I/O é mostrada na Figura 1.19. Figura 1.19 – Endereçamento de entradas e saídas digitais. Figura 1.20 – Endereçamento de entradas e saídas digitais nos cartões Siemens. O acesso aos endereços de entrada e saída ocorre numa área da memória de sistema denominada Imagem de Processo (PI – Process Image) do CLP, corresponde a uma região na memória do controlador onde a escrita e a leitura dessas interfaces Festo Didactic •••• E320S 17 Programação avançada com CLP Siemens S7 300 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. 1.3.2 Entradas e saídas Analógicas – AI/AO (Analogi c Input/Analogic Output) As entradas analógicas são capazes de detectar uma variação de sinal contínuo de tensão nas faixas de -10V a +10V e de 0V a 10V, ou de corrente nas faixas de 0mA a 20mA ou 4mA a 20mA, em função da variação de uma grandeza física medida por meio de um transdutor, como termopares, sensores analógicos de pressão, células de carga, etc. As saídas analógicas são capazes de gerar uma variação de tensão de 0V a 10V ou de corrente de 0mA a 20mA para controlar dispositivos externos como drives de potência, por exemplo. Figura 1.21 – Sinal analógico O endereçamento das entradas e saídas analógicas no S7 300 é feito através das variáveis periféricas, ou seja, fora da imagem de entradas e saídas do controlador. PIW (Peripheral Input Word) para entradas analógicas e PQW (Peripheral Output Word) para Festo Didactic •••• E320S 18 Programação avançada com CLP Siemens S7 300 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. Figura 1.22 – Entradas e saídas analógicas. Um mapa completo com os endereços de entradas e saídas digitais e analógicas sugeridos é mostrado na Figura 1.23. Figura 1.23 – Mapeamento de entradas e saídas digitais nos racks. Festo Didactic •••• E320S 19 Programação avançada com CLP Siemens S7 300 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. Mas podemos simplificar descrevendo apenas duas áreas de memória para o controle das informações na CPU: Work Memory e Load Memory, conforme Figura 1.24. Figura 1.24 – Simplificação das áreas de memória da CPU. • Work Memory : corresponde à memória RAM do controlador, para armazenamento das variáveis não-retentivas. • Load Memory : corresponde à memória EEPROM (MMC) do controlador, para armazenar o programa de usuário e também as variáveis retentivas. O S7 300 possui ainda três variáveis de memórias distintas: M (bit Memories) , D (Data Block) e L (Variáveis temporárias, Local Data – pilha local) para leitura e escrita de dados do programa de usuário, além dos acumuladores ACCU1 e ACCU2 (área de transferência de dados usada pelo programa para o fluxo de informações) e Area Registers AR1 e AR2 (registradores de endereço para ponteiros). Festo Didactic •••• E320S 20 Programação avançada com CLP Siemens S7 300 As memórias do tipo M (Bit Memories) são memórias de uso geral, para armazenamento de dados do programa de usuário. Elas podem ser acessadas por qualquer bloco de programa, para escrita ou para leitura de dados. Essas memórias podem ser retentivas ou não. Esta condição pode ser estabelecida durante a configuração do hardware. As variáveis do tipo L são definidas como temporárias no programa (variáveis temporárias, tipo TEMP) e são variáveis não-retentivas, portanto, os valores armazenados nessas variáveis são apagados no ato da saída do bloco de programa. No S7 300 essas memórias são alocadas em áreas de 8 bits , ou seja, cada alocação de memória do tipo M possui tamanho de um 1 Byte , e são denominadas como MB (Memory Byte) conforme Figura 1.25. Figura 1.25 – Alocações de memórias no S7 300. 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. Festo Didactic •••• E320S 21 Programação avançada com CLP Siemens S7 300 Figura 1.26 – Formatos das memórias. 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. Figura 1.27 – Exemplo de aplicação das memórias como “Flags”. É possível a ocorrência de conflito de dados quando o usuário utiliza no mesmo programa memórias com tamanhos e endereços diferentes, mas que possuem bits em comum entre elas, como mostra a Figura 1.28. Festo Didactic •••• E320S 22 Programação avançada com CLP Siemens S7 300 Figura 1.28 – Conflito de dados. É recomendável, para o exemplo acima, que o usuário enderece essas memórias com números pares, ou seja, a cada dois bytes: MW0, MW2, MW4...Afim de evitar conflito de dados. As memórias do tipo L (Stack) são destinadas ao armazenamento temporário de variáveis. No S7 300 essas áreas de memória são denominadas TEMP. Variáveis do tipo TEMP podem ser declaradas no programa de usuário, dentro de OB’s, FC’s e FB’s, como será mostrado adiante. Existem ainda áreas de memórias denominadas ACC1 e ACC2 (acumuladores), onde os resultados de operações lógicas são armazenados provisoriamente. É possível carregar essas memórias por meio dos comandos L (Load) e T (Transfer), comuns na linguagem STL de programação, como será abordado nos tópicos seguintes. O conteúdo desses registros pode ser visualizado através do comando View ���� PLC Register na barra de menus, conforme Figura 1.29. FestoDidactic •••• E320S 23 Programação avançada com CLP Siemens S7 300 Figura 1.29 – Memória L temporária (stack). As memórias do tipo D (Data Blocks) são áreas de memória utilizadas para o armazenamento de dados que são processados dentro de blocos de programas, aos quais elas são vinculadas quando criadas. Mas também podem ser utilizadas para armazenamento de dados de qualquer outro bloco de programa, como as memórias de uso geral. Mais detalhes sobre essas memórias, os Data Blocks, serão abordados no item 4.2. 1.4 Tipos de dados Todos os dados e variáveis declaradas no programa de usuário devem ser identificados por um tipo de dado específico. O S7 300 possui uma grande gama de tipo de dados sendo eles divididos em três grupos distintos: Elementares – são tipos de dados mais básicos utilizados para a declaração de constantes e variáveis simples. A tabela a seguir mostra os tipos de dados elementares mais usuais no S7 300. Complexas – Consistem da combinação dos tipos de dados elementares em estruturas mais complexa de dados. Variáveis complexas são normalmente declaradas em Data Blocks (DB’s). Compreende as seguintes estruturas de dados: Festo Didactic •••• E320S 24 Programação avançada com CLP Siemens S7 300 Parâmetros – Compreendem as variáveis locais criadas para transferência de dados em FC’c e FB’s. • DATE_AND_TIME – Variáveis tipo tempo e data. Exemplo: DT#1993-12-25-8:12:34.567 • STRING[n] - Variáveis tipo ASCII (caracteres) Exemplo: STRING[7] ‘SIMATIC’ • ARRAY – Estrutura tipo matriz de dados Exemplo: ARRAY[1..10] As variáveis complexas podem ainda ser do tipo: • STRUCT • UDT (user-defined data types) • FBs and SFBs 1.5 Endereçamento indireto e Ponteiros O endereçamento indireto de variáveis é feito através de ponteiros. Um ponteiro é utilizado para apontar o endereço de uma variável, permitindo que a mesma variável seja acessa com endereços diferentes repetidas vezes a cada varredura de programa. Festo Didactic •••• E320S 25 Programação avançada com CLP Siemens S7 300 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. Quando uma variável é carregada com um ponteiro ela recebe o conteúdo daquele endereço, apontado pelo ponteiro. O ponteiro pode ser incrementado e decrementado no programa, permitindo acessar o conteúdo de outras variáveis. A Figura 1.31 mostra um diagrama com as possibilidades de endereçamento indireto que são possíveis de ser efetuados no SIMATIC Step7. Os tipos de ponteiro para o Step7 são: • Ponteiro 16-bit para Endereçamento Indireto de Memó ria Para acesso indireto de memória de temporizadores, contadores e DBs abertos. • Ponteiro 32-bit p/ Endereçamento Indireto de Memóri a e Registrador Ponteiro 32 bit de área interna para acesso indireto de memória e registrador de endereços em PI, PQ, I, Q, M, DB, DI e L (pilha local). Ponteiro 32 bit de área cruzada para acesso indireto do registrador de endereços PI, PQ, I, Q, M, DB, DI, L e V (Pilha de dados locais do bloco chamado). • Ponteiro 48-bit (Tipo de Dado POINTER) Tipo de dado próprio para passagem de parâmetros para blocos (FBs e FCs) Contém, em adição ao ponteiro 32-bit de área-cruzada, a declaração do número do DB. • Ponteiro 80-bit (Tipo de Dado ANY) Tipo de dado próprio para passagem de parâmetros para blocos (FBs e FCs). Contém, em adição ao ponteiro 32-bit de área-cruzada, a declaração do número do DB, tipo de dado e fator de repetição. A Figura 1.30 mostra a estrutura de um ponteiro de 16 bit e 32 bit. A Figura 1.31 mostra todas as possibilidades de acesso direto e indireto à memória do controlador. Festo Didactic •••• E320S 26 Programação avançada com CLP Siemens S7 300 Figura 1.30 – Estrutura do ponteiro Figura 1.31 – Tipos de endereçamento: Direto e Indireto. Festo Didactic •••• E320S 27 Programação avançada com CLP Siemens S7 300 Exemplo de aplicação de endereçamento indireto e ponteiros: 1.5.1 Tipo de dado ANY 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. As variáveis do tipo ANY podem assumir qualquer formato de variável e são endereçadas com ponteiros que permitem o acesso indireto a memórias, para fins de escrita e leitura. Exemplo: P#M40.0 BYTE 10 Neste exemplo deseja-se acessar uma área de memória com extensão de 10 Bytes que vai de MB40 até MB49. Festo Didactic •••• E320S 28 Programação avançada com CLP Siemens S7 300 2 Criando um novo projeto no SIMATIC Manager Como foi dito anteriormente, o software SIMATIC Manager trata-se de um ambiente integrado para criação de projetos em automação. Ele permite a integração de todos os dispositivos e softwares da Siemens em um único ambiente de programação. O ambiente inicial do software é mostrado na Figura 2.1. Na estrutura do SIMATIC Manager, todos os blocos de programas são criados dentro de um projeto . Portanto, para criar um programa é necessário antes criar um projeto novo, conforme Figura 2.2. Figura 2.1 – Tela inicial do SIMATIC Manager Festo Didactic •••• E320S 29 Programação avançada com CLP Siemens S7 300 Figura 2.2 – Criando um novo projeto no S7 300. 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. Figura 2.3 – Inserindo o nome do projeto. Festo Didactic •••• E320S 30 Programação avançada com CLP Siemens S7 300 O projeto com o nome escolhido é então criado e mostrado, conforme Figura 2.4. Figura 2.4 – Criando um novo projeto. 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. Figura 2.5 – Inserindo uma Estação da família 300. Festo Didactic •••• E320S 31 Programação avançada com CLP Siemens S7 300 Figura 2.6 - Inserindo uma Estação da família 300. 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.7 – Abrindo o configurador de hardware. Festo Didactic •••• E320S 32 Programação avançada com CLP Siemens S7 300 Dentro da janela de configuração de hardware deve-se primeiramente inserir o rack, conforme Figura 2.8. Uma vez inserido o rack, basta selecionar cada módulo correspondente ao hardware físico e “arrastar” até o seu respectivo slot conforme a Figura 2.8 e Figura 2.9, seguindo a ordem mostrada no item 1 e na Figura 1.14. O hardware completo configurado é mostrado na Figura 2.10 com 1 e com 2 racks. Figura 2.8 – Inserindo o rack. Figura 2.9 – Inserindo a CPU no rack. Festo Didactic •••• E320S 33 Programação avançada com CLP Siemens S7 300 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 CPU’s compactas trazem como configuração padrão (default) os endereçosde entrada e saídas com valor inicial referente ao último slot do último rack. É possível alterar os endereços das entradas e saídas do CLP clicando duas vezes sobre o ícone DI/DO no slot onde está a CPU para o respectivo rack. Uma janela deverá abrir e o usuário poderá alterar o inicio dos endereços das entradas e saídas, desmarcando a opção System default da CPU compacta conforme mostra a Figura 2.11. Festo Didactic •••• E320S 34 Programação avançada com CLP Siemens S7 300 Figura 2.11 – Alterando os endereços de entradas e saídas. 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. Figura 2.12 – Salvando e compilando o hardware. Após salvar e compilar a configuração de hardware uma nova pasta contendo os blocos de programa fica disponível, com o primeiro bloco de programa de usuário, OB1 (Organization Block 1), que é o Main Program do S7 300, como mostra a Figura 2.13. Festo Didactic •••• E320S 35 Programação avançada com CLP Siemens S7 300 Figura 2.13 – Estrutura de um projeto criado para S7 300. 2.1 Trabalhando com Multiproject Usando o conceito Multiproject do SIMATIC STEP 7 Professional é possível criar vários projetos dentro de uma única pasta, ajudando na organização dos programas de usuário. 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” Festo Didactic •••• E320S 36 Programação avançada com CLP Siemens S7 300 Figura 2.14 – Criando um “Multiproject” 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. Figura 2.15 – Inserindo um projeto. Festo Didactic •••• E320S 37 Programação avançada com CLP Siemens S7 300 Insira um nome ao projeto e clique em “OK”, conforme mostra a Figura 2.16 Figura 2.16 – Inserindo um projeto. 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. Figura 2.17 – Estrutura na forma de Multiproject. Festo Didactic •••• E320S 38 Programação avançada com CLP Siemens S7 300 3 Linguagens de Programação para STEP7 300 O Step7 300 permite a criação de programas em quatro linguagens: LADDER, FBD (Function Blocks Diagram), STL (Statement List) e GRAPH (Grafcet). O set de instruções básicas do Step7 300 é dividido nos seguintes grupos: • 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 Instruções Booleanas 3.1.1 Ladder Linguagem de programação baseada em lógica de comando elétrico. Festo Didactic •••• E320S 39 Programação avançada com CLP Siemens S7 300 Instrução NA – o contato normal aberto será fechado quando o valor do bit <address> for igual a “1” (RLO=1). Instrução NF – o contato normal fechado será aberto quando o valor do bit <address> for igual a “1” (RLO=1). 3.1.2 Statement List (STL) Linguagem de programação baseada em texto estruturado. A <Bit, Word, DWord> - Operação lógica AND AN <Bit, Word, DWord> - Operação lógica AND NOT O <Bit, Word, DWord> - Operação lógica OR ON <Bit, Word, DWord> - Operação lógica OR NOT = <Output Bit> - Saída booleana L <Bit, Word, DWord> - Carrega valor em ACC1 T <Bit, Word, DWord> - Transfere de ACC1 para uma memória JU <Label> - Salto incondicional para outra linha de programa definida por um Label. JC <Label> - Salto condicional se o resultado de uma operação lógica resultar em 1. JCN <Label> - Salto condicional se o resultado de uma operação lógica resultar em 0. 3.1.3 Function Blocks Diagram (FBD) Linguagem de programação baseada em lógica digital booleana. Sua estrutura é baseada em blocos lógicos, como mostrado a seguir: Festo Didactic •••• E320S 40 Programação avançada com CLP Siemens S7 300 3.1.4 Exemplos de aplicação das linguagens Ladder, STL e FBD 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. Figura 3.1 – Instruções booleanas. Festo Didactic •••• E320S 41 Programação avançada com CLP Siemens S7 300 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”. 3.1.5 Memória elétrica Neste exemplo é mostrado como colocar contatos NA e NF em paralelo na linguagem Ladder, conforme Figura 3.2. Figura 3.2 – Memórias elétricas. Festo Didactic •••• E320S 42 Programação avançada com CLP Siemens S7 300 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. 3.1.6 Saídas Retentivas Outra solução possível para o circuito mostrado no exemplo anterior é mostrado neste exemplo, usando as saídas retentivas, S (set) e R (reset). A Figura 3.3 mostra a aplicação das saídas retentivas em um circuito. 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). Festo Didactic •••• E320S 43 Programação avançada com CLP Siemens S7 300 Figura 3.3 – Saídas retentivas. 3.1.7 Contatos Impulsionais Também denominados como flancos, estes contatos são instruções capazes de detectar a borda de subida ou a borda de descida de um sinal, na mudança do RLO de um operando booleano, como uma instrução NA ou NF, transferindo para a saída um pulso com período de duração muito curto, igual a um scan (período de uma varredura) do CLP. Festo Didactic •••• E320S 44 Programação avançada com CLP Siemens S7 300 É necessário um memory bit (MByte.bit) para registrar o estado anterior do RLO da entrada. 3.1.8 Flanco Positivo Em STL: A I0.0 //Testa se RLO de I0.0 = 1 FP M0.0 //Flanco positivo, detecta borda de subida = Q0.0 //RLO de Q0.0 = 1 por um período de um scan. Festo Didactic •••• E320S 45 Programação avançada com CLP Siemens S7 300 3.1.9 Flanco Negativo Em STL: A I0.0 //Testa se RLO de I0.0 = 1 FN M0.0 //Flanco negativo, detecta borda dedescid a = Q0.0 //RLO de Q0.0 = 1 por um período de um scan. Festo Didactic •••• E320S 46 Programação avançada com CLP Siemens S7 300 3.2 Instruções de Temporização As instruções de temporização têm a função gerar um retardo na ativação ou desativação de um determinado dispositivo. Elas são divididas em cinco tipos para os controladores da família S7 300 da Siemens, são eles: S_ODT: Siemens On Delay Timer – Temporizador com retardo na ativação. S_OFFDT: Siemens OFF Delay Timer – Temporizador com retardo na desativação. S_PULSE: Siemens Pulse – Temporizador de pulso S_PEXT: Siemens Extended Pulse – Temporizador de pulso estendido S_ODTS: Siemens Retentive On Delay Timer – Temporizador retentivo com retardo na ativação. Os temporizadores têm uma área de memória reservada na CPU de 16 bits, ou seja, uma WORD para cada endereço de temporizador. A quantidade de endereços disponíveis para temporizadores depende da CPU utilizada, para a maioria delas são 256 endereços disponíveis, de T0 a T255. A Figura 3.4 mostra a configuração de um bloco temporização em linguagem Ladder. Figura 3.4 – Parâmetros de um temporizador em linguagem ladder. Festo Didactic •••• E320S 47 Programação avançada com CLP Siemens S7 300 Na parte superior do bloco é atribuído o seu endereço (Timer Address), à esquerda do bloco estão suas entradas e à direita estão suas saídas. A entrada S é uma entrada do tipo booleana para o acionamento do temporizador, quando o RLO de S sofre uma mudança de 0 para 1 o temporizador é iniciado. A entrada TV (timer Value) armazena o valor de tempo a ser contado. O parâmetro de tempo para o S7 300 tem a seguinte sintaxe, 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. O valor de tempo máximo que pode ser atribuído ao temporizador é 9990 segundos, ou 2H_46M_30S. A base de tempo é selecionada automaticamente em função do valor de tempo atribuído. A divisão dos bit’s da memória dos temporizadores é mostrada na Figura 3.5. Figura 3.5 – Registro de armazenamento dos valores de tempo. Festo Didactic •••• E320S 48 Programação avançada com CLP Siemens S7 300 O parâmetro de tempo em TV pode também ser atribuído conforme a sintaxe abaixo: W#16#<tbcd> Onde: t é a base de tempo; b, c, d = valor de tempo em BCD (HEX). Exemplo: W#16#13FF 3FFHEX = 1023DEC Base tempo x valor = 0.1 segundo x 1023 = 102,3 segundos Festo Didactic •••• E320S 49 Programação avançada com CLP Siemens S7 300 3.2.1 Temporizador com retardo na ativação S_ODT A saída Q do temporizador será acionada (RLO=1) depois de decorrido o tempo parametrizado em TV (S5T#...), a partir do instante em que a entrada S do bloco for ativada (RLO=1). A entrada deve permanecer ativa para que o bloco conte o tempo programado e ligue a saída. Ao desacionar sua entrada (RLO=0) a saída será resetada também (RLO=0). Um exemplo de aplicação deste temporizador é mostrado na Figura 3.6. Festo Didactic •••• E320S 50 Programação avançada com CLP Siemens S7 300 Figura 3.6 – Exemplo de temporizadores em linguagem Ladder, STL e FBD. 3.2.2 Temporizador retentivo com retardo na ativaçã o S_ODTS Festo Didactic •••• E320S 51 Programação avançada com CLP Siemens S7 300 A saída Q do temporizador será acionada (RLO=1) depois de decorrido o tempo parametrizado em TV a partir do instante em que o RLO da entrada S do bloco for “1”. A saída permanecerá ativa mesmo se a entrada S for desacionada, e será desligada somente no instante em que o RLO da entrada R (reset) for “1”. 3.2.3 Temporizador com retardo na desativação S_OFF DT Festo Didactic •••• E320S 52 Programação avançada com CLP Siemens S7 300 Quando o RLO da entrada S for “1” a saída Q do temporizador será acionada (RLO=1). Enquanto o RLO da entrada S permanecer em “1” o temporizador não inicia a contagem. A saída Q só será desligada depois de decorrido o tempo parametrizado em TV, a partir do instante em que o RLO da entrada S mudar de “1” para “0”. Temporizador de pulso S_PULSE Quando o RLO da entrada S for “1” a saída Q do temporizador será acionada (RLO=1) e a contagem de tempo iniciada. Enquanto o RLO da entrada S permanecer em 1 o temporizador continua contando até que se atinja o tempo programado em TV, e então a saída Q será desligada. A saída também será resetada caso quando o RLO da entrada for “0”. Festo Didactic •••• E320S 53 Programação avançada com CLP Siemens S7 300 3.2.4 Temporizador de pulso estendido S_PEXT 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. 3.3 Instruções de Contagem de Pulsos Os blocos contadores são utilizados para registrar pulsos elétricos. São três os tipos de contadores para o S7 300 da Siemens: S_CU: Siemens Counter Up – Contador Crescente S_CD: Siemens Counter Down – Contador Decrescente S_CUD: Siemens Counter Up and Down – Contador Crescente e Decrescente Festo Didactic •••• E320S 54 Programação avançada com CLP Siemens S7 300 Os contadores têm uma área de memória reservada na CPU de 16 bits, assim como os temporizadores, ou seja, uma WORD para cada endereço de contador. A quantidade de endereços disponíveis para contadores depende da CPU utilizada, para a maioria delas são 256 endereços disponíveis, de C0 a C255. 3.3.1 Contador Crescente e Decrescente S_CUD O valor de contagem em PV tem a seguinte sintaxe: C# <Nº Inteiro>. As entradas CU e CD recebem e registram os pulsos para contagem crescente e decrescente respectivamente. A entrada S (set) carrega o valor de contagem armazenado em PV no registro do contador C0. Ao receber um pulso na entrada CD o contador decrementa uma unidade no valor de contagem e ao receber um pulso na entrada CU o contador incrementa uma Festo Didactic •••• E320S 55 Programação avançada com CLP Siemens S7 300 unidade no valor de contagem. O limite superior de contagem é 999 e o limite inferior é zero. 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. O valor de contagem será atualizado em memórias através das saídas CV e CV_BCD. O contador será resetado quando o RLO da entrada R for igual a 1. O valor de contagem é zerado e a saída terá seu RLO = 0. 3.3.2 Contador Crescente S_CU A entrada S (set) carrega o valor de contagem armazenado em PV no registro do contador C0. Ao receber um pulso na entrada CU o contador incrementa uma unidade no valor de contagem, a partir do valor pressetado em PV, até o limite superior de contagem (999). 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. O valor de contagem será atualizado em memórias através das saídas CV e CV_BCD. Festo Didactic •••• E320S 56 Programação avançada com CLP Siemens S7 300 O contador será resetado quando o RLO da entrada R for igual a 1. O valor de contagem é zerado e a saída terá seu RLO = 0. 3.3.3 Contador Decrescente S_CD A entrada S (set) carrega o valor de contagem armazenado em PV no registro do contador C0. Ao receberum pulso na entrada CD o contador decrementa uma unidade no valor de contagem a partir do valor presetado até zero. 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. O valor de contagem será atualizado em memórias através das saídas CV e CV_BCD. O contador será resetado quando o RLO da entrada R for igual a 1. O valor de contagem é zerado e a saída terá seu RLO = 0. Um exemplo de programa utilizando contadores é mostrado na Figura 3.7. Festo Didactic •••• E320S 57 Programação avançada com CLP Siemens S7 300 Figura 3.7 – Exemplo de programa com contador decrescente. 3.3.4 Counters em STL Em STL os contadores são representados por CU (counter up) e CD (Counter Down). Outras instruções como L, R e S são utilizadas para o controles dos contadores. L – carrega os valores em ACCU1. R – Reseta o contador. S – Seta o contador com o valor carregado em ACCU1. Festo Didactic •••• E320S 58 Programação avançada com CLP Siemens S7 300 Exemplo: L C#14 //Carrega o valor C#14 em ACCU1; A I 0.1 //Checa o RLO de I0.1, se RLO = 1, então; S C1 //Carrega o contador C1 com o valor de ACCU1 ; A I 0.0 //Checa o RLO de I0.0, se RLO = 1, então CD C1 //Decrementa o contador C1 AN C1 //Quando C1=0, então; = Q 0.0 //O RLO de Q0.0 será igual a 1 3.4 Instruções de Comparação Essas instruções realizam uma comparação matemática entre o conteúdo de registros e valores constantes quando o RLO de sua entrada é “1”. Se o resultado da comparação matemática retornar verdadeiro, uma saída será acionada (RLO=1). No catálogo de instruções os comparadores aparecem divididos em tres grupos, que são os comparadores para valores inteiros de dezesseis bits (INT), para valores inteiros de 32 bits (DINT) e para valores reais (REAL) também de 32 bits, conforme mostra a Figura 3.8. Figura 3.8 – Instruções de comparação. Festo Didactic •••• E320S 59 Programação avançada com CLP Siemens S7 300 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. Festo Didactic •••• E320S 60 Programação avançada com CLP Siemens S7 300 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. 3.4.1 Instruções de comparação em STL 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 comparação do tipo INT: L MW10 //Carrega o conteúdo de MW10 (16-bit) L W#16#FF //Carrega o valor FF Hexa (16-bit) >I //Compara se ACCU2 (MW10) é maior (>) que ACC U1 (W#16#FF) = M 2.0 //RLO = 1 se MW10 > W#16#FF Festo Didactic •••• E320S 61 Programação avançada com CLP Siemens S7 300 Exemplo de comparação do tipo DINT: L MD10 //Carrega o conteúdo de MD10 (32-bit) L MD14 //Carrega o conteúdo de MD14 (32-bit) >D //Compara se ACCU2 (MD10) é maior (>) que ACCU 1 (MD14) = M 2.0 //RLO = 1 se MD10 > MD14 Exemplo de comparação do tipo REAL: L MD10 //Carrega o conteúdo de MD10 L 1.36E+02 //Carrega a constante 1.36E+02 >R //Compara se ACCU2 (MD10) é maior (>) que ACC U1 (1.36E+02) = M 2.0 //RLO = 1 se MD10 > 1.36E+02 3.5 Instrução de Transferência de dados Esta instrução é utilizada para transferir valores constantes ou conteúdo de registros para outros registros. Exemplo de aplicação: Festo Didactic •••• E320S 62 Programação avançada com CLP Siemens S7 300 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. 3.6 Instrução de Transferência de dados em STL A tranferência de dados em STL PE realizada por meio das instruções L (Load) e T (Transfer). A instrução L carrega o valor em ACCU1 e a instrução T transfere o conteúdo de ACCU1 para uma memória. 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) p ara MB10. 3.7 Instruções Matemáticas com números inteiros (IN T) e reais (REAL) As operações matemáticas no S7 300 são divididas em dois grupos: Integer function – Operações matemáticas com números inteiros: correspondem as operações aritméticas básicas para números inteiros de 16 bits ou 32 bits. 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. 3.7.1 Integer function Festo Didactic •••• E320S 63 Programação avançada com CLP Siemens S7 300 Os blocos matemáticos para operações com números inteiros possuem três entradas e duas saídas. A entrada EN quando acionada (RLO=1) permite a execução da operação, realizando a respectiva operação entre as entradas IN1 e IN2. O resultado da operação é transferido para um registro declarado em OUT. Quando a operação é realizada a saída ENO é acionada (RLO=1). Operações Básicas: Exemplo de aplicação: Quando o RLO de I0.0 for “1” o conteúdo da memória MW0 é somado ao conteúdo de MW2. O resultado desta operação é armazenado em MW10 e a saída Q4.0 será setada. Festo Didactic •••• E320S 64 Programação avançada com CLP Siemens S7 300 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. 3.7.2 Floating point function Festo Didactic •••• E320S 65 Programação avançada com CLP Siemens S7 300 As funções matemáticas com ponto flutuante executam operações com números reais de 32 bits. 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. Festo Didactic •••• E320S 66 Programação avançada com CLP Siemens S7 300 Operações Trigonométricas: Demais Operações: Festo Didactic •••• E320S 67 Programação avançada com CLP Siemens S7 300 3.7.3 Instruções matemáticas em STL As operações matemáticas podem ser realizadas entre números inteiros e reais. Para números inteiros (INT) usa-se a sintaxe: +I, -I, *I, /I Para números Reais (REAL): +R, -R, *R, /R Neste exemplo será realizada a soma entre dois valores inteiros.L IW10 //Carrega o valor de IW10 em ACCU1 L MW14 //Carrega o valor de ACCU1 em ACCU2 e o valo r de MW14 em ACCU1. +I //Soma o valor de ACCU2 com ACCU1 e armazena o resultado em ACCU1 T MW20 //Armazena o valor de ACCU1 em MW20. 3.8 Instruções lógicas – operações booleanas Estas instruções realizam a comparação de um par de words (16 bits) ou Double Word (32 bits) bit a bit de acordo com a lógica booleana do bloco. As instruções lógicas são divididas em dois grupos de acordo com o tamanho da informação: W – WORD (16 bits) e DW – DWORD (32 bits). Até três tipos de operações lógicas podem ser realizadas: AND, OR e XOR. Festo Didactic •••• E320S 68 Programação avançada com CLP Siemens S7 300 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. MW2 = (MW0) AND (FFHEX) Festo Didactic •••• E320S 69 Programação avançada com CLP Siemens S7 300 Esta operação, em particular, é denominada “mascara” e é bastante comum e usual em programação quando se deseja “filtrar” uma informação a fim de coletar apenas os bits que são relevantes para uma determinada operação. Neste exemplo foram aproveitados apenas os oito primeiros bits da Word MW0. 3.8.1 Operações booleanas em STL O exemplo à seguir demonstra como é realizado a lógica AND entre dois registros. O mesmo conceito pode ser aplicado às demais operações lógicas. L IW20 //Carrega o conteúdo de IW20 em ACCU1. L IW22 //Carrega o conteúdo de ACCU1 em ACCU2 e IW 22 em ACCU1. AW //ACCU2 AND ACCU1 = ACCU1 T MW 8 //Armazena o resultado de ACCU1 em MW8. Festo Didactic •••• E320S 70 Programação avançada com CLP Siemens S7 300 4 Estruturas de Programa 4.1 Organization Blocks – OB’s Os Organizations Blocks (Blocos de Organização) são a interface entre o sistema operacional da CPU e o programa de usuário. OB's são utilizados para organizar o programa de usuário. Os OB’s são executados de forma cíclica seguindo uma ordem de prioridade. 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. 4.2 Data Blocks – Blocos de Dados (DB) 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) . Festo Didactic •••• E320S 71 Programação avançada com CLP Siemens S7 300 Uma DB shared é um DB que pode ser acessado e compartilhado por qualquer bloco de programa criado pelo usuário. Qualquer bloco de programa pode ler e escrever dados nas variáveis da DB shared. Esta DB é também denominada como DB Global . Uma DB instance é um DB dedicado a um Function Block FB. Todos os dados e parâmetros das variáveis locais do FB são armazenados no seu DB instance, que passa a ser uma “memória particular” deste FB. A denominação ‘instance’ representa um bloco FB chamado, por exemplo, se um bloco FB10 for chamado 3 vezes haverá 3 instâncias deste bloco, cada uma com um Data Block. A Figura 4.1 mostra as duas estruturas aplicadas. No exemplo da figura [] foi criada um DB Shared (DB 20) que é compartilhada por três blocos de programas: FC10, FC11 e FB12. Uma outra DB foi criada (DB 112) como Instance de FB12, essa DB é acessada apenas por FB12, que escreve dados nela. Figura 4.1 – Diferentes estruturas de um Data Block. 4.3 Criando um Data Block Shared Um DB Shared pode ser criado através da barra de menus em Insert ����S7 Block ����Data Block , conforme Figura 4.2, ou clicando com o botão direito em Blocks ����Insert New Object ����Data Block , conforme Figura 4.3. Festo Didactic •••• E320S 72 Programação avançada com CLP Siemens S7 300 Figura 4.2 – Inserindo um Data Block. Figura 4.3 - Inserindo um Data Block. 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. Festo Didactic •••• E320S 73 Programação avançada com CLP Siemens S7 300 Figura 4.4 – Escolhendo o formato de um Data Block. As informações que devem ser atribuídas a DB, conforme a Figura 4.5, são: Figura 4.5 – Configurando variáveis em um DB. No exemplo mostrado na Figura 4.6 foram criadas 6 variáveis de tipos diferentes, consequentemente com tamanhos diferentes dentro da DB, cada uma alocada num endereço próprio criado automaticamente no momento da criação da variável. Festo Didactic •••• E320S 74 Programação avançada com CLP Siemens S7 300 Figura 4.6 - Configurando variáveis em um DB. Para acessar estas variáveis e ler o seu conteúdo ou escrever um dado deve-se utilizar a seguinte sintaxe: Exemplo: ler os dados das variáveis criadas na DB da Figura 4.6. Para ler 1 BIT: DB1.DBX0.0 � Acessa os dados de VAR_1 (BIT = 1) Para ler 1 BYTE: DB1.DBB1 � Acessa os dados de VAR_2 (39 HEX) Para ler 1 WORD: DB1.DBW2 � Acessa os dados de VAR_3 (C4 HEX) Para ler 1 DWORD: DB1.DBD4 � Acessa os dados de VAR_4 (FF HEX) Número Inteiro (16 bits) : DB1.DBW8 � Acessa os dados de VAR_5 (10) Número Real (32 bits): DB1.DBD10 � Acessa os dados de VAR_6 (5,6) Exemplo de Programa para ler e escrever dados numa DB: Festo Didactic •••• E320S 75 Programação avançada com CLP Siemens S7 300 Figura 4.7 – Acessando as informações de um DB. 4.4 Programação Orientada – Blocos de Programa O Step7 300 permite a criação de blocos de programas orientados como subrotinas de um programa principal. Eles estão abaixo dos organization blocks (OB’s) na hierarquia de programa e podem ser chamados como subrotinas de OB1 quantas vezes for necessário. A utilização de subrotinas torna o programa de usuário mais organizado evitando a repetição de lógicas de controle dentro do programa principal, facilitando sua criação bem como sua interpretação. No Step7 300 existem duas estruturas distintas de blocos de programas, denominadas como Functions (FC’s) e Functions Blocks (FB’s) . Ambas estão abaixo das OB’s na hierarquia de programa e devem ser acessadas por meio uma instrução de chamada dentro de OB1, por exemplo. Festo Didactic •••• E320S 76 Programação avançada com CLP Siemens S7 300 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 programasque 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. 4.5 Criando uma FC – Function Neste exemplo será mostrado como implementar um bloco de programa do tipo FC como rotina padrão para partida de motores. O bloco deverá ser criado e chamado quantas vezes forem necessárias dentro de OB1 possibilitando o acionamento de vários motores diferentes usando a mesma rotina. 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. Festo Didactic •••• E320S 77 Programação avançada com CLP Siemens S7 300 Figura 4.8 – Criando as variáveis locais de um bloco de programa FC. As variáveis do tipo IN permitem a entrada de sinais que serão processadas dentro do bloco. OUT são variáveis de saída utilizadas para retornar o valor processado pelo bloco. Variáveis do tipo IN/OUT são usadas para passar informações para o bloco, processá-las e armazenar o resultado na mesma variável. As variáveis do tipo TEMP são variáveis temporárias armazenadas na pilha (L – stack) da CPU apenas durante a execução do bloco. RETURN permite o retorno de um valor (RET_VAL) ao término da execução do bloco. 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. Festo Didactic •••• E320S 78 Programação avançada com CLP Siemens S7 300 A entrada EN é utilizada para habilitar o bloco e a saída ENO é setada quando o bloco chega ao término de sua execução, podendo ser utilizada para habilitar outra instrução ou outro bloco de programa na sequência. Figura 4.9 – Bloco de programa para partida direta de motores. Pode-se inserir uma FC através da barra de menus em Insert ����S7 Block ����Function , como mostra a Figura 4.10 ou clicando com o botão direito do mouse sobre a pasta Blocks na árvore do projeto e seguindo os passos da Figura 4.11 para inserir uma FC. Figura 4.10 – Inserindo uma FC. Festo Didactic •••• E320S 79 Programação avançada com CLP Siemens S7 300 Figura 4.11 - Inserindo uma FC. 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. Ao criar o bloco pode-se inserir um nome simbólico (Symbolic Name) e comentários para este, porém não é possível alterar a identificação do bloco de FC1 para outro nome simbólico. Na aba General – Part 2 podem-se inserir informações do criador do bloco e versão do mesmo. O espaço mínimo ocupado pelo bloco na memória do controlador é mostrado conforme Figura 4.13. Festo Didactic •••• E320S 80 Programação avançada com CLP Siemens S7 300 Figura 4.12 – Selecionando a linguagem do bloco de programa. Figura 4.13 – Propriedades do bloco de programa. Festo Didactic •••• E320S 81 Programação avançada com CLP Siemens S7 300 Na aba Calls é mostrado se outros blocos de programas foram chamados dentro deste como subprogramas, conforme mostra a Figura 4.14, neste exemplo, um function block FB1 foi declarado como variável multiple instance dentro de um function block FB10. Este método de estruturação de programa será mais bem detalhado posteriormente neste texto. 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. Festo Didactic •••• E320S 82 Programação avançada com CLP Siemens S7 300 Figura 4.15 – Configuração dos atributos de um bloco de programa. Ao abrir o bloco devem-se declarar as variáveis locais conforme mostram as Figura 4.16 até Figura 4.19. Em seguida basta inserir uma network e fazer o programa que deverá executar a rotina proposta, Figura 4.20. Neste exemplo, a rotina proposta deverá executar a função de partida direta de motores, com um botão para ligar o motor (S1), um para desligar (S0) e o contato de um rele térmico de segurança e uma saída para o acionamento do contator (RT), todas estas variáveis deverão ser declaradas como booleanas (BOOL). As variáveis locais criadas dentro de uma FC ficam limitadas a 127 endereços no total. Festo Didactic •••• E320S 83 Programação avançada com CLP Siemens S7 300 Figura 4.16 – variáveis locais de entrada do bloco. Figura 4.17 – variáveis locais de saída do bloco. Figura 4.18 – inserindo as instruções. Festo Didactic •••• E320S 84 Programação avançada com CLP Siemens S7 300 Figura 4.19 – inserindo as variáveis locais. O programa finalizado em FC1 é mostrado na Figura 4.20 com todas as suas variáveis declaradas. A sintaxe “#” indica uma variável do bloco, e indica que esta variável não se trata de um endereço absoluto. Figura 4.20 – Programa para partida direta de motores. Festo Didactic •••• E320S 85 Programação avançada com CLP Siemens S7 300 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. Figura 4.21 – Salvando e compilando um FC. 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. Figura 4.22 – Chamando o bloco FC criado em OB1. Os dados a serem processados pelo bloco serão fornecidos através de endereços absolutos em OB1. Os endereços absolutos podem ser relacionados a “nomes simbólicos” por meio do Symbol Table . Para acessar o Symbol Table basta clicar sobre Festo Didactic •••• E320S 86 Programação avançada com CLP Siemens S7 300 a pasta S7 Program na árvore de projeto, conforme Figura 4.23 ou na barra de menus em Options ����Symbol Table dentro de qualquer bloco de programa do projeto, conforme Figura 4.24. As variáveis declaradas são endereços absolutos do CLP, ou seja, são endereços de entradas e saídas físicas do equipamento, conforme mostra a Figura 4.25. Figura 4.23 – Criando tabela de variáveis. Figura 4.24 - Criando tabela de variáveis. Festo Didactic •••• E320S 87 Programação avançada com CLP Siemens S7 300 Figura 4.25 – Symbol Table: lista de alocação de variáveis. Uma vez declaradas as variáveis no Symbol Table, deve-se relacionar cada uma a sua respectiva entrada ou saída no bloco, conforme Figura 4.26. Figura 4.26 – Relacionando as variáveis locaiscom as variáveis absolutas. Festo Didactic •••• E320S 88 Programação avançada com CLP Siemens S7 300 Figura 4.27 – Bloco de programa para partida de motores criado. Uma vez criada, a Function FC1 pode ser chamada quantas vezes forem necessárias dentro de OB1, conforme o programa da Figura 4.28. Festo Didactic •••• E320S 89 Programação avançada com CLP Siemens S7 300 Figura 4.28 – Programa final usando a rotina criada em FC1. Festo Didactic •••• E320S 90 Programação avançada com CLP Siemens S7 300 4.6 Criando um FB 4.6.1 Instance FB Assim como os Functions subrotinas de OB1 ou de outros blocos. “chamado” dentro de OB1, por exemplo, necessita armazenamento temporário ou permanente dos dados processados pelo bloco resumo, nessa estrutura cada FB tem uma área de memória do tipo Data Block reservada e dedicada a ele, conforme mostram Figura Programação avançada com CLP Siemens S7 300 Criando um FB – Function Block Instance FB Functions (FC), os FB’s são blocos de programa criados como subrotinas de OB1 ou de outros blocos. Cada Instance Function “chamado” dentro de OB1, por exemplo, necessita de um Data Block armazenamento temporário ou permanente dos dados processados pelo bloco cada FB tem uma área de memória do tipo Data Block reservada dedicada a ele, conforme mostram a Figura 4.29 e Figura 4.30. Figura 4.29 – Estrutura Instance FB no S7 300. Figura 4.30 – Estrutura Instance FB. são blocos de programa criados como ons Block criado e Data Block (DB) para o armazenamento temporário ou permanente dos dados processados pelo bloco. Em cada FB tem uma área de memória do tipo Data Block reservada Estrutura Instance FB no S7 300. Festo Didactic •••• E320S 91 Programação avançada com CLP Siemens S7 300 Como exemplo de aplicação será criado um bloco de programa com a função de contagem de pulsos externos para ligar uma saída qualquer do CLP, um contador do tipo crescente, que será denominado Counter Up , conforme mostra a Figura 4.31. 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. Figura 4.31 – Bloco de programa do contador crescente criado como Function Block. Os procedimentos para inserir um FB são os mesmos para inserir uma FC, conforme mostrado na Figura 4.32 e Figura 4.33 Festo Didactic •••• E320S 92 Programação avançada com CLP Siemens S7 300 Figura 4.32 – Inserindo um FB. Figura 4.33 – Inserindo um FB. Ao criar a FB deve-se escolher a linguagem na qual o programa será implementado e escolher se essa FB será do tipo Instance ou Multi-instance, marcando ou desmarcando a opção indicada na Figura 4.34. Festo Didactic •••• E320S 93 Programação avançada com CLP Siemens S7 300 Figura 4.34 – Configurando uma FB. As variáveis locais de entrada e saída do bloco são declaradas conforme mostra Figura 4.35 e Figura 4.36. Uma diferença que pode ser observada em relação ao bloco do tipo FC é que as variáveis declaradas são automaticamente alocadas num endereço do Data Block (DB) da FB. Figura 4.35 – Declarando variáveis locais de um bloco FB. Festo Didactic •••• E320S 94 Programação avançada com CLP Siemens S7 300 Figura 4.36 - Declarando variáveis locais de um bloco FB. Além das variáveis de entrada IN e saída OUT, as FB’s possuem também variáveis do tipo estáticas, STATIC VARIABLES , que são variáveis locais restritas apenas para processamento de dados internos ao bloco e que possuem espaço reservado dentro do seu Data Block (DB). 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. Estas variáveis internas do bloco poderiam também ser declaradas como variáveis do tipo TEMP (Temporary Data), porém elas não teriam uma área reservada dentro da DB deste bloco e seus dados seriam então armazenados temporariamente na pilha (L stack) apenas durante a execução do Function Block. Festo Didactic •••• E320S 95 Programação avançada com CLP Siemens S7 300 Figura 4.37 – Variáveis locais declaradas como STAT. A seguir, será mostrado o programa detalhado com a rotina de contagem de pulsos implementada para este bloco. Festo Didactic •••• E320S 96 Programação avançada com CLP Siemens S7 300 Na network 1 ao acionar a entrada #set do bloco o valor armazenado em #preset é transferido para a variável interna #ref do bloco. Na network 2, através da entrada #c_up o bloco recebe os pulsos. Ao ser acionada a entrada #c_up a variável #memoria é comparada com o valor de referencia (limite da contagem). Enquanto #memoria for menor que #ref o resultado da comparação retorna verdadeiro e a saída da instrução de comparação retorna verdadeiro, gerando um pulso na entrada da instrução de soma ADD, que soma 1 ao conteúdo do registro #memoria e armazena no mesmo registro #memoria (variável tipo STAT). Toda vez que que #c_up é acionado o registro memória é incrementado em uma unidade. O flanco positivo antes da instrução ADD permite a passagem de apenas um pulso na borda de Festo Didactic •••• E320S 97 Programação avançada com CLP Siemens S7 300 subida do sinal, não permitindo que o registro memória seja incrementado em mais de uma unidade. A variável #memória é incrementada e logo na sequência transferida para a variável #valor do tipo OUT, que poderá ser lida pelo usuário. Conforme ocorrem os incrementos, o registro #memoria torna-se igual a #ref, portanto o resultado da comparação retorna falso na network 2, e o registro #memoria deixa de ser incrementado. Na network 3 o resultado da comparação retorna verdadeiro para igual (#memoria = #ref) e desta forma a saída #Q do bloco é setada e assim permanece, até que a entrada #reset seja acionada na network 4, resetando #Q e transferindo o valor 0 (zero) para os registros #memoria e #valor simultaneamente. Desta forma, uma nova contagem poderá ser iniciada. A rotina do bloco de programa FB1 deverá ser salvar afim de compilar o bloco. Por se tratar de um Function Block é necessário associar a ele uma memória do tipo DB (Data Block) que irá armazenar os dados de suas variáveis. Para inserir uma DB basta selecionar a pasta blocks na árvore de projeto abrir a guia Insert ����S7 Block ����4 Data Block na barra de menus, conforme mostra Figura 4.38. Figura 4.38 – Criando um DB para o FB1. Festo Didactic •••• E320S 98 Programação avançada com CLP Siemens S7 300 Para associar esta DB a um Instance FB selecione esta opção conforme Figura 4.39 e escolha o bloco ao qual a DB será associada, em seguida clique em OK. Figura 4.39 – Vinculando o DB ao FB1. O procedimento para criar uma DB instance de
Compartilhar