10 OPC 50
10.1 Baixe o material complementar . . . . . . . . . . . . . . . . . . . . . . . . . . 51
10.2 Inserindo variável de controle do tempo de acionamento . . . . . . . . . . . . 51
10.3 Ativando o servidor OPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
10.4 Criando programa em Python para controle do CLP . . . . . . . . . . . . . . . 53
Capítulo 1 - Sensores e Atuadores para Automação
Discreta
Em seguida selecione Configure a device em ’First step’. Feito isto você será encaminhado
para a tela da Figura 3.2, nesta em ’Add new device’ selecione o dispositivo do tipo ’PLC’,
podendo-se seguir o caminho PLC > SIMATIC S7-1200 > CPU > Unspecified CPU 1200 >
6ES7 2XX-XXXX-XXXX. Selecione o equipamento e clique em adicionar. Após isso, é necessário
detectar o CLP via rede e, para isso, é necessário que o computador esteja conectado à rede wifi
CLP-LAI. Uma vez que todos os dispositivos encontrados na rede sejam listados, selecione o
CLP que corresponde à sua bancada.
Por fim selecione o módulo I/O do seu dispositivo em Devices & networks e na aba I/O
addresses altere o endereço de I/O do dispositivo de 8 para 2, conforme demonstrado na Figura
3.3.
3.2 Acendendo luz do botão Start ao pressioná-lo –6–
Feito este processo, o seu projeto esta criado. Para garantir o backup do programa atual
do CLP, selecione o ícone superior destacado na Figura 3.3 para executar upload do conteúdo
armazenado no dispositivo e então salve o projeto e o feche. Em seguida repita este processo
para criar um novo projeto para realização da sequência do experimento 3.
Conforme solicitado, utilize um bloco de função para atrelar o estado do botão ”Start” a sua
luz correspondente (%Q2.0). Para isso, na aba PLC tags crie as tags referentes ao Botão_Start
(%I2.0) e à Luz_Start (%Q2.0) e crie um bloco function_1 com a lógica da Figura 3.4.
Em seguida, no bloco main, arraste o bloco function_1 criado para a Network desejada de
forma como é apresentado na Figura 3.5.
3.3 Acendendo luz Start até ocorrência de Stop –7–
Nesta etapa, adicionamos uma tag de entrada referente ao Botão_Stop (%I2.1) e criamos
duas Networks para ligar e desligar a luz. Atrelamos então o Botão_Start à Luz_Start com um
operador do tipo ’Set’, e o Botão_Stop à Luz_Start por meio de um operador do tipo ’Reset’.
Esta lógica pode ser interpretada na Figura 3.6.
Para replicarmos o sistema da etapa anterior sem o uso dos operadores ’Set’ e ’Reset’
devemos criar uma retenção conforme apresentado na Figura 3.7.
Para esta última etapa abordaremos quatro entradas (’Start’, ’Stop’, ’Reset’ e ’Chave’), quatro
saídas (’Luz_Start’, ’Luz_Reset’, ’Luz_Q1’ e ’Atuador’) e uma memória, conforme apresentado
na Tabela 3.1.
Tabela 3.1: Variáveis utilizadas.
Name Address Data Type
Luz_Start %Q2.0 Bool
Luz_Reset %Q2.1 Bool
Luz_Q1 %Q2.2 Bool
Atuador %Q0.0 Bool
Start %I2.0 Bool
Stop %I2.1 Bool
Reset %I2.3 Bool
Chave %I2.2 Bool
temp %M0.0 Bool
Conforme a descrição desta tarefa, o controle de um atuador, representado por %Q0.0, deve
ser realizado pelos comandos ”Start” e ”Reset” e estes devem estar habilitados somente caso o
botão ”Stop” não esteja pressionado. Para realizar garantir tal comportamento é necessária a
lógica demonstrada nas primeiras duas Networks da Figura 3.8. Além disto, é solicitado que ao
pressionarmos o botão ”Stop” o sistema acenda a luz Q1 e desligue o atuador, o que é garantido
pelos operadores Set e Reset utilizados na Network 3, observe que foi utilizado o próprio contato
referente à luz como bloqueio dos botões ”Start” e ”Reset”.
Também é solicitado que sejam utilizados indicadores luminosos para indicar se os botões
”Start” e ”Reset” estão habilitados. Observe pela Network 4, apresentada na Figura 3.9, que
a ”Luz_Reset” fica habilitada somente caso o atuador esteja ligado E ”Stop” não tenha sido
acionado (”Luz_Q1”). De forma semelhante, a ”Luz_Start” fica acesa quando o atuador estiver
desligado E ”Stop” não tenha sido acionado.
Por fim, é garantida a segurança do sistema por meio de uma chave responsável por reabilitar
o sistema na decorrência do acionamento do botão ”Stop”. Para isto foi feito uso de um contato
do tipo ”borda de descida” o qual realiza a energização do operador Reset de ”Luz_Q1” somente
com o desligamento da chave, sendo necessário atrelar uma memória auxiliar para seu uso.
Feitas todas estas tarefas, basta salvar o programa desenvolvido e fecha-lo, e então abrir o
backup inicialmente feito e gravar seu conteúdo novamente no CLP utilizado.
Capítulo 4 - Temporizadores e Contadores em CLPs
Com o objetivo de apresentar diferentes tipos de temporizadores é solicitado o uso dos ope-
radores TP, TOF, e TON. Estes podem ser obtidos no menu lateral direito em Basic Instructions
» Timer operations e apresentam as seguintes funções:
TP - Time Pulse: energiza a saída do operador por um tempo programado;
TOF - Timer Off: tem a desenergização da saída retardada pelo tempo programado;
TON - Timer On: tem a energização da saída retardada pelo tempo programado;
Para garantir que a luz Q1 permaneça acesa somente por 10 segundos com qualquer um dos
temporizadores é necessário utilizar diferentes padrões de acionamento de tais operadores. Na
Figura 4.4 são apresentadas abordagens que fornecem ao sistema o funcionamento desejado.
Para esta tarefa basta adaptar uma das abordagens anteriores adicionando o ”Botão_Stop”
paralelo ao sistema atrelado ao comando Reset da ”Luz_Q1”. Na Figura 4.5 é apresentada a
adaptação feita à abordagem com TON.
Para introduzir um ciclo de acionamento de uma saída basta utilizar contatos NA e NF que
representam o seu status e utilizar estes como seu próprio acionamento. Por exemplo, contato
NF de ”Luz_Q1” acionando operador Set de ”Luz_Q1” e contato NF acionando o Reset. Como
se pretende um ciclo fixo de 1 segundo, é necessário introduzir temporizadores nesta lógica, com
a configuração da Figura 4.6 o sistema passa ter um ciclo em que a Luz Q1 fica 400 ms ligada e
600 ms desligada de forma ciclica conforme especificado.
Basta inserir em um contato de controle em série ao ciclo para tornar possível controlar seu
funcionamento. Observe na Figura 4.7 que utilizamos uma memória auxiliar que define o se o
ciclo deve ocorrer. Para isso, tal memória é acionada pelo contato ”Botão_Start” e desligada por
”Botão_Stop”.
Por fim é solicitado que façamos uma função em que o botão Start inicie um ciclo em que
luz Q1 pisque 10 vezes. Como é solicitado que o ciclo seja executado exatamente 10 vezes,
necessitamos inserir um bloco contador nesta etapa. Operadores contadores podem ser obtidos
no menu ao lado direito em Basic instructions » Counter operations, onde estão disponíveis
contadores crescente (CTU), decrescente (CTD) e ambos (CTUD). Observe na Figura 4.8 que
estes operadores apresentam os seguintes parâmetros:
4.5 Piscar luz Q1 10 vezes após comando Start – 14 –
Os alunos de cada turma deverão se organizar em seis equipes, uma para cada estação
de manufatura do MPS. Cada equipe deve executar a sequência de tarefas a seguir e
entregar em forma de relatório pelo Moodle, tendo em anexo a programação em ladder
impressa pelo TIA-Portal.
1. Desenhe um diagrama de transição de estados para o padrão definido acima,
indicando as ações associadas a cada estado e as condições para cada transição;
2. Programe um bloco de função ”Painel” para controlar o painel da estação conforme
o padrão definido acima. Na sequência de reinício, o sistema deve apenas esperar
por 5 s, e nenhuma ação deve ser executada sobre a estação durante operação
cíclica. Utilize um bloco do tipo ”Startup” para iniciar o programa no estado
Parando sempre que o CLP for ligado;
3. Programe um bloco de função “Operar” que seja ativado apenas no estado Ope-
rando e faça algum atuador da estação ficar ligando e desligando continuamente a
cada segundo;
– 16 –
O funcionamento de cada estação do MPS pode ser representado por uma máquina de
estados conforme a apresentada na Figura 5.1. Podemos notar cinco estados bem definidos que
representam as possíveis condições de funcionamento do sistema e tem sua dinâmica controlada
pelos botões Reset, Start e Stop e por eventos internos Reiniciou e Parou. Cada estado é
representado pelas seguintes características:
Parado: sistema com todos atuadores desligados e ”luz_Reset” acesa;
Reiniciando: sistema executando sequência de reinicialização, sinalizando esta mantendo
a ”luz_Q1” acesa;
Pronto: sistema em condições necessárias para início da operação e ”luz_Start” acesa;
Operando: sistema executando ciclo de operação, sinalizando esta por meio da ”luz_Q2”
acesa;
Parando: sistema desliga todas as luzes do painel e garante condições seguras de parada
do sistema.
Figura 5.1: Máquina de Estados que representa o funcionamento do Sistema Modular de Produção.
Nesta etapa é solicitado que implementemos a sequência da máquina de estados acima por
meio de um bloco de função. Para isto é interessante primeiramente configurarmos as Tags a
serem utilizadas, conforme a Tabela 5.1. Observe que utilizamos cinco memórias auxiliares que
nos permitem controlar e monitorar o estado atual do sistema e outras duas para representar os
eventos internos ”Reiniciou” e ”Parou”.
5.2 Implementar toda a máquina de estados em bloco de função ”Painel” – 18 –
Criamos então um bolco função denominado ”Painel” e para programarmos a lógica pro-
posta podemos começar considerando que sistema esteja em algum estado específico e avaliar
quais as possíveis alterações a partir deste. Se optarmos pelo estado Parando, por exemplo,
podemos avaliar que neste estado é possível que ocorra o evento ”Parou” e como consequência o
sistema passa para o estado Parado. A troca de estado pode ser representada pelos operadores
Set/Reset atribuídos às memórias auxiliares correspondentes aos estados, assim como foi feito
na Figura 5.2. Setamos o novo estado e resetamos o anterior. Além disto, devemos lembrar de
finalizar o evento interno ”Parou” já que o estado já foi alterado.
Em seguida, conforme demonstrado na Figura 5.3, podemos utilizar a mesma lógica acima
para monitorar as transições:
Parado » Reiniciando ao acionar o ”Reset”;
Reiniciando » Pronto ao ocorrer o evento ”reiniciou”;
Pronto » Operando ao acionar o ”Start”.
Para completarmos o ciclo da máquina de estado ainda é necessário garantirmos que em
qualquer estado o acionamento do botão ”Stop” encaminhe o sistema ao estado Parando. Isto é
5.2 Implementar toda a máquina de estados em bloco de função ”Painel” – 19 –
feito setando a memória ”Parando” e resetando as demais, conforme demonstrado na Figura 5.4.
Por fim, conforme solicitado, devemos garantir que o sistema inicialize no estado Parando.
Para tal, criamos um bloco startup e neste setamos o estado inicial do sistema assim como foi
feito na Figura 5.6. Para testar o funcionamento do programa, adicione o bloco função ”Painel”
criado no bloco ”main” e carregue o programa no CLP.
Nesta etapa é solicitado que seja adicionado ao sistema um bloco função "Operar"no qual é
implementada a sequência de trabalho produtivo do sistema, representado por um ciclo continuo
de acionamento de um dos atuadores da bancada sendo utilizada. Para o controle deste ciclo
geramos duas novas Tags denominadas ”AtuadorOFF” e ”AtuadorON” para controlarmos o ciclo
em execução por meio de dois timers, conforme a lógica demonstrada a na Figura 5.7.
5.4 Implementar função Reiniciar com retorno de atuador – 21 –
Observe na Figura 5.7, que o funcionamento desta parte do sistema esta controlado pela
variável #IN. Esta se trata de uma entrada criada para o bloco função, permitindo a este receber
comandos externos no momento da sua chamada. Para criação de entradas e saídas de uma
função, basta estender o painel apresentado na Figura 5.8 (posicionado logo acima da Network
1) e configurar as variáveis desejadas. Feito isto, ao adicionar este bloco função no bloco ”main”,
este apresentara uma entrada capaz de controlar o seu acionamento.
Para esta ultima etapa do experimento 5 é solicitada a criação de um bloco função para o
processo de reinicialização em que o o atuador deve permanecer acionado por 10 segundos ou até
algum sensor ser ativo, para então gerar o evento ”reiniciou”. Para isto é necessário primeiramente
que no bloco ”Painel” seja removido o controle do evento ”reiniciou” anteriormente criado e
apresentado na Figura 5.5.
Em seguida, criamos um bloco função ”Reiniciar” e neste criamos variáveis internas do
tipo ”IN” e ”OUT” no painel demonstrado na Figura 5.8. Além disto, criamos duas novas Tags
”R0” e ”R1” para distinguir o momento em que o atuador é mantido acionado da finalização da
reinicialização por meio do evento ”reiniciou”.
Então, pela lógica apresentada na Figura 5.9, garantimos que a memória ”R0” sempre
inicie ativa no momento que a função for iniciada pela entrada #IN e que esta seja desativada
com o acionamento do timer ou do ”Sensor_vacuo”. Para finalizar a reinicialização, no mesmo
momento que desligamos ”R0” ativamos ”R1” e por consequência ocorre o evento #OUT. O
Atuador ”Ventosa” é mantido ativo sempre que ”R0” também estiver, durante a reinicialização.
Como o nosso objetivo é reescrever a lógica FBD com base em uma função já disponível
em nosso documento, temos a opção de converter este já existente para a linguagem FBD. Para
isto, faça uma cópia da função ”Operar” anteriormente utilizada, altere o nome e faça o mesmo
processo explicado no parágrafo anterior para alterar o tipo de linguagem. Como já haverá uma
lógica definida para o bloco criado, o próprio Software já realiza a conversão. O resultado desta
ação pode ser verificado na Figura 6.1.
Nesta etapa o objetivo é utilizarmos a programação por Texto Estruturado. Para isto vamos
refazer a lógica de controle da Máquina de Estados realizada no bloco ”Painel” em um novo
bloco função denominado ”Painel_ST”. Para utilizar a linguagem ST na criação do novo bloco
de função definimos a linguagem para o tipo SCL. Criado o bloco deverá abrir uma janela vazia
em que é possível inserir o código de controle desejado. Nesta há disponível exemplos dos
comandos básicos apresentados na Figura 6.2.
Neste novo bloco inserimos então a lógica necessária para controlar a Máquina de Estados.
Uma possível abordagem é apresentada na Figura 6.3, onde foi utilizado o comando CASE ...
OF para controlar o os eventos permitidos em cada um dos estados do sistema através de uma
nova variável (Tag) chamada ”Estado_Painel”. Observe que após a linha 34 são atreladas as
6.3 Substituir bloco ”Painel” por bloco programado em ST – 26 –
Tags em utilização no restante do sistema com relação ao estado atual de ”Estado_Painel”. Além
disto, nas linhas 42-45 é feito o controle das luzes do painel conforme o status de cada estado.
Para que seja possível utilizar este sistema, é necessário adicionar um novo operador no
bloco ”Startup” para inicializar a variável ”Estado_Painel” com o valor 0. Isto pode ser feito
por meio do operador MOVE, configurado conforme a Figura 6.4, de forma a mover o valor
determinado em IN para nossa variável de controle de estado.
A solução deve ser usada com o objetivo de se ter um ponto de partida. É importante notar
que o IP do CLP do projeto deve ser alterado para corresponder ao da bancada de cada equipe.
Para adicionar um segundo CLP ao seu projeto basta selecionar ’Add new device’. Na aba
aberta selecione o dispositivo do tipo ’PLC’, podendo-se seguir o caminho PLC > SIMATIC
S7-1200 > CPU > Unspecified CPU 1200 > 6ES7 2XX-XXXX-XXXX. Selecione o equipamento
e clique em adicionar. Após isso, é necessário detectar o CLP via rede e, para isso, é necessário
que o computador esteja conectado à rede wifi CLP-LAI. Uma vez que todos os dispositivos
encontrados na rede sejam listados, selecione o CLP que corresponde à bancada adjacente à sua.
Não esqueça de alterar o endereço de I/O do novo dispositivo de 8 para 2.
Após adicionado o segundo CLP, é necessário interligar ambos via rede Profinet. Para tal,
acesse o menu ‘Devices & networks’, localizado abaixo da opção ‘Add new device’ já utilizada
anteriormente. Nesse ponto, deve-se interligar as saídas Ethernet dos dois CLPs utilizando a
conexão ‘S7-Connection’. Feito isso, a conexão entre os CLPs deve corresponder ao padrão
apresentado na Figura 7.1.
Nesta etapa é necessário criar, em cada um dos CLPs, uma TAG referenciada à variável
de memória %M50.0 e outra associada ao endereço %Q2.4 representando a variável de saída
”luzQ4”. Assim que adicionadas as TAGs, atrelamos a ativação da ”luzQ4” ao valor da memória
%M50.0 conforme apresentado na Figura 7.2.
Para alterar o valor de uma variável de outro CLP usamos o bloco PUT. Para adicionar
esse bloco, deve-se pesquisá-lo na biblioteca de comunicação que fica ao lado direito em:
Instructions> Communication > S7 communication. Uma vez encontrado, arraste o operador
PUT da biblioteca para uma linha do ladder. Note que quando um operador PUT é adicionado,
um ‘Data block’ é criado e associado a esse bloco cuja configuração é feita por uma janela pop-up
(tipicamente não é necessário fazer modificações, bastando apenas clicar em “OK”).
O operador PUT possui o formato apresentado na Figura 7.3. Após inseri-lo é necessário
acessar suas configurações e definir o segundo CLP como ’partner’ em Configuration > Con-
nection parameter. Lembrando que é necessário energizar o operador por meio dos contatos
’EN’ e ’ENO’.
Do lado direito do operador, temos a saída DONE, que está relacionado com o término
ou não do envio sem que tenha ocorrido erro; e as saídas ERROR e STATUS que apresentam
valores referentes aos possíveis erros. Quanto aos parâmetros do lado esquerdo, suas funções
são:
REQ: parâmetro de controle de troca de dados na transição positiva, ou borda de subida
do sinal de entrada (rising edge);
ID: gerado automaticamente ao realizar a definição do ’partner’ nas configurações do
bloco (passo que é explicado mais adiante);
ADDR_X: ponteiro para a memória do ’partner’ em que os dados serão escritos;
SD_X: ponteiro para a memória dos dados que queremos enviar.
para garantir que seja feita a atualização da memória do dispositivo secundário tanto ao ligar a
’luz Q1’ como ao desliga-la.
Figura 7.4: Programação em ladder para envio de informação usando o bloco PUT.
7.5 Lendo o botão Stop do CLP seguinte – 31 –
Do lado direito do operador, temos a saída NDR, que está relacionado com o término ou não
da leitura sem que tenha ocorrido erro; e as saídas ERROR e STATUS que apresentam valores
referentes aos possíveis erros. Quanto aos parâmetros do lado esquerdo, suas funções são:
REQ: parâmetro de controle de troca de dados na transição positiva, ou borda de subida
do sinal de entrada (rising edge);
ID: gerado automaticamente ao realizar a definição do ’partner’ nas configurações do
bloco (passo que é explicado mais adiante);
ADDR_X: ponteiro para a memória do partner de onde os dados serão lidos;
RD_X: ponteiro para a posição da memória em que os dados recebidos serão salvos.
Para que a cada 500ms seja feita a leitura do valor da variável associada ao botão Stop
do CLP seguinte (e mostrá-lo utilizando-se a luz Q6) é necessário adicionarmos as variáveis
auxiliares apresentadas na Tabela 7.2.
O trecho lógico responsável pelo recebimento periódico das informações do segundo CLP
é apresentado na Figura 7.6. Observe que foi feito uso de um temporizador TON configurado
para gerar um atraso de 500 ms na saída em relação à entrada. Na saída do temporizador
encontramos a tag ”Recebe”, a qual é responsável por solicitar a leitura do segundo CLP. ”Recebe”
7.5 Lendo o botão Stop do CLP seguinte – 32 –
é reiniciada assim que for recebido alguma mensagem de retorno, seja de erro (”GET_NOK”) ou
de confirmação (”GET_OK”). Por fim, é associado o valor recebido (”Tag_a_Receber”) à saída
responsável pela Luz Q6.
Figura 7.6: Programação em ladder para recebimento de informação usando o bloco GET.
Capítulo 8 - Configuração de Sinóticos em SCADA
Tendo o CLP programada, implementaremos então na IHM algo que nos permita monitorar
o estado atual da saída ”Luz_Q1”. Para isto, insira uma nova tela em HMI > Screens > Add
8.3 Monitorando a luz Q1 pela IHM – 35 –
new screen. Nesta nova tela insira algum objeto básico que nos permita apresentar o estado da
”Luz_Q1”, pode sem um círculo ou um retângulo presentes em Toolbox > basic objects. Para
sinalizar o significado deste objeto podemos inserir um bloco de texto neste objeto, também
presente em basic objects.
Neste momento já temos implementada a parte gráfica do nosso objeto, algo semelhante
8.4 Adicionando comandos na IHM – 36 –
à Figura 8.3. No entanto, este ainda não se encontra configurado para que sinalize alterações
geradas pelo programa anteriormente implementado no CLP. Para isto precisamos primeiramente
criar uma Tag que atrelaremos a este objeto. Então, na aba tags criamos a tag ”Luz_Q1” com
a configuração da Tabela 8.2 relacionando ela à saída do CLP. Observe que a tag da IHM é
configurada para receber diretamente o valor da tag do CLP.
Tabela 8.2: Variável adicionadas à IHM.
Name Data Type Connection PLC name PLC tag
Luz_Q1 Bool HMI_Connection_1 PLC_1_Distributing Luz_Q1
Por fim, devemos atrelar o objeto criado a esta tag. Para isto, retornamos a aba Screens,
selecionamos o objeto em Animation > Display adicionamos uma nova animação do tipo Ap-
pearance. Atrelamos a esta animação a tag ”Luz_Q1”, inserimos dois estados possíveis (0 e
1) e configuramos para cada um destes a cor que desejamos que o objeto assuma. No exemplo
da Figura 8.4 configuramos o objeto para apresentar preenchimento na cor branca quando a luz
estiver desligada e cor amarela para representar o acionamento da Luz Q1.
Na etapa anterior inserimos um objeto para tornar possível monitorarmos o estado de uma
variável do sistema real. Agora vamos fazer o oposto, utilizar um elemento da IHM para controlar
o comportamento do sistema real. Para isto podemos inserir um botão em nossa tela, disponível
em Toolbox > Elements no menu à direita. Insira este na posição desejada da tela e então e
configure o seu texto e dimensões desejadas. Ao selecionar o botão, na aba propriedades, é
possível também definir configurações quanto à aparência deste, como por exemplo, definir uma
cor sólida ou gradientes de cor. Uma possível configuração para os botões ”Start” e ”Stop” é
apresentada na Figura 8.5.
Assim como foi feito com o sinótico da Luz_Q1, para os botões também é necessário
configurarmos Tags a serem associadas aos elementos inseridos na tela, possibilitando assim
8.4 Adicionando comandos na IHM – 37 –
a sua utilização para o controle de variáveis. Conforme a Tabela 8.3, criamos duas novas
Tags chamadas ”Botão_Remoto_Start” e ” Botão_Remoto_Stop” e associamos com variáveis de
mesmo nome também configuradas na memória do CLP, vide Tabela 8.4.
Feita a configuração das Tags, precisamos associa-las aos botões inseridos na nossa tela.
Desta vez, por serem elementos de saída, a configuração é feita na aba Events, onde é possível
adicionarmos diversos tipos de eventos atrelados ao botão. No nosso caso desejamos que seja
feita a troca do valor de um bit ao pressionar o botão, então uma possível opção é, na aba Press,
adicionarmos uma nova função System functions > Edit bits > SetBitWhileKeyPressed e então
8.5 Apresentação de valores contínuos – 38 –
configurar a Tag correspondente ao botão selecionado. A Figura 8.6 destaca o painel para estas
configurações.
Por fim, para que o acionamento destes botões afetem o comportamento do sistema real,
ainda é necessário implementarmos a ação destes no programa do CLP. Portanto, selecionamos
novamente o bloco ”main” do CLP e adicionamos os comandos oriundos da IHM em paralelo
aos seus respectivos contatos dos botoes físicos, semelhante ao apresentado na Figura 8.7.
Nesta etapa o objetivo é monitorar o tempo em que a Luz_Q1 permanece acessa, sendo
portanto necessário utilizarmos variáveis contínuas. Para tal, vamos primeiramente obter tal
informação do CLP por meio de uma variável auxiliar atrelada ao nosso contador. Criamos
então uma Tag do tipo DInt, atrelada à memória %MD20 e com o nome ”tempo”. Então
inserimos esta à saída do contador, conforme a Figura 8.8.
Para atrelar este elemento à nossa Tag ”tempo” é necessário configurarmos esta em Pro-
perties > General > Process > Tag, assim como em Annimations > Tag connections > Process
value. A Figura 8.10 apresenta esta configuração para a utilização da variável ”tempo” criada.
8.6 Apresentação de gráficos – 40 –
Como última tarefa deste experimento, vamos inserir em nossa IHM um gráfico para melhor
visualização do comportamento da Luz_Q1 com o passar do tempo. para isto, vá na aba Toolboc
> Control à direita, e selecione elemento Trend view e o adicione à nossa tela, veja a Figura
8.11.
A solução do experimento 8 deve ser usada com o objetivo de se ter um ponto de partida. É
importante notar que o IP do CLP do projeto deve ser alterado para corresponder ao da bancada
de cada equipe.
Na solução do experimento 8 temos presente em nossa rede somente o CLP e a IHM, sendo
necessário para este experimento a inclusão de um PC com sistema supervisório. Para tal, utilize
a aba Add new device e selecione o dispositivo PC Systems > PC general > PC station e o
adicione ao sistema.
Para utilizarmos este dispositivo é necessário incluirmos dois módulos, PROFINET/Ether-
net para a comunicação e o softwareWinCC RT Advanced para funcionamento do Supervisó-
rio. Estes estão disponíveis na aba Hardware catalog à direita em Communication modules >
PROFINET/Ethernet > IE general e em SIMATIC HMI application > WinCC RT Advanced res-
pectivamente. Insira estes conforme a Figura 9.1 e realize aconexão com os demais dispositivos
da rede de como apresentado na Figura 9.2.
Para inserir uma nova tela em nosso supervisório SCADA, o processo é o mesmo de criação
de telas para a IHM. Basta selecionar o dispositivo PC-System e adicionar uma nova tela em HMI
RT(WinCC RT Advanced) > Screens. Nesta adicione os botões, os sinalizadores de estado e de
tempo de acionamento da Luz_Q1 e o gráfico. O resultado deve ser algo semelhante à Figura
9.3. Insira as Tags e configure os elementos da mesma forma que foi feito no Capítulo anterior.
Observe na Figura 9.3 que inserimos no canto superior direito um botão ”sair” para permitir
ao usuário finalizar a execução do supervisório SCADA. Para realizar tal objetivo, insira um
elemento do tipo Button e configure um novo evento do tipo StopRuntime na aba de eventos
tipo Press.
vamos criar os tipos de alarmes que desejamos atrelar ao funcionamento do sistema. Comecemos
por criar um alarme variável responsável por sinalizar que restam apenas 2 segundos até que a
Luz Q1 seja desligada. Para tal, podemos seguir os seguintes passos:
1. Crie uma Tag ”tempo” de tipo DInt e atrele ela à variável ”tempo” do CLP;
2. Nas opções do supervisório SCADA, abra o Editor de Alarmes clicando em "HMI alarms";
3. Na Aba "Analog alarms"crie um alarme conforme a Figura 9.5, observe que foi configurado
um limite de do tipo Higher com valor 8000. Portanto o alarme é acionado assim que a
variável ”tempo” apresentar valores superiores a 8000;
Nessa sessão vamos exemplificar a criação de dois tipos de alarmes discretos, um com
"reconhecimento"(acknowledgement) do operador e outro sem reconhecimento. O alarme de
aviso (sem reconhecimento) será responsável por sinalizar que a luz Q1 se encontra acesa e o
alarme de erro (com reconhecimento) sinalizará que a luz Q1 foi desligada antes do decorrer de
10 segundos.
9.6 Alarme discreto de Aviso e de Erro – 46 –
Para gerenciar a ocorrência dos alarmes discretos é necessária a utilização duas variáveis
auxiliares de tipo Word (16 bits)), apresentadas na Tabela 9.1. Chamamos uma destas de
ALARMES, responsável por desencadear a ocorrência de alarmes, cada bit representando um
possível alarme. A outra variável criada chamamos de RECONHECIMENTOS, permitindo
assim transmitir ao CLP interações do usuário com o supervisor por uma única variável.
Para que possamos realizar a interação entre o CLP e os alarmes do supervisório, é necessário
adicionarmos também as seguintes variáveis na tabela de Tags do CLP:
Agora que essas variáveis foram criadas, vamos explicar a lógica que justifica o endereça-
mento das memórias escolhidas. Considere que escolhemos o endereço de memória X (MWX)
para a variável ALARMES (no exemplo anterior, o endereço escolhido foi 50, MW50). Como se
trata de uma variável do tipo word, 16 bits (2 bytes) de memória são reservados a essa variável,
ou seja, os bits X.0, X.1, X.2, . . ., X.6, X.7, X+1.0, X+1.1, . . ., X+1.7 (50 no lugar de X e 51 no
lugar de X+1 no exemplo anterior) são reservados a essa variável.
Como dito anteriormente, para a construção de alarmes discretos no ecossistema SIEMENS
é necessário escolher variáveis do tipo word (ou também int ou Uint) de 16 bits. Nestas,
configuramos os alarmes para ocupar posições (bits) específicas, onde se dará o sinal de alarme.
Para que a posição correta seja escolhida, é necessário entender como esses espaços de
memória são organizados no ambiente SIEMENS. Para tanto, considere a Tabela 9.3. A primeira
coluna representa um dos bytes e as demais os endereços de memória booleanos associados a
cada byte.
Observe que ao separarmos os a variável em dois bytes, o primeiro (X) possui representa
a parcela mais significativa, enquanto o segundo byte (X+1) equivale à parte menos significa-
9.6 Alarme discreto de Aviso e de Erro – 47 –
tiva. A ordem crescente do índice das variáveis mi , i ∈ {0, . . . , 15} corresponde à ordem de
“significância” dos bits que formam a palavra X, ou seja, a palavra X é escrita da seguinte forma:
Assim, a posição dos bits que ocupam a palavra X vai de 0 a 15. Por exemplo, a posição 2
corresponde ao endereço (X+1).2, enquanto que a posição 14 corresponde ao endereço X.6 (no
exemplo anterior, endereços 51.2 e 50.6, respectivamente).
Após criados os alarmes discreto e suas respectivas variáveis na tabela de Tags, é necessário
configurar esses alarmes na interface SCADA. Isto pode ser feito no editor de alarmes, em HMI
Alarms. Neste experimento, vamos criar dois alarmes, um com reconhecimento do operador,
correspondendo à parada forçada do sistema (pressionar do botão Stop) e outro sem reconheci-
mento do operador, alarme que indica que a luz Q1 foi acionada. Assim, a tabela de criação de
alarmes fica como a que é apresentada a seguir.
ID Alarm Text Alarm class Trigger Tag Trigger bit Trigger address
1 Luz acesa Warning ALARMES 0 ALARMES.x0
2 Parada Forçada Error ALARMES 1 ALARMES.x1
É possível criar relatórios acerca dos alarmes que foram disparados durante a operação do
sistema. Esses relatórios podem ser salvos em uma tabela, como um banco de dados, ou em um
arquivo em PDF de resumo da operação. Para produzir relatórios dos alarmes identificados pelo
sistema supervisório, basta seguir o seguinte passo a passo:.
1. No editor de dados históricos do supervisório SCADA (WinCC RT Advanced > Historical
Data) crie um registro de alarmes (Alarm log) com a seguinte configuração:
Nesta etapa, vamos alterar o programa do experimento 9 para que seja possível controlar o
tempo de acionamento da luz Q1 através de uma variável. Para tal, primeiramente adicionamos
uma nova Tag à memória do CLP contendo a configuração da Tabela 10.1.
Para que está variável inicie com o valor de 10 segundos é necessário criarmos um novo
bloco do tipo Startup e por meio desta realizar a atribuição do valor. Está atribuição pode ser
feita de diferentes formas, é possível utilizar o operador MOVE caso o bloco Startup seja criado
na linguagem Ladder. Outra opção seria criar este bloco com a linguagem de Texto Estruturado
(SCL) e inserir o comando:
"Referencia" := 10000;
Por fim, é solicitado que seja adicionado ao supervisório SCADA a opção de definir o valor
de referência. Portanto, também criamos a Tag ”Referencia” no supervisório e atrelamos esta
a sua semelhante do CLP. Feito isto, inserimos à tela do supervisório um elemento I/O Field
conforme destacado na Figura 10.1. Nas propriedades do elemento adicionado, em Properties
> General > Type, alteramos seu modo de funcionamento para Input/Output permitindo a
este tanto, realizar alterações da variável do CLP, assim como, visualizar alterações realizadas
diretamente no CLP. É necessário também, em Animations > Tag connections, criar uma nova
animação do tipo Process value e configurar esta com a tag ”Referencia”.
Para ativar a utilização do protocolo OPC pelo supervisório SCADA, utilize o menu PC-
System > HMI_RT_2 > Runtime Settings. Neste, na aba Services, selecione a opção Operate as
OPC server, conforme a Figura 10.2.
10.3 Ativando o servidor OPC – 52 –
Após configurar o supervisório SCADA para funcionar com o protocolo OPC, execute todo
o sistema e pelo programa MatrikonOPC Explorer visualize os dados sendo transmitidos. Este
programa pode ser obtido em MatrikonOPC Downloads. Instale-o e o execute em paralelo ao
sistema supervisório SCADA. Observe na Figura 10.3, que encontra-se disponível a conexão
OPCSimaticHMI, selecione esta e siga os seguintes passos:
1. Se conecte ao servidor OPC;
2. Clique me ”Adicionar itens ao servidor OPC selecionado”;
3. Defina um nome ao grupo, por exemplo, ”SCADA”;
10.4 Criando programa em Python para controle do CLP – 53 –
Por meio do protocolo OPC é possível realizarmos a troca de dados entre programas
desenvolvidos em diferentes plataformas, como por exemplo, entre um script Python e o CLP
anteriormente configurado. Conforme solicitado, nesta atividade tem-se o objetivo de realizar
a visualização do atual tempo de referência, atualiza-lo, inicializar a execução da Luz Q1 e
por fim acompanhar seu tempo restante de acionamento, tudo isto por meio de um programa
desenvolvido em Python.
Para o desenvolvimento de tal programa, foi disponibilizado no moodle um código inicial
(opc_start_wait_stop.py). Neste está disponível um exemplo de como realizar a inicialização
de um cliente OPC, escrita de uma variável e finalização do cliente. Com base neste código é
possível desenvolvermos a interface desejada. A seguir apresentamos uma possível solução em
script desenvolvido em Python para realizar tal interface com o sistema supervisório.
# TEST OPC - START, WAIT AND STOP FUNCTION
import OpenOPC
from time import sleep
10.4 Criando programa em Python para controle do CLP – 54 –
opc = OpenOPC.client()
opc.connect(’OPC.SimaticHMI.CoRtHmiRTm’)
pt = opc.read(’Referencia’)
print(’Tempo␣de␣Preset:␣’+str(pt[0]))
npt = input(’Digite␣o␣novo␣tempo␣em␣ms:’)
opc.write((’Referencia’,npt))
opc.write((’Botao_Remoto_Start’,1))
sleep(0.1)
opc.write((’Botao_Remoto_Start’,0))
sleep(0.1)
et = opc.read(’tempo’)
while et[0] > 0:
print(’Tempo␣decorrido:␣’+str(et[0]))
sleep(0.1)
et = opc.read(’tempo’)
opc.close()
Após desenvolvido o código, inicialize todo o sistema envolvendo CLP, IHM e supervisório
SCADA e em seguida execute o script em Python. Então basta verificar se é apresentado no
prompt de comando o valor da variável ”referencia”, definir um novo valor e conferir se a luz Q1
se mantém acessa pelo tempo atribuido.
Caso não tenha o interpretador Python instalado em seu computador, basta seguir o passo
a passo disponível em Python3 for Windows. Após realizar todos os passos e verificar que o
Python e pip foram adequadamente instalados, temos de instalar o pacote referente ao protocolo
OPC.
pip install OpenOPC-Python3x
pip install pywin32
É indicado desativar seu antivírus, pois este pode gerar erro durante a instalação do pacote.
Para que o pacote OpenOPC funcione corretamente, é necessário também instalar o pywin32 e
então copiar os arquivos gerados em pywin32_system32 para a pasta C:/
Após instalado o pacote OpenOPC, pode ser necessária a reinicialização do computador
para que este seja reconhecido pelo sistema.