Fazendo Java conversar com o PLC
Alguns conhecidos que lêem este blog me pediram para escrever mais post sobre a questão de como um programa Java poderia conversar com um PLC. Posso adiantar que a tarefa não é da mais simples e, como dizem em diversos foruns do assunto, coisa para que tem “coração forte”. Primeiro, muitos dos que vão se aventurar a fazer algo do genero vão perceber que a quantidade de informações nesse sentido são pouquíssimas e as tem, em sua grande maioria, são pagas. Passei bons meses vasculhando a internet (Deus abençoe o Google
) e o resultado por vezes foi desencorajador.
A maioria dos fabricantes de PLC tem adotado o OPC (OLE for process control) disponibilizando aplicativos para so Windows que expões as tabelas de dados dos plcs através de servidores OPC. Com evolução crescente dos equipamentos, alguns já nem precisam mais do aplicativo e permitem o acesso eles mesmos através de cartas especiais, mas isso é assunto de posso escrever em outro post. O Opc foi algo especificado na tecnologia da Microsoft. Como é algo M$ é facil concluir que toda a gama de produtos da M$ tem este suporte, assim como o seu .NET (suporte nativo através do ActiveX e DCOM) . JUntando outros motivos e o citada anteriormente, tem-se hoje um predileção a escolher a plataforma Windows para o desenvolvimento de drivers, e aplicativos SCADA o que explica a raridade de opções em outras tecnologias e SO. E não é diferente com java.
Alguém poderia dizer ao ler os paragrafos acima que seria simples: “Basta escrevermos uma bilbioteca OPC em Java que está tudo pronto”. Sim, concordo em parte e digo que quem se candidatar faça-o e depois permita que utilizemos sua API pois esta não é uma tarefa nada facil. Um outro caminho seria partir para implementar algum protocolo particular do plc em Java. Bem isso pode ser um caminho, pois alguns deles estão escritos em C seria algo como um engenharia reversa. A questão que temos que pagar por suas especificações ou bibliotecas e fazÊ-lo seria um violação das leis.
Nos sobram poucas possibilidades (bem poucas).
A maioria das opções válidas são pagas e as open source existentes cobrem apenas uma pequenas parte e tem aplicações muito específicas. Uma outra opção seria escrever algo em JAva que acessaria a um driver de um fabricante e por meio deste faria o acesso (é deste jeito que meus programas em .NET fazem). MAS COMO ACESSAR O DRIVER ESCRITO PARA Windows? Bem, a maioria deles expõe seus serviços por meio de DCOMs, bastaria que seu java falasse este “protocolo”. Para tanto, antes que o leitor comece a escrever suas classes através do JNI sugiro uma olhada na api j-Interop. Vale a pena e funciona.
A minha intenção é juntar um pessoal para escrevermos uma biblioteca de acesso em java sobre a licença LGPL. Assim que conseguir aviso a galera.
Oi André,
Parabens pelo post. Olha estou tb a meses quebrando minha cabeça para fazer essa comunicação java X PLC para a minha dissertação de mestrado. O pior é que eu preciso acessar um PLC a partir de um dispositivo móvel como um PDA. Tudo que encontrei até agora foi pago e preciso de algo free para usar em minha dissertação. Andei olhado o j-Iterop me pareceu uma alternativa legal, mas, começar a escrever o acesso DCAM do zero hoje seria complicado para mim. Portanto se tiver alguma luz sobre esse assunto ficarei grato.
Quem sabe poderemos escrever um artigo sobre uma solução Java X OPC pura.
Aguardo retorno.
Comentário by Antonio Araujo on 15 de abril de 2010 at 20:25
Meu amigo parece que em breve teremos uma luz no final do tunel. O pessoal responsavel por controlar a especificação da OPC, resolveu lançar uma nova release, chamada de OPC-UA, que agora contemplará implementações em outra plataformas que não microsoft.
Isso significa um sopro de esperança para vermos algo em java feito e sendo oficial. Enquanto isso não chega te recomendo é usar o JNI para fazer bind de bibliotecas em C que já existem ou até mesmo em C++ ou C# (sendo C# muito dificil) .
Assim que tiver alguma novidade sobre eu posto aqui no blog.
Comentário by Andre on 15 de abril de 2010 at 20:58
Bom dia André.
Sobre o assunto JAVA e PLC gostaria de divulgar um trabalho que realizei sobre o assunto. Consegui desenvolver basicamente 3 classes JAVA que realizam a leitura e escrita em tags de CLPs ControlLogix e CompactLogix da Rockwell. O melhor é que estas classes não utilizam nenhum servidor OPC como é feito no pacote JEasyOPC. Tudo é codificado em JAVA. Bom como ainda estou melhorando estas classes , há algumas restrições quanto ao tamanho dos dados e a presença de arrays em estruturas, mas atualmente pela minha vivencia em automação creio que ela atende muito bem a maioria das aplicações que necessitem efetuar a troca de informações entre estes sistemas.
Comentário by Sergio on 10 de abril de 2011 at 11:55
sérgio,
Parabéns cara. Acho que conseguiu uma verdadeira vitória. Teste se consegue fazer esse acesso em SO diferentes de Windows que aí será matador. Tem um pessoal no sul que está fazendo algo nessa linha também. Assim que eu achar o nome desse pessoal te envio
Comentário by Andre on 10 de abril de 2011 at 14:29
Sérgio da “Souza Cruz”
Comentário by Souza on 19 de maio de 2011 at 9:05
André e Sérgio ! Muito com ter encontardo voces ! Tambem preciso fazer Java x CLP para meu TCC, se for possivel me mandem algo para eu analisar e começar a estudar, tenho em mãos um CLP da Unitronics.
Abraço
Comentário by Renato on 27 de julho de 2011 at 12:17
Renato tentaria ver algo no sentido de OPC ( existe uma nova versão que visa ser multisistema operacional). Um outro jeito é ver se tem dentro do mercado já drivers, em java, para o seu plc. E em última instancia é, usando JNI, fazer bind para a biblioteca em C (ou DLL) que tiver do fabricante.
Comentário by Andre on 1 de agosto de 2011 at 0:13
Interessante o tema André. A promessa de java era geladeira conversando com assadeira, torradeira e etc.
Trabalho no setor de manutenção na área de injeção e sopro de plastico e dia desses um “profissinal” fez um “jump” numa segurança – pressostato de alta – o que ocasionou a quebra de um componente bem mais caro – compressor – e parada na produção.
Sistema de automação industrial já permite o monitoramento remoto de variáveis para tomada de decisão, mas aqui o desafio são dois:
1 – Equipamento à prova de gambiarra. ok, nada de novo. Um transdutor de pressão mede os dados e envia informação para o técnico e o gerente, caso os dados estejam fora do padrão ou o uso de integral/derivadas indiquem curva de tendência que fará os dados entrarem em uma área critica que demande intervenção antes que a m* aconteça – parada não programada.
2 – Mudança de paradigma para manutenção preventiva. Tirar as bundas gordas da cadeira executiva para perceberem que o monitoramento remoto ou local atráves de telas digitais não dispensa a importancia de gente interagindo com maquinas e executando as rotinas de manutenção para assegurar que estas devolvam os investimentos.
Maquinas não tem ego. Trate-as bem ou mal e é isso que teremos de volta.
Numa alteração de molde numa injetora pode ser necessário alterar as temperaturas de água gelada ou de aquecimento caso o molde seja usado para uso com resinas com caracteristicas ou gramagem (quantidade em gramas por ciclo de produção), diferentes do molde anterior. Neste caso, a injetora deve conversar com a central de água gelada ou termoregulador (água quente) para que estes tenham seus set points alterados para o novo perfil de produção.
Objetos instanciados em Classes Injetora, Chiller, Termoregulador trocando mensagens a partir da Classe Operador —-> até chegar nas classe do ERP que monitoram, entre outras coisas, o fluxo de caixa que as injetoras produzem.
abs
Comentário by trainsppotting on 10 de agosto de 2011 at 17:27
Estou criando um supervisorio para uma dll, estou querendo utilizar java, ja pesquisei sobre jni, jna. Gostaria de algum exemplo ou tutorial. Tenho toda a documentação da dll e tambem metodos que funcionam no vb. Sera que alguem poderia dar uma ajuda
Muito Obrigado
Comentário by Ricardo on 29 de setembro de 2011 at 22:33
Vou ver aqui se tenho algo. Mas a questão de JNI é o caminho para integrar a sua DLL a um código java.
A princípio desconheço outro jeito melhor do que esse. Vou pesquisa e assuntar com amigos e prometo, caso ache algo, post no blog – assim fica para todos.
Comentário by Andre on 30 de setembro de 2011 at 15:19
Andre, meu clp e um atos expertd dx. Tenho a biblioteca na mão e suas funções. Gostaria de ajuda passar essa implementacao para JNI. Teria como?
Valeu
Comentário by Ricardo on 5 de outubro de 2011 at 13:36
Claro que sim. Se quiser que seja algo aberto para a comunidade, aconselho a colocar o projeto no github que ficará muito fácil de contribuir contigo.
Comentário by Andre on 5 de outubro de 2011 at 18:26