Skip to content

2.1 BACnet ​

把本机寄存器发布成 BACnet 对象,楼宇 BMS 直接来读;反过来也能去轮询其他 BACnet 设备。

只在部分机型出现

「BACnet」子标签只在 ESP32-S3 固件(LP3232 等)和软 PLC 模拟器上显示 —— 只有这两类固件里有 BACnet 协议栈,普通 ESP32 的程序分区放不下。其他机型看不到这一页是固件限制,不是配置问题。

两个角色 ​

BACnet 的两个角色:被 BMS 读(从站对象),或去读别人的 BACnet 设备(主站轮询)

怎么配 ​

打开「启用 BACnet」→ 选链路类型 → 在「从站对象」里一行配一个点。

字段说明
链路类型BACnet/IP 走网口,MS/TP 走 RS-485
对象类型AI / AV / BI / BV / MSI / MSV…
地址对象实例号,形如 AI:1
点名BMS 里显示的名字,可以写中文
数据类型寄存器里的存放格式,要和实际存的一致
PLC寄存器值取自哪个寄存器,如 D100
工程单位BACnet 标准单位码,62 = 摄氏度

BACnet:把 D100、D102 发布成 AI 点给 BMS 读

AI、BI、MSI 按标准是只读

BMS 要能写下来,必须用 AV / BV / MSV。

只做从站就不用管「主站轮询」

下半部分的「主站轮询」是本机去读别的 BACnet 设备用的。只是被 BMS 读,这一段留空即可。

配完要点 💾 写入配置 → 🔄 重启生效。

实测验证(LP3232) ​

以下是在 LP3232(ESP32-S3,固件 2026.9.1,网口连接)上的完整实测流程。

配置示例 ​

把 D100(数据寄存器)发布成 AV:1(可读写模拟量),把 Y0(输出继电器)发布成 BV:1(可读写开关量):

字段AV:1(测试计数器)BV:1(测试开关)
对象类型AV(Analog Value)BV(Binary Value)
地址AV:1BV:1
点名测试计数器测试开关
数据类型u16(16位无符号)bite(位)
PLC寄存器D100Y0
访问权限只读读写
工程单位95(无单位)-

设备实例号设为 32001,设备名称 LP3232-BACnet-Test,BACnet/IP 端口 47808(0xBAC0)。

DTU 功能总览,BACnet 子标签入口

BACnet 配置界面,启用开关与从站对象列表

验证方法 ​

用任意 BACnet/IP 客户端工具(如 bacpypes3、YABE、VTS)在同一网段执行:

  1. Who-Is 广播扫描:确认设备能被发现,返回 I-Am 报文(设备实例号 32001)
  2. ReadProperty 读值:
    • 读 Device:32001 的 Object_List,确认包含 AV:1 和 BV:1
    • 读 AV:1 的 Present_Value,应等于 D100 的当前值
    • 读 BV:1 的 Present_Value,应等于 Y0 的当前状态(active/inactive)
  3. WriteProperty 写值(仅对可读写对象):
    • 写 BV:1 的 Present_Value 为 inactive,确认 Y0 变为 0
    • 写 BV:1 的 Present_Value 为 active,确认 Y0 变为 1
    • 释放优先级数组(写 NULL 到对应优先级),确认控制权归还本地逻辑

实测结果 ​

在 LP3232 上实测通过:

测试项结果
Who-Is 扫描发现 1 台设备,实例号 32001
设备名称LP3232-BACnet-Test
Object_Listdevice(32001), analog-value(1), binary-value(1)
AV:1 读值正常,随 D100 变化
BV:1 读值正常,active/inactive 与 Y0 一致
BV:1 写 inactive成功,Y0 变为 0
BV:1 写 active成功,Y0 变为 1
优先级释放成功,无错误

配合 DDC 逻辑验证

设备上运行 DDC「2秒周期 Y0」程序时,D100 在 0-9 循环、Y0 每 2 秒翻转。通过 BACnet 读 AV:1 和 BV:1 可以实时观察到这些变化,是验证 BACnet 与 PLC 寄存器联动的好方法。

相关文档 ​

字段含义、对象类型清单、测试步骤见 bacnet 模块。

对外口径

仅同网段可用,不跨 BBMD、不支持 COV 订阅;未与第三方 BMS 做过逐一互操作测试,客户需要联调可提供设备协助。

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研