适用于嵌入式系统、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。