임베디드 시스템, Linux, MacOS, BSD 및 Windows용 BACnet 오픈 소스 프로토콜 스택 C 라이브러리 http://bacnet.sourceforge.net/
BACnet과 진정한 장치 상호 운용성의 놀라운 세계에 오신 것을 환영합니다!
이 라이브러리는 자동화된 연속 통합 서비스를 사용하여 자동화된 컴파일, 검증, Linting, 보안 검색 및 단위 테스트를 지원하여 강력한 C 코드 및 BACnet 기능을 생성합니다.
GitHub 워크플로: Ubuntu, Windows 및 MacOS에서 라이브러리 및 데모 앱의 CMake 빌드
GitHub 작업 흐름: 라이브러리의 Ubuntu Makefile GCC 빌드, BBMD가 있거나 없는 BACnet/IP 데모 앱, BACnet/IPv6, BACnet 이더넷 및 BACnet MSTP 데모 앱, 게이트웨이, 라우터, router-ipv6, router-mstp, ARM 포트(STM, Atmel), AVR 포트 및 MinGW32로 컴파일된 BACnet/IP 데모 앱입니다.
GitHub 워크플로: 스캔-빌드(LLVM Clang 도구), cppcheck, codespell, 단위 테스트 및 코드 적용 범위.
GitHub 워크플로 CodeQL 분석
이 BACnet 프로토콜 스택 라이브러리는 BACnet 애플리케이션 계층, 네트워크 계층 및 미디어 액세스(MAC) 계층 통신 서비스를 제공합니다. RTOS, 베어메탈 임베디드 시스템 또는 Windows, Linux, MacOS, BSD와 같은 전체 OS를 위한 오픈 소스 로열티 프리 라이브러리입니다.
BACnet - 건물 자동화 및 제어 네트워크를 위한 데이터 통신 프로토콜 - bacnet.org를 참조하세요. BACnet은 빌딩 자동화 및 제어 네트워크를 위한 표준 데이터 통신 프로토콜입니다. BACnet은 개방형 프로토콜이므로 누구나 표준에 기여하고 사용할 수 있습니다. 유일한 주의 사항은 BACnet 표준 문서 자체가 ASHRAE에 의해 저작권이 있으며 ASHRAE가 표준 개발 및 유지 비용을 충당하기 위해 문서를 판매한다는 것입니다(IEEE, ANSI 또는 ISO와 유사).
소프트웨어 개발자에게 BACnet 프로토콜은 다른 BACnet 호환 장치가 이해할 수 있는 데이터가 포함된 메시지를 보내고 받는 표준 방법입니다. BACnet 표준은 데이터 링크/물리적 계층(이더넷, EIA-485, EIA-232, ARCNET 및 LonTalk)으로 알려진 다양한 전선이나 무선을 통해 통신하는 표준 방법을 정의합니다. BACnet 표준은 UDP, IP, HTTP(웹 서비스) 및 웹소켓을 사용하여 통신하는 표준 방법도 정의합니다.
이 BACnet 프로토콜 스택 구현은 eCos와 같은 예외 라이선스가 포함된 GPL을 사용하여 임베디드 BACnet 어플라이언스를 위해 특별히 설계되었습니다. 즉, 배포되는 핵심 코드에 대한 모든 변경 사항은 공유되지만 BACnet 라이브러리는 독점 코드에 연결될 수 있습니다. 독점 코드가 GPL이 되지 않고 말이죠. 각 소스 파일에 포함된 GPL 예외의 텍스트는 다음과 같습니다.
* SPDX-License-Identifier: GPL-2.0-or-later WITH GCC-exception-2.0
일부 소스 파일은 뼈대, 예제 또는 템플릿 파일로 설계되었으며 GPL로 저작권이 보호되지 않습니다. 이러한 파일에 대한 라이센스 텍스트는 각 소스 파일에 다음과 같이 지정됩니다.
* SPDX-License-Identifier: MIT
* SPDX-License-Identifier: Apache-2.0
grep을 사용하여 소프트웨어 BOM을 생성할 수 있습니다.
$ grep -nrw SPDX --include=*.[c,h]
코드는 이식성을 위해 C로 작성되었으며, 단위 테스트(PC 기반 단위 테스트)가 포함되어 있습니다. 코드는 이식 가능하도록 설계되었으므로 GCC는 물론 Clang 또는 IAR과 같은 다른 컴파일러로도 컴파일됩니다.
BACnet 프로토콜은 ASHRAE/ANSI/ISO 표준이므로 이 라이브러리는 해당 표준을 준수합니다. BACnet에는 로열티나 라이센스 제한이 없으며 BACnet 벤더 ID 등록은 무료입니다.
이 라이브러리 아키텍처의 개요와 사용 방법은 https://sourceforge.net/p/bacnet/src/ci/master/tree/doc/README.developer를 참조하세요.
이 스택에는 프로젝트 루트 디렉터리 "make test"의 Makefile을 사용하여 실행할 수 있는 단위 테스트가 포함되어 있습니다. 개별 make 호출을 사용하여 단위 테스트를 실행할 수도 있습니다. 단위 테스트는 PC를 실행하고 지속적인 통합 환경 내의 모든 커밋에 대해 계속해서 실행됩니다.
BACnet 스택은 다양한 도구는 물론 다양한 컨트롤러 및 워크스테이션을 사용하여 기능적으로 테스트되었습니다. BTL 테스트를 성공적으로 마친 많은 제품에 포함되어 있습니다.
프로젝트 루트 디렉터리의 Makefile을 사용하면 Windows 또는 Linux에서 실행되는 12개의 샘플 애플리케이션이 생성됩니다. 기본적으로 통신을 위해 BACnet/IPv4 데이터링크 계층을 사용하지만 BACnet IPv6, 이더넷, ARCNET 또는 MS/TP를 사용하도록 컴파일될 수도 있습니다.
리눅스/유닉스/시그윈
$ make clean all
Windows MinGW 배쉬
$ make win32
Windows 명령줄
c:> build.bat
BACnet 스택은 다양한 컴파일러로 컴파일될 수 있습니다. 가장 일반적인 무료 컴파일러는 GCC(또는 Windows에서는 MinGW)입니다. makefile은 기본적으로 GCC를 사용합니다.
또한 라이브러리는 다양한 IDE 또는 컴파일러에 대한 프로젝트나 Makefile을 생성할 수 있는 CMake를 사용하도록 계측됩니다. 예를 들어 Code::Blocks 프로젝트를 생성하려면 다음을 수행하세요.
$ mkdir build
$ cd build/
$ cmake .. -G"CodeBlocks - Unix Makefiles"
c:> mkdir build
c:> cd build/
c:> cmake .. -G"CodeBlocks - MinGW Makefiles"
단위 테스트는 CMake도 사용하며 다음 명령 시퀀스로 실행될 수 있습니다.
$ make test
단위 테스트 프레임워크는 약간 수정된 ztest를 사용하며 테스트는 test/ 폴더에 있습니다. 단위 테스트 빌더는 CMake를 사용하고 테스트 적용 범위는 LCOV를 사용합니다. 단위 테스트 적용 범위의 HTML 결과는 test/build/lcoverage/index.html 파일에서 시작하여 사용할 수 있습니다.
데모 애플리케이션은 하나의 서버 애플리케이션과 하나의 게이트웨이 애플리케이션, 두 개의 라우터 애플리케이션, 두 개의 MS/TP 특정 애플리케이션을 제외하고 하나의 기본 BACnet 서비스를 제공하는 모든 클라이언트 애플리케이션입니다. 각 애플리케이션은 명령줄 매개변수를 받아들이고 출력을 stdout 또는 stderr로 인쇄합니다. 클라이언트 응용 프로그램은 명령줄 기반이며 스크립트에서 사용하거나 문제 해결에 사용할 수 있습니다. 데모 애플리케이션은 환경 변수를 사용하여 네트워크 옵션을 설정합니다. 옵션에 대해서는 각 개별 데모를 참조하세요.
ARM7, AVR, RTOS-32, PIC 등을 위한 프로젝트도 ports/ 디렉터리에 있습니다. 각 프로젝트에는 특정 하드웨어에 대한 데모 애플리케이션이 있습니다. ARM7 및 AVR의 경우 makefile은 GCC 컴파일러와 함께 작동하며 ARM용 IAR Embedded Workbench 및 Rowley Crossworks용 프로젝트 파일이 있습니다.
프로젝트 문서는 doc/ 디렉토리에 있습니다. 유사한 문서는 프로젝트 웹사이트(http://bacnet.sourceforge.net/)에 있습니다.
이 프로젝트에 기여하고 싶고 C 코딩 기술이 있다면 https://github.com/bacnet-stack/bacnet-stack/ 또는 https://sourceforge.net/p/bacnet/src/를 통해 참여하세요. 포크나 브랜치를 생성하고 최종적으로 코드를 포함하도록 고려하는 풀 요청을 생성합니다.
이 프로젝트에서 버그를 발견하면 https://sourceforge.net/p/bacnet/bugs/ 또는 https://github.com/bacnet-stack/bacnet-stack/issues에서 알려주세요.
지원 요청이 있는 경우 https://sourceforge.net/p/bacnet/support-requests/에 게시할 수 있습니다.
기능 요청이 있는 경우 https://sourceforge.net/p/bacnet/feature-requests/에 게시할 수 있습니다.
이 라이브러리를 귀하의 장치에서 작동시키는 데 문제가 있거나 BACnet 질문이 있는 경우 개발자 메일링 리스트(http://lists.sourceforge.net/mailman/listinfo/bacnet-developers)에 가입하거나 다음 주소에 질문을 게시하십시오. https://sourceforge.net/p/bacnet/discussion/에서 공개 토론, 개발자 또는 도움말 포럼을 이용하세요.
귀하의 BACnet 장치가 작동하기를 바랍니다!
Steve Karg, 미국 앨라배마 주 버밍엄 [email protected]
ASHRAE® 및 BACnet®은 American Society of Heating, Refrigerating and Air-Conditioning Engineers, Inc.의 등록 상표입니다. 180 Technology Parkway NW, Peachtree Corners, Georgia 30092 US.