Escolar Documentos
Profissional Documentos
Cultura Documentos
Centro de Blumenau
Departamento de Engenharia de
Controle e Automação e Computação
Blumenau
2019
Martin Hermes Anschau
Blumenau
2019
Scanned by CamScanner
Dedico este trabalho aos pilares da minha vida:
família, amigos e professores.
Agradecimentos
With the constant evolution of computing and electronics, the firmware for frequency
inverters is becoming more and more complex. For its quick development and final quality
assurance, the developer must guarantee that its physical and logical infrastructure is
fully working. The logical part of the frequency inverter is structured through a firmware
which is executed by one or more microprocessors that must interpret and compile a wide
range of computational code. During the development of these devices, it is normal for
the occurrence of failures, and various tests have to be performed until their validation.
With the focus to reduce the occurrence of errors in the firmware under tests, this work
proposes the study, design, and validation of an alternative that aims to verify tests
automatically in inverters before a new version to be released, generating a constant
history of tests results. For the realization of the project, a whole structure integrating
concepts involving Python programming language, industrial communication protocols,
data consumption of the Application Lifecycle Management through rest API, graphical
user interfaces and continuous integration tools, such as Jenkins, must be systematized
in order to corroborate the original work proposal. Finally, some results involving the
automatic configuration of parameters of an inverter were performed.
Keywords: 1. Frequency Inverter. 2. Firmware. 3. Python. 4. rest API.
Lista de figuras
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.1 Objetivos do projeto . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2 A empresa WEG Equipamentos Elétricos . . . . . . . . . . . . . 15
1.3 Estrutura do documento . . . . . . . . . . . . . . . . . . . . . . . 17
3 ARQUITETURA DO PROJETO . . . . . . . . . . . . . . . . . 42
3.1 Níveis da arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2 Integração do software na arquitetura . . . . . . . . . . . . . . . 45
5 VALIDAÇÃO E RESULTADOS . . . . . . . . . . . . . . . . . . 69
5.1 Teste 1: frenagem DC na partida para dois tipos de controle 70
5.1.1 Versão 0.70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.1.2 Versão 0.71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.2 Teste 2: aplicação de rampa inversa de parada . . . . . . . . . 74
5.2.1 Versão 0.70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2.2 Versão 0.71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.3 Históricos de resultados . . . . . . . . . . . . . . . . . . . . . . . . 78
5.3.1 Local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.3.2 Remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . 81
6.1 Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
REFERÊNCIAS BIBLIOGRÁFICAS . . . . . . . . . . . . . . . 83
14
1 Introdução
lizados testes de integração do sistema, o que pode gerar consequências como perda na
qualidade da estrutura final, atrasos na entrega do produto e retrabalhos.
• Visão: Ser referência global em máquinas elétricas, com ampla linha de produtos,
provendo soluções eficientes e completas;
Com expertise em diversas áreas de negócio, a WEG consolidou-se nos seguinte ofícios
[10]:
Este capítulo aborda toda a base técnica e teórica utilizada para atingir os objetivos
propostos, mencionados na introdução deste documento. O mesmo é delineado seguindo
a ordem cronológica do emprego das tecnologias. Portanto, aqui serão tratados os con-
ceitos, definições e aplicações sobre inversores de frequência (Seção 2.1), importância dos
firmwares nos inversores (Seção 2.2), protocolo de comunicação HTTP (Seção 3), API
rest’s (Seção 4), Application Lifecycle Management (Seção 5), protocolo ModBus RTU
(Seção 6), linguagem Python (Seção 7), Importância e utilização de interface gráficas em
sistemas (Seção 8), Sistema embarcado utilizando Raspberry Pi (Seção 9), Jenkins (Seção
10) e trabalhos relacionados (Seção 11).
Para fornecer controle e energia necessários para a realização das etapas mencionada
acima, o inversor pode ser abstraído em alguns blocos de componentes independentes. Os
mesmos são ilustrados conforme a Figura 6.
Alguns desses blocos são discutidos com mais detalhes nas próximas seções deste ca-
pítulo, de acordo com sua importância para o projeto. É necessário salientar que as
particularidades envolvendo a parte eletrônica do inversor são suprimidas neste trabalho,
Capítulo 2. Revisão das tecnologias utilizadas 22
pois não houve a necessidade de realizar cálculos embasados em seus aspectos físicos. Isso
deve-se ao fato de que a dinâmica fornecida pelo inversor foi apenas aplicada, sem levar em
conta maiores detalhes. Dentre os componentes essenciais do dispositivo, deve-se ressaltar
um maior envolvimento da unidade central de processamento, interface homem-máquina,
parametrização, firmware e protocolos de comunicação, conceitos expostos a seguir.
Para este projeto o seu uso foi necessário para observar o delineamento dos testes
executados sobre o motor. A IHM foi utilizada para verificar a dinâmica de algumas
grandezas físicas em forma numeral ou a partir de gráficos.
2.1.4 Parametrização
Geralmente os inversores possibilitam ao usuário interagir e manipular algumas va-
riáveis que permitem ajustar o funcionamento do aparelho para determinada aplicação.
Nessas ferramentas, as variáveis são chamadas de parâmetros.
Assim, os parâmetros são usados para executar as funções do inversor e os mesmos são
alocados na CPU através do firmware. Os principais tipos de parâmetros de um inversor
são:
• Parâmetros de leitura: variáveis que podem ser visualizadas no display, mas não
podem ser alteradas, como, por exemplo, tensão (%), corrente (%) e potência ativa.
Outros parâmetros comumente implementados nos inversores são aqueles que contro-
lam a dinâmica dos motores. Neste trabalho, por exemplo, utilizaram-se os controles do
tipo V/f e VVW. O tipo V/f controla de forma escalar a razão entre tensão e frequência
do motor a partir de valores programados. Já o VVW (Voltage Vector WEG) é, de forma
resumida, um controle do tipo vetorial desenvolvido pela WEG.
Nos inversores a parametrização é feita através de alguns protocolos de comunicação,
que serão tratados posteriormente neste capítulo, ou através de sua IHM, dependendo
apenas de requisitos de projeto e recursos disponíveis.
No caso deste projeto, trataremos mais adiante, na etapa de desenvolvimento dos
testes (Capítulo 4), o ajuste de parâmetros através de um protocolo de comunicação
chamado ModBus, muito utilizado em chão de fábrica. Parâmetros como os mencionados
na Tabela 1 e alguns outros parâmetros importantes para o desenvolvimento do projeto
serão discorridos posteriormente.
"[...] para melhorar este ambiente de comunicação era necessário considerar to-
pologias de rede apropriadas para o chão de fábrica. Uma comunicação ponto
a ponto, por exemplo, poderia ser inviável se uma máquina falhasse. Deve-
ria se considerar o ambiente, muitas vezes hostil, tempo de resposta crítico,
segurança de dados crítica e grande quantidade de equipamentos."
Nos anos 80, então, a ideia era definir uma rede única, que poderia ser utilizada
em todos os setores de uma fábrica. Essa ideia não vigorou e acabou não entrando em
conformidade com o paradigma atual de redes de comunicação. No presente, ocorre, na
comunicação empresarial, uma divisão da rede em sub-redes. Isso se torna viável, pois
os tipos de dados utilizados em uma empresa pode variar muito de acordo com o nível
hierárquico de sua integração fabril.
Visto a necessidade da implantação de redes de comunicação de chão de fábrica que
satisfizessem os requisitos necessários para uma boa operabilidade, varias tentativas de
padronização ocorreram.
O paradigma atual das redes de comunicação industriais reside no uso de tecnologias
que variam seus protocolos de comunicação. Por definição, um protocolo é um conjunto
de regras sobre como sobre a comunicação entre os elementos de uma rede industrial
e sua escolha depende da aplicação. Por exemplo, para um inversor se comunicar com
um computador, com um HMI ou com algum dispositivo de chão de fábrica como um
controlador lógico programável, ambos devem ser amigáveis com o mesmo protocolo.
Podem ser citados como os protocolos atuais mais utilizados em inversores de frequên-
cia:
de tais dispositivos ocorra de maneira coerente, recursos dos seus softwares associados
devem ser devidamente acessados e interpretados."
Este software, que age como uma interface entre o hardware e o usuário, é chamado
de firmware.
Neste campo, como foi mencionado anteriormente, também estão os inversores. Eles
são uma gama de equipamentos computadorizados, pois possuem microprocessadores,
que têm sua lógica comandada por um firmware. Este pode ser operado de maneiras
diferentes, variando de modelo e fabricante.
Para se obter um firmware de alta performance para o inversor, é necessário dispor de
boas práticas de programação. Uma prática comum na industria é a reusabilidade. Isso
está fundamentado na necessidade de aproveitar ao máximo o tempo despendido no seu
desenvolvimento, e de evitar que seja gasto tempo desenvolvendo diversas vezes trechos
de código com funcionalidades similares [20].
Este pode ser um aspecto conveniente no desenvolvimento de firmwares, todavia exis-
tem algumas contrapartidas. Algumas informações atuais indicam que praticamente me-
tade da estrutura geral de um inversor de frequência é composta por trechos de códigos
computacionais programados em suas unidades de processamento.
Isso sugere que, se ocorrerem erros em termos de programação computacional, o de-
senvolvimento do inversor pode sofrer atrasos desnecessários, utilizar recursos de uma
maneira não otimizada e causar prejuízos para as empresas fornecedoras e para seus con-
sumidores e clientes.
Assim é trivial assumir que o firmware é o tema central do projeto. O desenvolvimento
de um projeto que visa a verificação intensiva de testes do software do inversor aliado a
uma geração de histórico de falhas e êxitos pode ser um método de garantia de qualidade
interno. Portanto, essas são ações que possibilitam a minimização de adversidades no
projeto dos equipamentos, como erros de programação, atrasos e utilização ineficiente de
recursos, tanto financeiros quanto humanos, pela equipe.
O propósito original do HTTP, criado por Tim Berners, também criador da World
Wide Web, foi a de compartilhar informações na Web de maneira descomplicada. Em
1991, Tim delineou as motivações do uso de seu protocolo: ter capacidade de transferência
de arquivos, habilidade de requisição de dados no formato de hipertexto, negociação do
formato dos arquivos e a habilidade de remeter ao cliente outro servidor. Para comprovar
o conceito idealizado, um protótipo foi feito utilizando algumas dessas características:
Com tais aspectos o sistema se mostrava viável, pois estava em conformidade com
protocolos Telnet, muito utilizados na época. Assim nascia a primeira versão do HTTP,
o HTTP 0.9.
Diante do que foi desenvolvido em 1991, o HTTP sofreu uma evolução rápida e cons-
tante até chegar em sua versão 1.0, em que não se compartilhava apenas documentos de
hipertexto, mas arquivos que ofereciam dados mais ricos. Assim, um crescente número
de desenvolvedores Web começaram a produzir diversos servidores e clientes experimen-
talmente para perceber se outros usuários adotariam o protocolo. Desde então, vários
padrões de uso e desenvolvimento do HTTP foram criados.
Com as várias tentativas de padronização, enfim chegou-se à versão 1.1, em 1997,
quando o protocolo se tornou um padrão oficial para utilização na internet. Muitos pro-
blemas ainda vinham sendo encontrados, o que fazia com que várias atualizações fossem
feitas. Até 1999, então, muitas otimizações aconteceram como: comunicações mais está-
veis, transferência fragmentada de dados, requisições por tamanho de bytes, solicitações
múltiplas ao servidor, entre outras.
Com muitas coisas acontecendo na internet, como novos tipos de dados, novos tipos
de dispositivos de informação e velocidade de transmissão mais aceleradas, chegou-se à
versão mais atual do HTTP, a versão 2.0, sendo focada em melhorias na performance da
transmissão dos dados.
Com esse métodos é possível manipular uma grande gama de recursos (ou tipos de
dado) como JSON, XML, HTML e CSV. No projeto a ideia de utilização de servidores
HTTP serve para aplicar métodos sobre uma API de gerenciamento de testes, o Appli-
cation Lifecycle Management (ALM), abordado posteriormente na Seção 2.4.1. A mani-
pulação dos seus dados é feita através da conversação entre o endereço virtual do ALM e
um algoritmo feito na linguagem Python, que utiliza seus recursos. Isso torna possível o
gerenciamento e geração de históricos de resultados dos testes realizados sobre o inversor.
vida de produto foram introduzidos para definir diferentes tipos de ciclo de atividades,
focando em diferentes objetivos. Objetivos tais como requisitos de engenharia, design,
desenvolvimento e testes. A separação das atividades nesses modelos de ciclo de vida
auxiliam o processo de gerenciamento do projeto [8]. Em termos didáticos o tempo de
vida de um software tem seu modelo de ciclo de vida aproximado conforme a ilustração
da Figura 8.
Neste projeto, o ALM foi usado como padrão de gerenciamento do testes realizados no
firmware do inversor através das funcionalidades de criação de requisitos e planos de testes
e utilização do protocolo HTTP para manipular informações e gerar um histórico completo
de resultados que podem ser acessados localmente ou remotamente pelos integrantes da
equipe de desenvolvimento de software.
Diante do que foi discutido anteriormente, pode-se afirmar que os dados do disposi-
tivo escravo podem ser lidos por um mestre (computador), através do protocolo. Para
a comunicação ser estabelecida o escravo tem um endereço próprio, que é acessado pelo
mestre. A partir disso, dados referentes ao escravo podem ser lidos ou escritos. Estes
também possuem endereçamento próprio, com tamanho variável de informações. Em ter-
mos visuais, a troca de mensagens entre os dois dispositivos pode ser detalhada conforme
a Figura 10.
Figura 10 – Exemplo de troca de mensagens entre mestre e escravo com ModBus RTU
[Fonte: Adaptado de Tamboli et al. [4]].
• Possui estruturas de controle usuais com if, if-else, if-elif, while e uma coleção abran-
gente de operadores para a estrutura for;
Como se percebe conforme a Figura 11, o CLI se trata de uma interface mais simples,
geralmente relacionado com usuários mais experientes, pois o mesmo deve conhecer bem
o sistema operativo para operá-lo nas linhas de comando. Em contradição a isso, o
GUI é uma interface geralmente rica em objetos, que fornece ao usuário informações e
ferramentas visuais para uma operação mais acessível do sistema.
A partir do cenário envolvendo o uso de interfaces em aplicações de computador, fez-se
o estudo de que a implementação de uma interface gráfica de usuário para o projeto traria
alguns benefícios. A operação principal de execução de testes e outras funcionalidades do
projeto se tornariam mais práticas e desenvolvedores ou usuários leigos em programação
poderiam utilizar o projeto de maneira mais acessível.
Mercado Sistemas
Automobilístico Ignição, controle de motor e sis-
tema de freios.
Eletroeletrônicos Televisões, DVD’s, Videogames,
brinquedos, refrigeradores, telefo-
nes, celulares, câmeras, entre ou-
tros.
Medicina Bombas de infusão, máquinas de
diálise, monitores cardíacos, entre
outros.
Indústria Sistemas robóticos
Redes Roteadores, Hubs e Gateways.
Automação de escritório Impressora, Fax, monitores, scan-
ners, entre outros.
Fonte – NOERGAARD, 2013 [29].
Para que o sistema funcione corretamente, de acordo com suas aplicações, deve-se
considerar algumas características durante o seu projeto. Um sistema embarcado, de
forma geral, é constituído pelos seguintes componentes e suas atribuições básicas [30].
• Gigabit Ethernet over USB 2.0 (taxa de transferência máxima de 300 Mbps);
• GPIO de 40 pinos;
• Interface HDMI;
2.9 Jenkins
A integração contínua (IC) ou, do inglês, Continuous Integration (CI) é um processo
do desenvolvimento em que os desenvolvedores entregam seus trabalhos com frequência
para que esses sejam executados e testados antes de sua aprovação [33].
Em termos de CI, o Jenkins é um dos softwares mais populares atualmente. Jen-
kins é uma ferramenta de código aberto, desenvolvido em Java, que auxilia virtualmente
a construção e testes de projetos de software. Segundo seus desenvolvedores, a tarefa
básica do Jenkins é executar passos pré definidos, conhecidos como Jobs, baseados em
gatilhos ou comandos. Em adição a essas características, o Jenkins permite aos usuários
o estabelecimento de notificações sobre o andamento do desenvolvimento do projeto [34].
De forma geral, a ferramenta funciona como um servidor em que o desenvolvedor é
capaz de condicionar um ambiente de integração com várias configurações e comandos de
gatilho interessantes para o desenvolvimento de software. Sendo um servidor, a ferramenta
pode operar em uma arquitetura mestre/escravo, onde o mestre pode executar certos jobs
em diferentes tipos de plataformas ou sistemas operacionais. Esta arquitetura pode ser
visualizada conforme a Figura 14.
3 Arquitetura do projeto
Diante disso, os níveis são abordados de maneira mais detalhada na Seção 3.1.
Para fundamentar melhor o propósito de cada camada do projeto, tem-se uma expan-
são dos aspectos técnicos abordados por cada uma delas, conforme a próxima ilustração.
De forma geral, as atividades desempenhadas por cada nível do projeto são ilustradas
conforme a Figura 16.
Capítulo 3. Arquitetura do projeto 44
Conforme Figura 16, o primeiro nível permite especificar requisitos de testes a partir
de diferentes versões do firmware, estabelecer um planejamento de como os testes devem
ser executados e, a partir da execução dos testes, organizar um histórico de resultados de
forma centralizada. O segundo nível é o execucional, cerne de toda a lógica do projeto.
Nesse nível é operado o algoritmo que realiza as funções de comunicação (Raspberry
Pi/Inversor, PC/Inversor e Jenkins/Inversor), execução dos testes, geração e exportação
de resultados local e remota (por meio do ALM) e interface de usuário. Por fim, o
terceiro nível é representado pelo hardware em que os testes são executados, ou seja, os
inversores propriamente ditos. Neles é possível executar parâmetros de forma automática
e acompanhar a dinâmica do teste através da interface homem-máquina.
Deve-se ressaltar que, para a utilização de integração contínua do projeto com o Jen-
kins, apenas a interface de linha de comando é utilizada. Em linhas gerais, as tarefas
efetuadas pelo software do projeto ocorrem segundo uma ordem de execução, que é ilus-
trada conforme o fluxograma da Figura 17.
Com o que foi exposto neste capítulo é possível estabelecer uma organização geral a
respeito do funcionamento do projeto. O próximo capítulo se refere à metodologia e a
forma que cada nível foi implementado.
48
4 Metodologia e implementação do
projeto
1. Especificação de requisitos;
2. Criação/definição do teste;
4. Execução do teste.
testes é discutido com mais profundidade na Seção 4.5, sobre geração de histórico de
resultados.
A partir do que foi discutido na Seção 2.5 pôde-se entender como os dados do inversor
escravo podem ser lidos pelo computador, que atua como um mestre por meio do protocolo
utilizado. De forma geral, através do protocolo ModBus o inversor possui um endereço
IP próprio. Nesse protocolo, seus dados e parâmetros são tratados como registradores, os
quais possuem valores numéricos. Os parâmetros, por exemplo, possuem endereçamentos
particulares, em que uma ou mais informações podem ser acessadas.
Diante da topologia de comunicação e da organização dos dados no inversor, basta
apenas formular a parte lógica de comunicação com o protocolo. Há muitas formas de
Capítulo 4. Metodologia e implementação do projeto 54
10 e r r o r += 1
11
12 c l i e n t . w r i t e _ r e g i s t e r ( parametro , v a l u e=v a l o r , count =1, u n i t =255) #
write r e g i s t e r
1 d e f le_parametro ( parametro ) :
2 error = 0
3
4 w h i l e e r r o r <= 3 :
5 r e g i s t e r _ d a t a = c l i e n t . r e a d _ h o l d i n g _ r e g i s t e r s ( parametro , count =1,
u n i t =255)
6 i f not r e g i s t e r _ d a t a . i s E r r o r ( ) :
7 break
8 else :
9 e r r o r += 1
10
11 r e g i s t e r _ d a t a _ d e c o d e d = BinaryPayloadDecoder . f r o m R e g i s t e r s (
r e g i s t e r _ d a t a . r e g i s t e r s , b y t e o r d e r=Endian . Big ,
wordorder=Endian . Big )
12 data = r e g i s t e r _ d a t a _ d e c o d e d . decode_16bit_uint ( )
13
14 r e t u r n data
Como pode-se notar através da figura acima, na descrição dos passo 1, 2 e 3 alguns
parâmetros estão descritos de forma não numérica. Como por exemplo:
O algoritmo da Listagem 4.5 atribui aos parâmetros 307, 299, 301 e 302 os valores
descritos na Figura 23. Esta etapa se refere à configuração inicial de alguns parâmetros
importantes para a execução do teste.
1 # Passo 2
2 def step2 () :
3 w r i t e P a r a m e t e r (RAMP_START, CONTROL_WORD_ETHERNET) # Run ramp
4 dc_current1 = readParameter ( 3 ) # r e a d i n g DC c u r r e n t a t ramp s t a r t
5
6 c u r r e n t S p e e d = readParameter (MOTOR_SPEED)
7 # Current s p e e d r e a d i n g u n t i l i t r e a c h e s t h e s e t up s p e e d l i m i t
8 while currentSpeed < speedLimit :
9 c u r r e n t S p e e d = readParameter (MOTOR_SPEED)
10
11 # a s s e r t de comparacao de v a l o r e s
12 TestAssertEqualNumber ( 0 . 0 5 , ( motor_current / 1 0 ) ∗ 0 . 2 , dc_current1 / 1 0 )
2 def step3 () :
3 # Stop t h e ramp
4 w r i t e P a r a m e t e r (RAMP_STOP, CONTROL_WORD_ETHERNET)
5
6 # While c u r r e n t s p e e d >= 1 : do n o t h i n g
7 w h i l e c u r r e n t S p e e d >= 1 :
8 c u r r e n t S p e e d = readParameter (MOTOR_SPEED)
9
10 # Catch t h e f i n a l DC c u r r e n t v a l u e
11 dc_current2 = readParameter ( 3 )
12
13 # a s s e r t de comparacao de v a l o r e s
14 TestAssertGreaterNumber ( dc_current2 / 1 0 , 0 )
O passo 3 do teste é iniciado com a parada da rampa. O laço da linha 7 ocorre até a
leitura da velocidade do motor atingir valor igual ou menor a 1. Ao final da execução do
passo, a variável dc_current2 é comparada com o valor esperado, que é 0 neste caso.
A partir do estabelecimento do algoritmo do teste, pode-se fazer o estudo de como a
verificação de falhas ocorre por meio comparações de valores. Essa comparação de valores
é dada por asserts, relações entre valores que dependem de regras matemáticas. Este
aspecto é tratado no próximo tópico.
1. Valor Igual: neste caso o valor obtido deve ser igual ao resultado esperado, com
alguma margem de erro admitida pelos desenvolvedores. A função executada é
TestAssertEqualNumber(valor obtido, valor esperado), em que o retorno obedece a
seguinte relação:
valorobtido − valoresperado
Erro(%) = |( )|.100 (4.1)
valorobtido
Capítulo 4. Metodologia e implementação do projeto 59
2. Valor menor: neste caso o valor obtido deve ser menor que o resultado esperado,
independentemente da margem de erro. A função executada é TestAssertSmaller-
Number(valor obtido, valor esperado), em que o retorno obedece a seguinte relação:
3. Valor maior: neste caso o valor obtido deve ser maior que o resultado esperado. A
função executada é TestAssertGreaterNumber(valor obtido, valor esperado), em que
o retorno atende a seguinte relação:
4. Valor dentro de uma faixa: o valor obtido durante o teste deve estar contido em
uma faixa de valores. A função para este assert é TestAssertWithin(valor obtido,
valor menor, valor maior). O retorno da função respeita a seguinte regra:
• Se o valor obtido é maior que o valor menor e menor que o valor maior:
• Passo é aprovado (passed);
• Caso contrário, passo reprovado (failed) e localError = 1;
Com o nome estabelecido, cada teste deve conter uma função que também depende
do seu ID e da quantidade de passos do teste. A função deve ser escrita da forma
teste_<ID>. Para um teste com ID = 200, por exemplo, o script em Python da função
pode ser exemplificada conforme o seguinte algoritmo.
1 # MAIN FUNCTION
2 def teste_200 ( ) :
3 step1 () # c a l l t e s t ’ s step1
4 step2 () # c a l l t e s t ’ s step2
• ID: 500;
• Nome: test_500;
• Status: Failed;
• Comentários: None;
Para enviar esses dados ao ALM de maneira correta, um algoritmo utilizando a API
rest requests, escrita em linguagem Python, é invocado após a realização do assert. Na
linha 3 da listagem 4.9 é apresentada a função que envia o conteúdo XML, estabelecido
através do assert, para o ALM.
1 # POST de i n f o r m a c o e s do t e s t e para o ALM
2
3 POST = r e q u e s t s . p o s t (ALM_ID, data=a s s e r t )
Clicando sobre o teste desejado, é possível ter acesso aos outros dados resultantes, como
comentários e erros. Adicionalmente, há a geração de histórico local, que é armazenado
em arquivo texto.
execução dos teste. O arquivo texto é criado na pasta history do projeto, que armazena os
resultados de todos os testes executados, cada qual com um nome específico. No arquivo
são listados dados importantes como ID do teste, nome do teste, autor da execução, testes
executados, resultados do teste, data e tempo de execução.
O arquivo local gerado após a execução dos mesmos testes exemplificados na Figura 26
pode ser visto conforme a Figura 27.
Diante dos conceitos abordados nesta seção é possível estabelecer uma geração com-
pleta e flexível de resultados a partir dos teste executados utilizando o projeto proposto
neste documento.
• Filtragem de testes:
Lista de itens para permitir a filtragem dos testes por seus recursos utilizados;
Na figura acima o comando list -A é executado, o qual apresenta a lista contendo todos
os testes. Além desse comando, existem outros, conforme a lista abaixo.
• run <opções>: executa os testes, onde as opções são os testes a serem executados
ou todos os testes (run -A).
Exemplo: run test_505;
• list <opções>: lista os testes, onde as opções são a filtragem de testes (list -F ) e a
listagem de todos os testes (list -A);
• history: gera histórico remoto dos resultados dos testes executados através da API
rest;
Com o exemplo da figura acima, o Jenkins basicamente realiza um Job que executa
todos os testes por meio do comando run -A e, após isso, gera o histórico dos testes
executados através do comando history.
69
5 Validação e Resultados
gráficos de velocidade (em rpm) em função do tempo (em segundos) da dinâmica do mo-
tor. Os dados dos gráficos utilizados neste capítulo foram obtidos através da análise da
dinâmica das variáveis do motor por meio da IHM do inversor e, em seguida, foram plo-
tados utilizando um software computacional, permitindo gerar o material dos resultados
que esta seção do documento promove. Ademais, as características parametrizadas do
motor utilizado para os dois testes podem ser vistas conforme a Tabela 3.
Características Valor
Tensão nominal 220V
Corrente nominal 4.5A
Frequência de entrada 60Hz
Fonte – do Autor
Para seccionar este capítulo de uma maneira objetiva, cada teste, com seus resultados,
são separados por seção, as quais são divididas de acordo com os resultados obtidos nas
versões 0.70 e 0.71 do firmware do drive.
A partir das descrições de cada etapa do teste, pode-se perceber que duas rampas
devem ser partidas, uma após a outra, para dois tipos diferentes de controle proveniente
do inversor. Neste caso, a rampa deve apresentar dinâmicas iguais no decorrer da aplicação
dos dois tipos de controle. Em adição a isso, os quatro asserts executados durante o teste,
nos momentos t1 , t2 , t3 e t4 respeitam as condições listadas a seguir.
A partir do gráfico acima é possível conceber que a curva tracejada em azul se refere
à curva esperada para o teste e as bolinhas ou pontos esverdeados se referem aos quatro
asserts que devem ocorrer durante o teste.
Em seguida são apresentados os resultados do teste para as versões 0.70 e 0.71 do
firmware.
A partir da figura acima, pode-se conceber que o resultado obtido, conforme a curva
avermelhada, está de acordo com o a curva esperada para o teste. Os pontos azulados
também são aspectos visuais que verificam isso. Quantitativamente, os valores atingidos
pela corrente do motor durante o teste, em cada instante de tempo das comparações para
os asserts, foram os seguintes:
De acordo com os valores obtidos e mencionados acima para, pode-se dizer que as
especificações dos asserts foram atendidas perfeitamente. Em seguida é apresentado o
resultado do mesmo teste para versão 0.71, que deverá ser análogo ao que foi obtido neste
tópico.
De acordo com a figura acima, pode-se dizer que o teste 1 foi corroborado novamente,
obtendo resultados análogos aos anteriores, realizados na versão 0.70. Contudo, esta
evidência não pode presumir que o teste aprovará os parâmetros utilizados nas versões
futuras do firmware. Assim sendo, o mesmo deve ser testado a cada nova versão.
A partir dos termos descritivos sobre o teste, o gráfico da dinâmica temporal esperada
após sua execução é ilustrado conforme a Figura 35.
Igualmente ao que foi realizado com o teste 1, o teste 2 foi executado e verificado nas
versões 0.70 e 0.71 do firmware do inversor.
A partir do gráfico acima, é visualmente notável que ocorreu alguma falha ocorreu no
momento t2 , quando ocorre a comparação para o assert 2 com a ativação da rampa de
parada inversa. É visível um pico de velocidade do motor, que atinge aproximadamente
1025rpm. Ademais a comparação para o assert 1 é visivelmente corroborada em t1 .
Os resultados quantitativos obtidos para a velocidade do motor nos dois instantes (t1
e t2 ) são descritas abaixo.
Assim, pode-se dizer que o primeiro assert foi corroborado. Em t2 , o segundo assert,
dado pela função AssertEqualNumber(1024.94, 900) retornou o seguinte erro percentual
entre o valor obtido e o esperado:
Capítulo 5. Validação e Resultados 77
1024.94 − 900
Erro(%) = |( )|.100 (5.1)
1024.94
Erro(%) = 12, 189 (5.2)
O erro máximo esperado para o teste, conforme a descrição do ALM, é de 5%, valor
que foi ultrapassado. Portanto, o lançamento de novas versões do firmware deve evitar a
perpetuação da falha no parâmetro de rampa de parada inversa.
Diante dos resultados vistos acima, pode-se dizer que a nova versão do firmware foi
de grande valia para a evolução da execução do teste. A partir da ocorrência da falha
durante a execução do teste sobre a versão 0.70, medidas foram tomadas para melhor
o desempenho do firmware, o que resultou na corroboração da utilização do projeto de
verificação de testes para o teste em questão.
A partir das execuções dos testes abordados neste capítulo é possível é possível realizar
a geração de históricos local e remoto (por meio do ALM) dos resultados. Com há também
um aspecto de enriquecimento em termos de análise de resultados, tema também proposto
neste documento.
5.3.1 Local
Conforme o que foi discorrido no Capítulo 4, o histórico local gerado é baseado em
um arquivo texto, contendo algumas informações importantes a respeito da execução. O
mesmo é gerado após a execução de testes e arquivado em uma pasta local do projeto.
Como observação deste capítulo, os testes 1 e 2 abordados anteriormente são nomeados
como test_505 e test_401 respectivamente. Desta forma, a execução dos testes sobre
as versões 0.70 e 0.71 do firmware retornaram históricos locais ilustrados conforme a
Figura 38.
Capítulo 5. Validação e Resultados 79
(a) Histórico local para a versão 0.70. (b) Histórico local para a versão 0.71.
Com base nas figuras acima, os históricos locais corroboram a ideia dos resultados
obtidos anteriormente, nesta seção. Além disso, o histórico local é importante para manter
um histórico sobre a evolução das execuções dos testes, permitindo ao usuário o acesso à
informações importantes como data, testes realizados e autor da execução dos testes.
5.3.2 Remoto
O histórico remoto diz respeito ao histórico de resultados gerado no ALM após a exe-
cução dos testes pelo usuário. Dentre muitas outras funcionalidades que ALM promove,
como o gerenciamento de requisitos de testes, criação e planejamento de testes, um dos
mais importante é o acompanhamento da evolução dos testes a partir do Test Run.
A partir da execução dos testes trazidos neste capítulo, a geração de histórico no ALM
para a versão 0.70 do firmware é ilustrada conforme a Figura 39.
Em adição ao que foi visto no histórico gerado localmente, pode-se conceber a partir
da figura acima, que o ALM apresenta a etapa do teste em que houve ocorrência de falha.
O histórico remoto no ALM gerado após a execução dos testes sobre a versão 0.71 do
firmware é apresentado abaixo, conforme a Figura 40.
De acordo com a figura acima, pôde-se corroborar novamente o que foi abordado neste
capítulo no que tange os resultados obtido através da execução dos testes. Vale ressaltar
que, além de apresentar um histórico completo dos resultados das execuções feitas, o ALM
permite aos desenvolvedores acessá-los remotamente de seus computadores, possibilitando
uma flexibilidade maior para o acompanhamento da evolução do projeto do firmware.
81
6 Considerações finais
Com base nos testes abordados neste documento foi possível verificar graficamente e
matematicamente a presença de uma falha no parâmetro de rampa de parada com sentido
inverso, o qual gerou um erro percentual de aproximadamente 12,2% em relação ao valor
esperado, aspecto inadmissível para tal funcionalidade. Por conseguinte, uma nova versão
do software foi lançada atentando-se a esse problema. O resultado obtido, então, foi
satisfatório, já que o erro não persistiu. Todavia, este fato não pode garantir que novos
erros ao executar a mesma funcionalidade ocorram futuramente em novas versões.
Por fim, os históricos gerados e trazidos no mesmo capítulo, comprovam a ideia de
promover o acesso dos desenvolvedores à um conjunto completo de informações sobre
os resultados dos testes executados no inversor durante o desenvolvimento do firmware
do inversor. Além disso, os históricos contribuem para a esquipe de desenvolvimento
obter referências das melhorias ou pioras do projeto ocorridas durante o ciclo de vida do
firmware.
Referências Bibliográficas
17 NEWMAN, H. M. Bacnet
R explained. A Suplement to ASHRAE Journal, 2013. 26
23 DOWNEY, A. Think Python: How to Think Like a Computer Scientist. [S.l.]: Green
Tea Press, 2012. 33
30 HEATH, S. Embedded Systems Design, 2nd Edition. [S.l.]: Elsevier Inc, 2002. 36