1. TRATAMENTO DE VARIÁVEIS
As variáveis são os elementos que, em última análise transportam as informações das interfaces de entrada para o programa; de uma parte do programa para outra, e do programa para as interfaces de saída. O conteúdo das variáveis, processado de forma adequada, determina o fluxo de todo o programa, controlando as ações a serem executadas e gerando resultados de saída.
Hoje em dia os processos de uma maneira geral trabalham, afora pontos binários, com uma grande gama de valores numéricos e alfa-numericos, estes por sua vez devem ser lidos, comparados e manipulados pelo controlador.
Além do mais, as facilidades apresentadas pelos recursos básicos do Ladder, em controles combinacionais, desaparecem rapidamente quando processo controlado exige lógicas seqüenciais com um mínimo de sofisticação.
Dada tais circunstancias, uma abordagem mais ampla, que vá além do “bobina / contado”, torna-se necessária. Antes, porém, vale rever ou conhecer alguns conceitos relativos a forma como o CLP reconhece e trata os dados da memória de aplicação.
1.1. TIPOS DE DADOS
Os valores são armazenados na no controlador – assim como em qualquer equipamento digital – sob forma binária. Dependendo da ordem grandeza ou do contexto, estes dados são trados de forma distinta.
Na série S7-200, memória do controlador pode ser acessada de quatro formas básicas.
A Tabela 1.1 contém tais formas e a quantidade de informação abrangida em cada forma de acesso.
Tabela 1.1 – Formas de acesso à memória de acordo com a resolução.
Tipo de Dado* Resolução
Bit 1 Bit
Byte 8 Bits
Word 16 Bits
Double Word 32 Bits
* Existem, ainda dados não numéricos que são tratados com seqüência de caracteres “Char”
Ou seja, cada tipo de dado está associado basicamente à quantidade de memória ocupada por um operador. Assim, este critério serve apenas para indicar o tamanho do dado.
Existem, ainda, outras convenções (como, por exemplo, Nible que é um conjunto de quatro bits) que não são adotadas pelo fabricante do equipamento.
Outro parâmetro importante é o tipo de operador, este define a classe numérica do dado.
A Tabela 1.2 fornece os ranges provenientes das relações entre os dois parâmetros.
Tabela 1.2 – Tipos de Operador e Ranges.
Tipo de operador Precisão Range
Booleano Bit 0 ~ 1
Byte 0 ~ 255
Word 0 ~ 65535
Inteiro sem sinal
Double word 0 ~ 4294967296
Byte* (-)127 ~ 127
Word (-) 32677 ~ 32677
Inteiro
Double word (-) 2147483647 ~ 2147483647 Real
Ponto Flutuante
Double word (FLOAT IEEE)
(+) 1.175495E-38 ~ 3.402823E+38 (-) 1.175495E-38 ~ 3.402823E+38 Seqüência de
Caracteres (CHAR)
1 + N.de Caracteres x 8 Bits
ASCII (1~255 Caracteres)
* Nos controladores da serie S7-200 os dados do tipo Byte são sempre tratados como inteiro com sinal.
1.2. ENDEREÇAMENTO
Para as diversas áreas de memória da CPU S7–200, com exceção das tabelas de pontos analógicos (entradas e saídas), dos contadores e timers, a forma de endereçamento obedece a seguinte lógica:
Bit => [Área][Byte].[Bit] (Exemplo Q0.0, S34.6 ....) Byte => [Área][B][Byte] (Exemplo IB10, VB10 ....) Word => [Área][W][Byte inicial] (Exemplo SW4, VW6 ....) Double Word => [Área][D] [Byte inicial] (Exemplo VD0, ID20 ....) As tabelas de pontos analógicos são acessadas somente como Word. O endereço é definido pelo número da entrada “AI” ou saída “AQ” (Exemplo AQ0, AI4...).
Os timers e contadores possuem duas áreas de memória distintas, um bit de staus e uma Word contendo o valor. O endereçamento utiliza o “T” ou “C” mais número do dispositivo. Tanto o bit quanto a Word possuem o mesmo endereço o programa diferencia-os pelo contexto ou pela instrução utilizada (Exemplo C0, T32...).
Os contadores rápidos são tratados sempre como Double Word. O endereço e formado por “HC” mais o número do contador (Exemplo HC0, HC1...).
Existem algumas particularidades que devem ser observadas quando do acesso aos endereços de memória. As figuras a seguir, podem ajudar a entendê-las.
Mem Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7
Byte 0 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
Byte 1 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7
Byte 2 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7
Byte 3 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7
Byte 4 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7
Byte 5 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7
Byte 6 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7
. . . . . . . . .
Byte N N.0 N.1 N.2 N.3 N.4 N.5 N.6 N.7
Figura 1.1 - Exemplo de um mapa memória genérico.
Fonte – Ilustração do autor
A Figura 1.2 mostra um exemplo de acesso ao sexto bit do byte 1 na tabela imagem das entradas digitais.
I0.0 I0.1 I0.2 I0.3 I0.4 I0.5 I0.6 I0.7
I1.0 I1.1 I1.2 I1.3 I1.4 I1.5 I1.6 I1.7
I2.0 I2.1 I2.2 I2.3 I2.4 I2.5 I2.6 I2.7
I3.0 I3.1 I3.2 I3.3 I3.4 I3.5 I3.6 I3.7
I4.0 I4.1 I4.2 I4.3 I4.4 I4.5 I4.6 I4.7
I5.0 I5.1 I5.2 I5.3 I5.4 I5.5 I5.6 I5.7
I6.0 I6.1 I6.2 I6.3 I6.4 I6.5 I6.6 I6.7
I7.0 I7.1 I7.2 I7.3 I7.4 I7.5 I7.6 I7.7
I8.0 I8.1 I8.2 I8.3 I8.4 I8.5 I8.6 I8.7
I9.0 I9.1 I9.2 I9.3 I9.4 I9.5 I9.6 I9.7
Figura 1.2 - Exemplo endereço tipo Bit.
Fonte – Ilustração do autor
Figura 1.3 mostra a estrutura da variável VB0.
V0.0 V0.1 V0.2 V0.3 V0.4 V0.5 V0.6 V0.7
V1.0 V1.1 V1.2 V1.3 V1.4 V1.5 V1.6 V1.7
V2.0 V2.1 V2.2 V2.3 V2.4 V2.5 V2.6 V2.7
V3.0 V3.1 V3.2 V3.3 V3.4 V3.5 V3.6 V3.7
V4.0 V4.1 V4.2 V4.3 V4.4 V4.5 V4.6 V4.7
V5.0 V5.1 V5.2 V5.3 V5.4 V5.5 V5.6 V5.7
V6.0 V6.1 V6.2 V6.3 V6.4 V6.5 V6.6 V6.7
V7.0 V7.1 V7.2 V7.3 V7.4 V7.5 V7.6 V7.7
LSB -- -- -- MSB
VB1
V1.0 -- -- -- V1.7
Figura 1.3 - Exemplo endereço tipo Byte.
Fonte – Ilustração do autor
A Figura 1.4 mostra a estrutura da variável VW4
V0.0 V0.1 V0.2 V0.3 V0.4 V0.5 V0.6 V0.7
V1.0 V1.1 V1.2 V1.3 V1.4 V1.5 V1.6 V1.7
V2.0 V2.1 V2.2 V2.3 V2.4 V2.5 V2.6 V2.7
V3.0 V3.1 V3.2 V3.3 V3.4 V3.5 V3.6 V3.7
V4.0 V4.1 V4.2 V4.3 V4.4 V4.5 V4.6 V4.7
V5.0 V5.1 V5.2 V5.3 V5.4 V5.5 V5.6 V5.7
V6.0 V6.1 V6.2 V6.3 V6.4 V6.5 V6.6 V6.7
V7.0 V7.1 V7.2 V7.3 V7.4 V7.5 V7.6 V7.7
LSB -- -- -- MSB
VW4
VB5 VB4
V5.0 -- -- -- V5.7 V4.0 -- -- -- V4.7
Figura 1.4 - Exemplo endereço tipo Word.
Fonte – Ilustração do autor.
Figura 1.5 mostra a estrutura da variável VD0.
V0.0 V0.1 V0.2 V0.3 V0.4 V0.5 V0.6 V0.7
V1.0 V1.1 V1.2 V1.3 V1.4 V1.5 V1.6 V1.7
V2.0 V2.1 V2.2 V2.3 V2.4 V2.5 V2.6 V2.7
V3.0 V3.1 V3.2 V3.3 V3.4 V3.5 V3.6 V3.7
V4.0 V4.1 V4.2 V4.3 V4.4 V4.5 V4.6 V4.7
V5.0 V5.1 V5.2 V5.3 V5.4 V5.5 V5.6 V5.7
V6.0 V6.1 V6.2 V6.3 V6.4 V6.5 V6.6 V6.7
V7.0 V7.1 V7.2 V7.3 V7.4 V7.5 V7.6 V7.7
V8.0 V8.0 V8.0 V8.0 V8.0 V8.0 V8.0 V8.7
V9.0 V9.0 V9.0 V9.0 V9.0 V9.0 V9.0 V9.0
LSB -- -- -- MSB
VD0
VW2 VW0
VB3 VB2 VB1 VB0
V3.0 -- V3.7 V2.0 -- V2.7 V1.0 -- V1.7 V0.0 -- V0.7
Figura 1.5 - Exemplo endereço tipo Doube Word.
Fonte – Ilustração do autor.
Cabe destacar que existe sobreposição das operandos, isto é, um mesmo conjunto de dados (bits) pode fazer parte de vários operandos. Este particularidade confere grande flexibilidade ao sistema, porem, exige atenção na definição dos endereços.
Por exemplo, VB4 é a parte alta de VW4, assim sendo, um incremento de simples (somar mais um ao conteúdo) em VB4, implicará em um incremento 256 no valor de VW4.
Outro ponto importante, Words consecutivas terão sempre um Byte em comum. De forma análoga Double Words compartilharão três Bytes.
1.3. ÁREAS DA MEMÓRIA DE APLICAÇÃO
As Tabelas 1.3, 1.4 e 1.5 contém detalhes da memória da CPU 224, estes podem esclarecer alguns pontos que por ventura tenham ficado obscuros nos tópicos anteriores.
Tabela 1.3 – Áreas de memória 1
CPU 224 V2.00 TIPO DE ACESSO
Área Descrição Bit Byte Word Dword
I Entradas Digitais -
Registradores da imagem Leitura|Escrita Leitura|Escrita Leitura|Escrita Leitura|Escrita Q Saídas Digitais -
Registradores da imagem Leitura|Escrita Leitura|Escrita Leitura|Escrita Leitura|Escrita M Memória interna Leitura|Escrita Leitura|Escrita Leitura|Escrita Leitura|Escrita
SM Memória Especial SM0 ~ SM29 -> Só
Leitura Leitura|Escrita Leitura|Escrita Leitura|Escrita Leitura|Escrita V Variáveis Leitura|Escrita Leitura|Escrita Leitura|Escrita Leitura|Escrita
T Timers T - Bit
Leitura|Escrita Não T - Valor
Leitura|Escrita Não
C Contadores C - Bit
Leitura|Escrita Não C - Valor
Leitura|Escrita Não
HC Contadores Rápidos Não Não Não Leitura apenas
AI Entradas Analógicas Não Não Leitura apenas Não
AQ Saídas Analógicas Não Não Escrita apenas Não
L Variáveis Locais Leitura|Escrita Leitura|Escrita Leitura|Escrita Leitura|Escrita
A retentividade é a característica de certas áreas de manter o valor mesmo quando o CLP for desligado. Forçar um operando, significa alterar seu valor através do canal de comunicação serial. As propriedades como a retentividade e a permissão de forçar valores bem como range de cada uma das áreas de memória são descritas na Tabela 1.4.
Tabela 1.4 – Áreas de memória 2.
CPU 224 V2.00 PODE SER
Área Range Descrição Retentiva Forçada
I I0.0 ~ I15.7* Entradas Digitais -
Registradores da imagem Não Sim
Q Q0.0 ~ Q15.7*
Saídas Digitais -
Registradores da imagem Não Sim
M** M0.0 ~ M31.7 Memória interna Sim Sim
SM SM0.0 ~ SM549.7 Memória Especial
SM0 ~ SM29 -> Só Leitura Não Não
V** V0.0 ~ V8191.7 Variáveis Sim Sim
T T0 ~ T255 Timers Valor-> Sim
Bit -> Não Não
C C0 ~ C255 Contadores Valor-> Sim
Bit -> Não Não
HC HC0 ~ HC5 Contadores Rápidos Não Não
AI AI0 ~AI15 Entradas Analógicas Não Sim
AQ AQ0 ~AQ15 Saídas Analógicas Não Sim
L 0 ~ 59 Variáveis Locais Não Não
* O número de pontos nas tabelas de entradas e saídas digitais é significativamente maior do que a quantidade de pontos físicos, mesmo que sejam usadas todas as expansões possíveis. Este espaço pode ser usado como memória adicional.
** Pode armazenar operandos do tipo CHAR.
O fabricante do equipamento definiu que cada área de memória sendo acessada com certo tipo de dado somente aceitará determinado operado. A Tabela 1.5 mostra tais convenções.
Tabela 1.5 – Áreas de memória 3.
Área Bit Byte Word Dword
I Booleano Inteiro sem sinal Inteiro sem sinal Inteiro sem sinal Q Booleano Inteiro sem sinal Inteiro sem sinal Inteiro sem sinal M Booleano Inteiro sem sinal Inteiro sem sinal Inteiro sem sinal
V Booleano Inteiro sem sinal Inteiro Real (ponto flutuante)
T T - Bit ->
Booleano Não T - Valor - >
Inteiro Não
C C - Bit ->
Booleano Não C - Valor - >
Inteiro Não
HC Não Não Não Inteiro sem sinal
AI Não Não Inteiro sem sinal Inteiro sem sinal
AQ Não Não Inteiro sem sinal Não
2. SYMBOL TABLE
A tabela símbolos (symbol table) pode ser utilizada para definir tags – nomes para variáveis ou endereços – e definir constantes.
A utilização de tags auxilia a organização do programa e permite ao programador associar os endereços a termos mais amigáveis.
Figura 2.1 – Tela com exemplo Fonte – S7 MicroWin.
Existe uma área para comentários, estes podem ser exibidos nas lógicas, ou não, dependendo das preferências setadas.
Há também campos para indicar tags ou endereços repetidos e inválidos, além disto, os endereços inválidos aparecerão em vermeho.
Para definir constantes, deve–se saber que:
Os valores alfanuméricos (tipo CHAR) devem ficar entre aspas Números sem indicação de base são decimais.
Números sem ponto serão tratados como INTEIROS.
Números com ponto serão tratados como FLOAT.
Para utilizar outras bases: BASE#VALOR por exemplo, 2#1011, 16#3EF.
Para forçar operadores booleanos deve-se usar base dois com um digito apenas.