適用於嵌入式系統、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)。
BACnet - 用於樓宇自動化和控製網路的資料通訊協定 - 請參閱 bacnet.org。 BACnet 是用於樓宇自動化和控製網路的標準資料通訊協定。 BACnet 是一個開放協議,這意味著任何人都可以為該標準做出貢獻,任何人都可以使用它。唯一需要注意的是,BACnet 標準文件本身的版權歸 ASHRAE 所有,他們出售該文件是為了幫助支付開發和維護該標準的成本(類似於 IEEE 或 ANSI 或 ISO)。
對於軟體開發人員來說,BACnet 協定是發送和接收包含其他 BACnet 相容裝置可以理解的資料的訊息的標準方式。 BACnet 標準定義了透過各種電線或無線電進行通訊的標準方式,稱為資料鏈路/實體層:乙太網路、EIA-485、EIA-232、ARCNET 和 LonTalk。 BACnet 標準也定義了使用 UDP、IP、HTTP(Web 服務)和 Websockets 進行通訊的標準方式。
這個BACnet 協定堆疊實作是專門為嵌入式BACnet 裝置設計的,使用具有例外授權(如eCos)的GPL,這意味著對所分發的核心程式碼的任何變更都是共用的,但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 產生軟體物料清單:
$ 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 下運行的範例應用程式。預設情況下,它們使用 BACnet/IPv4 資料鏈結層進行通信,但可以編譯為使用 BACnet IPv6、乙太網路、ARCNET 或 MS/TP。
Linux/Unix/Cygwin
$ make clean all
Windows MinGW Bash
$ make win32
Windows 命令列
c:> build.bat
BACnet 堆疊可以由多種編譯器編譯。最常見的免費編譯器是 GCC(或 Windows 下的 MinGW)。 makefile 預設使用 GCC。
該程式庫還可以使用 CMake,它可以為各種 IDE 或編譯器產生專案或 Makefile。例如,要產生 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 檔案開始取得。
演示應用程式都是提供一項主要 BACnet 服務的客戶端應用程序,除了一個伺服器應用程式和一個網關應用程式、幾個路由器應用程式和幾個 MS/TP 特定應用程式。每個應用程式都將接受命令列參數,並將輸出列印到 stdout 或 stderr。客戶端應用程式基於命令列,可用於腳本或用於故障排除。演示應用程式使用環境變數來設定網路選項。請參閱每個單獨的演示以了解選項。
ports/ 目錄中還有 ARM7、AVR、RTOS-32、PIC 等專案。每個項目都有一個針對特定硬體的演示應用程式。對於 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® 是美國暖氣、冷氣和空調工程師協會的註冊商標,Inc. 180 Technology Parkway NW, Peachtree Corners, Georgia 30092 US。