Prototipo Programável Com Automação
Prototipo Programável Com Automação
Prototipo Programável Com Automação
LUCA PAPARELLA
DISSERTAÇÃO
CURITIBA
2021
LUCA PAPARELLA
CURITIBA
2021
Esta licença permite compartilhamento, remixe, adaptação e criação a partir do
trabalho, mesmo para fns comerciais, desde que sejam atribuídos créditos ao(s)
autor(es).
4.0 Internacional Conteúdos elaborados por terceiros, citados e referenciados nesta obra não são
cobertos pela licença.
Ministério da Educação
Universidade Tecnológica Federal do Paraná
Campus Curitiba
LUCA PAPARELLA
Prof Joao Paulo Lima Silva De Almeida, Doutorado - Instituto Federal de Educação, Ciência e Tecnologia do Paraná (Ifpr)
Prof.a Lucia Valeria Ramos De Arruda, Doutorado - Universidade Tecnológica Federal do Paraná
Documento gerado pelo Sistema Acadêmico da UTFPR a partir dos dados da Ata de Defesa em 10/12/2021.
Dedico este trabalho a minha família, pelos
momentos de ausência.
AGRADECIMENTOS
A minha família, pelo carinho, incentivo e total apoio em todos os momentos da minha
vida.
Ao meu orientador, que me mostrou os caminhos a serem seguidos e pela confança
depositada.
O presente trabalho foi realizado com apoio da Coordenação de Aperfeiçoamento de
Pessoal de Nível Superior - Brasil (CAPES) - Código de Financiamento 001.
A curiosidade traz inquietude à mente mesmo
quando se está em total segurança e conforto.
Ela é, ainda, um mecanismo catalisador do
aprendizado. Quando há o interesse por
descobrir a resposta para um mistério, todos os
sentidos são aguçados para que se encurte o
caminho da descoberta.
(MENESTRINA; BAZZO, 2008)
RESUMO
PAPARELLA, Luca. Programmable system with open-source tool for teaching control and
automation. 2021. 127 p. Dissertation (Master’s Degree in Course Name) – Universidade
Tecnológica Federal do Paraná. Curitiba, 2021.
In this work, an open-hardware module with Arduino, and open-source software as Open-PLC,
Scadabr and Python are used to engage students in designing, building and testing their own
technology in order to arouse curiosity improving research and practical experiments, in addition
to proposing laboratory control practices that explore concepts taught in the classroom. This
system enables modeling, analysis, design and control testing in an environment that can be
virtual or real. In the course of the dissertation will be explained the design and construction of
a shield that will convert the Arduino Uno R3 platform into a programmable logic controller
with basic functionality. This prototype, aided by open-source software, intends to recreate an
industrial automation and control environment.The proposed methodology aims to explore the
main concepts of basic electronics, code programming, communication between devices and
data analysis. Finally, practical experiments and measurements will be made to validate and
evaluate the proposed system, fnishing with the discussion of the results obtained.
SIGLAS
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.1 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2 MOTIVAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3 ORGANIZAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 REVISÃO DA LITERATURA . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1 LABORATÓRIOS ACADÊMICOS . . . . . . . . . . . . . . . . . . . . 18
2.2 FERRAMENTA OPEN SOURCE . . . . . . . . . . . . . . . . . . . . . 19
2.3 SOFTWARE PARA CONTROLE DE PROCESSOS . . . . . . . . . . . 19
2.4 SOFTWARE PARA INTERFACE SCADA . . . . . . . . . . . . . . . . 24
2.5 FERRAMENTA OPEN-HARDWARE . . . . . . . . . . . . . . . . . . . 28
2.6 TRABALHOS RELACIONADOS . . . . . . . . . . . . . . . . . . . . . 33
3 TECNOLOGIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1 CONTROLADORES LÓGICOS PROGRAMÁVEIS . . . . . . . . . . 35
3.1.1 Arquitetura e princípio de funcionamento . . . . . . . . . . . . . . . . . . . 36
3.1.2 Processo Scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.3 Modulo E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.1.4 Programação dos CLPs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.1.4.1 Controladores PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.2 COMUNICAÇÃO SERIAL EM CONTROLADORES . . . . . . . . . . 42
3.2.1 DeviceNets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2.2 ControlNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.3 EtherNet/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.4 Foundation Fieldbus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2.5 Profbus-DP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.3 PROTOCOLO MODBUS . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.4 O MICROCONTROLADOR AVR . . . . . . . . . . . . . . . . . . . . . 47
3.4.1 ATMega328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4.2 Comunicação serial do microcontrolador . . . . . . . . . . . . . . . . . . . 49
3.4.3 UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.4.4 Interface SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.5 Interface TWI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.4.6 Interface USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.5 CONCLUSÕES DO CAPÍTULO 3 . . . . . . . . . . . . . . . . . . . . . 53
6 RESULTADOS E DISCUSSÃO . . . . . . . . . . . . . . . . . . . . . . . 78
6.1 ENSAIO VIRTUAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2 ENSAIO HÍBRIDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.3 ENSAIO COM AQUECEDOR . . . . . . . . . . . . . . . . . . . . . . . 83
6.4 CONCLUSÕES DO CAPÍTULO 6. . . . . . . . . . . . . . . . . . . . . 86
7 CONCLUSÕES E PERSPECTIVAS . . . . . . . . . . . . . . . . . . . . 87
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
APÊNDICES 94
1 INTRODUÇÃO
(MARTINS, 2013). No entanto, nem sempre esses ambientes simulados possuem baixas despe-
sas, às vezes o alto valor das licenças dos softwares inviabiliza sua aquisição. Enfm, a exposição
excessiva a simulações pode resultar numa desconexão entre a realidade física e a virtual por
parte do aluno.
Em Souza (2016) é explanado um terceiro tipo de ambiente: o laboratório hibrido, onde
parte da simulação do processo industrial a ser estudado acontece com equipamentos industriais
e parte do processo é simulado virtualmente, que também gera alto custo de hardware e software.
Diante desse contexto de ambiente híbrido, esta pesquisa tem como objetivo implementar
uma solução alternativa de baixo custo, que faça uso de ferramenta open-source. Pretende-se
descrever a montagem, confguração e a implementação de um protótipo hardware acoplado
com a plataforma Arduino Uno R3 e aliado com ferramenta software, que possa reproduzir
experiências de laboratório para o ensino de controle e automação. Frizzarin (2016) destaca que
o surgimento das plataformas de prototipagem para microcontroladores, tem permitido que os
alunos pratiquem e desenvolvam soluções eletrônicas por conta própria.
As comunidades acadêmicas envolvidas com essas plataformas apoiam disponibilizando
projetos hardware, código e tutoriais para que os alunos desenvolvam suas próprias soluções.
É o caso da plataforma abordada neste trabalho, o Arduino. O Arduino ou outra plataforma
micro controlada de prototipagem tem como objetivo controlar ou automatizar alguma tarefa. O
termo automação pode ser defnido como um processo onde são realizadas várias operações com
o auxílio de diversos dispositivos eletrônicos e/ou mecânicos que controlam os seus próprios
processos. Em um contexto mais específco, a automação industrial é a aplicação de técnicas,
softwares e/ou equipamentos específcos numa determinada máquina ou processo industrial,
com o objetivo de aumentar a sua efciência e maximizar a produção com o menor consumo
de energia e/ou matérias. Portanto neste cenário, entende-se que na automação, que além do
hardware existe uma outra componente importante, o software. O software desenvolve tarefas
de programação e controle e gerenciamento de hardware por meio de linguagens específcas.
Linguagens de programação para a automação industrial foram padronizadas por meio da norma
IEC 61131-3, publicada pela Comissão Eletrônica Internacional (IEC), que defne um conjunto
de normas e especifcações técnicas com o objetivo de padronizar os autômatos programáveis.
17
1.1 OBJETIVOS
1.2 MOTIVAÇÃO
1.3 ORGANIZAÇÃO
Este trabalho está organizado em outros seis capítulos além da introdução, na qual
é apresentada toda a contextualização do tema. No capítulo 2 são apresentados os conceitos
teóricos básicos necessários ao desenvolvimento do sistema de controle e algumas ferramentas
de hardware e software disponíveis atualmente. No capítulo 3 aborda uma introdução sobre Con-
troladores lógicos programáveis e sua arquitetura. Os capítulos 4 e 5 apresentam a metodologia
utilizada para desenvolvimento do hardware e utilização da ferramenta open-source escolhida.
Posteriormente, no capítulo 6 são apresentados os ensaios e analisados e discutidos os resultados.
Por fm, no capítulo 7 são apresentadas as conclusões.
18
2 REVISÃO DA LITERATURA
(MARTINS, 2013). No entanto, nem sempre esses ambientes simulados são de baixo custo,
às vezes o alto valor das licenças dos softwares inviabiliza sua instalação. Enfm, a exposição
excessiva a simulações pode resultar numa desconexão entre a realidade física e a virtual por
parte do aluno.
Em Souza (2016) é explanado um terceiro tipo de ambiente: laboratório hibrido. Nesse
tipo de laboratório, o qual é objeto de estudo deste trabalho, parte da simulação do processo
industrial a ser estudado acontece usando equipamentos reais como nos laboratórios físicos e
parte do processo é simulado em ambiente virtual. Enfm, em Silva (2018) é explanada outro
tipo de subdivisão de laboratórios acadêmicos: Laboratório local e Laboratório remoto.
Em quanto o laboratório local pode ser comparado ao laboratório físico, já conceituado,
o laboratório remoto consiste num ambiente em que uma ou mais experiências podem ser
realizadas sem intervenção direta, sendo comandada remotamente e os resultados obtidos por
medições e/ou visualização de imagens em tempo real da experiência. O sistema proposto tem
funcionalidades para ser usado remotamente ou localmente, neste trabalho serão abordadas só as
confgurações para trabalho local.
Open source é um termo em inglês que signifca código aberto. Isso diz respeito ao
código-fonte de um software, que pode ser adaptado para diferentes fns. O termo foi criado pela
OSI (Open Source Initiative) que o utiliza sob um ponto de vista essencialmente técnico. Na
grande maioria dos casos, essas ferramentas são compartilhadas online pelos desenvolvedores,
podendo ter acesso a elas qualquer pessoa, sem restrições. São exemplos deste tipo de software:
Linux, Eclipse, Mysql, Apache entre outros.
Software para controle de processos tem, assim como o nome sugere, a função de
controlar e monitorar os parâmetros requeridos para as diferentes atividades automatizadas.
Nessa pesquisa foram encontrados os seguintes softwares open-source: Beremiz (BEREMIZ,
2017), MBLogic (MBLOGIC, 2010) e LDMicro (WESTHUES, 2016). Estes software são
resumidos a seguir.
Por meio do editor OpenPLC Editor, fgura 2, é possível desenvolver algoritmos de pro-
gramação em todas as cinco linguagens defnidas pela norma IEC 61131-3. Atualmente o
programa oferece suporte às seguintes plataformas: Arduino, Raspberry Pi, UniPi Indus-
trial Platform, dispositivos escravos Modbus, ESP8266 e PiXtend. Ainda funciona como
CLP virtual nos sistemas operacionais Linux e Windows, permitindo a integração com
outros softwares através de interfaces adequadas. Atualmente o programa está na versão
3.0, que foi a utilizada neste trabalho (ALVES et al., 2014). Este é um software licenciado
na forma GPL (acrônimo inglês para General Public License) para uso comercial, modif-
cação, distribuição, uso privado e uso de patente de colaboradores. O OpenPLC pode ser
acessado através da rede industrial Modbus/TCP. Isto signifca que é possível ler e escrever
dados no CLP virtual através de dispositivos Modbus, bem como pode ser integrado a
Sistemas de Supervisão e Aquisição de Dados (SCADA). O servidor do OpenPLC, fgura
5, é acessado através de um navegador web. Através da tela inicial, pode-se interagir
com o CLP virtual inicializando ou paralisando o seu funcionamento, visualizando logs e
carregando arquivos de confguração do CLP.
O projeto MBLogic pretende ser uma plataforma completa de automação que segue a
norma IEC 61131-3 (PLCOPEN, 1993). Essa plataforma contém um conjunto de pacotes
de software utilizados para a comunicação e controle industrial de processos. Este conjunto
de pacotes pode ser utilizado individualmente ou em conjunto, conforme o desejado pelo
22
– MBLogic Soft Logic: este pacote é uma plataforma completa e independente para
o controle de plataformas industriais. Incorpora um controlador virtual com IHM
baseada em web, campo para conexão de entradas e saídas e ajuda on-line.
– MBLogic Tools é o pacote que fornece ferramentas para teste e solução de problemas
das aplicações. Para além destas funcionalidades, fornece também servidores que
permitem que os clientes comuniquem-se uns com os outros. Algumas das ferra-
mentas existentes neste pacote são: MBAsyncServer (servidor proxy Modbus/TCP),
MBProbe (ferramenta cliente web based para a leitura e escrita de um servidor Mod-
bus/TCP para teste e troubleshooting, manualmente), e MBPoll (linha de comandos
para testar servidores Modbus TCP/IP).
Fornecer interfaces gráfcas que apresentem o estado atual do processo, permitindo assim
uma fácil visualização e análise das variáveis do processo e dos alarmes. Permite também
interação com determinadas variáveis do processo;
Apresentar gráfcos de histórico do comportamento das variáveis, que deve fcar guardado,
para permitir ao utilizador o estudo do mesmo, defnindo posteriormente alguma ação a
tomar de maneira a melhorar a produtividade;
Disparar alarmes que podem ser geridos pelo usuário. Os alarmes devem fcar registados
em um arquivo de registro de eventos, para o usuário poder aceder ao seu histórico. É
ainda possível haver uma hierarquização de alarmes e distribui-los por usuário;
– DAQ – fornece dados das fontes exteriores como controladores, medidores, etc;
– Gerenciamento de Alarmes;
– Interface gráfca;
– Geração de Relatórios;
– Registro de eventos;
– Linguagem de programação;
Projetos de hardwares, como o utilizado nesse trabalho, não são cobertos por licenças de
copyright, mas sim por patentes; no entanto o fato de o hardware não ser protegido por copyright
não signifca que é impossível licenciar o projeto com licenças abertas. De acordo com a OSHWA
(2012), o hardware se diferencia do software no sentido de que recursos físicos devem sempre
29
ser empregados na produção de bens físicos. Desse modo, pessoas ou empresas produzindo itens
(“produtos”) sob uma licença OSHWA têm uma obrigação de não impor que esses produtos
30
Figura 14 – ESP32
O Teensy 4.0 é: Trata-se de uma placa de prototipação rápida e é suportada pelo ambi-
ente Arduino (PJRC, 2019). O microcontrolador que comanda a placa Teensy 4.0 é um
Cortex-M7 capaz de operar até a 600 MHz, e apresenta uma capacidade para executar
duas instruções no mesmo ciclo, além de diversas características que permitem o desen-
volvimento de algoritmos que demandam criptografa ou cálculos complexos, como o
33
compatíveis. O autor afrma não ter dúvida que esses equipamentos despertam o interesse do
aluno pela teoria e prática de controle, permitindo que ele possa se aprimorar nos estudos também
em seu próprio lar.
Em Pacheco et al. (2019) explica-se como a popularidade do Arduino tem crescido nos
últimos anos, principalmente como parte da Internet das Coisas, que está produzindo um impacto
relevante em diversos setores da economia (indústria, transportes, energia, agricultura, automação
residencial, etc.). Várias políticas nacionais e europeias foram defnidas para treinar as empresas
da UE para a adoção e difusão das tecnologias IoT. O autor descreve o desenvolvimento de um
laboratório remoto de Arduino para dar suporte a ambientes de experimentação de aprendizagem
de IoT on-line, considerados importantes para fornecer programas de educação on-line de
qualidade em IoT.
Em Li (2018) é proposto uma confguração de laboratório de sistema de controle. A
ferramenta Arduino é utilizada no curso de controle e automação como um controlador digital.
O autor afrma que este projeto de laboratório de sistema de controle pode reforçar a experiência
prática do aluno para o ensino de graduação em engenharia. Neste artigo, o autor fornece dois
exemplos demonstrativos para experimentos práticos, um é o controle PID e o outro é o controle
fuzzy. A partir dos resultados experimentais, afrma que o aluno pode aprender os assuntos
relacionados, alcançando objetivo das disciplinas estudadas.
35
3 TECNOLOGIAS
O CLP é um equipamento que pode ser programado para executar instruções que
controlam motores, dispositivos, máquinas e operações de processos; tais instruções são im-
plementação de funções específcas, como lógica de controle, sequenciamento, controle de
tempo, operações aritméticas, controle estatístico, controle de malha, transmissão de dados etc.
(FRANCHI; CAMARGO, 2008). Em instalações industriais, os CLPs devem suportar altas
temperaturas, umidade, ruídos elétricos, poluição atmosférica, entre outros fatores, portanto,
devem ser projetados e construídos para operar em ambientes agressivos. Como mostrado a
Figura 16 e conforme explicado por (PETRUZELLA, 2014) e (ZANCAN, 2011), um CLP é
divido em partes:
Figura 16 – Estrutura básica de uma CLP
f) Memória imagem das entradas e saídas: esta memória armazena informações dos
estados das entradas e saídas do CLP, funcionando como uma tabela em que a CPU
buscará informações durante o processamento do programa de usuário;
De acordo com Petruzella (2014) também é importante ressaltar que quando se fala em
arquitetura do CLP se faz referência ao equipamento, ao programa do CLP ou a uma combinação
dos dois. Um sistema de arquitetura aberta permite que o equipamento seja conectado facilmente
aos dispositivos e programas de outros fabricantes e utilizam-se componentes de prateleira que
seguem padrões aprovados. De outro lado, um sistema com arquitetura fechada é aquele cujo
projeto é patenteado, tornando-o mais difícil de ser conectado a outros sistemas. Considerando-se
que a maioria dos sistemas de CLP é patenteada, torna-se necessário verifcar se o equipamento
ou programa genérico que será utilizado é compatível com um CLP específco (PETRUZELLA,
2014).
Conhecido como Scan, pode ser defnido como um processo de varredura, leitura ou
exploração, cuja função básica é ler, por meios das entradas, os valores dos dispositivos de
campo. Em seguida, o CLP fará uma análise desses dados por meio do processador, que, de
39
acordo com a lógica de controle inserida pelo usuário, ligará ou desligará, por meio da interface
de saída, os dispositivos de campo (Figura 17).
O processo de Scan é normalmente um processo contínuo e sequencial que precisa de
um tempo para ser concluído. O tempo total que o controlador precisa para completar esse ciclo
de varredura, processamento da lógica e atualização da porta E/S é chamado de Scan Time, o
qual depende das memórias utilizadas pelo programa de controle e do tipo de instruções usadas
por este, variando de alguns décimos de segundo até 50 milissegundos. No entanto, esse tempo
pode aumentar dependendo de uso de subsistemas remotos, pois o CLP precisará de um tempo
maior para transmitir e receber dados desses sistemas remotos. (BRYAN; BRYAN, 2002).
b) Entradas/saídas analógicas: essa interface, que também mantém uma conexão física
como os dispositivos de campo, geralmente é empregada em processos que exigem
um controle mais preciso; esses sinais elétricos podem ser de tensão ou corrente,
cuja faixa de valores mais utilizada é, respectivamente, 0 a 10V e 4mA a 20mA.
Ainda segundo (ZANCAN, 2011), as entradas digitais possuem isolação elétrica por
meio de acopladores ópticos e podem ser do tipo PNP ou tipo fonte (Sourcing) e NPN ou tipo
dreno (Sinking), como mostrado na Figura 18. Neste trabalho será apresentada só a confguração
de tipo fonte.
Figura 18 – Sinksource
As linguagens de programação "de alto nível", assim chamadas por serem mais próximas
da linguagem utilizada para comunicação entre pessoas, reduziram drasticamente o tempo de
programação do CLP por não terem o inconveniente de obrigar o programador a conhecer
detalhadamente a arquitetura do microprocessador do CLP.
A programação do CLP é um conjunto de instruções ou comandos desenvolvidos pelo
usuário do equipamento para que ele execute determina ação. As linguagens de programação
estabelecem regras para combinar as instruções de forma a atender o que é desejado, no entanto,
foi criada a norma IEC 61131-3 para que cada desenvolvedor de CLP não venha a ter a sua
própria linguagem de programação; discrimina os tipos de linguagem de programação textual
que devem ser usadas (PRUDENTE, 2008; BOLTON, 2006):
Lista de instruções – IL (instruction list): este modo de programação utiliza uma sequência
de instruções tipo texto de baixo nível. É constituída por uma série de códigos “máquina”,
41
Texto estruturado – ST (structural text): este modo de programação utiliza, como o seu
próprio nome indica, texto estruturado de alto nível, ou seja, linguagens de programação
no nível de Pascal, C++, Basic, entre outras. É o tipo de linguagem mais potente para
CLP, aquela de mais versatilidade, mas tem contra si o fato de ser a mais complicada de
entender e programar. Requer alguns conhecimentos de programação avançada;
Diagrama ladder – LD: como o nome indica, do inglês ladder (escada), o tipo de repre-
sentação desta linguagem faz-se tipo escada, com uma barra vertical do lado esquerdo
chamada barra de alimentação, uma barra vertical do lado direito chamada de retorno
comum ou massa e uma linha horizontal dividida em duas partes, sendo que a do lado
esquerdo é a zona destinada às entradas e a do lado direito é a zona destinada às saídas. É
talvez a linguagem de programação mais utilizada mundialmente para a programação de
CLPs;
Diagrama de blocos funcionais – FBD: é uma linguagem constituída por uma série
de blocos que utilizam simbologia lógica combinatória (AND, OR, XOR, etc). É mais
utilizada por quem tem prática na eletrônica digital e lógica, em que a simbologia é a
mesma;
malha fechada, em que a característica fundamental do processo controlado deve fcar invariável
(AGUIRRE, 2019). O objetivo desses controladores é que a ação do controle é composta por
uma parcela proporcional ao erro, uma integral ao erro e uma proporcional derivada do erro. Esse
erro se deve à comparação da variável controlada do processo com a referência (PRUDENTE,
2008). Assumindo 𝑢(𝑡) como sinal de saída, pode-se estabelecer o algoritmo do PID de acordo
com a equação 1:
∫︁ 𝑡
𝑑𝑒(𝑡)
𝑢(𝑡) = 𝐾𝑝 𝑒(𝑡) + 𝐾𝑖 𝑒(𝜏 )𝑑𝜏 + 𝐾𝑑 (1)
0 𝑑𝑡
em que 𝐾𝑝 é o ganho proporcional, 𝐾𝑖 é o ganho integral, 𝐾𝑑 é o ganho derivativo, 𝑒 o
erro, 𝑡 o tempo e 𝜏 é o tempo de integração.
3.2.1 DeviceNets
DeviceNet é uma rede aberta em nível de dispositivo. Tem uma velocidade relativamente
baixa, mas efciente no tratamento de mensagens curtas de e para os módulos de E/S. À medida
que os PLCs se tornaram mais poderosos, eles estão sendo necessários para controlar um número
crescente de dispositivos de campo de E/S. Portanto, às vezes pode não ser prático conectar
43
separadamente cada sensor e atuador diretamente nos módulos de E/S. Os sistemas convencionais
têm racks de entradas e saídas com cada dispositivo de E/S conectado de volta ao controlador. O
protocolo DeviceNet reduz drasticamente os custos integrando todos os dispositivos de E/S em
uma rede tronco de 4 fos com dados e condutores de energia no mesmo cabo. A conectividade
direta reduz o custo e o consumo de tempo fação. A função básica de uma rede de barramento
DeviceNet E/S é comunicar informações, bem como fornece energia para, os dispositivos de
campo que estão conectados ao barramento. O CLP aciona os dispositivos de campo diretamente
com o uso de um Scanner de rede em vez de módulos de E/S (BOLTON, 2006).
O módulo Scanner se comunica com dispositivos DeviceNet na rede para:
O módulo scanner se comunica com o controlador para trocar informações que incluem:
Dados de I / O do dispositivo;
Informações de status;
Dados de confguração.
O DeviceNet também tem a característica única de poder alimentar a rede. Isso permite
que dispositivos com requisitos de energia se alimentem diretamente da rede, reduzindo ainda
mais os pontos de conexão e o tamanho físico. O DeviceNet usa o protocolo industrial comum,
chamado CIP, que é estritamente orientado a objetos. Cada objeto tem atributos (dados), serviços
(comandos) e comportamento (reação a eventos). Dois tipos diferentes de objetos são defnidos
na especifcação CIP: objetos de comunicação e objetos específcos do aplicativo. Uma rede
DeviceNet pode suportar até 64 nós e a distância de ponta a ponta da rede é variável, com base
na velocidade da rede.
Comunicações de dados são transportados por dois fos com um segundo par de fos
para alimentação. Os dispositivos de campo que estão conectados à rede podem comunicar
não apenas o status de ligado/desligado, mas também informações de diagnóstico sobre seu
estado operacional. Por exemplo, pode-se detectar através da rede que um sensor fotoelétrico
44
está perdendo margem por causa de uma lente suja, e pode-se corrigir a situação antes que o
sensor falhe em detectar um objeto.
3.2.2 ControlNet
3.2.3 EtherNet/IP
3.2.5 Profbus-DP
Endereço: aponta qual dispositivo receberá ou enviará o pacote. A faixa de endereços váli-
dos dos dispositivos varia de 0 a 247, sendo o endereço 0 (zero) utilizado para mensagens
que são enviadas para todos os escravos (broadcast), representado por 8 bits no modo RTU
ou por dois caracteres no modo ASCII;
Dados: campo onde existem informações relacionadas com o código da função no campo
de funções, como, por exemplo, o número de variáveis discretas a serem lidas ou ativadas;
Como mostrado nas fguras 20 e 21, no modo RTU o início e o fm são representados
por um intervalo de silêncio e os campos de endereço e função são representados por 8 bits,
enquanto a verifcação de controle é realizada por meio do algoritmo CRC (cyclic redundancy
check), sendo representado por 16 bits. No modo ASCII, o início é representado pelo caractere
":"(0x3A em hexadecimal), os campos de endereço e função são representados por dois caracteres
47
dos nomes dos desenvolvedores faz uso de 8 bits e contém um processador RISC. A tecnologia
RISC tem um desempenho melhor da CISC devido sua uma arquitetura, em que as instruções são
de tamanho fxo gastando o mesmo tempo de execução e acessando a memória de forma simples
e uniforme. O processador AVR de 8 bits, trabalha com dados de 8 bits, sendo suas instruções
de 16 bits, 32 bits ou mais. A maioria dessas instruções é executada em 1 ou 2 períodos de
relógio, assim com um cristal de 16MHz, comuns na plataformas Arduino, o microcontrolador
consegue executar aproximadamente 16 milhões de instruções por segundo (ZELENOVSKY;
MENDONÇA, 2019). É importante salientar que o processador faz uso da arquitetura Harvard,
a qual permite manter separada a memória do programa e de dados. Isto permite um processo
de programação simples, ou seja, uma estrutura voltada a programação em C, permitindo a
produção de código compacto.
3.4.1 ATMega328
que pode chegar até 20MHz. Além da memória Flash, dispõe de uma memória SRAM de 2 kbites
e uma EPROM de 1 kbite para armazenar variáveis mesmo com a alimentação interrompida.
Um meio muito utilizado para comunicação entre dois dispositivos é o modo serial.
Esse tipo de comunicação envia dados serialmente, isto é bit a bit, ocasionando uma diminuição
de fos a serem utilizados se comparado a comunicação paralela. Pode-se caracterizar em 2 tipos:
Comunicação serial síncrona: onde existe um sinal de clock que marca o instante que
cada bit é disponibilizado, e faz uso de 3 fos: um para dados, um para clock e um para
referência de terra.
50
Comunicação serial assíncrona: onde não existe um sinal de clock para validar os dados.
Também faz uso de 3 fos: um para transmissão, um para recepção e um para referência de
terra.
3.4.3 UART
Como mostrado na fgura 23, a comunicação entre dois dispositivos por meio de UART
é realizada conectando o sinal do terminal de transmissão do primeiro dispositivo com o terminal
receptor do segundo dispositivo, e o sinal do terminal de transmissor do segundo dispositivo com
o terminal receptor do primeiro, além disso os dois dispositivo devem ter a mesma referência de
terra.
Figura 23 – Comunicação UART
A diferença da UART, que faz uso de 2 pinos: Rxd e Txd, a interface SPI (Serial
Peripheral Interface) é uma comunicação serial síncrona de curta distância Full Duplex utilizada
geralmente em arquitetura mestre escavo, que utiliza 4 pinos:
MOSI (Master Output, Slave Input), transmissão pelo mestre e recepção pelo escravo;
MISO (Master INput, Slave Output), recepção pelo mestre e transmissão pelo escravo;
Essa interface, que tem como padrão a comunicação entre microcontroladores e peri-
féricos, possui uma taxa de operação superior a 20 MHz e pode enviar mensagem de qualquer
tamanho com conteúdo e fnalidade arbitrária. Em uma rede SPI, fgura 24, somente um dis-
positivo pode ser confgurado como mestre, os outros devem ser confgurados como escravos.
52
A terceira interface serial é a TWI (Two Wire Interface). Esse tipo de comunicação
é compatível com a I2c (Inter-Integrated Circuit), o qual é um barramento serial multimestre
desenvolvido pela Philips, fgura 25. Possui uma arquitetura mestre escravo e endereço de
dispositivo de 7 bits, permitindo a conexão de até 127 dispositivos. Caracterizada para ser uma
comunicação serial síncrona, o seja, o clock é enviado junto com o sinal e possui uma velocidade
máxima de 400KHz. Essa interface faz uso de 2 pinos:
Em uma rede TWI, cada dispositivo recebe um identifcador para evitar erros no envio de
informações
Devido aos poucos pinos disponíveis para entradas e saídas digitais, no ARduino Uno
R3 (módulo 12), propõe-se um circuito expansor. O CI PCF8574 é um expansor de portas
I2C de 8 bits, utilizado para acionar até oito pinos do chip utilizando apenas duas portas do
microcontrolador, liberando assim as demais portas para outras tarefas. O PCF8574 é um CI com
baixo consumo de corrente e pinos com potência sufciente para controlar dispositivos como leds
mas que também pode-se usar como saídas (e entradas) de uso geral, acionando relés, atuadores
ou recebendo dados de sensores, fgura 28. Os pinos Vdd e Vss são os pinos de alimentação (Vdd
é o positivo, 2,5 à 6VDC, e Vss é o GND). Tem-se também um pino INT, usado para trabalhar
com interrupções do microcontrolador. Os pinos SDA SCL são a interface I2C e os pinos P0 à
P7 são saídas/entradas do PCF8574. Enfm, os pinos A0, A1 e A2 são os de endereçamento do
PCF8574, endereço esse que será usado para comunicação I2C identifcando o dispositivo no
barramento. O PCF8574 pode ter até 8 endereços diferentes, o que signifca que no EDUARD
poderia ter ao mesmo tempo até 8 desses chips, totalizando 64 portas adicionais. Então para
56
selecionar o endereço I2C que se deseja usar com o chip, basta seguir a tabela da fgura 29,
atribuindo o valor 0 ou 1 aos pinos A0, A1 e A2.
o segundo gerenciará:
Finalmente, pode-se entrar no assunto de entradas e saídas I/O começando pelas en-
tradas e saídas analógicas de 4 a 20 mA e 0 a 10 V. Como mostrado na fgura 35, usam-se
dois amplifcadores operacionais para a porta de entrada 4 a 20 mA. O primeiro amplifcador
confgurado em modo inversor é responsável para receber uma corrente de entrada, que varia
entre 4 e 20 mA, e convertê-la em um valor de tensão, que nesse caso varia de -1 até -5 V. O
segundo amplifcador, confgurado em modo inversor, será responsável para adequar esse range
de -1 até -5 V para um valor compatível do microcontrolador de 1 até 5V.
Pelos resultados mostrados na fgura 32, observa-se que uma entrada de 4𝑚𝐴 corres-
ponde a uma conversão de 1𝑉 , enquanto para uma entrada de 20𝑚𝐴 corresponde uma conversão
de 5𝑉 . Enfm, no projeto fnal, um diodo Zener será colocado no fm desse subcircuito como
59
proteção, evitando assim que por algum problema, como, por exemplo, um curto no amplifcador,
possa-se elevar a tensão acima de 5𝑉 , provocando a queima do microcontrolador.
No que diz respeito às saídas 4 a 20 mA é preciso salientar que essa família de micro-
controladores não possui periféricos de saída 𝐷𝐴𝐶, mas somente saídas PWM (Pulse Width
Modulation) ou Modulação por Largura de Pulso. Um 𝐷𝐴𝐶 (digital to analog converter) é
um conversor digital-analógico em microcontroladores com esses tipos de periféricos; apenas
escreve-se em um registrador o valor binário correspondente à tensão desejada na saída e o
conversor trata de colocar a tensão correta no pino de saída (BONI, 2018). Portanto, entende-se
que o primeiro passo é converter a onda quadrada do PWM em uma tensão analógica aproxima-
damente proporcional ao duty-cycle do PWM e para tal fm usa-se um fltro ativo de primeira
ordem. Um fltro ativo é um tipo de fltro eletrônico analógico, distinguido dos outros pelo uso
de um ou mais componentes ativos associados a elemento passivo. Como mostrado na fgura
33, o fltro passa-baixa de primeira ordem de ganho unitário, constituído por um resistor 𝑅1 , um
capacitor 𝐶1 e um amplifcador operacional em modo buffer, permite a passagem de todas as
frequências, desde zero até a frequência de corte, bloqueando todas as outras frequências acima
disso (PERTENCE, 2015).
Para calcular esse tipo de fltro ativo 𝑅𝐶 deve-se entender a importância de considerar
um compromisso entre a ondulação e o tempo de acomodação, pois dois requisitos exigem ações
opostas, já que um fltro com pouca ondulação tem uma resposta lenta e um fltro com tempo
de acomodação rápido pode ter muita ondulação. Portanto, para atender a esse compromisso
assume-se o valor de 10𝑘Ω para 𝑅1 , 1µ𝐹 para 𝐶1 e a frequência do 𝑃 𝑊 𝑀 do microcontrolador
60
Com esses parâmetros pode-se calcular a frequência de corte 𝑓𝑐 por meio de equação 2
e o tempo considerando a acomodação de 90% do fltro pela equação 3.
1
𝑓𝑐 =
2𝜋𝑅1 𝐶1 (2)
𝑓𝑐 = 15,92𝐻𝑧
Com uma resposta do fltro sufcientemente rápida e com uma ondulação tolerável,
como mostrado na fgura 34, pode-se elaborar a saída analógica 4 a 20 mA. Nesse tipo de
saída tem-se um sinal PWM convertido por fltro para uma tensão analógica de 0 a 5𝑉 e um
amplifcador operacional será responsável por converter proporcionalmente a uma corrente de 4
a 20 mA.
Portanto, considerando essas condições de proporção em que 𝐼𝐿 = 4𝑚𝐴 com 𝑉1 = 1𝑉 ,
𝐼𝐿= = 20𝑚𝐴 com 𝑉1 = 5𝑉 e assumido 𝑅1 = 𝑅2 = 𝑅3 = 𝑅4 pode-se calcular o subcircuito
61
(𝑉1 )
𝐼𝐿 =
𝑅1
𝐼𝐿 𝑅1 = 𝑉1 − 𝑉2
(4)
4𝑒 − 3 * 𝑅1 = 1
20𝑒 − 3 * 𝑅1 = 5
obtendo 𝑅1 = 𝑅2 = 𝑅3 = 𝑅4 = 250Ω.
Nas saídas analógicas de 0 a 10 V tem-se uma variação de tensão que varia entre 0 e 10
V, portanto, desenvolveu-se um circuito que tem uma variação diretamente proporcional entre a
saída defnida e a saída do pino do microcontrolador, a qual varia entre 0V e 5V. Assim sendo,
cria-se um circuito contendo um amplifcador operacional, como mostrado na fgura 36, o qual
62
será confgurado como fltro passa-baixa ativo não inversor. Esse amplifcador será responsável
por converter o sinal PWM do microcontrolador em sinal de tensão analógico e por manter a
proporção da tensão entre a saída do dispositivo e a saída do microcontrolador. Logo, por meio
da equação 5 e assumindo-se 𝑅1 = 1𝑘, calcula-se 𝑅2 ,
(︃ )︃
𝑅2
𝑉𝑜𝑢𝑡 = 1 + 𝑉𝑖𝑛
𝑅1
(︃ )︃ (5)
𝑉𝑜𝑢𝑡
𝑅2 = − 1 𝑅1
𝑉𝑖𝑛
𝑅4
𝑉𝑜𝑢𝑡 = − .𝑉𝑖𝑛
𝑅3 (6)
5.1000
𝑅4 = −
10
63
Uma entrada digital consiste tipicamente numa fonte de tensão, isto é um interruptor
que dependendo do estado aberto/fechado, onde o microcontrolador detecta um estado de tensão
ou tensão 0, interpretando-o como um estado logico de "1"ou "0". Neste protótipo propõe-
se entradas de 0-24V e 0-12V. Estes circuitos, tem a tarefa de baixar a tensão em nível do
microcontrolador, neste caso em 5V.
No EDUARD tem-se saídas com relé e transistores. Os relés, por serem elementos
64
eletromecânicos, estão sujeitos a limitações como desgaste dos contatos e velocidade de co-
mutação, mas podem trabalhar em uma ampla faixa de tensão e corrente. É comum encontrar
saídas digitais de 250 V AC/DC de 2 a 10 A, por exemplo, o que diminui a necessidade de
circuitos auxiliares. Como mostrado na fgura 39, o pino do microcontrolador da saída digital
relé é isolada por um optoacoplador e um diodo em antiparalelo é incluído no circuito para evitar
que um pico de tensão possa causar um arco nos contatos da chave ou destruir os transistores da
chave quando a bobina é desligada.
A saída transistor, mostrada na fgura 40, utiliza esse componente estático porque possui
maior vida útil que os relés. Essa saída trabalha apenas com corrente contínua, geralmente com
tensão de 24 VDC, e comuta correntes de baixa amplitude como, por exemplo, 500 mA na
maioria dos casos. Em alguns casos é possível a utilização de mais de um canal para uma mesma
carga para aumentar a corrente máxima. Por exemplo, é possível utilizar dois canais de 0,5 A
simultaneamente para acionar uma carga de 1 A. Nesse caso, o acionamento dos canais deve ser
simultâneo para evitar sobrecargas em um dos canais.
é transferido por convecção para um sensor de temperatura. O calor deste sensor é lido pela
plataforma Arduino que regula uma saída PWM, a qual fornece tensão na base do transistor. Este
pequeno circuito permite criar várias experiências de controle de sintonia por PID, MPC, entre
outras.
Figura 41 – BYU Arduino Temperature Control Lab
Fonte: APMonitor.com
Na fgura 42 é mostrado o circuito a ser integrado no protótipo, qual faz uso do transistor
TIP31C e do sensor de temperatura LM35:
Neste capítulo foi apresentado o protótipo EDUARD, uma plataforma que recebe, por
encaixe, o Arduino Uno R3. EDUARD foi concebido por arquitetura de módulos. Esquemático
66
5.1 OPENPLC
a instalação o servidor. Uma vez instalado procede-se a confguração por meio da interface web.
O sistema dispõe de várias páginas, sendo as mais importantes a Slave Device onde pode-se
68
confgurar o dispositivo a ser controlado, como mostrado na fgura 43 e a Programs onde pode
ser feito o upload do arquivo .st para gerenciamento do controlador, como mostrado na fgura 43.
Enfm, uma vez completadas essas confgurações, pode-se ativar o sistema por meio do
botão Strart PLC presente na página Dashboard, fgura 44, iniciando assim o controle do PLC
por comunicação Modbus.
5.2 SCADABR
Assim como o software anterior, o ScadaBR oferece uma interface web para a visualiza-
ção das variáveis, gráfcos, estatísticas, confguração dos protocolos, alarmes, construção de telas
tipo IHM e uma série de opções de confguração. Após confgurar os protocolos de comunicação
com os equipamentos e defnir as variáveis (entradas e saídas, ou "tags") de uma aplicação
automatizada é possível montar interfaces de operador web utilizando o próprio navegador.
Também é possível criar aplicativos personalizados, em qualquer linguagem de programação, a
partir do código-fonte disponibilizado ou de sua API "web-services"(GOMES, 2015). Algumas
funcionalidades do sistema:
Interface do usuário baseada na web para monitoramento remoto do sistema por meio de
69
Drivers de aquisição de dados compatíveis com Linux e Windows para utilização com os
protocolos mais difundidos atualmente na indústria (por exemplo, Modbus e OPC);
Após a criação e confguração do Data source, deve-se criar a denominada Data point.
Os Data points são os elementos que irão conter os valores relacionados com as entradas e
70
saídas da plataforma conectada. Como mostrado na fgura 46 deve-se nomear o Data point e
defne-se os 2 campos fundamentais: o primeiro é o ID do escravo e o segundo é a Faixa do
registro. Sucessivamente, os data points devem ser criados inserindo-os registradores holding
e defnindo três campos fundamentais: o primeiro é o faixa do registro, em que a opção a ser
selecionada deve ser registrador holding; em seguida, o campo tipo de dados MODBUS deve
ser determinado como binário; por último, o campo offset – este campo informa ao ScadaBR
qual dos registradores holding será escrito ou lido, de modo que o número a ser utilizado vai
de acordo com a ordem de escrita dos registradores holding no código do dispositivo, como
mostrado na fgura 47.
de programação orientada a objetos, o que signifca que ela possui recursos, classes e objetos,
por exemplo, que dão suporte ao paradigma de programação orientada a objetos (PYTHON,
2001). Também foi instalada a extensão PlatformIO, que é um framework baseado na classe
de Arduino que permite escrever software em microcontroladores para controlar dispositivos
conectados ao módulo Arduino (PLATFORMIO, 2014). Nesta confguração o VSCode permite
escrever e executar duas linguagens diferentes contemporaneamente como C++ e Python.
O Qucs (Quite Universal Circuit Simulator) consiste na junção de vários softwares de
simulação de circuitos eletrônicos. O software é capaz de fazer análises que incluem parâmetro S
(incluindo ruído), CA (incluindo ruído), CC, análise transiente, equilíbrio harmônico (ainda não
concluído), simulação digital (VHDL e Verilog-HDL) e varreduras de parâmetro (MARGRAF;
JAHN, 2003).
72
Neste trabalho usa-se um modelo de planta industrial para fazer testes com o protótipo
hardware, programado em forma de classe com o propósito de poder instanciar mais de um
objetos, mantendo uma estrutura simples para refatoração. O modelo em questão simula um
processo por evaporação em múltiplos estágios que conjuga em série dois evaporadores de
um estágio, com o objetivo de concentrar uma solução pela ebulição do solvente (FOUST;
WENZEL, 1982). Nesse tipo de processo existe uma ligação entre os evaporadores de tal modo
que o vapor produzido em um estágio do evaporador serve como fuido de aquecimento para
o seguinte estágio e assim sucessivamente até o último estágio. Como mostrado na fgura 48,
o processo é de tipo alimentação direta, quando a alimentação é feita no estágio mais quente e
percorre os estágios no mesmo sentido do fuxo de vapor, sendo utilizada quando a temperatura
de alimentação é alta. Nesse processo, com a entrada de uma alimentação busca-se produzir uma
solução mais concentrada. A alimentação, aqui, trata-se de uma solução (licor negro e água) com
concentração x0 de 20%, temperatura T0 de 90 °C e vazão f0, cujo valor inicial é de 0,11 m³/s,
que alimenta o evaporador 1. A evaporação é realizada dentro do evaporador 1, que funciona
como um trocador de calor aquecendo a solução até a ebulição, passando em seguida para um
segundo evaporador que repete o mesmo processo.
Figura 48 – Sistema de evaporação com 2 estágios
O evaporador 1 possui temperatura T1, pressão p1, fuxo de energia (q1), volume V1
de aproximadamente 5 m³, com área de transferência de 2.900 m³ e coefciente de calor de 4
73
kW/m² °C. É aquecido com vapor através da válvula (fs) a uma temperatura saturada do vapor
(Ts) de 140 °C. A saída de vapor do evaporador 1 é responsável pelo aquecimento do evaporador
2 através de ws. Dentro desse primeiro evaporador, a solução passa a ter concentração x1 e é
liberada para o evaporador 2 através da válvula de saída (f1). O evaporador 2 recebe aquecimento
do evaporador 1 (ws), possui temperatura T2, pressão p2, fuxo de energia (q2), volume V2
aproximado de 5 m³, com área de transferência de 3.000 m³ e coefciente de calor de 4 kW/m²
°C.
Dentro do segundo evaporador, com valor inicial de vazão da válvula de saída (f2) de
0,057 m³/s, a concentração passa a ser x2. Após aquecimento dos dois evaporadores, o vapor de
saída do evaporador 2 (w1) é transferido para um condensador que possui temperatura Tc, fuxo
de energia (qc), área de transferência de calor igual a 3.000 m² e coefciente de transferência
de calor igual a 5 kW/m² °C. A temperatura de água fria (Th2o) na entrada do condensador
é de aproximadamente 20 °C; a entrada dessa água é controlada pela válvula de entrada do
condensador (fc) (SOUZA, 2016). As equações 7 a 20 representam o modelo matemático do
processo industrial descrito acima. O modelo foi baseado no trabalho de Granfors e Nilsson
(1999).
𝑑(𝜌𝑉 )
= 𝜌𝑖𝑛 𝐹𝑖𝑛 − 𝜌𝑜𝑢𝑡 𝐹𝑜𝑢𝑡 − 𝑊 (7)
𝑑𝑡
𝑑(𝑋𝑤 𝜌𝑉 )
= 𝑋𝑤𝑖𝑛 𝜌𝑖𝑛 𝐹𝑖𝑛 − 𝑋𝑤𝑜𝑢𝑡 𝜌𝑜𝑢𝑡 𝐹𝑜𝑢𝑡 − 𝑊 (8)
𝑑𝑡
𝑑(𝑋𝑠 𝜌𝑉 )
= 𝑋𝑠𝑖𝑛 𝜌𝑖𝑛 𝐹𝑖𝑛 − 𝑋𝑠𝑜𝑢𝑡 𝜌𝑜𝑢𝑡 𝐹𝑜𝑢𝑡 (9)
𝑑𝑡
𝑑(𝜌𝑉 𝐻) 𝑉
= 𝜌𝑖𝑛 𝐹𝑖𝑛 𝐻𝑖𝑛 + 𝑄 − 𝜌𝑜𝑢𝑡 𝐹𝑜𝑢𝑡 𝐻𝑜𝑢𝑡 − 𝑊 𝐻𝑜𝑢𝑡 (10)
𝑑𝑡
𝑑(𝑋𝑤 ) 1
= [𝜌𝑖𝑛 𝐹𝑖𝑛 (𝑋𝑤𝑖𝑛 − 𝑋𝑤𝑜𝑢𝑡 ) − 𝑊 (1 − 𝑋𝑤𝑜𝑢𝑡 )] (12)
𝑑𝑡 𝜌𝑉
𝑑(𝐻) 1 𝑉
= [𝜌𝑖𝑛 𝐹𝑖𝑛 (𝐻𝑖𝑛 − 𝐻𝑜𝑢𝑡 ) − 𝑊 (𝐻𝑜𝑢𝑡 − 𝐻𝑜𝑢𝑡 ) + 𝑄] (16)
𝑑𝑡 𝜌𝑉
𝑄𝑐 = 𝑊 ∆𝐻𝑠𝑡𝑒𝑎𝑚 (18)
𝑄𝑐 = 𝑘𝑐 𝐴𝑐 (𝑇 − 𝑇𝑐𝑜𝑢𝑡 ) (20)
De acordo com Granfors e Nilsson (1999), para a simulação do processo, além das
equações vistas, precisa-se considerar também outras rotinas de cálculo representadas as seguir
como funções:
dnslblq (T,X): Densidade como uma função de temperatura e concentração do licor negro;
entlblq (T,X): Entalpia como uma função de temperatura e concentração do licor negro;
tlblq (X,H): Temperatura como uma função de concentração e entalpia do licor negro;
epvh2o (P,T): Entalpia do vapor puro como uma função de pressão e temperatura;
eplh2o (P,T): Entalpia do liquido puro como uma função de pressão e temperatura,
75
onde:
𝜌: densidade (kg/m³);
𝑉 : volume (m³);
𝑋: concentração (kgH2O/kg);
𝐻: entalpia (kJ/kg);
𝑇 : temperatura (°C);
𝐶: condensador;
∆: diferença;
𝑒: erro de controle;
𝑃 : pressão (kPa);
𝑉 : vapor;
𝐼𝑁 dentro;
76
𝑂𝑈 𝑇 fora;
𝑤: água;
𝑠: licor;
ℎ𝑜𝑡: quente;
𝑐𝑜𝑙𝑑: frio;
comunicação com os dispositivos e pela impressão dos gráfcos. Para que esse código se torne de
fácil manipulação ou refatoração foram criadas duas classes (Evaporadores.py e Controlador.py),
contendo as funções necessárias. Com essas classes prontas, além de permitir uma redução drás-
tica de tempo para criar o código de gerenciamento pode-se instanciar objetos da planta ou do
controlador quantas vezes for necessário, permitindo ensaios paralelos e comparações de resulta-
dos. No caso da classe do controlador, quando o dispositivo desenvolvido for conectado pode-se
mudar os parâmetros de controle sem precisar reprogramar o microcontrolador, permitindo mais
dinâmica na execução das experiências acadêmicas. Por fm, no código central, responsável para
as chamadas das classes, os objetos serão instanciados respeitando os parâmetros mostrados na
tabelas 5, 6 e 7
6 RESULTADOS E DISCUSSÃO
Neste capítulo explanam-se três ensaios com o objetivo de validar os resultados obtidos
com o protótipo hardware. Na primeira experiência é feito um controle inteiramente virtual, em
que o programa em Python resolve todo o cálculo da modelagem da planta e faz o controle PID,
sendo o código desenvolvido por meio de orientação a objeto, isto é, um código instanciando o
objeto da classe evaporador, que contém todas as funções de cálculo do modelo matemático da
planta, e o objeto da classe Controlador.py, que contém todas as funções de cálculo do controlador
PID, como mostrado na fgura 49.
Utilizam-se os resultados gráfcos desse primeiro ensaio como comparação aos resul-
tados obtidos no segundo ensaio. Observa-se que no diagrama de blocos da fgura 49 existem
funções de conexão que permitem que o Python converse com o protótipo hardware desenvolvido.
Os gráfcos a seguir mostram os resultados do controle de volume, a concentração do licor negro,
temperatura do vapor nos 2 evaporadores e temperatura do fuido no condensador. Para simulação
do comportamento dinâmico do processo foi elaborado uma receita, representada na tabela 8.
Pode-se observar pelo gráfco 1 que o volume V1 no evaporador 1 do licor negro se
manteve constante até a etapa 5000, quando o valor do setpoint foi mudado para 4 𝑚3 . Também
é evidenciada uma oscilação no volume neste evaporador na etapa 8000 devido a mudança do
setpoint do volume, V2, do evaporador 2 para 3,8 𝑚3 .
Pelo gráfco 2 pode-se observar que as temperaturas dos evaporadores seguem as
79
ETAPAS SETPOINT
V1 = 5
V2 = 5
0
TC = 70
X2 = 0,44
V1 = 5
V2 = 4
1500
TC = 70
X2 = 0,48
V1 = 5
V2 = 4
2000
TC = 70
X2 = 0,50
V1 = 4
V2 = 4
5000
TC = 65
X2 = 0,48
V1 = 4
V2 = 3,8
8000
TC = 75
X2 = 0,44
Caso contrário, o setpoint de X1 diminui. Se X1 for maior que seu setpoint a abertura da válvula
fs aumenta, caso contrário ela diminui. Portanto pode-se observar pelo gráfco, e acompanhar
pela receita da tabela 8, o aumento da concentração do X1 nas etapas 0, 1500 e 2000, e uma
diminuição nas etapas 5000 e 8000.
mudar para 65𝐶 na etapa 5000 e para 75𝐶 na etapa 8000. Pode-se observar que o aumento do
setpoint dessa temperatura TC, cria um pico instantâneo no setpoint X1.
Foi adicionado no protótipo a realização da sintonia do PID por meio de uma comu-
nicação serial. O sistema em Python será incrementado de uma classe servidormodbus.py, a
qual será responsável para criar um servidor modbus TCP/IP na porta local 502. Esse servidor
se comunicará como o ScadaBR. O diagrama é mostrado na fgura 50. Com o supervisório
o qual mostra grafcamente a evolução das variáveis em cada evaporador como temperatura
(T1 e T2), pressão, volume (V1 e V2), válvula de alimentação evaporador 1 (f0), válvula de
vazão/alimentação entre os evaporadores (f1), válvula vazão do evaporador 2(f2), concentração
do licor negro no 2 evaporadores X1 e X2.
Pode-se observar também os gráfcos que acompanha em tempo real o desempenho das
concentrações do licor negro nos 2 evaporadores e a temperatura do condensador.
O OpenPLC Editor não oferece blocos Ladder complexos, portanto foi necessário
desenvolver 2 blocos extras para complementar o código necessário. O bloco CTEMP mostrado
na fgura 53 realiza a conversão do número inteiro recebido por Modbus para o valor de tipo
REAL que representa a tensão recebida do sensor. De acordo como o datasheet do sensor de
temperatura LM35 10mV representa 1°C, portanto divide-se o valor obtido por 0.01. O programa
central mostrado na fgura 54, realiza a sintonia por meio do bloco PID, o qual recebe o valor de
temperatura convertido pelo bloco CTEMP, o valor do setpoint, as constantes de sintonia, e o
valor do ciclo de varredura.
Este bloco PID trabalha em uma única direção (variavel-setpoint) e não é confgurável,
portanto, por meio do bloco CONV_PID, fgura 55, realiza-se as conversões necessárias. Primeiro
inverte-se a direção do valor de saída do PID multiplicando-o por −1, em seguida são estipulados
os limites: o mínimo como 0 e o máximo como 65535. Enfm, o valor de tipo REAL é convertido
em inteiro para ser enviado para o protótipo. O arquivo desenvolvido é salvo em formato .st e
importado no servidor Openplc como mostrado na fgura 56.
Finalmente pode-se observar em tempo real o funcionamento do sistema por meio do
sinótico do ScadaBR, fgura 57
85
Neste capítulo foram apresentados três ensaios: virtual, híbrido e com aquecedores.
No ensaio virtual, onde todos os cálculos foram realizados pelo Python, constatou-se um bom
funcionamento e obteve-se o resultados esperados. No ensaio híbrido, onde foi adicionado o
EDUARD e o ScadaBR, a comunicação Modbus RTU e Modbus TCP/IP funcionou satisfatoria-
mente atendendo os resultados esperados. Enfm, no ensaio com os aquecedores, onde a sintonia
do controlador foi desenvolvida no OpenPLC Editor e gravada no servidor OpenPLC, mostrou-se
confável no controle da temperatura do transistor, mantendo essa temperatura estável em 40ºC.
87
7 CONCLUSÕES E PERSPECTIVAS
REFERÊNCIAS
ALMEIDA, R.M.A. de; MORAES, C.H.V. de; SERAPHIM, T. de Faria Piola. Desenvolvendo
Software para Microcontroladores em Linguagem C. Rio de Janeiro: Elsevier Brasil, 2017.
ARDUINO, Team. The MKR family gets bigger with two new IoT boards! 2018. Disponível
em: https://blog.arduino.cc/2018/05/12/the-mkr-family-gets-bigger-with-two-new-iot-boards.
BEREMIZ, Team. Free software for automation. 2017. Disponível em: https://beremiz.org/.
Acesso em: 15 jan. 2021.
BONI, Djones. DAC com sinal PWM. 2018. Disponível em: https://professoreletrico.com/
posts/hardware/dac-com-sinal-pwm/. Acesso em: 19 jan. 2021.
EASYEDA, Team. An easier and powerful online PCB design tool. 2019. Disponível em:
https://easyeda.com/. Acesso em: 23 jan. 2021.
ESPRESSIF, Team. A feature-rich MCU with integrated Wi-Fi and Bluetooth connectivity
for a wide-range of applications. 2018. Disponível em: https://www.espressif.com/en/
products/socs/esp32. Acesso em: 19 jan. 2021.
FOULIS, Christos. A portable low-cost arduino-based laboratory kit for control education.
UKACC 12th International Conference on Control (CONTROL), 2018.
89
FOUST, A. S.; WENZEL, L. A. Principios das operações unitárias. Rio de Janeiro: Editora
Guanabara, 1982.
FRANCHI, C.M.; CAMARGO, V.L.A. de. Controladores lógicos programáveis. São Paulo:
Érica, 2008.
FRIZZARIN, Fernando Bryan. Guia para colocar suas ideias em prática. São Paulo: Casa do
código, 2016.
HUGHES, J.M. Arduino per tecnici, ingegneri e maker. Milano: Tecniche Nuove, 2016.
HURTUK, Ján; CHOVANEC, Martin; ÁDAM, Norbert. The arduino platform connected to
education process. 2017 IEEE 21st International Conference on Intelligent Engineering
Systems (INES), 2017.
LI, Jen-Hsing. Control system laboratory with arduino. 2018 International Symposium on
Computer, Consumer and Control (IS3C), 2018.
LIMA, Marco De. Avr E Arduino: Tecnicas De Projeto. Florianópolis: Clube de Autores,
2012.
MARGRAF, Michael; JAHN, Stefan. Quite Universal Circuit Simulator. 2003. Disponível
em: http://qucs.sourceforge.net/. Acesso em: 1 jan. 2021.
MARTINS, Luis Miguel. Projecto dum Laboratório Remoto para Automação de Processos
Industriais. 2013. Dissertação (Mestrado) — Instituto Superior de Engenharia de Lisboa,
Lisboa, 2013.
MBLOGIC, Team. MBLogic for an open world in automation. 2010. Disponível em:
http://mblogic.sourceforge.net/mbapps/apps.html. Acesso em: 15 jan. 2021.
MCA Sistemas. Scadabr - Supervisory control and data acquisition software. 2013.
Disponível em: http://www.scadabr.com.br/. Acesso em: 30 set. 2020.
NASCIMENTO, João Maria Araújo do; LUCENA, Pedro Berretta de. PROTOCOLO
MODBUS. 2003. Disponível em: https://www.dca.ufrn.br/~affonso/FTP/DCA447/trabalho3/
trabalho3_13.pdf. Acesso em: 27 set. 2020.
PLCOPEN, Team. IEC 61131-3: a norma para programação. 1993. Disponível em:
https://plcopen.org/sites/default/fles/downloads/intro_iec_march04_portuguese.pdf. Acesso em:
16 jan. 2021.
RIOS, Lucas. Dal. Softwares livres no ensino de engenharia: uma atitude socialmente justa,
economicamente viável e tecnologicamente sustentável. Congresso Brasileiro de ensino de
Engenharia, 2006.
SILVA, Daniel Filipe. Sistema didático de uma unidade industrial de processos discretosl.
2018. Dissertação (Mestrado) — Universidade do Porto, Porto, 2018.
SOUZA, Jacqueline De. Ambiente didático para controle avançado de processos industriais.
2016. Dissertação (Mestrado) — Universidade Tecnológica Federal do Paraná, Curitiba, 2016.
WESTHUES, Jonathan. LDmicro: Ladder Logic for PIC and AVR. 2016. Disponível em:
http://mblogic.sourceforge.net/mbapps/apps.html. Acesso em: 15 jan. 2021.
93
1
Main.py
3
from arduino_modbus import ard_mod
5 from controladores import *
from evaporadores import *
7 import numpy as np
import serial
9 import time
from servidormodbus import ServidorModbus
11 from matplotlib import pyplot as plt
from arduino_modbus import ard_mod
13
15 flag=1
flag_arduino=0
17 flag_modbus=0
19 if flag_modbus==1:
modbus = ServidorModbus(’localhost’,502)
21 modbus.run()
#lista MODBUS
23 entradas_analogicas = [0,0,0,0,0,0,0,0,0]
endereco_entrada = 1000
25 saidas_analogicas = [0,0,0,0,0]
endereco_saida = 2000
27 set_point = [0,0,0,0]
endereco_setpoint = 5000
29 perturbacoes = [0,0,0,0]
endereco_perturbacoes = 6000
31
if flag_arduino==1:
33 # Modebus RTU: Python-Arduino
am = ard_mod()
35
37 if flag_arduino==2:
ser = serial.Serial(’COM3’,115200)
39 # ser1 = serial.Serial(’COM7’,9600)
time.sleep(3)
41
spx1=[]
43 spx2=[]
sptc=[]
96
45 spv1=[]
spv2=[]
47
79 for i in t:
81 print("PROCESSANDO: %d"%i,"passos")
83 #setpoints mudando
if(i>=1500):
85 pid5.set_setpoint(x2=0.48)
aspx2=0.48
87 if (i >= 2000):
pid5.set_setpoint(x2=0.50)
89 aspx2=0.50
if (i >= 5000):
91 pid5.set_setpoint(x2=0.48)
97
aspx2=0.48
93 pid1.set_setpoint(v1=4)
aspv1=4
95 pid4.set_setpoint(Tc=65)
asptc=65
97 if (i >= 8000):
pid5.set_setpoint(x2=0.44)
99 aspx2=0.44
pid2.set_setpoint(v2=3.8)
101 aspv2=3.8
pid4.set_setpoint(Tc=75)
103 asptc=75
119
# Controla V2 por f2
121 valor_V3 = e.get_sensores("V2")
p3 = pid3.pid("V2", -1, valor_V3,K=0.3,Ti=20, Td=10)
123 w3 = pid3.limites_atuador(p3, 0, 5)
e.atualiza_atuador("f2", w3)
125
127
135
# Controla x2
137 valor_x2 = e.get_sensores("X2")
p5 = pid5.pid("X2", 1, valor_x2, K=3, Ti=200, Td=100)
98
143
# Controla x1 por fs
145 pid6.atualiza_setpoint("X1",wx2)
# pid6.atualiza_setpoint("X1", valor_x2)
147 valor_x1 = e.get_sensores("X1")
p6 = pid6.pid("X1", 1, valor_x1, K=3, Ti=3, Td=10)
149 w6 = pid6.limites_atuador(p6, 0, 5)
e.atualiza_atuador("fs", w6)
151
if flag_modbus==1:
153 entradas_analogicas[0]=int(pid1.get_sensores("V1")*100)
set_point[0]=int(pid1.get_setpoint("V1")*100)
155 saidas_analogicas[0]=int(e.get_atuadores("f0")*100)
entradas_analogicas[1]=int(pid2.get_sensores("V2")*100)
157 set_point[1]=int(pid2.get_setpoint("V2")*100)
saidas_analogicas[1]=int(e.get_atuadores("f1")*100)
159 saidas_analogicas[2]=int(e.get_atuadores("f2")*100)
entradas_analogicas[2]=int(e.get_pertubacoes("Tc")*100)
161 set_point[2]=int(pid3.get_setpoint("Tc")*100)
saidas_analogicas[3]=int(e.get_atuadores("fc")*100)
163 entradas_analogicas[3]=int(pid5.get_sensores("X2")*100)
set_point[3]=int(pid5.get_setpoint("X2")*100)
165 entradas_analogicas[4]=int(pid6.get_sensores("X1")*100)
saidas_analogicas[4]=int(e.get_atuadores("fs")*100)
167
entradas_analogicas[5]=int(e.get_sensores("T1")*100)
169 entradas_analogicas[6]=int(e.get_sensores("T2")*100)
entradas_analogicas[7]=int(e.get_sensores("P1")*100)
171 entradas_analogicas[8]=int(e.get_sensores("P2")*100)
173 perturbacoes[0]=int(e.get_pertubacoes("x0")*100)
perturbacoes[1]=int(e.get_pertubacoes("T0")*100)
175 perturbacoes[2]=int(e.get_pertubacoes("Ts")*100)
perturbacoes[3]=int(e.get_pertubacoes("Tcin")*100)
177
modbus.set_entradas(endereco_entrada,entradas_analogicas)
179 modbus.set_saidas(endereco_saida,saidas_analogicas)
modbus.set_setpoints(endereco_setpoint,set_point)
181 modbus.set_perturbacoes(endereco_perturbacoes,perturbacoes)
191 if flag_arduino==1:
try:
193 # comunica o arduino Controla V1 por f0
valor_V1a = round(ea.get_sensores("V1"), 2)
195 am.escrever(3,200,2,aspv1,valor_V1a,1,1,0,5,True)
time.sleep(0.1)
197
at_v1 = am.ler(9)
199
at_erro = am.ler(10)
201
ea.atualiza_atuador("f0", at_v1)
203 print("V1: ",valor_V1,"- f0=",w1,"=======",valor_V1a,"- f1=",at_v1, "
erro = ", at_erro)
205
# comunica o arduino Controla V2 por f1
207 valor_V2a = round(ea.get_sensores("V2"), 2)
am.escrever(3,2,2,aspv2,valor_V2a,2,1,-1,5,True)
209 time.sleep(0.1)
at_v2 = am.ler(9)
211
at_erro2 = am.ler(10)
213
ea.atualiza_atuador("f1", at_v2)
215 print("V2: ", valor_V2, "- f1=",w2,"=======", valor_V2a, "- f1=", at_v2,
" erro = ", at_erro2)
217
# comunica o arduino Controla V2 por f2
219 valor_V3a = round(ea.get_sensores("V2"), 2)
am.escrever(3,2,2,aspv2,valor_V3a,3,0,0,5,True)
221 time.sleep(0.1)
at_v3 = am.ler(9)
223 ea.atualiza_atuador("f2", at_v3)
print("V3: ", valor_V3, "- f1=",w3,"=======", valor_V3a, "- f2=", at_v3)
225
231
at_tc = am.ler(9)
233 ea.atualiza_atuador("fc", at_tc)
#print("Tc: ", valor_Tc, "-", w4, "=", valor_Tca, "-", pa4)
235 print("Tc ", valor_Tc, "- fc=",w4,"=======", valor_Tca, "- f2=", at_tc)
237
# comunica o arduino Controla x2
239 valor_x2a =round( ea.get_sensores("X2"), 2)
am.escrever(3,200,100,aspx2,valor_x2a,5,1,0.24,0.5,True)
241 time.sleep(0.1)
273 #ser.flushOutput()
#ser.flushInput()
275 # if flag_arduino==1:
# ser.close()
101
277 # ser1.close()
279 if flag==1:
# impressao graficos
281 fig, (ax1, ax2) = plt.subplots(2, 1)
# fig.suptitle(’Volumes’)
283
ax1.set_xlabel(’Tempo’)
285 ax1.set_ylabel(’Volume’)
ax1.plot(e.impressao("V1"), label="Volume 1")
287 ax1.plot(ea.impressao("V1"), label="Prot tipo")
ax1.plot(spv1,’:’, label="Set Point")
289 ax1.legend()
ax1.grid(True)
291
ax2.set_xlabel(’Tempo’)
293 ax2.set_ylabel(’Volume’)
ax2.plot(e.impressao("V2"), label="Volume 2")
295 ax2.plot(ea.impressao("V2"), label="Prot tipo")
ax2.plot(spv2,’:’, label="Set Point")
297 ax2.legend()
ax2.grid(True)
299
fig, (ax3, ax4) = plt.subplots(2, 1)
301 # fig.suptitle(’Temperaturas’)
303 ax3.set_xlabel(’Tempo’)
ax3.set_ylabel(’Temperatura’)
305 ax3.plot(e.impressao("T1"), label="Temperatura 1")
ax3.plot(ea.impressao("T1"), label="Prot tipo")
307 ax3.legend()
ax3.grid(True)
309
ax4.set_xlabel(’Tempo’)
311 ax4.set_ylabel(’Temperatura’)
ax4.plot(e.impressao("T2"), label="Temperatura 2")
313 ax4.plot(ea.impressao("T2"), label="Prot tipo")
ax4.legend()
315 ax4.grid(True)
345 ax8.set_xlabel(’Tempo’)
ax8.set_ylabel(’Transfer ncia do calor’)
347 ax8.plot(e.impressao("Q1"), label="Q1")
ax8.plot(e.impressao("Q2"), label="Q2")
349 ax8.plot(e.impressao("QC"), label="QC")
# ax8.plot(ea.impressao("Q1"), label="Arduino Q1")
351 # ax8.plot(sptc, ’:’, label="Set Point")
ax8.legend()
353 ax8.grid(True)
363 ax10.set_xlabel(’Tempo’)
ax10.set_ylabel(’enthalpy ’)
365 ax10.plot(e.impressao("H2"), label=" H2")
ax10.plot(ea.impressao("H2"), label="Prot tipo")
367 # ax9.plot(sptc, ’:’, label="Set Point")
ax10.legend()
369 ax10.grid(True)
103
371
373 plt.show()
375 \end{listing}
Controladores.py
377 \begin{lstlisting}
from typing import Dict, Any
379
class Controlador:
381
__setpoint = 0
383 __direta = 1
__K = 3
385 __Ti = 2
__Td = 2
387 __min = 0
__max =0
389 __sensor_max = 0
445 self.__setpoint = {
"V1" : v1,
447 "V2" : v2,
"Tc" : Tc,
449 "X2" : x2,
"X1" : x1
451 }
455 self.__setpoint[chave]=valor
463 self.__sensores = {
"V1": V1,
105
477 self.__variavel=valor
509 if direta == 1:
erro = self.get_setpoint(chave) - self.get_sensores(chave)
511 else:
106
529 # ** Saida
# --- w - s a d a do controlador PID limitada
531 # --- v - s a d a do controlador PID
# --- INew - ultimo valor da parte integral
533 # --- DNew - ultimo valor da parte derivativa
535 # ** Calculo
# --- Tt - tempo de ’tracking’
537 # --- N - m x i m o ganho derivativo
# --- ulow - limite de saida inferior
539 # --- uhigh - limite de saida superior
559
# Atualiza os dados referentes a parte integral
561 Iold = self.__parte["integral"]
I=Iold + (K*h/Ti)*erro
563 self.__parte["integral"]=I
571 pid = P + I + D;
Evaporadores.py
import math
2
class Evaporadores:
4
def __init__(self):
6 self.set_regime()
self.set_perturbacoes()
8 self.set_atuadores()
self.set_parametros()
10 self.set_sensores()
self.set_tempo_amostragem()
12 self.set_impressao()
14
def set_tempo_amostragem(self, valor=0.03):
16
self.__Temp_int = valor
18
def set_regime(self, M1=0, x1=0, h1=0, M2=0, x2=0, h2=0):
20
self.__regime = {
22 "M1": M1, # total mass in evap 1 [ton] (m1 in kg (m1 = 1000*x(1)))
"x1": x1, # TS composition in evap 1 [kg/kg]
24 "h1": h1, # enthalpy in evap 1 [kJ/kg]
"M2": M2, # total mass in evap 2 [ton] (m2 in kg (m2 = 1000*x(4)))
26 "x2": x2, # TS composition in evap 2 [kg/kg]
"h2": h2 # enthalpy in evap 2 [kJ/kg]
28 }
108
32 if not chave:
return self.__regime
34 else:
return self.__regime[chave]
36
def set_perturbacoes(self, x0=0.2, T0=60, Ts=140, Tc=20):
38 self.__perturbacao = {
"x0": x0, # FLUXO ENTRADA LICOR NEGRO
40 "T0": T0, # TEMPERATURA ENTRADA LICOR NEGRO
"Ts": Ts, # TEMPERATURA VAPOR
42 "Tc": Tc # TEMPERATURA AGUA CONDENSADOR
}
44 def atualiza_perturbacoes(self, chave, valor):
46 self.__perturbacao[chave] = valor
50 return self.__perturbacao[chave]
62 self.__atuador[chave]=valor
66 return self.__atuador[chave]
70 self.__parametro = {
"k1": k1,
72 "k2": k2,
"kc": kc,
74 "A1": A1,
109
"A2": A2,
76 "Ac": Ac,
"Cpc": Cpc,
78 "rhoc": rhoc
}
80
def get_parametros(self, chave):
82
return self.__parametro[chave]
84
def set_sensores(self, V1=0, X1=0, T1=0, V2=0, X2=0, T2=0):
86
self.__sensor = {
88 "V1": V1,
"X1": X1,
90 "T1": T1,
"V2": V2,
92 "X2": X2,
"T2": T2,
94 }
98 if not chave:
return self.__sensor
100 else:
return self.__sensor[chave]
102
def atualiza_sensores(self):
104
# Atualiza sensor V1
106 m1 = self.__regime["M1"]*1000
x1 = self.__regime["x1"]
108 h1 = self.__regime["h1"]
t1 = self.tlbql(x1, h1)
110 self.__sensor["V1"] = m1/ self.dnslblq(t1,x1 )
122 t2 = self.tlbql(x2,h2)
self.__sensor["V2"] = m2 / self.dnslblq(t2, x2)
124
# Atualiza sensor T2
126 self.__sensor["T2"] = t2
#
170 # entlblq takes scalars as argument and givs an argument back.
#
172 # Constructed by Anders G r n f o r s november 1997.
200 t1=0.00154487872701993*T+0.421983624285494
t2=t1*t1
202 t3=t2*t1
t4=t2*t2
204 t6=t4*t2
t7=t4*t3
206 t8=t4*t4
t10=1/t6
208 t11=1.0-0.8438375405*t2-0.0005362162162*t10
t12=t11*t11
210 t14=math.sqrt(1.72*t12-0.00022685859691024*T-0.0619664257460328+0.44989682368897
e-5*P)
t15=1.0-0.8438375405*t2-0.0005362162162*t10+t14
212 t17=-0.00260725333075854*T-0.712171247296694+0.00321729729720/t7
t24=t15**(1/17)
214 t25=t24*t24
112
t26=t25*t25
216 t32=abs(0.231731805714506-0.00154487872701993*T)
t33=t32*t32
218 t34=t33*t33
t35=t34*t34
220 t38=t8*t8
t39=t38*t3
222 t43=abs(0.115e-5+t39)**2
t48=t8*t3
224 t51=(0.000015108+t48)**2
t54=P**2
226 t55=t54*P
t61=7.002753165+0.0000452079566003617*P
228 t62=t61*t61
t69=t54*t54
230 t71=739.301458788841*T+163920.466110549-0.276364606019155e7*t2+0.944280256739551
e7*t3-0.208307675590731e8\
* t4+0.306822124630358e8 *t4*t1
232 t72=-0.301196627013353e8*t6+0.189794973993922e8*t7-0.696083281226833e7*t8
+0.113161485881604e7*t8*t1
t73=559.749606393127*(
234 t15*(-0.830459770114945+0.700773129897994*t2+0.000445305995637357*t10
+0.58620689551725\
*t14+0.416666666667*t1*t17)+0.000113429298455121*T+0.0309832128730164-0.72*t1*
t11*t17)/(
236 t26*t24)
t74=0.00317*(-0.02616571843-0.02284279054*t2+242.1647003*(
238 0.0139039085431794*T+4.45156804856945)*t35*t32\
+0.1269716088e-9*(20*t39+0.115e-5)/t43)*P
240 t75=-70.1204*((12*t48+0.000015108)*(
0.937992010849910e-11*P+0.444317439561950e-16*t54+0.102161218698085e-21\
242 *t55))/t51
244 t76=906.966657888536*t38*t2*(2.41196+19*t2)*(
1/t62/t61+0.135410710940326e-7*P)+0.172888641578764e-16*t55\
246 +0.37197019193547e-27*t69/t38/t4
248 epl=t71+t72+t73+t74+t75+t76
return epl
250
def epvh2o(self, P, T):
252
# EPVH2O Specific enthalpy of steam E = EPVH2O(P,T) H(kJ/kg), as a function
254 # of pressure, P(kPa), and temperature, T ( C ).
#
256 # Source: Ernst Schmidt, 1969, Properties of water and steam in SIunits,
# Springer-Verlag Berlin Heidelberg New York, R. Oldenbourg Munchen.
113
258 #
# Pressure range: 0.6 - 18000 kPa. Temperature range: 0 - 800 C.
260 # Max. error relative the International Skeleton Tables: 0.20 #
#
262 # The program uses the subprogram EQTH2O.
#
264 # Author : C Engman , Dept. Chem. Eng I, Lund, September 1982
# Revised: R Colschen , Dept. Chem. Eng I, Lund, August 1985
266 # Revised: R Colschen , Dept. Chem. Eng I, Lund, May 1987
# Revised: Stefan T r n , Dept. Chem. Eng I, Lund, March 1988
268 # Revised: R Colschen , Dept. Chem. Eng I, Lund, May 1990
# Converted to MATLAB by:
270 # Anders Gr nfors , Dept, Chem, Eng. I, Lund, 8 Mars 1995
# Revised: Anders Gr nfors , Dept. Chem. Eng. I, Lund, 21 December ,1995
272 # TSAT = self.eqth2o(P)
# TooLowOrHigh = find((T.*1.00010 < TSAT) | (P < 0.60)...
274 # | (P > 18000.0) | (T < 0.0) | (T >800))
276 t1=0.1544878727019929e-2*T+0.4219836242854936e0
t2=t1**2
278 t4=t2**2140
t11=math.exp(0.1323657500328418e1-0.3537772284721149e-2*T)
280 t15=P**2
t18=math.exp(0.7941945001970508e1-0.212266337083269e-1*T)
282 t19=(0.6798054997429492e1+0.212266337083269e-1*T)*t18
t22=math.exp(0.8824383335522787e0-0.2358514856480766e-2*T)
284 t26=math.exp(0.4412191667761393e0-0.1179257428240383e-2*T)
t30=t15*P
286 t37=t15**2
t44=math.exp(0.6177068334865951e1-0.1650960399536536e-1*T)
288 t48=t37*P
t59=math.exp(0.1058926000262734e2-0.283021782777692e-1*T)
290 t68=1/(0.4006073948e0*t44+0.23940900987136e18/t37)
t69=t1*t44*t68
292 t79=math.exp(0.8383164168746648e1-0.2240589113656728e-1*T)
t83=1/(0.8636081627e-1*t79+0.5295727298354483e22/t48)
294 t84=t1*t79*t83
t92=math.exp(0.2382583500591152e2-0.6367990112498069e-1*T)
296 t94=math.exp(0.1191291750295576e2-0.3183995056249034e-1*T)
t100=1/(-0.8532322921e0*t92+0.3460208861e0*t94
298 +0.1171414878396012e27/t37/t15)
t101=t1*(-0.460745437734e2*t92+0.93425639247e1*t94)*t100
300 t108=-0.1787039916770122e2+0.5967497936042021e-1*T
t110=0.1324291291154024e1-0.527894635872084e-1*T+0.1931380707e2*t2
302 t111=1/t110
t113=t108*t111
304 t145=t37**2
114
t148=t110**2
306 t149=t148**2
t150=t149**2
308
s1=0.1823801244130845e1*T+0.2500857472660724e4-0.3036678101852136e2*t2
+0.9182563265566376e2\
310 *t2*t1-0.180178197593935e2*t4-0.317e-2*P*(
0.6670375918e-1*(0.5187484164810188e1\
312 +0.1533034656712498e-1*T)*math.exp(
0.5735849168089812e1-0.1533034656712498e-1*T)\
314 +0.1388983801e1*(
0.1966342499571582e1+0.3537772284721149e-2*T)*t11)\
316 -0.1433092224231465e-6*t15*(
0.8390104328e-1*t19+0.2614670893e-1*(0.1644228333047721e1\
318 +0.2358514856480766e-2*T)*t22-0.3373439453e-1*(
0.1322114166523861e1\
320 +0.1179257428240383e-2*T)*t26)
322 s3=s1-0.6478717107737182e-11*t30*(
0.4520918904e0*t19+0.1069036614e0*(0.4221141665238607e1\
324 +0.1179257428240383e-1*T)*math.exp(
0.4412191667761393e1-0.1179257428240383e-1*T))
326
s2=s3-0.2928895618326032e-15*t37*(-0.5975336707e0*(0.9052854163096516e1\
328 +0.2948143570600958e-1*T)*math.exp(
0.1103047916940348e2-0.2948143570600958e-1*T)\
330 -0.8847535804e-1*(
0.5509598331334049e1+0.1650960399536536e-1*T)*t44)\
332 -0.1324093860002727e-19*t48*(0.5958051609e0*(0.1130765332876354e2\
+0.3773623770369226e-1*T)*math.exp(
334 0.1411901333683646e2-0.3773623770369226e-1*T)\
-0.5159303373e0*(
336 0.100191966626681e2+0.3301920799073073e-1*T)*
math.exp(
338 0.123541366697319e2-0.3301920799073073e-1*T)+0.2075021122e0*
(
340 0.8730739996572656e1+0.283021782777692e-1*T)*t59)
342 s3=s2-0.701204e2*(
0.1190610271e0*math.exp(0.5294630001313672e1-0.141510891388846e-1*T)\
344 *(
0.4865369998286328e1+0.141510891388846e-1*T-0.4281157692242383e1*t69)
-0.9867174132e-1\
346 *math.exp(0.4853410834537533e1-0.1297183171064421e-1*T)*(
0.4543255831762467e1\
348 +0.1297183171064421e-1*T-0.4281157692242383e1*t69))*t68
115
350 s4=s3-0.701204e2*(
0.1683998803e0*t59*(0.8730739996572656e1+0.283021782777692e-1*T\
352 -0.1252519705247871e1*t84)-0.5809438001e-1*t18*(
0.6798054997429492e1+0.212266337083269e-1\
354 *T-0.1252519705247871e1*t84))*t83
356 s5=s4
358 s7=-0.701204e2*(
0.6552390126e-2*t59*(0.8730739996572656e1+0.283021782777692e-1*T\
360 -0.7633333333e0*t101)+0.5710218649e-3*t44*(
0.5509598331334049e1+0.1650960399536536e-1*T\
362 -0.7633333333e0*t101))*t100
364 s8=0.1130337239540422e-45*(
0.1936587558e3+0.1936587558e4*t1*t108*t111-0.1388522425e4\
366 *(0.1e1+t1*(
0.1e2*t113+0.7633333333e0))*t26+0.4126607219e4*(
368 0.1e1+t1*(0.1e2*t113\
+0.15266666666e1))*t22-0.6508211677e4*(
370 0.1e1+t1*(0.1e2*t113+0.22899999999e1))*t11\
+0.5745984054e4*(
372 0.1e1+t1*(0.1e2*t113+0.30533333332e1))*math.exp(
0.1764876667104557e1\
374 -0.4717029712961533e-2*T)-0.2693088365e4*(
0.1e1+t1*(0.1e2*t113+0.38166666665e1))\
376 *math.exp(
0.2206095833880697e1-0.5896287141201916e-2*T)+0.5235718623e3*(
378 0.1e1+t1\
*(0.1e2*t113+0.45799999998e1))*math.exp(
380 0.2647315000656836e1-0.7075544569442299e-2*T))\
*t145*t30/t150/t148
382
s6=s7+s8
384
epvh2o=s5+s6
386 return epvh2o
a = -1.794212795739585
398 b = -0.2918880381183214
c = 2.433040569149102
400 d = -1.720704009754379
e = 0.6476654714484422
402 f = -4.072742538773348
g = 6.56473933777589
404 h = -3.844316226130731
j = 0.1112786142523355
406
eqp = math.exp(a+b*T+c*T/math.log(T)+d*T**(0.5)+e*X**1.5+f*X**2+g*X**(2.5)+h*X
**3+j/math.log(X))
408 # eqp= exp(a+b*T+c*T/ log(T)+d*T^(0.5)+e*X^(1.5)+f*X^2+ g*X^(2.5)+ h*X
^3+j/ log(X))
return eqp
410
496 # Autadores
f0 = self.__atuador["f0"]
498 f1 = self.__atuador["f1"]
f2 = self.__atuador["f2"]
500 fc = self.__atuador["fc"]
fs = self.__atuador["fs"]
502
# Evaporador 1
504 m1 = self.__regime["M1"]*1000
x1 = self.__regime["x1"]
506 h1 = self.__regime["h1"]
Ts = self.__perturbacao["Ts"]
508 k1 = self.__parametro["k1"]
A1 = self.__parametro["A1"]
510
# Prorpiedade do licor
512 T1 = self.tlbql(x1, h1)
rho1 = self.dnslblq(T1, x1)
514 V1 = m1/rho1
# Evaporador 2
532 m2 = self.__regime["M2"]*1000
x2 = self.__regime["x2"]
534 h2 = self.__regime["h2"]
k2 = self.__parametro["k2"]
536 A2 = self.__parametro["A2"]
554 # Condensador
kc = self.__parametro["kc"]
556 Cpc = self.__parametro["Cpc"]
Ac = self.__parametro["Ac"]
558 rhoc = self.__parametro["rhoc"]
Tcin = 20
560
# Transfer ncia do calor
562 Tc = (kc * Ac * Tc2 + fc * rhoc * Cpc * Tcin) / (kc * Ac + fc * rhoc * Cpc)
qc = kc * Ac * (Tc2 - Tc)
564 w2 = qc / (hs2 - hl2)
566 self.__perturbacao["Tc"]=Tc
604 self.__impressao["Q1"].append(q1)
self.__impressao["Q2"].append(q2)
606 self.__impressao["QC"].append(qc)
608 self.__impressao["H1"].append(_h1)
self.__impressao["H2"].append(_h2)
610
# Atualizando sensores
612 self.atualiza_sensores()
616 self.__impressao = {
"V1" : [],
618 "V2" : [],
"T0" : [],
620 "T1" : [],
"T2" : [],
622 "TC" : [],
"TS" : [],
624 "TH2O":[],
121
"X0" : [],
626 "X1" : [],
"X2" : [],
628 "P1" : [],
"P2" : [],
630 "PC" : [],
"F0" : [],
632 "F1" : [],
"F2": [],
634 "FC" : [],
"FS" : [],
636 "Q1": [],
"Q2": [],
638 "QC": [],
"H1": [],
640 "H2": [],
}
642