Henrique Dal Bello
Dec 5, 2018 · 3 min read
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.

Training Center

Conectamos pessoas que querem aprender algo relacionado a desenvolvimento de software com gente que pode guiá-las.

Thanks to Lauren Ferreira

Henrique Dal Bello

Written by

Knowledge is for sharing. Developing bugs since 2012 💻

Training Center

Conectamos pessoas que querem aprender algo relacionado a desenvolvimento de software com gente que pode guiá-las.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade