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.
http://blogblogs.com.br/
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.
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.