Biblioteca C de pilha de protocolos de código aberto BACnet para sistemas embarcados, Linux, MacOS, BSD e Windows http://bacnet.sourceforge.net/
Bem-vindo ao maravilhoso mundo do BACnet e à verdadeira interoperabilidade de dispositivos!
Esta biblioteca usa serviços automatizados de integração contínua para auxiliar na compilação, validação, linting, verificação de segurança e testes unitários automatizados para produzir código C robusto e funcionalidade BACnet.
Fluxo de trabalho do GitHub: compilação CMake de biblioteca e aplicativos de demonstração no Ubuntu, Windows e MacOS
Fluxo de trabalho do GitHub: compilação da biblioteca Ubuntu Makefile GCC, aplicativos de demonstração BACnet/IP com e sem BBMD, BACnet/IPv6, BACnet Ethernet e aplicativos de demonstração BACnet MSTP, gateway, roteador, roteador-ipv6, roteador-mstp, portas ARM (STM, Atmel), portas AVR e aplicativos de demonstração BACnet/IP compilados com MinGW32.
Fluxo de trabalho do GitHub: scan-build (LLVM Clang Tools), cppcheck, codespell, testes unitários e cobertura de código.
Análise CodeQL do fluxo de trabalho do GitHub
Esta biblioteca de pilha de protocolos BACnet fornece serviços de comunicação de camada de aplicativo BACnet, camada de rede e camada de acesso à mídia (MAC). É uma biblioteca de código aberto e isenta de royalties para um RTOS ou sistema embarcado bare metal ou sistema operacional completo, como Windows, Linux, MacOS ou BSD.
BACnet - Um protocolo de comunicação de dados para redes de automação e controle predial - consulte bacnet.org. BACnet é um protocolo de comunicação de dados padrão para redes de automação e controle predial. BACnet é um protocolo aberto, o que significa que qualquer pessoa pode contribuir para o padrão e qualquer pessoa pode utilizá-lo. A única ressalva é que o próprio documento padrão BACnet é protegido por direitos autorais pela ASHRAE, e eles vendem o documento para ajudar a custear os custos de desenvolvimento e manutenção do padrão (semelhante ao IEEE ou ANSI ou ISO).
Para desenvolvedores de software, o protocolo BACnet é uma forma padrão de enviar e receber mensagens contendo dados que são compreendidos por outros dispositivos compatíveis com BACnet. O padrão BACnet define uma forma padrão de comunicação através de vários fios ou rádios, conhecidos como Data Link/Camadas Físicas: Ethernet, EIA-485, EIA-232, ARCNET e LonTalk. O padrão BACnet também define uma forma padrão de comunicação usando UDP, IP, HTTP (Web Services) e Websockets.
Esta implementação da pilha de protocolos BACnet foi projetada especificamente para o dispositivo BACnet incorporado, usando uma GPL com licença de exceção (como eCos), o que significa que quaisquer alterações no código principal distribuídas são compartilhadas, mas a biblioteca BACnet pode ser vinculada ao código proprietário. sem que o código proprietário se tornasse GPL. O texto da exceção GPL incluída em cada arquivo fonte é o seguinte:
* SPDX-License-Identifier: GPL-2.0-or-later WITH GCC-exception-2.0
Observe que alguns dos arquivos de origem são projetados como esqueleto, exemplo ou arquivo de modelo e não são protegidos por direitos autorais como GPL. O texto da licença para esses arquivos é designado em cada arquivo fonte da seguinte forma:
* SPDX-License-Identifier: MIT
* SPDX-License-Identifier: Apache-2.0
Uma lista de materiais de software pode ser gerada usando grep:
$ grep -nrw SPDX --include=*.[c,h]
O código é escrito em C para portabilidade e inclui testes unitários (testes unitários baseados em PC). Como o código foi projetado para ser portátil, ele é compilado com o GCC e também com outros compiladores, como Clang ou IAR.
O protocolo BACnet é um padrão ASHRAE/ANSI/ISO, portanto esta biblioteca segue esse padrão. BACnet não tem royalties ou restrições de licenciamento, e o registro para um ID de fornecedor BACnet é gratuito.
Para uma visão geral desta arquitetura de biblioteca e como usá-la, consulte https://sourceforge.net/p/bacnet/src/ci/master/tree/doc/README.developer
Esta pilha inclui testes unitários que podem ser executados usando o Makefile no diretório raiz do projeto "make test". Os testes unitários também podem ser executados usando invocações make individuais. Os testes de unidade executam um PC e continuam a fazê-lo a cada commit no ambiente de Integração Contínua.
A pilha BACnet foi testada funcionalmente usando uma variedade de ferramentas, bem como vários controladores e estações de trabalho. Ele foi incluído em muitos produtos que concluíram com êxito os testes BTL.
Usando o Makefile no diretório raiz do projeto, são criados vários exemplos de aplicativos que são executados no Windows ou Linux. Eles usam a camada de link de dados BACnet/IPv4 para comunicação por padrão, mas podem ser compilados para usar BACnet IPv6, Ethernet, ARCNET ou MS/TP.
Linux/Unix/Cygwin
$ make clean all
Bash do Windows MinGW
$ make win32
Linha de comando do Windows
c:> build.bat
A pilha BACnet pode ser compilada por vários compiladores. O compilador gratuito mais comum é o GCC (ou MinGW no Windows). Os makefiles usam GCC por padrão.
A biblioteca também está instrumentada para usar CMake, que pode gerar um projeto ou Makefiles para uma variedade de IDE ou compilador. Por exemplo, para gerar um projeto Code::Blocks:
$ mkdir build
$ cd build/
$ cmake .. -G"CodeBlocks - Unix Makefiles"
c:> mkdir build
c:> cd build/
c:> cmake .. -G"CodeBlocks - MinGW Makefiles"
Os testes unitários também utilizam CMake e podem ser executados com a sequência de comandos:
$ make test
A estrutura de teste de unidade usa um ztest ligeiramente modificado e os testes estão localizados na pasta test/. O construtor de teste de unidade usa CMake e a cobertura de teste usa LCOV. Os resultados HTML da cobertura do teste de unidade estão disponíveis a partir do arquivo test/build/lcoverage/index.html.
Os aplicativos de demonstração são todos aplicativos clientes que fornecem um serviço BACnet principal, exceto um aplicativo de servidor e um aplicativo de gateway, alguns aplicativos de roteador e alguns aplicativos específicos de MS/TP. Cada aplicativo aceitará parâmetros de linha de comando e imprimirá a saída em stdout ou stderr. Os aplicativos cliente são baseados em linha de comando e podem ser usados em scripts ou para solução de problemas. Os aplicativos de demonstração utilizam variáveis de ambiente para configurar as opções de rede. Veja cada demonstração individual para as opções.
Também existem projetos no diretório ports/ para ARM7, AVR, RTOS-32, PIC e outros. Cada um desses projetos possui um aplicativo de demonstração para hardware específico. No caso do ARM7 e AVR, seu makefile funciona com compiladores GCC e há arquivos de projeto para IAR Embedded Workbench e Rowley Crossworks para ARM.
A documentação do projeto está no diretório doc/. Documentos semelhantes estão no site do projeto em http://bacnet.sourceforge.net/.
Se você deseja contribuir para este projeto e tem algumas habilidades de codificação C, junte-se a nós via https://github.com/bacnet-stack/bacnet-stack/ ou via https://sourceforge.net/p/bacnet/src/ e crie uma bifurcação ou ramificação e, eventualmente, uma solicitação pull para que seu código seja considerado para inclusão.
Se você encontrar um bug neste projeto, informe-nos em https://sourceforge.net/p/bacnet/bugs/ ou https://github.com/bacnet-stack/bacnet-stack/issues
Se você tiver uma solicitação de suporte, poderá publicá-la em https://sourceforge.net/p/bacnet/support-requests/
Se você tiver uma solicitação de recurso, poderá publicá-la em https://sourceforge.net/p/bacnet/feature-requests/
Se você tiver problemas para fazer esta biblioteca funcionar em seu dispositivo ou tiver uma dúvida sobre o BACnet, junte-se à lista de discussão de desenvolvedores em: http://lists.sourceforge.net/mailman/listinfo/bacnet-developers ou poste a pergunta no Abra fóruns de discussão, desenvolvedores ou ajuda em https://sourceforge.net/p/bacnet/discussion/
Espero que você faça seu dispositivo BACnet funcionar!
Steve Karg, Birmingham, Alabama, EUA [email protected]
ASHRAE® e BACnet® são marcas registradas da American Society of Heating, Refrigerating and Air-Conditioning Engineers, Inc. 180 Technology Parkway NW, Peachtree Corners, Georgia 30092 US.