Trabalhando com o Atlas Copco Open Protocol

Henrique Dal Bello
Training Center
Published in
3 min readDec 5, 2018
Imagem retirada do site oficial da Atlas Copco

Open protocol é um protocolo de comunicação criado pela empresa Atlas Copco que define como devemos comunicar com os controladores de apertos.

Alguns anos atrás tive a oportunidade de trabalhar com estes controladores de apertos e seu protocolo.

Com ele, pude criar aplicações que trocavam pacotes TCP/IP para operar os controladores e fazer coisas como executar um Job/Parameter Set, obter/recuperar apertos antigos ou perdidos por conta de falha na comunicação ou até mesmo na rede, receber os apertos em tempo real, bem como muitas outras funcionalidades que estão disponíveis dentro destes controladores. E quem me ajuda a fazer todo esse meio campo entre eles é o open protocol.

Embora fosse legal mexer com isso, ficar fazendo parsing de bytes ou strings ASCII era um trabalho meio massante e as vezes até estressante, eu diria.

Foi aí que ao longo do tempo percebi que esses pacotes tinham uma estrutura parecida e que era capaz de já existir algo que fizesse esse parsing pra mim, um .jar ou uma .dll, algo do gênero. Então, um belo dia, no conforto da minha casa me perguntei:

Será que alguém nunca pensou em criar uma biblioteca para manipular esses pacotes que estão especificados aqui?

Então comecei a pesquisar pelo Google afora se havia alguma biblioteca em qualquer linguagem de programação. Mas, para minha surpresa, não achei NENHUMA e pior, havia pouca informação na internet sobre o Open Protocol em si.
Basicamente a única coisa que eu tinha era a documentação e um controlador de aperto “Power Focus” na minha mesa…

Foi então que decidi criar uma biblioteca! Sabia que seria um esforço grande, mas por que não?

O Open Protocol Interpreter

E então o open protocol interpreter nasceu!

O que fiz foi pegar toda a documentação disponibilizada pela Atlas Copco e compilar ela em uma .dll C#, a qual nomeei de “Open Protocol Interpreter” (atualmente está na versão 2.1.0).

Em poucas palavras o que a biblioteca faz é: pegar o pacote recebido e “traduzir” para um objeto (famoso beautify) para tornar mais fácil a manipulação, bem como o caminho inverso também!

Foi um trabalho pesado criar e testar, mas está feito e funcionando!!

A Estrutura do Projeto

Veja o padrão Chain of responsibilities!

Basicamente criei ele dentro do padrão “chain of responsibility”, onde iteramos entre cada classe para descobrir qual pacote foi recebido.
Ao identificar o pacote recebido, ele preenche todas as propriedades da classe, passando todos os bytes para um simples objeto.

Já adicionei muitos pacotes (em torno de 300 talvez, não me recordo ao certo), por isso tive que fazer algumas modificações para atingir uma performance melhor.

O assunto sobre ele é muito extenso, e não cabe contar tudo aqui agora. Porém caso queira saber mais sobre parte técnica e como foi criado, dá uma olhadinha lá no meu artigo no CodeProject (único problema é que está em inglês). Além disso é um projeto open source e está disponível lá no GitHub.

--

--

Henrique Dal Bello
Training Center

Knowledge is for sharing. Developing bugs since 2012 💻