UNESP – UNIVERSIDADE ESTADUAL PAULISTA
CAMPUS DE SOROCABA
ENGENHARIA DE CONTROLE E AUTOMAÇÃO
Danilo Mendes dos Santos
Estudo e Desenvolvimento de um Sistema de
Monitoramento de Produção Aplicado a uma
Linha de Extrusão de Cabos.
Sorocaba
2015
Danilo Mendes dos Santos
Estudo e Desenvolvimento de um Sistema de
Monitoramento de Produção Aplicado a uma
Linha de Extrusão de Cabos.
Trabalho de Graduação do Curso
de Engenharia de Controle e
Automação da UNESP Sorocaba,
com o objetivo de obter o título de
Bacharel em Engenharia de
Controle e Automação.
Orientador: Prof. Drº Galdenoro
Botura Jr.
Sorocaba
2015
Ficha catalográfica elaborada pela Biblioteca da Unesp Câmpus Experimental de Sorocaba
Santos, Danilo Mendes dos. Estudo e desenvolvimento de um sistema de monitoramento de produção aplicado a uma linha de extrusão de cabos / Danilo Mendes dos Santos, 2015. 114 f.: il. Orientador: Galdenoro Botura Júnior
Trabalho de Conclusão de Curso (Graduação) – Universidade Estadual Paulista. Câmpus Experimental de Sorocaba, Sorocaba, 2015. 1. Manutenção produtiva total. 2. Eficiência industrial. 3. Produtividade industrial. I. Universidade Estadual Paulista. Câmpus Experimental de Sorocaba. II. Título.
DEDICATÓRIA
A meus pais e irmão que sempre me
apoiaram nesta empreitada, mesmo com
todas as dificuldades encontradas durante o
percurso. A minha companheira Priscila que
esteve ao meu lado ao longo desta jornada
sempre me colocando para o alto.
A meus Irmãos de República que sempre
estiveram juntos em todos os momentos da
faculdade, fossem eles bons ou ruins.
RESUMO
As evoluções dos processos industriais sempre são ligadas ao avanço
tecnológico. Entretanto, a evolução das práticas de gestão se mostra historicamente
como uma força no desenvolvimento dos processos industriais.
Dentre estas filosofias, podemos destacar a de Manutenção Produtiva Total
(Total Productive Maintenance - TPM), que se trata de uma cultura na qual é
transmitida a ideia de que todos na empresa são responsáveis pela melhoria do
desempenho na produção e redução das perdas que são identificadas através da análise
de indicadores como o OEE (Overall Efficiency Equipment) ou índice de Eficiência
Global de Equipamento.
Este trabalho propõe a informatização da captação dos fatores: eficiência e
disponibilidade integrando o sistema de elaboração de fichas de processo, captação de
dados de produção e sua respectiva compilação gerando gráficos que expõem essas
perdas.
Para sua realização foi utilizado um microcontrolador Arduino que realiza a
interface entre o sensor da linha e seu respectivo computador o qual estará rodando um
programa que realizará o processamento dos dados e os inserirá em um banco de dados.
O sistema completo foi desenvolvido utilizando a linguagem C# no ambiente de
desenvolvimento Visual Studio 2012 e os dados foram armazenados em um banco de
dados do Microsoft Access.
Palavras – Chave: Manutenção Produtiva Total, OEE, Eficiência,
Disponibilidade, Banco de Dados, Indústria.
ABSTRACT
The evolution of the industrial processes is always linked to the technological
advancement. However, the development of management practices historically shown
as a force in the evolution of industrial processes.
Among these philosophies, we can highlight the Total Productive Maintenance -
TPM, it’s a culture that conveyed the Idea that everyone in the company are responsible
for improving performance in the production and reduction of losses wich are identified
through the indicators analysis as the Overall Efficiency Equipment (OEE).
This job proposes the informatization of the factors capture, efficiency and
availability, integrating the system of process sheet elaboration, capture the production
data and their respective compilation generating charts that expose these losses.
For its realization was used an Arduino microcontroller that performs the
interface between the line sensor and its associated computer which is running a
program that will perform the data processing and insert them into a database.
The complete system was developed using the C # language in Visual Studio
2012 development environment and the data were stored in a Microsoft Access
database.
Key Words: Total Productive Maintenance, OEE, Eficiency, Availability,
Database, Industry.
LISTA DE ILUSTRAÇÕES
Figura 1 - Pilares da TPM .............................................................................................. 19 Figura 2 - Representação das perdas na produção .......................................................... 27
Figura 3 - Ilustração do sistema de Banco de Dados. ..................................................... 28 Figura 4 - Configuração de Rede Cliente-Servidor. ....................................................... 30 Figura 5 – Arduino ......................................................................................................... 32 Figura 6 - Estrutura da Gestão industrial ........................................................................ 36 Figura 7 - Linha de Extrusão .......................................................................................... 39
Figura 8 - Cabo na Extrusora. ......................................................................................... 39 Figura 9 - Contador de Pulsos ........................................................................................ 40 Figura 10 - Fluxograma de funcionamento do sistema. ................................................. 41 Figura 11 - Tela inicial do ambiente de desenvolvimento do Arduino .......................... 42 Figura 12 - Encoder Rotativo ......................................................................................... 43
Figura 13 - Arquitetura do Circuito ................................................................................ 43
Figura 14 - Circuito Utilizado no Projeto ....................................................................... 44
Figura 15 - Ligações na Bancada ................................................................................... 44 Figura 16 - Tela inicial de projeto no Visual Studio 2012 ............................................. 45 Figura 17 - Fluxo de Dados do Sistema ......................................................................... 46 Figura 18 - Tabelas Banco de Dados. ............................................................................. 46
Figura 19 - Tela de Login ............................................................................................... 48 Figura 20 - Janela do Administrador. ............................................................................. 49 Figura 21 - Tela Engenharia ........................................................................................... 50
Figura 22 - Janela de Cadastro de Matéria Prima ........................................................... 51 Figura 23 - Tela Operacional .......................................................................................... 52
Figura 24 - Ficha de Processo......................................................................................... 53 Figura 25 - Eficiência Diária .......................................................................................... 54 Figura 26 - Disponibilidade Diária ................................................................................. 55
Figura 27 - Resumo Mensal de Perdas ........................................................................... 56
Figura 28 - Resumo Mensal das Paradas ........................................................................ 57
LISTA DE TABELAS
Tabela 1 - Valores de acordo com Classe Mundial ........................................................ 23 Tabela 2 - Caracteristicas do Arduino ............................................................................ 34
SUMÁRIO
1 INTRODUÇÃO .......................................................................................................11
1.1 JUSTIFICATIVAS .......................................................................................... 14
1.2 OBJETIVOS .................................................................................................... 14
2 CONCEITUAÇÃO..................................................................................................16
2.1 Manutenção Produtiva Total (TPM) ................................................................ 16
2.1.1 Definição .................................................................................................. 16
2.1.2 Pilares da TPM ......................................................................................... 18
2.1.2.1 Educação e Treinamento ................................................................... 19
2.1.2.2 Manutenção Autônoma ..................................................................... 19
2.1.2.3 Manutenção Planejada....................................................................... 20
2.1.2.4 Melhorias Específicas ....................................................................... 20
2.1.2.5 Segurança e Meio Ambiente ............................................................. 21
2.1.2.6 Manutenção da Qualidade ................................................................. 21
2.1.2.7 Controle Inicial .................................................................................. 21
2.1.2.8 Gestão Administrativa ....................................................................... 22
2.2 OEE – Eficácia Global de Equipamento .......................................................... 22
2.2.1 Definição .................................................................................................. 22
2.2.2 Componentes do OEE .............................................................................. 24
2.2.2.1 Disponibilidade ................................................................................. 24
2.2.2.2 Qualidade .......................................................................................... 25
2.2.2.3 Eficiência ........................................................................................... 25
2.2.3 Representação do OEE ............................................................................. 26
2.3 BANCO DE DADOS ...................................................................................... 27
2.3.1 Definição .................................................................................................. 27
2.3.2 Microsoft Access ...................................................................................... 28
2.4 REDES ............................................................................................................. 29
2.5 Arduino Uno R3 ............................................................................................... 32
2.5.1 Hardware .................................................................................................. 33
2.5.2 Software .................................................................................................... 34
3 Materiais e Métodos ................................................................................................36
3.1 Caracterização do Empreendimento ................................................................ 36
3.1.1 Estrutura de Gestão e Produção ................................................................ 36
3.1.2 Linha de Encapamento ............................................................................. 38
3.1.3 Controle da Produção ............................................................................... 40
3.2 Caracterização do Projeto ................................................................................ 41
3.2.1 Montagem do Hardware ........................................................................... 42
3.2.2 Desenvolvimento do Software.................................................................. 45
3.2.2.1 Visual Studio ..................................................................................... 45
3.2.2.2 Desenvolvimento ............................................................................... 45
4 Resultados e Discussões ..........................................................................................48
5 Comentários Finais e Conclusões ............................................................................59
6 Referências Bibliográficas .......................................................................................61
Apêndice A – Código Arduino ........................................................................................64
Apêncide B – Tela Login ................................................................................................65
Apêncice C – Tela do Administrador ..............................................................................67
Apêndice D – Tela da Engenharia e Materia Prima ........................................................71
Apêndice E – Tela Operacional .......................................................................................90
Apêndice F – Tela Produção .........................................................................................106
11
1 INTRODUÇÃO
Historicamente a evolução dos processos de produção industrial está relacionada
às inovações tecnológicas, por exemplo, a invenção da máquina a vapor que
impulsionou a Primeira Revolução Industrial, o desenvolvimento técnico da produção e
da utilização de energia elétrica, invenção do motor de combustão interna e do telégrafo
que são marcos da Segunda Revolução Industrial e o desenvolvimento da informática,
microeletrônica, robótica e a biotecnologia que marcaram a Terceira Revolução
industrial.
Contudo, a invenção de novos equipamentos e a descoberta e aplicação de novas
tecnologias não são as únicas responsáveis pelo desenvolvimento industrial.
Interferências nas formas de trabalho e na política administrativa das indústrias também
tiveram grande importância.
Entre estas interferências pode-se destacar:
• O Fordismo, criado por Henry Ford (1863 - 1947), concebeu a chamada
linha de produção composta por uma esteira que movimentava o produto enquanto cada
operador fazia uma parcela da produção;
• O Taylorismo, criado por Frederick Winslow Taylor (1856 - 1915), que
se tratava da elaboração de um estudo prévio da metodologia utilizada visando máximo
desenvolvimento, oferecimento de instruções sistemáticas aos trabalhadores e a
introdução do controle com o intuito de garantia da execução do tarbalho de acordo com
uma determinada sequência e um tempo pré-programado;
• O Toyotismo, idealizado por Eiji Toyota (1913 - 2013), que tem como
conceito fundamental a flexibilização da produção e diminuição da estocagem de
produtos de acordo com a demanda necessária.
Dentro do cenário da evolução do sistema Toyota de produção, desenvolveu-se o
conceito de TPM (Total Productive Maintenance). A TPM objetiva a promoção de
integração da manutenção do sistema produtivo de forma total, tanto nos aspectos
administrativos como operacionais (NAKAJIMA, 1989). Assim sendo esse mesmo
autor afirma que TPM é "a manutenção produtiva realizada por todos os empregados
12
através de atividades de pequenos grupos" onde manutenção a produtiva é a "gestão de
manutenção que reconhece a importância de confiabilidade, manutenção e eficiência
econômica nos projetos de fábricas" (NAKAJIMA, 1988).
Para o entendimento da filosofia da TPM devemos encarar que a maximização
dos resultados não é obtida apenas pelo aumento de produção de peça, mas o
favorecimento integrado da qualidade, custo, prazo de entrega, ao lado de um bom
ambiente e segurança no trabalho, melhoria do processo operacional, enfim, todas as
variáveis que possibilitam uma maior motivação e realização ao lado de um bom
produto (NAKAJIMA, 1989).
Os autores Takahashi e Osada (1993) afirmam que é essencial a transformação
de uma fábrica em uma operação com gerenciamento orientado para o equipamento
coerente com as mudanças da sociedade contemporânea.
Nakajima (1988, 1989, 1994) afirma que para o desenvolvimento da TPM junto
à organização existem etapas a serem vencidas com detalhes específicos para cada
empresa, afinal os objetivos e metas são também exclusivos em cada caso.
Para fazer a aplicação do conceito de TPM e conseguir assim eliminar as perdas
faz-se necessário primeiramente identificá-las. Isto é feito através de indicadores
responsáveis no auxílio aos gestores na tomada de decisões em todos os setores da
empresa.
De acordo com Johnston e Clark (2002) existem quatro razões principais para
adoção da mensuração:
• Comunicação: uma medida informa aos funcionários o que a organização
espera deles e o que pode lhes ser atribuído como indivíduos ou departamento, além de
ser um meio importante de comunicação e implementação de estratégia.
• Motivação: uma medida ou conjunto de medidas usadas por uma organização
cria hábitos mentais que influenciam o comportamento dos funcionários.
• Controle: o controle pode ser usado para assegurar o desempenho consistente
da organização e a partindo da mensuração é possível saber que ação deverá ser adotada
para manutenção do processo sob controle.
13
• Melhoria: a mensuração pode motivar os indivíduos a melhorarem o
desempenho quando a vinculamos às recompensas (como bônus) e/ou punições (como
dispensa). Além disso, a informação sobre o que empurra o processo para a meta ou
para fora da meta pode também ajudar os indivíduos e as organizações a aprenderem
como melhor gerenciar o processo envolvido.
Após o entendimento da importância em se mensurar os processos é válido
ressaltar um dos principais indicadores que são utilizados para medir o desempenho dos
equipamentos. De acordo com (NAKAJIMA, 1989) a eficiência do equipamento pode
ser medida através do "Índice de Eficiência Global". O Índice de Eficiência Global dos
Equipamentos (OEE, Overall Equipment Effectiveness) é um dos indicadores mais
utilizados na indústria, pois este é composto pelos fatores de qualidade, disponibilidade
e eficiência.
A medição da Eficiência Global de equipamentos pode ser aplicada de diferentes
formas de acordo com os objetivos da fábrica. O OEE permite a partir de uma medição
simplificada indicar áreas onde deverão ser desenvolvidas melhorias (JONSSUN e
LESSHAMMAR, 1999).
A atividade mais importante no processo de cálculo do OEE é a identificação
das perdas que estão associadas diretamente ao entendimento que a empresa possui
sobre as mesmas (CHIARADIA, 2004).
A utilização do indicador OEE vai além da determinação de um número que
retrate a eficiência do equipamento. O OEE permite através de o seu desdobramento
identificação dos potenciais pontos de melhoria de eficiência na fábrica (CHIARADIA,
2004).
Atualmente, o OEE é considerado um dos indicadores mais importantes na
medição do desempenho da fábrica, pois pode ser usado para aumento de produtividade
e dos lucros da empresa. (HANSEN, 2006).
Diante deste cenário, a proposta deste trabalho é informatizar o sistema de
captação de dados da linha de produção e fornecer um desdobramento mais ágil do fator
disponibilidade e eficiência do OEE, integrando em um sistema unificado a criação de
fichas de processo que são utilizadas para o ajuste de máquina pelo operador, com a
14
captação e medição dos tempos de perda e produção, bem como a quantidade
produzida.
Esta informatização do sistema permitirá também o acompanhamento do
desempenho da linha pelo gestor da produção, pois o sistema já gera gráficos de acordo
com os valores obtidos pelo operador da linha.
1.1 JUSTIFICATIVAS
Em um mercado cada vez mais globalizado e competitivo é de suma importância
no mundo industrial que as organizações mantenham-se em busca de melhoria contínua,
para aumentar a produção e reduzir custos. Para atingir seus objetivos uma das formas
da companhia conduzir a gestão é baseando-se na visão dos recursos de produção.
Para reduzir custos e atender sua demanda faz-se necessário uma utilização ideal
da capacidade de produção, o que significa a máxima redução das perdas do processo
como: manutenção, má qualidade e setup, sendo assim tem um aumento significativo na
capacidade produtiva.
Para (BRUM, 2006) um sistema que permita a sistemática identificação e
quantificação das perdas de uma empresa é, sem dúvida, útil para auxiliar o processo de
análise e melhoria da eficiência interna dos processos produtivos. Para a redução das
perdas de processo é necessário ter um sistema de controle eficiente para fazer sua
identificação e quantificação das perdas no processo e assim conseguir concentrar os
esforços onde estas são mais relevantes e consequentemente obter maiores resultados.
A identificação das perdas pode ser feita através de indicadores de produção e
um dos mais utilizados e completos é o indicador de eficiência global ou OEE (Overall
Equipment Effectiveness).
1.2 OBJETIVOS
Este trabalho tem como objetivo criar um sistema que monitore o
comportamento da máquina ao longo do dia, detectando paradas por manutenção, setup,
velocidade, tempo produtivo e armazene estes dados a fim de gerar um relatório de
produção que mostrará a eficiência da máquina e suas perdas. O sistema será feito
15
aplicado ao processo de encapamento de uma fábrica de cabos de médio porte
localizada em Campinas.
16
2 CONCEITUAÇÃO
2.1 Manutenção Produtiva Total (TPM)
2.1.1 Definição
A sigla TPM é oriunda de três palavras em inglês: Total Productive
Maintenance.
A palavra Total nessa sigla tem o sentido de mostrar a participação de todos.
Para Shirose (1996) “a maior característica do TPM é a participação de todos os
membros da empresa desde o chão de fábrica até a alta administração, em forma de
pequenos grupos de trabalho que têm por objetivo atingir metas como: quebra zero,
acidente zero, defeito zero, aumento da eficiência dos equipamentos e processos
administrativos”.
A palavra Productive “visa mostrar a busca constante pelo limite máximo de
eficiência do sistema produtivo. Nessa eficiência não está incluso apenas o volume de
produção e sim, no sentido mais amplo da palavra como segurança total (acidente zero),
qualidade total (zero defeito), falha de equipamento zero, ou seja, eliminar todas as
perdas que ocorrem no processo de produção” (TREVISANI, 2008).
A palavra Maintenance na sigla reflete a preservação do sistema produtivo na
condição ideal de operação. De acordo com Seth & Tripathi (2006) “os benefícios do
TPM criam uma estratégia abrangente e representa uma poderosa ferramenta de
gerenciamento na redução de custos, do ciclo de vida dos equipamentos e facilidades”.
Muitos autores hoje em dia, “substituem a palavra Maintenance por
Management, pois a TPM não é mais utilizada apenas como uma forma de manutenção
a preservação dos equipamentos da linha de produção, e sim uma filosofia de gestão e
gerenciamento de produção” (TREVISANI, 2008).
Para Nakajima (1989) o TPM tem como objetivo melhorar a eficiência dos
ativos através da redução de quebras de máquinas, da melhor utilização dos
equipamentos disponíveis e da redução de perdas nas diversas fases e áreas dos
processos produtivos.
17
Seguindo os mesmos princípios, Trevisani (2008) afirma que a TPM é uma
filosofia voltada para a otimização dos ativos, diminuição dos custos tanto de produção
como de retrabalho, aumento da disponibilidade operacional, aumento da capacidade
produtiva e principalmente a promoção da confiabilidade de toda a organização.
As principais características da TPM são:
Orientação para o zero: Visa eliminação não só das perdas, como
também dos acidentes. Desta maneira pode-se aumentar a produtividade,
deixando assim o equipamento com um maior período de tempo
disponível, funcionando, portanto com o menor tempo de interrupções
possíveis e ainda procurando reduzir ao máximo os fatores de
improdutividade em toda a empresa (RIBEIRO, 2003).
Participação total: Todos os colaboradores dos diferentes setores da
empresa tornam-se responsáveis diretos pela manutenção dos
equipamentos e sua conservação, gerando desta forma uma maior
integração entre as áreas produtivas e administrativas (RIBEIRO, 2003).
Utilização do equipamento como “material didático”: Através da
utilização diária do equipamento o colaborador absorverá informações
referentes ao mesmo transformando-o em uma espécie de “material
didático” adquirindo informações de uma maneira muito mais prática
(RIBEIRO, 2003).
Atuação no próprio trabalho: Tem como objetivo a prioridade de
eliminar as falhas mais frequentes no local de trabalho em si atuando nos
pontos fracos dos equipamentos. Agindo desta forma, e em caso de
necessidade no treinamento do próprio colaborador, nivelando os
conhecimentos técnicos de cada um (RIBEIRO, 2003).
Atuação com rigor e continuidade: Visa trabalhar sempre com o intuito
de aumentar a qualidade dando continuidade ao aprimoramento das
técnicas. Estas técnicas levam a eliminação das perdas por paradas, por
ajustes ou preparação e por outros problemas que venham a surgir
(RIBEIRO, 2003).
18
Utilização da prática “in loco”: A prática da metodologia TPM ocorre
com a sua implantação. Portanto, a cada passo do sistema TPM
implantado as características referentes a este passo serão praticadas por
todos os colaboradores (RIBEIRO, 2003).
Lucratividade e Redução de custos: Com a devida utilização e controle
de processo da metodologia TPM, há redução de equipamentos parados
ou com defeitos. Ao mesmo tempo é feita a padronização e a descrição
das rotinas dos serviços com a devida atualização dos controles das
ferramentas e programas disponíveis para o respectivo serviço. Isso terá
por consequência um resultado com maior rapidez na busca de soluções
que possam vir a aparecer e ainda a resolução eficaz de problemas
comuns. Tudo isso obtido com a velocidade de analisar os mesmos e,
principalmente, obter a maximização do rendimento operacional global
(RIBEIRO, 2003).
2.1.2 Pilares da TPM
A TPM tem como base de sustentação oito pilares onde ao se utilizar de maneira
continua todos se obtêm um resultado de excelência. São estes pilares:
Educação e Treinamento;
Manutenção Autônoma;
Manutenção Planejada;
Melhorias Específicas;
Segurança e Meio Ambiente;
Manutenção da Qualidade;
Controle Inicial;
Gestão Administrativa;
Pode-se observar na Figura 1 uma ilustração destes pilares sustentando a TPM.
19
Figura 1 - Pilares da TPM
Fonte: http://www.advanced-eng.com.br/sobretpm.htm
2.1.2.1 Educação e Treinamento
Trata-se do pilar cujo objetivo é o desenvolvimento das habilidades dos
colaboradores da companhia. Para a construção deste pilar é necessário de acordo com
Cotrim (2002) mudança gradativa na forma de gestão de paternalista e autoritária para
uma gestão participativa onde todas as pessoas envolvidas na equipe possam participar,
além de desenvolver as habilidades destas com programas de treinamentos e
conscientização a fim de que as ações implementadas tenham continuidade levando
assim a uma melhoria nos resultados da companhia.
2.1.2.2 Manutenção Autônoma
É o pilar que tem como objetivo observar e lidar prontamente com
anormalidades observadas nos equipamentos para assim mantê-los em condições ideais
de funcionamento. Para a implantação deste pilar faz-se necessário a criação de
procedimentos, padronização das rotinas de limpeza, inspeção e lubrificação dos
equipamentos.
20
“A Manutenção Autônoma é o pilar responsável pelo desenvolvimento dos
operadores com o objetivo de torná-los aptos a estabelecerem e manterem as condições
Básicas e Operacionais de seus equipamentos” (ADVANCED CONSULTING &
TRAINING).
2.1.2.3 Manutenção Planejada
É o pilar onde há necessidade da realização de um estudo pleno em relação à
confiabilidade de seus equipamentos e de suas peças para que assim seja possível o
planejamento das manutenções preventivas reduzindo-se assim o número de paradas
não programadas devido a falhas no equipamento.
“A manutenção Planejada busca o atingimento das diretrizes da manutenção,
através da utilização das melhores práticas de manutenção, visando a
manutenção do desempenho das funções desempenhadas pelo equipamento,
dentro dos padrões esperado pela empresa, no processo onde está inserido. É
implementada em sete passos, simultaneamente à manutenção autônoma.”
(ADVANCED CONSULTING & TRAINING).
Este pilar deve caminhar de mãos dadas ao pilar da Manutenção Autônoma, pois
os pontos de inspeção realizados pelo operador deverão ser de acordo com os estudos
feitos com a equipe responsável pelo planejamento das manutenções preventivas.
2.1.2.4 Melhorias Específicas
O pilar das melhorias específicas refere-se à eliminação das perdas através de
técnicas de análise da eficiência dos equipamentos. Essas perdas são identificadas
através da análise do indicador OEE que será detalhado no item 2.2.
Essas grandes perdas são as seguintes:
Perdas por Manutenção;
Perdas por Set Up;
Perdas por Qualidade;
Perdas por Falta de utilidade (Água, Luz, etc.);
Perdas por Eficiência.
21
Ao se tratar essas perdas o valor do OEE se elevará;
2.1.2.5 Segurança e Meio Ambiente
Cabe a este pilar o desenvolvimento de práticas preventivas visando à prevenção
total de acidentes ao se criar campanhas de incentivo a prevenção que estimule os
operadores a sempre agir com segurança não se expondo ao risco, com equipamentos
confiáveis, com eliminação de possíveis erros humanos e de processo, além de não
haver agressão ao meio ambiente com as atividades realizadas pelo processo.
Em relação a este pilar, Trevisani (2008) diz que “garantir confiabilidade do
equipamento, prevenir erros humanos e eliminar acidente e poluição são preceitos
básicos da TPM”.
2.1.2.6 Manutenção da Qualidade
Este pilar tem como objetivo chegar a zero defeito, ou seja, deverão se tomar
medidas não apenas corretivas aos defeitos e sim criar programas que irão atacar às
causas raízes de eventuais falhas a fim de se eliminar por completo estes defeitos.
As ações tomadas são direcionadas à condição dos equipamentos, erro humano,
qualidade da matéria prima e condições do ambiente.
“No TPM, Manutenção da Qualidade significa eliminar completamente as
condições geradoras de defeitos. Isso implica na mudança do conceito de
controlar a qualidade através do produto para controle da qualidade através
do processo” (ADVANCED CONSULTING & TRAINING).
“A definição clara e objetiva da qualidade do produto através da sua
especificação e a identificação e controle dos parâmetros de processo são o
caminho inicial da manutenção da qualidade. Esse pilar possui um estreito
relacionamento com os demais, influenciando na forma de condução da
Manutenção Autônoma, Manutenção Planejada, no planejamento e condução
do processo de capacitação e na definição de temas de melhoria”
(ADVANCED CONSULTING & TRAINING).
2.1.2.7 Controle Inicial
É o pilar responsável pelo controle e gerenciamento do desenvolvimento de
produtos e seus respectivos processos. Cabe a este pilar o planejamento visando o
mínimo de perdas e redução máxima de custos.
22
“Conjunto de atividades que visam redução das perdas do período entre o
desenvolvimento do produto e o início da produção plena e a consecução do
efetivo desenvolvimento do produto e investimentos em equipamentos para
atingir o início vertical da produção plena” (BORMIO, 2000).
2.1.2.8 Gestão Administrativa
O pilar de Gestão Administrativa é voltado para as áreas administrativas da
companhia e que não agregam valor direto ao produto. As ações tomadas neste pilar
deverão ser voltadas à gestão das informações em relação a sua confiabilidade e
agilidade ao ser transmitida o desenvolvimento deste pilar é feito de maneira análoga ao
desenvolvimento dos pilares produtivos (ADVANCED CONSULTING &
TRAINING).
Esse pilar da TPM tem o objetivo de identificar e eliminar perdas
administrativas. Normalmente, as perdas administrativas referem-se aos
tempos excessivos de tarefas, pouca qualidade e precisão de dados e
informações, por exemplo, no caso, de pedidos de clientes, inventário,
balanço dentre outros (FREITAS, 2002).
2.2 OEE – Eficácia Global de Equipamento
2.2.1 Definição
Bond (2002) definiu genericamente que a medição de desempenho é a atividade
de se determinar as medidas de desempenho, sua extensão, grandeza e avaliação, no
sentido de adequar, ajustar, proporcionar ou regular alguma atividade.
Seguindo a mesma filosofia, Kaydos (1991) diz que a medição de desempenho é
um dos elementos centrais de gestão, com a percepção de que o desempenho é em parte
resultado das decisões tomadas e, nesse sentido, a qualidade da decisão, é em boa parte
limitada pela informação disponível em termos de qualidade e quantidade.
Para Brum (2006) o controle das atividades produtivas é indispensável para
qualquer empresa poder competir em igualdade de condições e sem este controle a
empresa não possui a capacidade de avaliar o desempenho de suas atividades e de
intervir rapidamente para a correção e melhoria dos processos estando assim em
desvantagem frente à concorrência mais eficiente.
23
Diante deste cenário a escolha de um bom indicador de produção é essencial na
obtenção de um controle adequado do desempenho da produção. O OEE é este
indicador.
“O OEE foi introduzido por Seiichi Nakajima, um dos pais da TPM como uma
medida fundamental para se avaliar o desempenho de um equipamento sendo usado
como um dos componentes fundamentais desta metodologia” (OEE). Para Nakajima
(1989) faz-se necessário à criação de uma interação harmoniosa entre produção e
manutenção a fim de se obter maior agilidade no tratamento de problemas das máquinas
para que estas tenham um melhor desempenho quanto à velocidade de operação,
disponibilidade de uso e por fim qualidade dos produtos produzidos.
Desta maneira temos o OEE composto pelo produto destes três fatores:
Fator Disponibilidade (Fd);
Fator Qualidade (Fq);
Fator Eficiência (Fe).
O OEE é dado de acordo com a Equação (1):
𝑂𝐸𝐸 = 𝐹𝑑 ∗ 𝐹𝑞 ∗ 𝐹𝑒 (1)
Atualmente, o OEE é considerado um dos indicadores mais importantes na
medição do desempenho da fábrica, pois pode ser usado na produtividade e lucros da
empresa (HANSEN, 2006). Empresas da classe mundial possuem indicador igual ou
superior a 85% e seus componentes com os valores mostrados na Tabela 1.
Tabela 1 - Valores de acordo com Classe Mundial
Fator Padrão Mundial
Disponibilidade 90%
Qualidade 99,9%
Eficiência 95%
OEE 85%
24
2.2.2 Componentes do OEE
2.2.2.1 Disponibilidade
O Fator disponibilidade (Fd) é o fator que representa o tempo de utilização do
equipamento em relação ao tempo total disponível. De acordo com Trevisani (2008) o
fator disponibilidade é o mais conhecido, pois muitas indústrias utilizam apenas este
indicador para medição de eficácia.
A disponibilidade é calculada dividindo-se o tempo em que a máquina ficou
parada (Tp) pelo tempo total disponível (Tt) como podemos ver na Equação (2).
𝐹𝑑 =𝑇𝑝
𝑇𝑡∗ 100% (2)
O tempo de parada consiste no tempo em que a máquina não operou devido a
diversos motivos como:
Manutenção;
Ajuste de máquina (Set Up);
Falta de Operador;
Falta de Matéria Prima;
Falta de Programação;
Paradas por reuniões;
Outros.
Podemos destacar também, que cada um destes motivos podem conter
subclasses como por exemplo, a manutenção, que pode ser dividida em manutenção
elétrica e mecânica, ou até mesmo dividi-la de acordo com os componentes do
equipamento ficando a critério da gestão analisar os dados da forma mais eficaz
possível.
25
2.2.2.2 Qualidade
O Fator Qualidade (Fq) da OEE mede a influência de retrabalhos, sucatas de
processo e sucatas devido à qualidade do material (TREVISANI, 2008). O fator
Qualidade é calculado dividindo-se a quantidade de produto boa (Qb) pela quantidade
total produzida (Qt) como podemos ver na Equação (3).
𝐹𝑞 =𝑄𝑏
𝑄𝑡∗ 100% (3)
Assim como o fator Disponibilidade o fator qualidade pode ser avaliado sozinho.
Fazendo-se isso obtem-se um diagnóstico capaz de auxiliar o planejamento das ações a
serem tomadas no ataque à causa raiz dos defeitos.
2.2.2.3 Eficiência
O Fator Eficiência (Fe) representa o ritmo da produção, pois este é calculado
através da divisão entre quantidade Real Produzida (Pr) e quantidade teórica que deveria
ser produzida (Pt). A produção teórica é dada de acordo com a velocidade padrão de
produção estipulada no desenvolvimento do processo que também é usada no cáculo
dos prazos de produção.
A Equação (4) ilustra como se obtém o fator Eficiência.
𝐹𝑒 =𝑃𝑟
𝑃𝑡∗ 100% (4)
As diferenças obtidas neste fator são devidas a:
Perdas de velocidade ao longo do processo;
Pequenas paradas não reportadas no processo.
O desempenho para o OEE é um fator que demonstra se o ritmo de produção
está em acordo com o padrão previamente estabelecido. Com esse fator torna-se
possível a verificação do desempenho das máquinas em relação a um padrão de trabalho
por produto.
26
Normalmente a diferença entre o padrão do ritmo e o ritmo realizado pode ser
descrita em duas causas principais:
· Perda de velocidade durante o processo;
· Pequenas paradas não apontadas durante o processo.
2.2.3 Representação do OEE
O valor do OEE obtido em sua linha de produção não demonstra muito se for
exibido sozinho. Este precisa ser interpretado, compilado e demonstrado através de
gráficos que serão os responsáveis por darem a idéia ideal de onde estão suas reais
perdas para assim haver a possibilidade de direcionamento dos esforços a fim de
eliminá-las. A Figura 2 é a representação clássica das perdas existentes na linha de
produção convertidas no formato de tempo.
A aplicação ideal do OEE consiste, também, em fazer uma análise minuciosa a
respeito das perdas, por exemplo, faz-se necessário o desmembramento das perdas de
disponibilidade e qualidade e verificar, dentro deste fator, os principais motivos de
perdas para serem tomadas decisões assertivas e consequentemente obtenção de
melhores resultados.
O desmembramento das perdas é normalmente representado através de um
gráfico de pizza contendo os principais motivos que resultaram em perdas ao seu
processo.
27
Figura 2 - Representação das perdas na produção
2.3 BANCO DE DADOS
2.3.1 Definição
Um Sistema Gerenciador de Banco de Dados (SGBD) é o conjunto de
programas que compõem a camada responsável pelo armazenamento e recuperação de
dados no Sistema de Informação. Seu principal objetivo é retirar da camada da
aplicação à responsabilidade dessas tarefas proporcionando assim um ambiente seguro.
A interface entre essas duas camadas é a uma linguagem padrão para consulta,
manipulação e controle de acesso aos dados.
Um Banco de Dados é uma coleção de dados inter-relacionados representando
informações sobre um domínio específico (KORTH, 1994). Portanto, sempre que forem
agrupadas informações que possuam algum tipo de relação, haverá um banco de dados.
Existem diversos tipos de SGBD. Entre eles podemos citar:
Microsoft SQL Server;
Microsoft Access
Oracle;
28
MYSQL.
Sua aplicação é bastante ampla e presente em nossas vidas, por exemplo, agenda
telefônica e sistemas de gestão de empresas que controlam desde a movimentação de
estoque até movimentações financeiras.
A Figura 3 ilustra de maneira simples a sistemática de funcionamento de um
SGBD.
Figura 3 - Ilustração do sistema de Banco de Dados.
2.3.2 Microsoft Access
Para a realização do presente trabalho foi utilizado o banco de dados do
Microsoft Access que é um sistema relacional incluso no pacote Microsoft Office que
permite o desenvolvimento rápido de aplicações que envolvem tanto a modelagem e
estrutura de dados como também a interface a ser utilizada pelos usuários. O
desenvolvimento da estrutura de dados se dá de forma muito intuitiva, bastando que o
desenvolvedor possua conhecimentos básicos em modelagem de dados e lógica de
programação.
29
No Access, podem se desenvolver aplicações direcionadas a cadastro de clientes,
controle de pedidos, controle operacional, controle administrativo e financeiro de
empresas de pequeno, médio e grande porte. Ele é capaz de utilizar dados guardados em
Access/Jet, Microsoft SQL Server, Oracle, ou qualquer recipiente de dados compatível
com ODBC (OFICINA DA NET).
Ele é muito utilizado, pois seu ambiente de desenvolvimento da estrutura de
dados se dá de forma intuitiva, permitindo que até programadores relativamente
inexperientes possam utilizá-lo tanto de maneira didática quanto para desenvolvimento
de aplicações simples.
2.4 REDES
As redes de computadores que hoje já fazem parte de nossas vidas, estando
presentes em nossa residência, trabalho, escola e em diversos outros lugares tiveram sua
primeira tentativa de implementação na década de 1940 através dos trabalhos de George
Stibitz, que utilizou uma máquina de teletipo para envio de instruções de sua ModelK
situada na Faculdade de Dartmouth para uma calculadora na cidade de Nova York
(REBOUÇAS, F).
Em 1964, desenvolveram o Sistema de Compartilhamento de Tempo de
Dartmouth para vários usuários situados em trabalhos de sistemas de computadores. Na
época a General Eletric e a Bell Labs conseguiram rotear conexões telefônicas através
do computador Dec´s PDP-8 (REBOUÇAS, F.).
No final da década de 1960, a Agência de Projetos de Pesquisas Avançadas do
Departamento de Defesa dos Estados Unidos da América – ARPA (Department of
Defense’s Advanced Research Projects Agency), mais tarde denominada DARPA – que
começou a consolidar uma rede experimental de computadores a longa distância,
chamada de ARPANET e que se espalhou pelos Estados Unidos (Mendes, 2007, p. 19).
Seu objetivo inicial era o compartilhamento dos fornecedores do governo americano dos
caros e escassos recursos computacionais. Foi utilizada também para o
compartilhamento de arquivos entre universidades americanas, bem como troca de
mensagens via correio eletrônico.
30
Os conhecimentos em rede cresceram significativamente na década de 90 e
atualmente existem vários tipos específicos de redes. As mais conhecidas são:
- LAN – Local Area Network – é uma rede local situada num domicílio,
sala comercial ou lan house;
- MAN – Metropolitan Area Network – utilizada entre duas cidades;
- WAN – Wide Area Network- Utilizada entre pontos intercontinentais,
como por exemplo, o sistema bancário internacional;
- RAN- Regional Area Network- rede presente em determinada região
delimitada.
Mendes (2007) define “Uma rede de computadores é formada por um
conjunto de módulos processadores capazes de trocar informações e partilhar
recursos, interligados por um subsistema de comunicação, ou seja, é quando
há pelo menos dois ou mais computadores e outros dispositivos interligados
entre si de modo a poderem compartilhar recursos físicos e lógicos, estes
podem ser do tipo: dados, impressoras, mensagens (e-mails), entre outros”.
A configuração mais comum em redes de computadores utilizadas nas empresas
é a de cliente-servidor ilustrada na Figura 4.
Figura 4 - Configuração de Rede Cliente-Servidor.
Fonte: Aula- “Introdução às Redes de Computadores” - Edmar José do Nascimento Universidade Federal do Vale do São Francisco
31
2.7. LINGUAGEM C#
O C# (leia-se C-Sharp) é uma linguagem de programação orientada a objetos,
que foi desenvolvida pela Microsoft e faz parte da plataforma .NET. Embora a
linguagem C# tenha sido criada do zero, foi baseada na linguagem C++ e possui muitos
elementos das linguagens Pascal e Java (PACIEVITCH, Y.).
Por ser baseada em C++ e possuir elementos de Java e Pascal o C# é facilmente
reconhecido por pessoas familiarizadas com essas linguagens. Portanto, os
desenvolvedores que dominam qualquer uma dessas linguagens são geralmente capazes
de começarem a trabalhar de forma produtiva com C# dentro de um tempo muito curto
(MICROSOFT).
A plataforma .NET teve suas bibliotecas inicialmente feitas em Simple Managed
C (SMC), porém esta limitou muito o trabalho na plataforma. No inicio de 1999 foi
montada uma equipe liderada por Anders Hejlsberg com o objetivo de se criar uma nova
linguagem para a plataforma .NET. Esta linguagem seria criada para desprender a
plataforma .NET de outras linguagens, pois o código das linguagens já existentes
limitava o desenvolvimento da plataforma (PACIEVITCH, Y.).
Inicialmente chamado de Cool e posteriormente rebatizado de C#, sua criação
foi fundamental no desenvolvimento da plataforma .NET, pois esta não necessitou de
adequação ao código de nenhuma outra linguagem existente. Embora tenha sido criado
especificamente para a plataforma .NET, muitas outras linguagens têm suporte ao C#
como VB.NET, C++ e J#.
O C# é considerado uma linguagem bastante semelhante ao Java. Entretanto
existem diversas diferenças. São elas:
- Java não tem a função de implementar propriedades nem sobrecarga de
operadores, o C# tem esta função.
- Java não tem a função de implementar um modo inseguro que pode ser
utilizado para manipulação de ponteiros e aritmética sem checagem. Esta função é
característica do C#.
32
- Java possui as exceções checadas, enquanto as exceções em C# não são
checadas (assim como em C++).
- Enquanto Java utiliza comentários Javadoc para gerar documentação
automática, O C# Utiliza o XML.
- C# tem suporte à indexadores, e o Java não (PACIEVITCH, Y.).
Estas são algumas das funções que o C# desenvolveu e não existem no Java
(PACIEVITCH, Y.).
Entre as linguagens de programação, o que mais muda é a maneira de se
escrever o código, e não as palavras em si. Quando uma pessoa aprende uma linguagem
de programação fica muito mais fácil o aprendizado das demais (do .NET), pois as
maiores mudanças são na sintaxe, a maneira como está o código (PACIEVITCH, Y.).
2.5 Arduino Uno R3
Arduino é uma plataforma de prototipagem eletrônica de hardware livre
projetada com um microcontrolador Atmel AVR de placa única, com suporte de
entrada/saída embutido, uma linguagem de programação padrão, a qual tem
origem em Wiring e é essencialmente C/C++. O objetivo do projeto é criar
ferramentas acessíveis, de baixo custo, flexíveis de fácil uso (ARDUINO).
Figura 5 – Arduino
Fonte: “http://arduino.cc/en/Main/ArduinoBoardUno”
O Arduino pode ser usado para o desenvolvimento de projetos interativos
independentes ou ainda ser conectado a um computador hospedeiro. Uma típica
placa Arduino é composta por um controlador, algumas linhas de E/S digital e
analógica, além de uma interface serial ou USB para interligar-se ao hospedeiro
33
usado para programá-la e interagi-la em tempo real. Ela em si não possui qualquer
recurso de rede, porém é possível realizar a combinação de um ou mais Arduinos
utilizando-se extensões apropriadas chamadas de shields . A interface do
hospedeiro é simples podendo ser escrita em várias linguagens. A mais popular é
a Processing, mas outras que podem comunicar-se com a conexão serial são:
Max/MSP, Pure Data, SuperCollider, ActionScript e Java (ARDUINO).
2.5.1 Hardware
A placa Arduino consiste em um microcontrolador Atmel AVR de oito bits,
com componentes complementares para facilitar a programação e incorporação
para outros circuitos. Um importante aspecto é a maneira padrão que os
conectores são expostos, permitindo a CPU ser interligada a outros módulos
expansivos. Os Arduinos originais utilizam a série de chips mega AVR,
especialmente os ATmega8, ATmega168, ATmega328 e a ATmega1280, porém
muitos outros processadores foram utilizados por clones deles (ARDUINO).
A grande maioria de placas inclui um regulador linear de cinco volts e um
oscilador de cristal de 16 MHz (podendo haver variantes com um ressonador
cerâmico), embora alguns esquemas como o LilyPad usam até 8 MHz e
dispensam um regulador de tensão embutido, por ter uma forma específica de
restrições de fator. Além de ser microcontrolador, o componente também é pré-
programado com um bootloader que simplifica o carregamento de programas para
o chip de memória flash embutido, comparado com outros aparelhos que
usualmente necessitam de um chip programador externo (ARDUINO).
Conceitualmente, quando seu software é utilizado, ele monta todas as placas
sobre uma programação de conexão serial RS-232, porém a maneira que é
implementada no hardware varia em cada versão. Suas placas seriais contêm um
simples circuito inversor para converter entre os sinais dos níveis RS-232 e TTL.
Atualmente, existem alguns métodos diferentes para realizar a transmissão dos
dados como por placas programáveis via USB adicionadas através de um chip
adaptador USB-para-Serial como o FTDI FT232. Algumas variantes, como o
Arduino Mini e o não oficial Boarduino usam um módulo adaptador USB,
bluetooth ou outros métodos (ARDUINO).
34
2.5.2 Software
O Arduino IDE é uma aplicação multiplataforma escrita em Java derivada dos
projetos Processing e Wiring. É esquematizado para introduzir a programação a
artistas e pessoas não familiarizadas com o desenvolvimento de software. Inclui
um editor de código com recursos de realce de sintaxe, parênteses
correspondentes e identificação automática, sendo capaz de compilar e carregar
programas para a placa com um único clique. Com isso não há a necessidade de
editar Makefiles ou rodar programas em ambientes de linha de comando.
Possuindo a biblioteca "Wiring" ele será capaz de programar em C/C++. Isto
permite criar com facilidade muitas operações de entrada e saída, tendo que
definir apenas duas funções no pedido para fazer um programa funcional:
setup() – Inserida no inicio, na qual pode ser usada para inicializar
configuração, e
loop() – Chamada para repetir um bloco de comandos ou esperar até que seja
desligada.
O Arduino IDE usa o Conjunto de ferramentas GNU e o AVR Libc para
compilar os programas para depois enviar os programas para a placa
(ARDUINO).
Para este projeto, foi utilizado um Arduino Uno Rev3, uma vez que apresenta
um baixo custo e realiza todas as funções necessárias para seu desenvolvimento.
Suas características são:
Tabela 2 - Caracteristicas do Arduino
Fonte: http://www.ajudino.com/2013/05/diferenca-entre-os-modelos-de-arduino.html
Microcontrolador ATMega328P
Tensão de Operação 5V
Tensão de Entrada 7-12V
Tensão de Saída 6-20V
Pinos Digitais (Entrada/Saída) 14 (6 pinos PWM)
Pinos Analógicos (Entrada) 6
Corrente para entrada/saída 40mA
35
Corrente no pino 3,3V 50mA
Memória Flash 32Kb (ATMega328) 0,5 usado pelo
bootloader
SRAM 2Kb (ATMega328)
EEPROM 1Kb (ATMega328)
Velocidade do Clock 16MHz
36
3 Materiais e Métodos
3.1 Caracterização do Empreendimento
A empresa onde o trabalho foi baseado pertence a um grupo americano líder
mundial de produtos de conectividade que projeta, fabrica e comercializa conectores
elétricos, eletrônicos, de fibra óptica, cabos e sistemas de interconexão.
Sua sede está localizada em Connecticut, EUA, com fábricas nos Estados
Unidos, Canadá, Coréia, China, México e Brasil. Suas exportações atingem mais de 50
países, em cabos coaxiais, conectores de CATV, cordões, conectores e armários ópticos
para aplicações em banda larga e cabos especiais para telecomunicações. A filial
brasileira é sua única unidade na América do Sul, com fábrica em Campinas possuindo
faturamento médio mensal em torno de seis milhões de reais.
3.1.1 Estrutura de Gestão e Produção
A empresa em questão possui em seu sistema de gestão de produção a estrutura
representada pelo fluxograma da Figura 6.
Figura 6 - Estrutura da Gestão industrial
37
Gerente da Planta
Responsável pela gestão macro de todos os setores da planta, desde os
administrativos como comercial, recursos humanos, controladoria e suprimentos até os
de aplicação que são engenharia e industrial. Cada um dos setores possui um gestor que
é responsável pela gestão localizada.
Dentre as atividades do gerente da planta podem-se destacar os reportes de
resultados e ações para a matriz, desenvolver ações de melhoria, mediar a relação entre
os setores, gerir os recursos e direcionar os investimentos.
Gerência Industrial
É o setor responsável pela gestão do setor de produção e do setor da
manutenção. As responsabilidades do gerente industrial são: realizar reportes de
resultados e indicadores, elaborar e implementar ações de melhoria e mediar a relação
entre seus coordenadores e supervisores, tanto da produção quanto da manutenção.
No setor de produção sua responsabilidade vai desde a programação de
produção, gestão da matéria prima, fabricação, gerência do operacional e aplicação de
práticas de melhoria até a expedição do produto acabado.
O setor de manutenção é o responsável pela realização de manutenções
corretivas, planejar e elaborar planos de manutenção preventiva.
Engenharia
O setor de engenharia é responsável pelo desenvolvimento dos processos,
produtos e gestão de qualidade. Assim como o gestor de produção o gerente de
engenharia é responsável pelos reportes de indicadores e resultados relativos às
atividades de seu time além de mediar o relacionamento e ações entre seus setores.
No desenvolvimento do produto o time da engenharia é responsável por, de
acordo com a necessidade do cliente e seguindo normas como as especificadas pela
Agência Nacional de Telecomunicações (ANATEL), desenvolver o cabo quanto à sua
formação, especificar suas matérias prima e diante disto elaborar seu respectivo custo.
38
Junto ao desenvolvimento do produto, é desenvolvido seu processo de
fabricação. Este desenvolvimento é feito utilizando conhecimento prévio do
comportamento das matérias primas, experiência em processos anteriores e
experimentalmente serão determinados os parâmetros utilizados na configuração das
máquinas da linha. No processo de Encapamento onde são utilizadas linhas de extrusão,
os parâmetros determinados são: temperatura de operação de acordo com o material da
capa, ferramentas utilizadas, seu respectivo ajuste e a velocidade da linha. O time de
processos transmite as informações aos operadores através da ficha de processos, que
além de conter as especificações do processo e parâmetros, contém as especificações do
produto como gravação, diâmetro, espessura e cor da capa.
O setor da qualidade é o responsável pela validação de todos os processos tanto
administrativos quanto os de aplicação. É responsável pela gestão dos indicadores e em
como estes estão sendo obtidos, pelo atendimento às reclamações de clientes e
acompanhamento para garantir que sejam efetuadas as devidas providências para tratar
os problemas em sua causa raiz, realizar inspeção de recebimento de matéria prima e
inspecionar o produto tanto em fases primordiais do processo quanto no produto final.
3.1.2 Linha de Encapamento
O projeto foi feito para ser aplicado na linha de encapamento da empresa
descrita no item 3.1. A colocação da capa final dos cabos é feita através do processo de
extrusão onde um material plástico granulado cai através de um funil e é empurrado
através de uma rosca que é aquecida por resistores elétricos para derreter o material até
que este chegue ao final da extrusora onde este material será agregado ao núcleo do
cabo, que passa pela extrusora através de um guia, e a capa tomará a forma da fieira
utilizada. Após o cabo passar pela extrusora, sua capa é gravada com as informações
necessárias e respeitando a norma a qual este cabo foi produzido. Posteriormente é
resfriada através de calhas com água e por fim o cabo é enrolado em bobinas.
Na Figura 7 têm-se a foto de uma linha de extrusão de cabos. Já a Figura 8
mostra o condutor passando pela extrusora e saindo com a capa.
39
Figura 7 - Linha de Extrusão
Figura 8 - Cabo na Extrusora.
40
3.1.3 Controle da Produção
O controle de produção é feito através do diário de produção onde o operador
anota a produção e reporta as paradas ocorridas na linha e posteriormente o time
responsável pela programação de produção lança os dados do diário de produção para a
obtenção dos indicadores de produção e assim identificar as perdas.
A medição do comprimento de cabo produzido é feita através de um contador de
pulsos de um modelo similar ao ilustrado na Figura 9 ligado a um sensor indutivo que
emite um pulso a cada volta de uma das roldanas existentes na linha. O contador é
configurado para que a cada pulso recebido somar o valor do perímetro da roldana que é
obtido de acordo com seu diâmetro, as roldanas normalmente medem 17cm de
diâmetro, sendo assim a cada pulso recebido o contador soma 0,5340 metros à
quantidade produzida.
Figura 9 - Contador de Pulsos
O contador ilustrado na Figura 9 pode também ser configurado para comandar o
corte de lances mais curtos de cabo emitindo um sinal para o operador do corte cortar o
cabo e embalar o lance curto.
41
3.2 Caracterização do Projeto
O projeto foi elaborado após ter sido observada a necessidade de aumentar a
agilidade na captação de dados, compila-los e obter os indicadores para assim ter uma
ideia mais real e concreta do desempenho das linhas de produção.
Em cada linha de extrusão no setor de encapamento existe um computador
conectado à rede LAN interna da empresa que é utilizado na impressão de etiquetas,
busca e impressão das fichas de processo. O projeto consiste em utilizar este
computador para a captação direta dos dados de produção como quantidade produzida e
reportes de paradas a fim de agilizar a gestão dessas informações e ter maior agilidade
na compilação dos dados.
Trata-se de um sistema integrado com um banco de dados em rede o qual irá
armazenar os dados de processo e produto que serão inseridos pela engenharia, os dados
de produção que serão inseridos pelo operador e pelo arduino e serão compilados e
traduzidos em gráficos de eficiência e perdas pela gestão de produção. Este sistema terá
usuários que serão geridos pelo administrador do sistema, conforme o fluxograma do
sistema ilustrado na Figura 10.
Figura 10 - Fluxograma de funcionamento do sistema.
42
3.2.1 Montagem do Hardware
A interface entre o sensor de contar metros da extrusora e o computador da linha
foi feita utilizando-se o Arduino Uno Rev três que transmitirá o sinal digital enviado
pelo sensor via comunicação serial para o computador. Para ocorrer esta comunicação é
necessária a criação de um programa em C++ para configurar o Arduino. Esta
programação é feita com o auxilio de seu ambiente de desenvolvimento padrão cuja
interface é ilustrada na Figura 11.
Figura 11 - Tela inicial do ambiente de desenvolvimento do Arduino
A programação está disponível no Apêndice A.
Para a representação do sistema utilizou-se o encoder rotativo da bancada do
Laboratório de Instrumentação do Campus Sorocaba da Universidade Estadual Paulista
(UNESP) (Figura 12). Este encoder teve quase todos seus orifícios bloqueados, pois
para a medição do comprimento do cabo é necessário o envio de apenas um pulso por
volta.
43
Figura 12 - Encoder Rotativo
Como o sinal do sensor de barreira do encoder envia uma tensão de 24V foi
necessário projetar um circuito de entrada com um divisor de tensão, pois a entrada
digital da placa suporta até oito Volts, composto por quatro resistores de 300 Ohms e
um regulador de tensão LM 7805 dispostos de acordo com a arquitetura ilustrada na
Figura 13.
Figura 13 - Arquitetura do Circuito
44
A imagem do Circuito é ilustrada na Figura 14.
Figura 14 - Circuito Utilizado no Projeto
O motor do encoder é ligado a uma fonte variável também localizada na bancada
do laboratório como se pode observar na Figura 15.
Figura 15 - Ligações na Bancada
45
3.2.2 Desenvolvimento do Software
3.2.2.1 Visual Studio
Para o desenvolvimento do programa, utilizou-se o Microsoft Visual Studio 2012
que é um pacote de programas da Microsoft para desenvolvimento de software
especialmente dedicado ao .NET Framework e às linguagens Visual Basic (VB), C,
C++, C# (C Sharp) e J# (J Sharp). Também é um grande produto de desenvolvimento
na área web, usando a plataforma do ASP.NET. As linguagens mais utilizadas nessa
plataforma são: VB.NET (Visual Basic.Net) e o C♯ (MICROSOFT VISUAL STUDIO).
Figura 16 - Tela inicial de projeto no Visual Studio 2012
3.2.2.2 Desenvolvimento
O software foi implementado para permitir o acesso de quatro tipos de usuários
diferentes que terão acesso ao mesmo banco de dados que estará localizado na rede
interna da empresa em uma pasta do servidor com acesso permitido a estes usuários.
O fluxo dos dados funcionará de acordo com o ilustrado no fluxograma da
Figura 17.
46
Figura 17 - Fluxo de Dados do Sistema
O banco de dados utilizado é composto por seis tabelas conforme o ilustrado
pela Figura18.
Figura 18 - Tabelas Banco de Dados.
A tabela Segurança contém os dados dos usuários e possui os seguintes campos,
usuário, senha e situação, o campo situação é o responsável por direcionar o usuário em
questão para sua respectiva tela de acordo com sua permissão, ela é acessada pela tela
47
do Login para realizar o acesso dos usuários e pela tela do administrador, para criação e
exclusão de usuários e atribuição de suas respectivas permissões.
A tabela Engenharia possui os parâmetros do processo e especificações do
produto que são inseridos pelo usuário da tela da Engenharia do programa e são
acessados pelo operador no formato de relatório para auxiliá-lo na preparação da
máquina.
A tabela Alimentação e Matéria Prima contêm código e descrição do subproduto
do processo anterior e da matéria prima de capa a ser utilizada na produção
respectivamente.
A tabela Disponibilidade possui os tempos que a linha ficou produzindo e parada
e seus respectivos motivos, esta é acessada através da tela do operador que faz a
inserção dos dados que são inseridos a cada movimentação dos campos de seleção
exclusiva e da tela da Produção que tem acesso a estes dados compilados e mostrados
em forma de gráficos de desempenho.
A tabela Eficiência possui os dados de produção, como o produzido, o esperado,
o tempo produzindo, o produto, lote e hora da produção, estes dados são acessados pelo
usuário da tela da produção que os terá compilados e mostrados em gráficos assim
como os dados da disponibilidade.
48
4 Resultados e Discussões
Este projeto teve o intuito de facilitar a geração dos indicadores de produção,
deixando-os mais precisos e práticos, pois o monitoramento da produção é feito
atualmente através de um diário de produção onde o operador da linha anota
manualmente a produção realizada e o status da máquina em relação as suas respectivas
paradas.
Com o processo ocorrendo manualmente, podem ocorrer inúmeras falhas
humanas como a perda do diário de produção, preenchimento errado e até falha ao
digitar os dados nas planilhas de controle devido à letra ilegível do operador. O projeto
visa também eliminar essa atividade de lançamento dos diários de produção por um
colaborador específico que era apenas incumbido de realizar esta atividade não tendo
tempo para a realização de atividades mais produtivas e que tragam melhorias ao
sistema produtivo.
O sistema ao ser “aberto” inicia-se com uma tela de Login ilustrada na Figura
19.
Figura 19 - Tela de Login
A partir desta tela de login pode-se efetuar a entrada de usuário de diversos
setores e com permissões específicas de acesso ao programa. Sua Programação está
disponível no Apêndice B.
49
Administrador
O administrador é o responsável pela criação de usuários que utilizarão o
sistema e suas respectivas permissões de acesso, que são elas: Engenharia, Produção e
Operacional. Ao utilizar sua senha de administrador irá “abrir” a janela da Figura 20.
Figura 20 - Janela do Administrador.
Nesta Janela, o administrador fará a gestão dos usuários, ele poderá inserir novo
usuário e realizar sua respectiva exclusão. Esta programação está disponível no
Apêndice C.
50
Engenharia
Ao se inserir um Login com permissão da engenharia irá abrir a janela da Figura
21. Nesta janela a equipe da engenharia elaborará a ficha de processos com os
parâmetros de 1máquina e especificações de produto. A janela da engenharia é ilustrada
na Figura 21.
Figura 21 - Tela Engenharia
Na tela da Engenharia, o usuário cria um novo processo para determinado
produto e informa além dos seus parâmetros e especificações como temperatura,
velocidade, dimensões das ferramentas e dimensões do produto acabado, ele informa o
subproduto que irá alimentar este processo, que ao digitar seu código no campo
“Alimentação” o programa já busca no banco de dados sua descrição. Este subproduto
trata-se do produto do processo anterior ao do encapamento que também deve possuir
sua ficha com especificações e parâmetros.
51
O campo “Matéria Prima” também tem sua descrição carregada
automaticamente apenas digitando-se seu código, no entanto, caso esta não possua
cadastro no banco de matérias primas é possível cadastrá-la acessando Ações e
selecionar o campo “Inserir Matéria Prima”. Neste caso, irá “abrir” uma nova janela
como a mostrada na Figura 22.
O usuário da janela Engenharia pode criar novas fichas, buscar fichas para
alterá-las ou excluí-las. Sua programação está disponível no Apêndice D.
Figura 22 - Janela de Cadastro de Matéria Prima
Na janela de inserção de matéria prima também é possível, além de inserir,
buscar, alterar e excluir cadastro de produtos. Sua programação encontra-se no
Apêndice C.
Operacional
O operador da linha possui o login que abrirá a “tela” que fará o monitoramento
da produção e esta é ilustrada na Figura 23. A programação desta janela está disponível
no Apêndice E.
52
Figura 23 - Tela Operacional
Na janela do Operacional é feita a mensuração do tempo dos status da máquina.
O operador ajusta a seleção exclusiva de acordo com sua atividade, por exemplo, se a
máquina não está operando por conta de algum defeito o operador deve selecionar o
Manutenção que irá acionar um Timer que cronometrará o tempo perdido devido à
manutenção. Se a máquina não está em operação por não ter o que produzir, este deverá
selecionar Falta de Programa para assim acionar o timer que medirá o tempo perdido
por falta de pedido de produção e assim sucessivamente com as outras seleções
exclusivas com exceção do campo “Produção” que ao contrário dos outros não mede o
tempo perdido e sim o tempo efetivo o qual a linha esteve operando. No entanto, este
campo está sempre desabilitado, sendo liberado apenas após o operador buscar a ficha
de processo, preencher o campo lote de produção e apertar o botão “Inserir” que só é
liberado após o operador gerar a ficha de produto e preencher o lote de produção.
A ficha de processo que é elaborada pela equipe da engenharia deve ser buscada
antes do início da produção. Para isto o operador digita o código do produto a ser
produzido no campo “Código Produto” e clica no botão “Gerar Ficha”, esta ação irá
carregar a descrição do produto e a velocidade padrão de produção em seus respectivos
campos e irá gerar a ficha de processo mostrada na Figura 24.
53
Figura 24 - Ficha de Processo
Após iniciada a produção o programa passa a ler as informações transmitidas via
comunicação serial pelo Arduino e processá-las mostrando em seus respectivos campos,
a velocidade de operação da máquina, a quantidade produzida e sua eficiência
instantânea.
Para detectar as paradas de máquina é feito uma lógica com timer que senão
ocorrer comunicação serial em um período de trinta segundos, isso indica que a linha
parou. Então o programa salva os dados de produção no banco de dados e o operador
precisa indicar o motivo da parada.
54
Gestão da Produção
Os dados captados pela janela do operacional serão armazenados no banco de
dados e serão compilados e exibidos em gráficos de acordo com o período desejado pela
gestão industrial. Este processo é feito através da janela da “Produção” ilustrada pela
Figura 25 cuja programação está disponível no apêndice F.
Figura 25 - Eficiência Diária
O gráfico da Figura 25 retrata o acompanhamento diário da eficiência da linha
de acordo com a velocidade padrão e a velocidade real de operação.
Este indicador é responsável por informar se as máquinas da linha estão
operando conforme o programado ou se estas não estão funcionando adequadamente a
fim de operar na velocidade esperada. Outros fatores que podem alterar este indicador
são as mudanças de velocidade ao longo do processo como a rampa de aceleração e
desaceleração da linha.
O gráfico da Figura 26 ilustra o uso diário da linha, levando em conta o tempo
parado e o tempo produzindo. A partir deste acompanhamento a gestão industrial é
capaz de identificar se o tempo que a linha está operando de maneira micro e tomar
55
ações mais imediatistas diante de problemas corriqueiros que causem interrupção da
linha.
Figura 26 - Disponibilidade Diária
56
O gráfico da Figura 27 traz um resumo mensal das perdas ocorridas na linha e
assim a gestão da empresa tem uma visão macro do desempenho da linha para
identificar onde estão as maiores perdas para assim elaborar planos de ação e organizar
times que irão focar os esforços em reduzir estas perdas.
Figura 27 - Resumo Mensal de Perdas
A atuação em cima das perdas não se restringe apenas aos setores de aplicação.
Por exemplo, o índice alto de perdas por falta de programa significa que a linha ficou
parada por não ter o que produzir logo, ações para aumentar as vendas e reduzir custos
de produtos deverão ser tomadas.
As perdas por eficiência podem ser devidas a problemas no maquinário que não
consegue operar a velocidade determinada pela engenharia, problemas de matéria prima
que pode não se comportar da maneira esperada. É muito comum perdas de eficiência
causadas devido à mudança de fornecedor de matéria prima, principalmente material
plástico da capa, que apesar dele ter a mesma especificação, por ter passado por
processos diferentes de fabricação podem se comportar de maneira diferente quanto à
temperatura de processamento e velocidade de extrusão, devendo-se assim, haver um
57
acompanhamento da engenharia junto ao setor de suprimentos quando ocorrer tais
mudanças.
O gráfico da Figura 28 representa o resumo mensal das paradas de máquina.
Figura 28 - Resumo Mensal das Paradas
Para auxiliar a tratativa das perdas devido a paradas não programadas o
programa fornece um resumo mensal das paradas que permite à gestão industrial
elaborar ações focadas onde se encontram as maiores perdas da linha. Por exemplo, em
grandes perdas de manutenção é necessário atuar junto ao time de manutenção para
focar em manutenções preventivas a fim de diminuir quebras inesperadas.
Grandes paradas por Setup podem ser tratadas atuando junto ao operacional
padronizando os procedimentos de ajuste de máquina e eliminando ações desnecessárias
do operador.
Paradas por falta de matéria prima devem ser tratadas atuando junto ao setor de
suprimentos, logística e programação de produção para que o programador de produção
não dê a ordem de produção de um produto sem que este tenha matéria prima para ser
produzido e o setor de logística e suprimentos consiga que o material comprado dê
58
entrada na empresa no prazo estipulado ou no caso de atrasos inevitáveis tenham
agilidade na comunicação junto ao programador.
59
5 Comentários Finais e Conclusões
Com a realização deste projeto, existe a possibilidade de aumentar a agilidade
em se obter os dados de produção e gerar seus respectivos indicadores e assim poder
tomar ações de tratativas mais assertivas para reduzir as perdas.
O time da engenharia insere os dados da ficha de processo no banco de dados e
pode também buscar as fichas existentes para alterá-las ou excluí-las de acordo com sua
necessidade.
O operador acessa de sua tela a ficha criada pela engenharia que é apresentada a
ele em formato de relatório que ele pode imprimir e utilizá-lo para realizar os ajustes de
máquina. Após realizado os ajustes o operador seleciona no programa que a máquina
está em produção e a partir deste instante o Arduino envia os sinais e o programa o
interpreta e já faz a medição da produção, velocidade e eficiência.
Após terminada a produção, o operador deverá informar o estado atual da
máquina e caso a máquina pare inesperadamente o operador deverá informar o motivo
selecionando-o na seleção exclusiva da tela. Todos os dados de produção e tempos de
parada do dia serão inseridos no banco de dados.
Os dados inseridos pela tela do operador no banco de dados são facilmente
acessados e compilados gerando gráficos que serão acessados pelo time da gestão
industrial que é o responsável por tomar ações para a diminuição das perdas da linha.
Os dados gerados pelo sistema são muito úteis para auxiliar a gestão em tomadas
de decisões, adoção de novas culturas empresariais e até mesmo auxiliar em novos
investimentos que tragam melhorias nos processos.
Percebe-se também que a partir de indicadores de produção bem compilados a
empresa é capaz de elaborar ações que atinjam não somente os setores de aplicação,
mas também administrativos, comercial, suprimentos e logística, trazendo a tona uma
das características principais da TPM que é a participação total de todos os
colaboradores para o bom andamento da companhia.
60
Outra característica da TPM que deve ser levada em consideração ao se analisar
os indicadores gerados por este projeto é a da lucratividade, que é obtida através da
redução de custos com a devida utilização dos recursos, controle de processos e
padronização de procedimentos, pois para realizar estes procedimentos é necessário
saber onde deverão ser focados os esforços.
Concluindo, o projeto atendeu as expectativas propostas, primeiramente pelo
baixo custo com material, pois para a implantação no ambiente descrito no trabalho
seria necessário apenas comprar o microcontrolador Arduino, que tem um custo de
aproximadamente R$ 100,00 (cem reais) e segundo, apesar de não ter sido possível a
implementação na empresa nos teste do protótipo do programa foi possível perceber que
o projeto proporcionaria maior agilidade no sistema de desenvolvimento de processos,
processo produtivo e análise de desempenho de produção, pulando diversas etapas
burocráticas e trazendo segurança aos dados obtidos.
61
6 Referências Bibliográficas
ADVANCED CONSULTING & TRAINING, A sua Melhor Opção de
assessoria à Implementação da TPM, Disponível em: <http://www.advanced-
eng.com.br/sobretpm.htm>. Acessado em 15/02/2015.
ARDUINO. In: Wikipédia: a enciclopédia livre. Disponível em:
<http://pt.wikipedia.org/wiki/Arduino>. Acessado em 27/02/2014.
BOND, Emerson. Medição de Desempenho para Gestão da Produção em um
Cenário de Cadeia de Suprimentos. Texto (Mestrado em Engenharia de Produção) –
Escola de Engenharia de São Carlos da Universidade de São Paulo, 2002.
BORMIO. M. R. Manutenção Produtiva Total (TPM), Cenpro Curso de
Especialização em Engenharia de Produção. Bauru: UNESP, 2000.
BRUM, D. V. Identificação das Perdas do Processo Produtivo na Fabricação
de Massas Alimentícias: Um Estudo Baseado em Sistemas de Custos, Santa Maria:
UFSM, 2006.
CHIARADIA, A. J. P. Utilização do Indicador de Eficiência Global de
Equipamentos na Gestão e Melhoria Contínua dos Equipamentos: Um Estudo de
Caso na Indústria Automobilística, Porto Alegre: UFRS, 2004.
CONTRIM, M. TPM – Uma metodologia voltada a Maximização do
Rendimento Operacional Global. São Paulo, 2002.
HANSEN, Robert C. Eficácia Global dos Equipamentos. 1ª Edição. Porto
Alegre: Artmed, 2006, 264 p.
JONSSON, P.; LESSHAMAR, M. Evaluation and improvement of
manufacturing performance measurement systems – the role of OEE. International
Journal of Operations & Production Management, v19, n.1, p. 55-78 1999.
JOHNSTON, R.; Clark, G. Administração de operações de serviço. São Paulo:
Atlas, 2002.
62
KAYDOS, W.; Measuring, managing, and maximizing performance.
Productivity Press, Portland: 1991.
KORTH. H.F. Sistemas de Bancos de Dados, Makron Books, 2ª edição
revisada, 1994.
MENDES, D. Redes de Computadores: Teoria e Prática - Douglas Rocha
Mendes, São Paulo: NOVATEC, 2007.
MICROSOFT, Guia de Programação em C#, Disponível em:
<https://msdn.microsoft.com/pt-br/library/67ef8sbd.aspx> Acessado em: 20/02/2015.
MICROSOFT VISUAL STUDIO. In: Wikipédia: a enciclopédia livre.
Disponível em <http://pt.wikipedia.org/wiki/Microsoft_Visual_Studio>. Acessado em
20/02/2015.
NAKAJIMA, S. Total productive maintenance. Portland: Productivity Press,
1988.
NAKAJIMA, S. Introdução ao TPM. São Paulo: IM&C, 1989.
NAKAJIMA, S. La maintenance productive totale (TPM) mise en oeuvre de
la TPM. 3ª ed. Paris: Afnor, 1994.
OEE, Efetividade Global do Equipamento, Disponível em:
<www.oee.com.br>. Acessado em 16/02/2015.
OFICINA DA NET. Tudo sobre a Microsoft Access. Disponível em
<http://www.oficinadanet.com.br/artigo/790/tudo_sobre_o_microsoft_access>.
Acessado em 13/03/2014.
PACIEVITCH, Y. C#. Disponível em:
<http://www.infoescola.com/informatica/c-sharp/>. Acessado em 13/03/2014.
REBOUÇAS, F. Rede de Computadores. Disponível em
<http://www.infoescola.com/informatica/rede-de-computadores/>. Acessado em
01/08/2014.
63
RIBEIRO, H. Total Productive Maintenance (TPM): Manutenção Produtiva
Total. São Paulo, 2003.
SETH, D.; TRIPATHI, D. A Critical Study of TQM and TPM Approaches
on Business Performance of Indian Manufacturing Industry – Total Quality
Management, Vo. 17, No. 7, 811-824, September 2006.
SHIROSE, K. TPM New Implementation Program in Fabrication and
Assembly Industries. JIPM – Japan Institute Plant Of Maintenance, Tokyo, 1996.
SUZUKI, T. TPM in process industries. Portland: Productivity Press, 1994.
TAKASHI, Y.; OSADA, T. Manutenção produtiva total. São Paulo: IMAM,
1993.
TREVISANI, T, S. Implantação da OEE em uma indústria siderúrgica. São
Paulo: UFSCAR, 2008.
64
Apêndice A – Código Arduino
void setup ()
{
Serial.begin(9600); //Configuração da Comunicação Serial
pinMode(2,INPUT);
pinMode(7,OUTPUT); //Configuração das entradas digitais
}
void loop()
{
if (digitalRead(2)== LOW) //Lógica para detecção de pulso
{
while (digitalRead(2) == LOW)
{
digitalWrite(7,HIGH);
}
//Comunicação após ocorrência de Pulso
digitalWrite(7,LOW);
Serial.print(1);
}
}
65
Apêncide B – Tela Login
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsFormsApplication4
{
public partial class frm_inicial : Form
{
static string _Arquivo =
@"C:\Users\Danilodms\Documents\tgdanilo\dados.accdb";
static string strconn =
String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + _Arquivo +
";Persist Security Info=False;");
//string vsql;
public frm_inicial()
{
InitializeComponent();
tb_usuario.Focus();
}
private void btn_engenharia_Click(object sender, EventArgs e)
{
try
{
//Conexão com o banco de dados
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("SELECT
[Usuario],[Senha],[Situacao] FROM Seguranca WHERE Usuario LIKE '" +
tb_usuario.Text + "'", conn);
conn.Open();
OleDbDataReader da;
da = cmd.ExecuteReader();
if (da.Read())
{
//Atribuição dos valores do banco a variáveis
string aux_senha = "";
string aux_situacao = "";
aux_senha = da["Senha"].ToString();
aux_situacao = da["Situacao"].ToString();
66
//Confirmação de senha e definição da tela a ser aberta de acordo com a permissão
pré-estabelecida
if ((aux_senha == tb_senha.Text) && (aux_situacao == "admin"))
{
frm_admin frl = new frm_admin();
frl.ShowDialog();
}
else if ((aux_senha == tb_senha.Text) && (aux_situacao ==
"engenharia"))
{
frm_engenharia frl = new frm_engenharia();
frl.ShowDialog();
}
else if ((aux_senha == tb_senha.Text) && (aux_situacao == "producao"))
{
frm_producao frl = new frm_producao();
frl.ShowDialog();
}
else if ((aux_senha == tb_senha.Text) && (aux_situacao ==
"operacional"))
{
frm_operacional frl = new frm_operacional();
frl.ShowDialog();
}
else
{
//Menssagem caso não exista usuário ou senha incorreta
MessageBox.Show("Senha Incorreta", "Aviso.", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
da.Close();
conn.Close();
this.Close();
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
// frm_engenharia frl = new frm_engenharia();
//frl.Show();
}
private void btn_cancelar_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
67
Apêncice C – Tela do Administrador
using System; //Declaração de Bicliotecas padrões do Visual Studio
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb; //Biblioteca de Dados
namespace WindowsFormsApplication4
{
public partial class frm_admin : Form
{
//Inicialização da planilha de banco de dados e definição do endereço da tabela
static string _Arquivo =
@"C:\Users\Danilodms\Documents\tgdanilo\dados.accdb";
static string strconn =
String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + _Arquivo +
";Persist Security Info=False;");
string vsql;
public frm_admin()
{
InitializeComponent();
}
private void btn_confirmar_usuario_Click(object sender, EventArgs e)
{
//Sequência de Funções IF para garantir que o usuário preencha todos os campos antes
de ser realizada a conexão com o banco
if (tb_usuario.Text == "")
{
MessageBox.Show("Usuário em
branco.","Aviso.",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else if (tb_senha.Text=="")
{
MessageBox.Show("Preencha a
Senha.","Aviso.",MessageBoxButtons.OK,MessageBoxIcon.Information);
68
}
else if (cb_permissao.Text == "")
{
MessageBox.Show("Selecione a Permissão.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//se todos os camposestão preenchidos a senha tem que ser confirmada
else if (tb_senha.Text == tb_confirmsaenha.Text)
{
//Rotina de inserção de usuário novo no banco de dados
try
{
OleDbConnection Conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", Conn);
Conn.Open();
vsql = "INSERT INTO Seguranca([Usuario],[Senha],[Situacao]) VALUES
('" + tb_usuario.Text + "','" + tb_senha.Text + "','" + cb_permissao.Text + "')";
cmd.CommandText = vsql;
cmd.ExecuteNonQuery();
Conn.Close();
MessageBox.Show("Usuário inserido com sucesso!", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
//Após inseridos os dados a tela volta as suas condições iniciais
tb_usuario.Text = "";
tb_senha.Text = "";
tb_confirmsaenha.Text = "";
cb_permissao.Items.Add("");
cb_permissao.Text = "";
Conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
//Se a senha não for confirmada não será inseridonovo usuário
MessageBox.Show("Senha não confirmada.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
69
}
}
private void btn_novo_usuario_Click(object sender, EventArgs e)
{
groupBox2.Enabled = true;
}
private void btn_busca_usuario_Click(object sender, EventArgs e)
{
//Busca usuário
try
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("SELECT
[Usuario],[Senha],[Situacao] FROM Seguranca WHERE Usuario LIKE '" +
tb_busausuario.Text + "'", conn);
conn.Open();
OleDbDataReader da;
da = cmd.ExecuteReader();
if (da.HasRows) //Condição para existencia de cadastro
{
if (da.Read())
{
//Atribuição dos dados do campo para os textbox da tela
tb_usuario.Text = da["Usuario"].ToString();
tb_senha.Text = da["Senha"].ToString();
cb_permissao.Text = da["Situacao"].ToString();
da.Close();
conn.Close();
groupBox2.Enabled = true;
}
}
else
{
//Se não existir usuário será enviada mensagem ao usuário
MessageBox.Show("Não possui registros na data selecionada.", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
70
//Botão exclusão de usuário
private void btn_excluir_usuario_Click(object sender, EventArgs e)
{
//Consulta se administrador realmente deseja excluir usuário
DialogResult dialogresult = MessageBox.Show("Deseja realmente Excluir
Registro?", "Aviso.", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogresult == DialogResult.Yes)
{
try
{
//Conexão com Banco de Dados para exclusão de produto
string descricao_alt = "Exclusão de produto : " +
tb_usuario.Text.Replace("\r\n", "");
OleDbConnection Conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", Conn);
vsql = "DELETE FROM Seguranca WHERE Usuario LIKE '%" +
tb_usuario.Text.Replace("\r\n", "") + "%'";
cmd.CommandText = vsql;
Conn.Open();
cmd.ExecuteNonQuery();
Conn.Close();
MessageBox.Show("Registro excluído com sucesso.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Registro não excluído.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
71
Apêndice D – Tela da Engenharia e Materia Prima
Engenharia
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsFormsApplication4
{
public partial class frm_engenharia : Form
{
static string _Arquivo =
@"C:\Users\Danilodms\Documents\tgdanilo\dados.accdb";
static string strconn =
String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + _Arquivo +
";Persist Security Info=False;");
string vsql;
public frm_engenharia()
{
InitializeComponent();
btn_novo.Focus();
}
private void Form1_Load(object sender, EventArgs e)
{
btn_novo.Focus(); //Préseleção do botão “Novo”
}
private void menuPrincipalToolStripMenuItem_Click(object sender, EventArgs e)
{
//Abre aba de inserção de matéria prima
form_materia frl = new form_materia();
frl.Show();
}
private void btn_confirmar _Click(object sender, EventArgs e)
72
{
//Condição que não permite inserir dados caso o grupo esteza bloquad.
if (gp_engenharia1.Enabled == false)
{
MessageBox.Show("Operação não permitida.", "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
//Sequencia de Ifs que não permitem aconexão de dados caso algum campo não esteja
preenchido
else if (tb_codproduto.Text == "")
{
MessageBox.Show("Preencha código do produto.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_descproduto.Text == "")
{
MessageBox.Show("Preencha descrição do produto.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_codmateria.Text == "")
{
MessageBox.Show("Preencha código da matéria prima.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_codaliment.Text == "")
{
MessageBox.Show("Preencha código da alimentação.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_temp.Text == "")
{
MessageBox.Show("Preencha temperatura.", "Preenchimento incorreto",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_fieira.Text == "")
{
MessageBox.Show("Preencha diâmetro da fieira.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_pino.Text == "")
{
MessageBox.Show("Preencha diâmetro do pino.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_diamin.Text == "")
{
MessageBox.Show("Preencha diâmetro mínimo.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
73
else if (tb_dianom.Text == "")
{
MessageBox.Show("Preencha diâmetro nominal.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_diamax.Text == "")
{
MessageBox.Show("Preencha diâmetro máximo.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_velocidade.Text == "")
{
MessageBox.Show("Preencha velocidade.", "Preenchimento incorreto",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_nucleomin.Text == "")
{
MessageBox.Show("Preencha diâmetro do núcleo mínimo.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_nucleonom.Text == "")
{
MessageBox.Show("Preencha diâmetro do núcleo nominal.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_nucleomax.Text == "")
{
MessageBox.Show("Preencha diâmetro do núcleo máximo.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_espmin.Text == "")
{
MessageBox.Show("Preencha espessura da capa.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_espnom.Text == "")
{
MessageBox.Show("Preencha espessura nominal.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (tb_espmax.Text == "")
{
MessageBox.Show("Preencha espessura máxima.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else if (rb_pressao.Checked == false && rb_semi.Checked == false &&
rb_tubo.Checked == false)
{
MessageBox.Show("Selecione ajuste da ferramenta.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
74
}
else
{
//sequencia de Ifs que atribuem a variável tipo a palavra de acordo com o radiobutton
selecionado
string tipo = "";
if (rb_pressao.Checked == true)
{
tipo = "Pressão";
}
else if (rb_semi.Checked == true)
{
tipo = "Semi-Pressão";
}
else if (rb_tubo.Checked == true)
{
tipo = "Tubo";
}
try
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
//Conexão com o banco de dados para alteração de dados na ficha se check box alterar
estiver selecionado
if (chb_alterar.Checked == true)
{
// data_alt = data_cred.Text;
// descricao_alt = tb_descricao.Text;
// value = tb_valor.Text.Replace(".", ",");
vsql = "UPDATE Engenharia SET DesProduto = '" +
tb_descproduto.Text + "' , CodAliment = '" + tb_codaliment.Text + "' , DesAliment = '"
+ tb_descaliment.Text + "' , CodCapa = '" + tb_codmateria.Text + "' , DesCapa= '" +
tb_descmateria.Text + "' , Temperatura = '" + tb_temp.Text + "' , DiametroNominal =
'" + tb_dianom.Text + "' , DiametroMax = '" + tb_diamax.Text + "' , DiametroMin = '"
+ tb_diamin.Text + "' , DiaNucleoNominal = '" + tb_nucleonom.Text + "' ,
DiaNucleoMax = '" + tb_nucleomax.Text + "' , DiaNucleoMin = '" +
tb_nucleomin.Text + "' , Velocidade = '" + tb_velocidade.Text + "' , DiametroFieira =
'" + tb_fieira.Text + "' , DiametroPino = '" + tb_pino.Text + "' , TipoExtrusao = '" +
tipo + "' , Observacao = '" + tb_obs.Text + "' , EspessuraNominal = '" +
tb_espnom.Text + "' , EspessuraMax = '" + tb_espmax.Text + "' , EspessuraMin = '" +
tb_espmin.Text + "' WHERE CodProduto = '" + tb_codproduto.Text + "'";
cmd.CommandText = vsql;
75
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("Cadastro alterado com sucesso!", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
//chb_alterar.Checked = false;
//chb_alterar.Visible = false;
}
else
{
//se check box alterar não estiver selecionado será executada conexão SQL para inserir
dados
conn.Open();
vsql = "INSERT INTO
Engenharia([CodProduto],[DesProduto],[CodAliment],[DesAliment],[CodCapa],[Des
Capa],[Temperatura],[DiametroNominal],[DiametroMax],[DiametroMin],[DiaNucleo
Nominal],[DiaNucleoMax],[DiaNucleoMin],[Velocidade],[DiametroFieira],[Diametro
Pino],[TipoExtrusao],[Observacao],[EspessuraNominal],[EspessuraMax],[Espessura
Min],[Gravacao]) VALUES ('" + tb_codproduto.Text + "','" + tb_descproduto.Text +
"','" + tb_codaliment.Text + "','" + tb_descaliment.Text + "','" + tb_codmateria.Text +
"','" + tb_descmateria.Text + "','" + tb_temp.Text + "','" + tb_dianom.Text + "','" +
tb_diamax.Text + "','" + tb_diamin.Text + "','" + tb_nucleonom.Text + "','" +
tb_nucleomax.Text + "','" + tb_nucleomin.Text + "','" + tb_velocidade.Text + "','" +
tb_fieira.Text + "','" + tb_pino.Text + "','" + tipo + "','" + tb_obs.Text + "','" +
tb_espnom.Text + "','" + tb_espmax.Text + "','" + tb_espmin.Text + "','" +
tb_gravacao.Text + "')";
cmd.CommandText = vsql;
cmd.ExecuteNonQuery();
conn.Close();
tipo = "";
MessageBox.Show("Produto inserido com sucesso.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
gp_engenharia1.Enabled = false;
}
}
catch (OleDbException ex)
{
if (ex.ErrorCode.ToString() == "-2147467259")
{
MessageBox.Show("Dados Duplicados.", "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode,
"Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
76
}
}
// chb_alterar.Visible = false;
// tb_codproduto.Enabled = true;
}
}
private void btn_novo_Click(object sender, EventArgs e)
{
//botão que limpa todos os campos e deixa tela disponível para preenchimento de nova
ficha
gp_engenharia1.Enabled = true;
tb_codproduto.Text = "";
tb_codproduto.Enabled = true;
tb_descproduto.Text = "";
tb_codmateria.Text = "";
tb_descmateria.Text = "";
tb_codaliment.Text = "";
tb_descaliment.Text = "";
tb_temp.Text = "";
tb_fieira.Text = "";
tb_pino.Text = "";
tb_diamin.Text = "";
tb_dianom.Text = "";
tb_diamax.Text = "";
tb_velocidade.Text = "";
tb_nucleomin.Text = "";
tb_nucleonom.Text = "";
tb_nucleomax.Text = "";
tb_espmin.Text = "";
tb_espnom.Text = "";
tb_espmax.Text = "";
tb_gravacao.Text = "";
tb_obs.Text = "";
rb_pressao.Checked = false;
rb_semi.Checked = false;
rb_tubo.Checked = false;
chb_alterar.Checked = false;
chb_alterar.Visible = false;
chb_alterar.Enabled = true;
}
private void tb_codproduto_KeyPress(object sender, KeyPressEventArgs e)
{
//commando que so permite que sejam digitados numeros no campo codigo de produto
77
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true;
}
}
private void tb_codaliment_KeyPress(object sender, KeyPressEventArgs e)
{
//commando que so permite que sejam digitados numeros no campo codigo de
Alimentação
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true;
}
}
private void tb_codmateria_KeyPress(object sender, KeyPressEventArgs e)
{
//commando que so permite que sejam digitados numeros no campo codigo de matéria
prima, este comando será repetido para os campos de dimensão da capa, espessura,
velocidade, temperatura, dimensões das ferramentas e dimensão do núcleo
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true;
}
}
private void tb_temp_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true;
}
}
private void tb_velocidade_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8 )
{
e.Handled = true;
}
}
private void tb_fieira_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
78
}
private void tb_pino_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_diamin_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_dianom_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_diamax_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_nucleomin_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_nucleonom_KeyPress(object sender, KeyPressEventArgs e)
{
79
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_nucleomax_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_espmin_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_espnom_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void tb_espmax_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !(e.KeyChar == (char)Keys.Back) &&
!(e.KeyChar == ','))
{
e.Handled = true;
}
}
private void btn_excluir _Click(object sender, EventArgs e)
{
//questiona se usuário realmente deseja excluir registro
80
DialogResult dialogresult = MessageBox.Show("Deseja realmente Excluir
Registro?", "Aviso.", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogresult == DialogResult.Yes)
{
try
{
//Conexão com Banco de Dados para exlusão de registro
string descricao_alt = "Exclusão de produto : " +
tb_codproduto.Text.Replace("\r\n", "");
OleDbConnection Conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", Conn);
vsql = "DELETE FROM Engenharia WHERE CodProduto LIKE '%" +
tb_codproduto.Text.Replace("\r\n", "") + "%'";
cmd.CommandText = vsql;
Conn.Open();
cmd.ExecuteNonQuery();
Conn.Close();
MessageBox.Show("Registro excluído com sucesso.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
btn_excluir.Enabled = false;
}
else
{
MessageBox.Show("Registro não excluído.", "Aviso.", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
private void sairToolStripMenuItem_Click(object sender, EventArgs e)
{
frm_inicial frl = new frm_inicial();
frl.Show();
this.Visible = false;
}
private void Btn_busca_Click(object sender, EventArgs e)
{
//Habilita busca de ficha
81
MessageBox.Show("Digite o código para busca.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
lb_pesquisa.Visible = true;
tb_busca.Text = "";
tb_busca.Visible=true;
btn_buscaok.Visible=true;
tb_busca.Focus();
chb_alterar.Visible = false;
chb_alterar.Enabled = true;
chb_alterar.Checked = false;
}
private void btn_buscaok_Click(object sender, EventArgs e)
{
try
{
//Conexão de busca ao banco de dados
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("SELECT
[CodProduto],[DesProduto],[CodAliment],[DesAliment],[CodCapa],[DesCapa],[Tem
peratura],[DiametroNominal],[DiametroMax],[DiametroMin],[DiaNucleoNominal],[
DiaNucleoMax],[DiaNucleoMin],[Velocidade],[DiametroFieira],[DiametroPino],[Tip
oExtrusao],[Observacao],[EspessuraNominal],[EspessuraMax],[EspessuraMin],[Grav
acao] FROM Engenharia WHERE CodProduto LIKE " + tb_busca.Text, conn);
conn.Open();
OleDbDataReader da;
da = cmd.ExecuteReader();
if (da.HasRows)
{
if (da.Read())
{
//Atribui valores do banco de dados aos campos do formulário
string aux = "";
tb_codproduto.Text = da["CodProduto"].ToString();
tb_descproduto.Text = da["DesProduto"].ToString();
tb_codaliment.Text = da["CodAliment"].ToString();
tb_descaliment.Text = da["DesAliment"].ToString();
tb_codmateria.Text = da["CodCapa"].ToString();
tb_descmateria.Text = da["DesCapa"].ToString();
tb_temp.Text = da["Temperatura"].ToString();
tb_fieira.Text = da["DiametroFieira"].ToString();
tb_pino.Text = da["DiametroPino"].ToString();
tb_diamin.Text = da["DiametroMin"].ToString();
tb_dianom.Text = da["DiametroNominal"].ToString();
82
tb_diamax.Text = da["DiametroMax"].ToString();
tb_velocidade.Text = da["Velocidade"].ToString();
tb_nucleomin.Text = da["DiaNucleoMin"].ToString();
tb_nucleonom.Text = da["DiaNucleoNominal"].ToString();
tb_nucleomax.Text = da["DiaNucleoMax"].ToString();
tb_espmin.Text = da["EspessuraMin"].ToString();
tb_espnom.Text = da["EspessuraNominal"].ToString();
tb_espmax.Text = da["EspessuraMax"].ToString();
tb_gravacao.Text = da["Gravacao"].ToString();
tb_obs.Text = da["Observacao"].ToString();
aux = da["TipoExtrusao"].ToString();
if (aux == "Semi-Pressão")
{
rb_semi.Checked = true;
}
else if (aux == "Pressão")
{
rb_pressao.Checked = true;
}
else if (aux == "Tubo")
{
rb_tubo.Checked = true;
}
lb_pesquisa.Visible = false;
tb_busca.Visible = false;
btn_buscaok.Visible = false;
btn_excluir.Enabled = true;
chb_alterar.Visible = true;
gp_engenharia1.Enabled = false;
chb_alterar.Enabled = true;
}
else
{
//Menssagem caso não seja encontrado registro
MessageBox.Show("Produto não encontrado.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
da.Close();
conn.Close();
}
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
83
}
private void tb_codaliment_Leave(object sender, EventArgs e)
{
if (tb_codaliment.Text != "")
{
//Busca descrição de acordo com código digitado no campo alimentação
try
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("SELECT [Descricao]
FROM Alimentacao WHERE Codigo LIKE " + tb_codaliment.Text, conn);
conn.Open();
OleDbDataReader da;
da = cmd.ExecuteReader();
if (da.HasRows)
{
if (da.Read())
{
tb_descaliment.Text = da["Descricao"].ToString();
}
}
else
{
MessageBox.Show("Código de Alimentação não encontrado.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
tb_codaliment.Text = "";
this.Focus();
}
da.Close();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
tb_codaliment.Text = "";
}
}
}
private void tb_codmateria_Leave(object sender, EventArgs e)
{
//Busca descrição de matéria prima no banco
if (tb_codmateria.Text != "")
{
84
try
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("SELECT [Descricao]
FROM MateriaPrima WHERE Codigo LIKE " + tb_codmateria.Text, conn);
conn.Open();
OleDbDataReader da;
da = cmd.ExecuteReader();
if (da.HasRows)
{
if (da.Read())
{
tb_descmateria.Text = da["Descricao"].ToString();
}
}
else
{
MessageBox.Show("Código de Materia não encontrado.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
tb_codmateria.Text = "";
this.Focus();
}
da.Close();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
tb_codmateria.Text = "";
}
}
}
private void sairToolStripMenuItem1_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void chb_alterar_CheckedChanged(object sender, EventArgs e)
{
//Desbloqueia campos para realizer atualização de cadastros
if (chb_alterar.Checked == true)
{
tb_codproduto.Enabled = false;
gp_engenharia1.Enabled = true;
btn_excluir.Enabled = false;
85
chb_alterar.Enabled = false;
}
}
private void logOffToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Visible = false;
frm_inicial frl = new frm_inicial();
frl.ShowDialog();
}
private void tb_codmateria_TextChanged(object sender, EventArgs e)
{
}
}
}
Materia Prima
//A janela de matéria prima possui as mesmas conexões da janela engenharia, no
entanto acessa a tabela Materia prima do banco de dados.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsFormsApplication4
{
public partial class form_materia : Form
{
static string _Arquivo =
@"C:\Users\Danilodms\Documents\tgdanilo\dados.accdb";
static string strconn =
String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + _Arquivo +
";Persist Security Info=False;");
86
string vsql;
public form_materia()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void tb_codcapa_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true;
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
OleDbConnection Conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", Conn);
if (ckb_aterar.Checked == false)
{
if (tb_codcapa.Text == "")
{
MessageBox.Show("Preencha o código da matéria prima à ser
inserida.", "Preenchimento incorreto", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
else if (tb_desccapa.Text == "")
{
MessageBox.Show("É necessário ter uma descrição.", "Preenchimento
incorreto", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.Close();
}
else
{
Conn.Open();
vsql = "INSERT INTO MateriaPrima([Codigo],[Descricao]) VALUES
('" + tb_codcapa.Text + "','" + tb_desccapa.Text + "')";
cmd.CommandText = vsql;
cmd.ExecuteNonQuery();
Conn.Close();
87
MessageBox.Show("Matéria prima inserida com sucesso.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
tb_codcapa.Text = "";
tb_desccapa.Text = "";
this.Close();
}
}
else
{
Conn.Open();
vsql = "UPDATE MateriaPrima SET Descricao = '" + tb_desccapa.Text +
"' WHERE Codigo = " + tb_codcapa.Text;
cmd.CommandText = vsql;
cmd.Connection = Conn;
cmd.ExecuteNonQuery();
Conn.Close();
ckb_aterar.Checked = false;
ckb_aterar.Visible = false;
MessageBox.Show("Cadastro alterado com sucesso.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
tb_codcapa.Enabled = false;
tb_desccapa.Enabled = true;
}
}
catch (OleDbException ex)
{
if (ex.ErrorCode.ToString() == "-2147467259")
{
MessageBox.Show("Dados Duplicados.", "Erro", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
if (tb_codcapa.Text == "")
{
MessageBox.Show("Digite o Código do Produto para Busca.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
88
{
try
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("SELECT [Descricao]
FROM MateriaPrima WHERE Codigo LIKE " + tb_codcapa.Text, conn);
conn.Open();
OleDbDataReader da;
da = cmd.ExecuteReader();
if (da.HasRows)
{
if (da.Read())
{
tb_desccapa.Text = da["Descricao"].ToString();
}
ckb_aterar.Visible = true;
tb_codcapa.Enabled = false;
tb_desccapa.Enabled = false;
}
else
{
MessageBox.Show("Valor não encontrado", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
da.Close();
conn.Close();
}
catch(OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ckb_aterar_CheckedChanged(object sender, EventArgs e)
{
tb_desccapa.Enabled = true;
}
private void btn_novo_Click(object sender, EventArgs e)
{
tb_codcapa.Enabled = true;
tb_desccapa.Enabled = true;
tb_desccapa.Text = "";
tb_codcapa.Text = "";
ckb_aterar.Visible = false;
89
}
private void button4_Click(object sender, EventArgs e)
{
DialogResult dialogresult = MessageBox.Show("Deseja realmente Excluir
Registro?", "Aviso.", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogresult == DialogResult.Yes)
{
try
{
//Conexão com Banco de Dados
string descricao_alt = "Exclusão de produto : " +
tb_codcapa.Text.Replace("\r\n", "");
OleDbConnection Conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", Conn);
vsql = "DELETE FROM MateriaPrima WHERE Codigo LIKE '%" +
tb_codcapa.Text.Replace("\r\n", "") + "%'";
cmd.CommandText = vsql;
Conn.Open();
cmd.ExecuteNonQuery();
Conn.Close();
MessageBox.Show("Registro excluído com sucesso.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
tb_codcapa.Text = "";
tb_desccapa.Text = "";
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Registro não excluído.", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
90
Apêndice E – Tela Operacional
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO.Ports; //Biblioteca que Permite comunicação Serial
namespace WindowsFormsApplication4
{
public partial class frm_operacional : Form
{
static string _Arquivo =
@"C:\Users\Danilodms\Documents\tgdanilo\dados.accdb";
//static string _Arquivo = @"" +Application.StartupPath+ "dados.accdb";
static string strconn =
String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + _Arquivo +
";Persist Security Info=False;");
string vsql;
string rxstring = "";
int producao = 0, manutencao= 0, materia=0, setup=0, operador=0, utilidade=0,
programa=0, total=0, auxproducao = 0, auxparada = 30, auxvelocidade=3,
vel_padrao=0;
// double metros = 0;
double metrosparcial = 0, velocidade = 0;
int i = 0;
//int seg=0, min=0;
//int segsetup = 0, minsetup = 0, segmanut = 0, minmanut = 0, segmateria = 0,
minmateria = 0, segoperador = 0, minoperador = 0, segutilidade = 0, minutilidade =
0, segprograma = 0, minprograma = 0;
public frm_operacional()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)//timer produção
{
//Timer 1 que conta o tempo de produção
//lb_producao.BackColor = System.Drawing.Color.Lime;
91
//producao++;
// i++;
if (i % 2 == 0) //Label piscando cores para indicar funcionamento do timer
{
lb_producao.BackColor = System.Drawing.Color.Lime;
}
else
{
lb_producao.BackColor = System.Drawing.Color.White;
}
if (i <= 59) //formatação do label que indica o tempo passado
{
i++;
}
else
{
i = 0;
producao++;
auxproducao++;
lb_time_producao.Text = producao.ToString();
}
}
private void rb_producao_CheckedChanged(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
//Quando radio button produção e selecionado ele dispara timer da produção, habilita
timer que indicará parada, habilita contagem da produção e bloqueia a seleção de
outros radio buttons, só serão liberados as outras opções se houver parada de
máquina.
if (rb_producao.Checked == true)
{
i = 0;
timer_producao.Enabled = true;
timer_parada.Enabled = true;
timer_velocidade.Enabled = true;
//Serial_com.Open();
rb_materia.Enabled = false;
rb_manut.Enabled = false;
rb_operador.Enabled = false;
rb_programa.Enabled = false;
rb_setup.Enabled=false;
rb_utilidade.Enabled = false;
92
tb_horainicio.Text = DateTime.Now.ToShortTimeString();
}
else
{
//quando é retirada a seleção do Rádio button da produçãosão inseridos os dados de
produção no banco, o tempo produzindo, os outros radio buttons são liberados para
acesso e automaticamente é selecionado falta de programa, devendo o operador
selecionar outro motivo de parada
try
{
conn.Open();
timer_velocidade.Enabled = false;
timer_parada.Enabled = false;
timer_producao.Enabled = false;
vsql = "UPDATE Disponibilidade SET TempoProducao = '" + producao
+ "' WHERE Data = CDate('" + dp_operacional.Value.Date.ToShortDateString() +
"')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
vsql = "INSERT INTO Eficiencia ([Data], [Lote], [CodProduto],
[Descricao], [Tempo], [Produzido], [Esperado], [Eficiencia] )VALUES ('" +
dp_operacional.Value.Date.ToString("dd/MM/yyyy") + "','" + tb_lote.Text + "','" +
tb_codproduto.Text + "','" + tb_descricao.Text + "','" + auxproducao + "','" + metros
+ "','" + auxproducao * vel_padrao + "','" + 100 * metros / (auxproducao *
vel_padrao) + "')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
lb_producao.BackColor = System.Drawing.Color.White;
Serial_com.Close();
auxproducao = 0;
auxparada = 30;
rb_materia.Enabled = true;
rb_manut.Enabled = true;
rb_operador.Enabled = true;
rb_programa.Enabled = true;
rb_setup.Enabled = true;
rb_utilidade.Enabled = true;
rb_producao.Enabled = false;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode,
"Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
93
}
}
private void rb_setup_CheckedChanged(object sender, EventArgs e)
{
if (rb_setup.Checked == true)
{
//quando o radio button setup é selecionado inicia-se a contagem de tempo de setup da
linha, este commando se repete nos outros radio buttons de paradas.
i = 0;
timer_setup.Enabled = true;
}
else
{
//Ao ser retirada a seleção do radio button setup o valor cronometrado é atualizado no
banco de dados, este comando também se repete nos outros radio buttons de parada.
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
try
{
conn.Open();
vsql = "UPDATE Disponibilidade SET TempoSetUp = '" + setup + "'
WHERE Data = CDate('" + dp_operacional.Value.Date.ToShortDateString() + "')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
timer_setup.Enabled = false;
lb_pisca_setup.BackColor = System.Drawing.Color.White;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void timer_setup_Tick(object sender, EventArgs e)
{
if (i % 2 == 0)
{
lb_pisca_setup.BackColor = System.Drawing.Color.Lime;
94
}
else
{
lb_pisca_setup.BackColor = System.Drawing.Color.White;
}
if (i <= 59)
{
i++;
}
else
{
i = 0;
setup++;
lb_time_setup.Text = setup.ToString();
}
}
private void rb_manut_CheckedChanged(object sender, EventArgs e)
{
if (rb_manut.Checked == true)
{
i = 0;
timer_manut.Enabled = true;
}
else
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
try
{
conn.Open();
vsql = "UPDATE Disponibilidade SET TempoManutencao = '" +
manutencao + "' WHERE Data = CDate('" +
dp_operacional.Value.Date.ToShortDateString() + "')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
timer_manut.Enabled = false;
lb_pisca_manutencao.BackColor = System.Drawing.Color.White;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
95
}
}
private void rb_operador_CheckedChanged(object sender, EventArgs e)
{
if (rb_operador.Checked == true)
{
i = 0;
timer_operador.Enabled = true;
}
else
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
try
{
conn.Open();
vsql = "UPDATE Disponibilidade SET TempoOperador = '" + operador +
"' WHERE Data = CDate('" + dp_operacional.Value.Date.ToShortDateString() + "')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
timer_operador.Enabled = false;
lb_pisca_operador.BackColor = System.Drawing.Color.White;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void rb_programa_CheckedChanged(object sender, EventArgs e)
{
if (rb_programa.Checked == true)
{
i = 0;
timer_programa.Enabled = true;
}
else
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
try
{
conn.Open();
96
vsql = "UPDATE Disponibilidade SET TempoPrograma = '" + programa
+ "' WHERE Data = CDate('" + dp_operacional.Value.Date.ToShortDateString() +
"')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
timer_programa.Enabled = false;
lb_pisca_programa.BackColor = System.Drawing.Color.White;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void rb_materia_CheckedChanged(object sender, EventArgs e)
{
if (rb_materia.Checked == true)
{
i = 0;
timer_materia.Enabled = true;
}
else
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
try
{
conn.Open();
vsql = "UPDATE Disponibilidade SET TempoMateria = '" + materia + "'
WHERE Data = CDate('" + dp_operacional.Value.Date.ToShortDateString() + "')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
timer_materia.Enabled = false;
lb_pisca_materia.BackColor = System.Drawing.Color.White;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
97
}
private void rb_utilidade_CheckedChanged(object sender, EventArgs e)
{
if (rb_utilidade.Checked == true)
{
i = 0;
timer_utilidade.Enabled = true;
}
else
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
try
{
conn.Open();
vsql = "UPDATE Disponibilidade SET TempoUtilidade = '" + utilidade +
"' WHERE Data = CDate('" + dp_operacional.Value.Date.ToShortDateString() + "')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
timer_utilidade.Enabled = false;
lb_pisca_utilidade.BackColor = System.Drawing.Color.White;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void timer_manut_Tick(object sender, EventArgs e)
{
if (i % 2 == 0)
{
lb_pisca_manutencao.BackColor = System.Drawing.Color.Lime;
}
else
{
lb_pisca_manutencao.BackColor = System.Drawing.Color.White;
}
if (i <= 59)
{
i++;
}
else
{
98
i = 0;
manutencao++;
lb_time_manut.Text = manutencao.ToString();
}
}
private void timer_operador_Tick(object sender, EventArgs e)
{
if (i % 2 == 0)
{
lb_pisca_operador.BackColor = System.Drawing.Color.Lime;
}
else
{
lb_pisca_operador.BackColor = System.Drawing.Color.White;
}
if (i <= 59)
{
i++;
}
else
{
i = 0;
operador++;
lb_time_operador.Text = operador.ToString();
}
}
private void timer_programa_Tick(object sender, EventArgs e)
{
if (i % 2 == 0)
{
lb_pisca_programa.BackColor = System.Drawing.Color.Lime;
}
else
{
lb_pisca_programa.BackColor = System.Drawing.Color.White;
}
if (i <= 59)
{
i++;
}
else
{
i = 0;
programa++;
lb_time_programa.Text = programa.ToString();
}
99
}
private void timer_materia_Tick(object sender, EventArgs e)
{
if (i % 2 == 0)
{
lb_pisca_materia.BackColor = System.Drawing.Color.Lime;
}
else
{
lb_pisca_materia.BackColor = System.Drawing.Color.White;
}
if (i <= 59)
{
i++;
}
else
{
i = 0;
materia++;
lb_time_materia.Text = materia.ToString();
}
}
private void timer_utilidade_Tick(object sender, EventArgs e)
{
if (i % 2 == 0)
{
lb_pisca_utilidade.BackColor = System.Drawing.Color.Lime;
}
else
{
lb_pisca_utilidade.BackColor = System.Drawing.Color.White;
}
if (i <= 59)
{
i++;
}
else
{
i = 0;
utilidade++;
lb_time_utilidade.Text = utilidade.ToString();
}
}
100
private void frm_operacional_Load(object sender, EventArgs e)
//ao iniciar o form, o programa verifica se ja existe linha no banco criada
{
try
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
conn.Open();
cmd = new OleDbCommand("SELECT [TempoProducao],
[TempoManutencao], [TempoSetUp], [TempoOperador], [TempoPrograma],
[TempoMateria], [TempoUtilidade] FROM Disponibilidade WHERE Data = CDate('"
+ dp_operacional.Value.Date.ToShortDateString() + "')", conn);
OleDbDataReader da;
da = cmd.ExecuteReader();
if (da.HasRows)
{
if (da.Read())
{
//atruibuição dos valores existentes no banco para as variáveis do programa
MessageBox.Show("Data já existente, produção será continuada.",
"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
producao = int.Parse(da["TempoProducao"].ToString());
manutencao = int.Parse(da["TempoManutencao"].ToString());
setup = int.Parse(da["TempoSetup"].ToString());
operador = int.Parse(da["TempoOperador"].ToString());
programa = int.Parse(da["TempoPrograma"].ToString());
materia = int.Parse(da["TempoMateria"].ToString());
utilidade = int.Parse(da["TempoUtilidade"].ToString());
da.Close();
}
}
//se não existe linha criada o programa cria uma nova linha e todos os valores da linha
são nulos atéque sejam atualizados
else
{
da.Close();
vsql = "INSERT INTO Disponibilidade([Data])VALUES ('" +
dp_operacional.Value.Date.ToString("dd/MM/yyyy") + "')";
cmd.CommandText = vsql;
cmd.ExecuteNonQuery();
MessageBox.Show("Linha criada com sucesso, Pronto para iniciar.",
"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
producao = 0;
manutencao = 0;
setup = 0;
operador = 0;
programa = 0;
101
materia = 0;
utilidade = 0;
}
conn.Close();
lb_time_producao.Text = producao.ToString();
lb_time_manut.Text = manutencao.ToString();
lb_time_setup.Text = setup.ToString();
lb_time_operador.Text = operador.ToString();
lb_time_programa.Text = programa.ToString();
lb_time_materia.Text = materia.ToString();
lb_time_utilidade.Text = utilidade.ToString();
rb_programa.Checked = true;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btn_ficha_Click(object sender, EventArgs e)
{
if (tb_codproduto.Text == "") //para carregar a ficha necessita que exista o
código.
{
MessageBox.Show("Preencha o código do produto.", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
Try
//após preenchido o codigo do produto o programa busca na tabela da engenharia a
descrição e velocidade padrão do produto
{
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("SELECT [DesProduto],
[Velocidade] FROM Engenharia WHERE CodProduto LIKE " + tb_codproduto.Text,
conn);
conn.Open();
OleDbDataReader da;
da = cmd.ExecuteReader();
if (da.HasRows)
{
if (da.Read())
{
102
tb_descricao.Text = da["DesProduto"].ToString();
tb_velocidade_padrao.Text = da["Velocidade"].ToString();
vel_padrao = int.Parse(da["Velocidade"].ToString());
}
//após a busca da descrição e velocidade, é gerado um relatório com todos os dados da
ficha utilizando a ferramenta reportviewer
frm_relatorio frm = new frm_relatorio(tb_codproduto.Text);
frm.ShowDialog();
}
else
{
//caso o produto não seja encontrado é enviada uma mensagem ao usuário
MessageBox.Show("Valor não encontrado", "Aviso.",
MessageBoxButtons.OK, MessageBoxIcon.Information);
tb_codproduto.Text = "";
}
da.Close();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void Serial_com_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{
//evento que indica comunicação serial, neste evento é chamada uma outra
função para que sejam tratados os dados;
rxstring = Serial_com.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}
double metros = 0;
private void DisplayText(object sender, EventArgs e)
{
//Nesta função e feita a contagem da produção que acontece de acordo com o
recebimento de dado serial, a cada recebimento é um pulso e a cada pulso significa
uma volta na rolda o que representa que 1 perímetro de cabo passou pela roldana.
tb_producao.Text = "";
metros = metros + 0.5338;
103
metrosparcial = metrosparcial + 0.5338;
tb_producao.Text = metros.ToString("0.00");
auxparada = 30;
}
private void tb_serialport_KeyPress(object sender, KeyPressEventArgs e)
{
// If the port is closed, don't try to send a character.
if (!Serial_com.IsOpen) return;
// If the port is Open, declare a char[] array with one element.
char[] buff = new char[1];
// Load element 0 with the key character.
buff[0] = e.KeyChar;
// Send the one character buffer.
Serial_com.Write(buff, 0, 1);
// Set the KeyPress event as handled so the character won't
// display locally. If you want it to display, omit the next line.
e.Handled = true;
}
private void timer_velocidade_Tick(object sender, EventArgs e)
{
//Timer que irá fazer a contagem da velocidade instantânea do sistema e mostra-la na
tela
auxvelocidade--;
if (auxvelocidade == 0)
{
velocidade = (metrosparcial*60) / 3;
tb_velocidade_inst.Text = velocidade.ToString("0.0");
tb_eficiencia_instant.Text = (velocidade / vel_padrao).ToString("0.0");
auxvelocidade = 3;
metrosparcial = 0;
}
}
private void timer_parada_Tick(object sender, EventArgs e)
{
//timer que indica que a máquina está parada após 30 segundos sem receber
comunicação serial
auxparada--;
if (auxparada == 0)
{
104
MessageBox.Show("Máquina parada, Selecione o motivo!", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
rb_producao.Checked = false;
// Serial_com.Close();
rb_programa.Checked = true;
timer_parada.Enabled = false;
}
}
private void groupBox2_Enter(object sender, EventArgs e)
{
}
private void btn_Inicio_Click(object sender, EventArgs e)
{
//Botão que irá habilitar o radiobutton para que seja iniciada a produção
if (tb_codproduto.Text == "")
{
MessageBox.Show("Preencha o código do produto para gerar ficha.",
"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (tb_descricao.Text =="")
{
MessageBox.Show("Busque a descrição.", "Aviso", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else if (tb_lote.Text == "")
{
MessageBox.Show("Preencha o lote da produção.", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
tb_codproduto.Enabled = false;
tb_lote.Enabled = false;
btn_ficha.Enabled = false;
rb_producao.Enabled = true;
}
}
private void btn_nova_Click(object sender, EventArgs e)
{
// botão que habilitará inicio de nova produção
tb_codproduto.Enabled=true;
tb_lote.Enabled = true;
tb_horainicio.Text = "";
105
tb_codproduto.Text = "";
tb_lote.Text = "";
tb_descricao.Text = "";
tb_producao.Text = "";
tb_velocidade_inst.Text = "";
tb_eficiencia_instant.Text = "";
tb_velocidade_padrao.Text = "";
}
private void frm_operacional_FormClosing(object sender, FormClosingEventArgs
e)
{
//ao fechar o form serão atualizados os registros com os tempos atuais.
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
try
{
conn.Open();
vsql = "UPDATE Disponibilidade SET TempoUtilidade = '" + utilidade + "',
TempoMateria = '" + materia + "', TempoPrograma = '" + programa +
"',TempoOperador = '" + operador + "', TempoManutencao = '" + manutencao + "',
TempoSetUp = '" + setup + "', TempoProducao = '" + producao + "' WHERE Data =
CDate('" + dp_operacional.Value.Date.ToShortDateString() + "')";
cmd.CommandText = vsql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
timer_utilidade.Enabled = false;
lb_pisca_utilidade.BackColor = System.Drawing.Color.White;
MessageBox.Show("Dados salvos com sucesso.", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex.ErrorCode, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
106
Apêndice F – Tela Produção
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO.Ports;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
static string _Arquivo =
@"C:\Users\Danilodms\Documents\tgdanilo\dados.accdb";
//static string _Arquivo = @"" +Application.StartupPath+ "dados.accdb";
static string strconn =
String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + _Arquivo +
";Persist Security Info=False;");
string vsql;
double tprod = 0, tm = 0, tsu = 0, to = 0, tp = 0, tmp = 0, tu = 0, total = 0, th = 0,
tr = 0, tparada = 0,te=0,tne=0;
double ef=0;
public Form1()
{
InitializeComponent();
}
public void eficienciadiaria() //Função do gráfico de eficiência diária
{
//Atribuições das propriedades do gráfico
chart1.Series.Clear();
chart1.Series.Add("Produção");
chart1.Series[0].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
chart1.Series[0].IsValueShownAsLabel = true;
chart1.Series.Add("Meta");
chart1.Series[1].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
chart1.Series[1].IsValueShownAsLabel = true;
107
try
{
//Conexão do banco de dados que fará as operações que indicarão a eficiência e serão
apresentadas no gráfico
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
conn.Open();
cmd = new OleDbCommand("SELECT
[Data],SUM(Tempo*Eficiencia)/SUM(Tempo) AS [Geral] FROM [Eficiencia] WHERE
Month(Data)='" + dateTimePicker1.Value.Date.Month.ToString() + "' AND
Year(Data)='" + dateTimePicker1.Value.Date.Year.ToString() + "' GROUP BY
[Data]", conn);
OleDbDataReader da;
da = cmd.ExecuteReader();
//atribuição dos valores das series dos gráficos
while (da.Read())
{
double valor = double.Parse(da["Geral"].ToString());
int teste = (int)valor;
chart1.Series[0].Points.AddXY(da["Data"].ToString().Replace("00:00:00", ""), teste);
chart1.Series[1].Points.AddXY("Meta", 70);
}
da.Close();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void Form1_Load(object sender, EventArgs e)
{
//define o formato do date picker
dateTimePicker1.CustomFormat = "MMMM/yyyy";
}
private void button1_Click(object sender, EventArgs e)
//Botão de atualização dos gráficos
{
eficienciadiaria();
disponibilidadediaria();
perdastotais();
resumoparadas();
108
}
public void disponibilidadediaria() //Função do gráfico de disponibilidade diária
{
//Definições das propriedades do gráfico
chart2.Series.Clear();
chart2.Series.Add("Tempo Produção");
chart2.Series[0].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
chart2.Series[0].IsValueShownAsLabel = true;
chart2.Series.Add("Tempo Parado");
chart2.Series[1].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
chart2.Series[1].IsValueShownAsLabel = true;
chart2.Series[0].CustomProperties = "EmptyPointValue=Zero,
LabelStyle=Right";
chart2.Series[1].CustomProperties = "EmptyPointValue=Zero,
LabelStyle=Right";
chart2.ChartAreas[0].AxisX.LabelStyle.Angle = -45;
chart2.Series[1].LabelAngle = 35;
try
{
//Conexão com o banco que faz as somas dos tempos diários
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
conn.Open();
cmd = new OleDbCommand("SELECT [Data],[TempoProducao] as
[Prod],(TempoManutencao+TempoSetUp+TempoOperador+TempoPrograma+Tempo
Materia+TempoUtilidade) AS [Para] FROM [Disponibilidade] WHERE
Month(Data)='" + dateTimePicker1.Value.Date.Month.ToString() + "' AND
Year(Data)='" + dateTimePicker1.Value.Date.Year.ToString() + "' ORDER BY
[Data]", conn);
OleDbDataReader da;
da = cmd.ExecuteReader();
int i =0;
if (da.HasRows)
{
while (da.Read())
{
//Atribuição dos valores do banco ao gráfico
double valor = double.Parse(da["Para"].ToString());
double valor2 = double.Parse(da["Prod"].ToString());
int teste = (int)valor;
DateTime a = DateTime.Parse(da["Data"].ToString());
chart2.Series[0].Points.AddXY(a.ToString("dd/MM"), valor);
109
chart2.Series[1].Points.AddXY(a.ToString("dd/MM"), valor2);
i++;
}
}
else {
MessageBox.Show("Não possui registros na data selecionada.", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
da.Close();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void perdastotais() //gráfico de perdas totais no mês
{
try
{
//Conexão do banco de dados somando os tempos de produção e perdas
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
conn.Open();
cmd = new OleDbCommand("SELECT SUM(TempoProducao) as [Prod],
(Prod+TM+TSU+TO+TP+TMP+TU) as [Total], SUM(TempoManutencao) as [TM],
SUM(TempoSetUp) as [TSU], SUM(TempoOperador) as [TO], SUM(TempoPrograma)
as [TP], SUM(TempoMateria) as [TMP], SUM(TempoUtilidade) as [TU] FROM
[Disponibilidade] WHERE Month(Data)='" +
dateTimePicker1.Value.Date.Month.ToString() + "' AND Year(Data)='" +
dateTimePicker1.Value.Date.Year.ToString() + "'", conn);
OleDbDataReader da;
da = cmd.ExecuteReader();
int i = 0;
if (da.HasRows)
{
if (da.Read())
{
//Atribuição dos valores do banco as suas respectivas variáveis
tprod = int.Parse(da["Prod"].ToString());
tm = int.Parse(da["TM"].ToString());
tsu = int.Parse(da["TSU"].ToString());
to = int.Parse(da["TO"].ToString());
110
tp = int.Parse(da["TP"].ToString());
tmp = int.Parse(da["TMP"].ToString());
tu = int.Parse(da["TU"].ToString());
total = int.Parse(da["Total"].ToString());
}
}
else
{
MessageBox.Show("Não possui registros na data selecionada.", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
da.Close();
cmd.CommandText = "SELECT
[Data],(SUM(Tempo*Eficiencia)/SUM(Tempo)) AS [EF] FROM [Eficiencia] WHERE
Month(Data)='" + dateTimePicker1.Value.Date.Month.ToString() + "' AND
Year(Data)='" + dateTimePicker1.Value.Date.Year.ToString() + "' GROUP BY
[Data]";
da = cmd.ExecuteReader();
if (da.HasRows)
{
if (da.Read())
{
ef = double.Parse(da["EF"].ToString());
}
}
else {
MessageBox.Show("Não possui registros na data selecionada.", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
da.Close();
conn.Close();
//operações que compilarão os dados para ter um resumo das perdas e eficiência
th = (((total-tp)/total)*100);
th = double.Parse(th.ToString("N2"));
tr = (((th*total/100) - (to + tm + tsu + tmp + tu))/total)*100;
tr = double.Parse(tr.ToString("N2"));
tparada = ((to + tm + tsu + tmp + tu)/total)*100;
tparada = double.Parse(tparada.ToString("N2"));
te = (((tr * total / 100 * (ef / 100)) / total) * 100);
te = double.Parse(te.ToString("N2"));
tne = (((tr * total / 100 * (1 - (ef / 100))) / total) * 100);
tne = double.Parse(tne.ToString("N2"));
tp = ((tp/total)*100);
tp = double.Parse(tp.ToString("N2"));
111
//Atribuição de legenda nas series
chart3.Series.Clear();
chart3.Series.Add("Tempo Disponivel");
chart3.Series.Add("Tempo Habilitado");
chart3.Series.Add("Tempo de Falta de Programa");
chart3.Series.Add("Tempo Rodando");
chart3.Series.Add("Tempo de Parada");
chart3.Series.Add("Tempo Eficiente");
chart3.Series.Add("Tempo Não Eficiente");
//Definição do tipo de gráfico
chart3.Series[0].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
chart3.Series[1].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
chart3.Series[2].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
chart3.Series[3].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
chart3.Series[4].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
chart3.Series[5].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
chart3.Series[6].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
//permite que o valor da serie seja mostrado na legenda
chart3.Series[0].IsValueShownAsLabel = true;
chart3.Series[1].IsValueShownAsLabel = true;
chart3.Series[2].IsValueShownAsLabel = true;
chart3.Series[3].IsValueShownAsLabel = true;
chart3.Series[4].IsValueShownAsLabel = true;
chart3.Series[5].IsValueShownAsLabel = true;
chart3.Series[6].IsValueShownAsLabel = true;
//Atribuições de valores a serie
chart3.Series[0].Points.AddXY(3,100);
chart3.Series[1].Points.AddXY(3, 0) ;
chart3.Series[2].Points.AddXY(3, 0);
chart3.Series[3].Points.AddXY(3, 0);
chart3.Series[4].Points.AddXY(3, 0);
chart3.Series[5].Points.AddXY(3, 0);
chart3.Series[6].Points.AddXY(3, 0);
//series que não possuem vlores não terão labels
chart3.Series[1].Points[0].IsValueShownAsLabel = false;
chart3.Series[2].Points[0].IsValueShownAsLabel = false;
112
chart3.Series[3].Points[0].IsValueShownAsLabel = false;
chart3.Series[4].Points[0].IsValueShownAsLabel = false;
chart3.Series[5].Points[0].IsValueShownAsLabel = false;
chart3.Series[6].Points[0].IsValueShownAsLabel = false;
//atribui valores as series
chart3.Series[0].Points.AddXY(2, 0);
chart3.Series[1].Points.AddXY(2, th);
chart3.Series[2].Points.AddXY(2, tp);
chart3.Series[3].Points.AddXY(2, 0);
chart3.Series[4].Points.AddXY(2, 0);
chart3.Series[5].Points.AddXY(2, 0);
chart3.Series[6].Points.AddXY(2, 0);
//series que não possuem vlores não terão labels
chart3.Series[0].Points[1].IsValueShownAsLabel = false;
chart3.Series[3].Points[1].IsValueShownAsLabel = false;
chart3.Series[4].Points[1].IsValueShownAsLabel = false;
chart3.Series[5].Points[1].IsValueShownAsLabel = false;
chart3.Series[6].Points[1].IsValueShownAsLabel = false;
//atribui valores as series
chart3.Series[0].Points.AddXY(1, 0);
chart3.Series[1].Points.AddXY(1, 0);
chart3.Series[2].Points.AddXY(1, 0);
chart3.Series[3].Points.AddXY(1, tr);
chart3.Series[4].Points.AddXY(1, tparada);
chart3.Series[5].Points.AddXY(1, 0);
chart3.Series[6].Points.AddXY(1, 0);
//series que não possuem vlores não terão labels
chart3.Series[0].Points[2].IsValueShownAsLabel = false;
chart3.Series[1].Points[2].IsValueShownAsLabel = false;
chart3.Series[2].Points[2].IsValueShownAsLabel = false;
chart3.Series[5].Points[2].IsValueShownAsLabel = false;
chart3.Series[6].Points[2].IsValueShownAsLabel = false;
//atribui valores as series
chart3.Series[0].Points.AddXY(0, 0);
chart3.Series[1].Points.AddXY(0, 0);
chart3.Series[2].Points.AddXY(0, 0);
chart3.Series[3].Points.AddXY(0, 0);
chart3.Series[4].Points.AddXY(0, 0);
chart3.Series[5].Points.AddXY(0, te);
chart3.Series[6].Points.AddXY(0, tne);
113
//series que não possuem vlores não terão labels
chart3.Series[0].Points[3].IsValueShownAsLabel = false;
chart3.Series[1].Points[3].IsValueShownAsLabel = false;
chart3.Series[2].Points[3].IsValueShownAsLabel = false;
chart3.Series[3].Points[3].IsValueShownAsLabel = false;
chart3.Series[4].Points[3].IsValueShownAsLabel = false;
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void resumoparadas()
//Função que dará o gráfico de resumo das paradas
{
//Definição das propriedades do grafico
chart4.Series.Clear();
chart4.Series.Add("Paradas");
chart4.Series[0].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Pie;
chart4.Series[0].IsValueShownAsLabel = true;
chart4.Series[0].CustomProperties = "PieLabelStyle=Outside";
try
{
//Conexão com o banco
OleDbConnection conn = new OleDbConnection(strconn);
OleDbCommand cmd = new OleDbCommand("", conn);
conn.Open();
cmd = new OleDbCommand("SELECT SUM(TempoProducao) as [Prod],
(TM+TSU+TO+TMP+TU) as [Total], SUM(TempoManutencao) as [TM],
SUM(TempoSetUp) as [TSU], SUM(TempoOperador) as [TO], SUM(TempoPrograma)
as [TP], SUM(TempoMateria) as [TMP], SUM(TempoUtilidade) as [TU] FROM
[Disponibilidade] WHERE Month(Data)='" +
dateTimePicker1.Value.Date.Month.ToString() + "' AND Year(Data)='" +
dateTimePicker1.Value.Date.Year.ToString() + "'", conn);
OleDbDataReader da;
da = cmd.ExecuteReader();
int i = 0;
if (da.HasRows)
{
114
if (da.Read())
{
//Atribuição de valores ao gráfico, quando diferentes de zero
if (double.Parse(da["TM"].ToString()) != 0)
{
chart4.Series[0].Points.AddXY("Manutenção",
double.Parse(da["TM"].ToString()));
}
if (double.Parse(da["TSU"].ToString()) != 0)
{
chart4.Series[0].Points.AddXY("SetUp",
double.Parse(da["TSU"].ToString()));
}
if (double.Parse(da["TO"].ToString()) != 0)
{
chart4.Series[0].Points.AddXY("Falta de Operador",
double.Parse(da["TO"].ToString()));
}
if (double.Parse(da["TMP"].ToString()) != 0)
{
chart4.Series[0].Points.AddXY("Falta de Matéria Prima",
double.Parse(da["TMP"].ToString()));
}
if (double.Parse(da["TU"].ToString()) != 0)
{
chart4.Series[0].Points.AddXY("Falta de Utilidade",
double.Parse(da["TU"].ToString()));
}
}
}
else {
MessageBox.Show("Não possui registros na data selecionada.", "Aviso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
da.Close();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show("Erro ao carregar os dados :" + ex, "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
Top Related