BACnet协议

320 阅读3分钟

楼宇的各类协议

modbus 使用的最多,所有楼宇控制器都有

bacnet 美系代表,比knx占有率高

knx 欧系代表

longxs

bacnet

面向对象的协议

不需要特殊硬件的协议,可以使用485 以太网芯片,都可以开发

协议是开放的

knx

需要专用的芯片,专门的收发器

bacnet ip

基于UDP协议,不用建立TCP连接,所有的通讯,请求之前,不用提前建立连接。所以它的速度很快,不需要握手。上来就发。

bacnet ip 的主站(服务)没有支持多少个连接的说法。 端口是 oxBAC0 47808?

只要防火墙不封 bac0端口就行

只要扫描就能添加到主站配置上去

无法支持广播帧,如果跨交换器,需要bbmb

bacnet mstp

支持多个主站,多个从站

通讯需要令牌

bacnet网络结构

bacnet基本概念

如果是bacnet ip服务,那么需要ip和端口

如果是bacnet mstp服务,那么需要有个mac地址

mstp情况下

主站需要设置mac地址为 0-127

从站需要设置mac地址为 128-254

这个mac地址和以太网的mac地址不同

device instance 不能重复

一个segment里面mac地址不能重复

扫描设备的时候,需要知道设备的ip地址端口号,设备的对象类型实例号

访问对象的时候,需要提供对象描述符 Object Identifier,是个32位的值

对象的 Present Value 是当前值

bacnet 应用层服务

bacnet 请求报文中, Service Choice 表示请求类型,Service Qequest 需要包含 Object Identifier等等

读取的时候,不用告诉服务端,返回的数据类型是什么。服务端返回的时候是什么类型,就什么类型。

应答没有数据,就是 Simple ACK;有数据就是 Complex ACK

要么是请求,要么是响应。

所以不存在请求和响应都分段的情况。

扫描设备

Who—Is 主站发送谁在 1~65535范围内

I-Am 设备回复我是2 我是3 ......

如果设备配置重了,那么I-Am就会出现重复

设备instance在从站可以设置

以上都是广播帧

bacnet属于client-server结构

订阅时候,要指定lifetime。订阅开始后,从站立刻发了所有数据,2分钟时间内,如果没有值变化,从站不发送数据,如果有值变化,从站会发送数据。如果2分钟到了,就自动解散了。下次主站需要重新发送订阅请求。

可以订阅对象(所有属性),或者订阅对象的某个属性。

不经常变的,适合轮询。

经常变的,适合订阅 (COV)

写操作没有订阅,主站发送给从站

不同优先级的主站请求,优先级高的生效,优先级低的不生效;

如果同优先级的主站请求,后到的,生效。

bacnetip BBMD是个物理设备,相当于是个代理,帮助收集本网段内的所有设备的数据

BBMD都是要能知道其他BBMD是谁

bacnet ip协议,支持跨网段查询吗

BACnet/IP 协议本身并不直接支持跨网段通信,但在实际应用中可以通过特定的中间设备来实现跨子网通信。

为了使BACnet/IP设备能够在不同的IP子网间通信,BACnet协议引入了BACnet边界路由器(BBMD, BACnet/Broadcast Management Device)的角色。BBMD设备能够代理并转发BACnet广播消息到其他网络,从而实现了不同IP子网间的BACnet设备互相发现和通信的功能。

因此,借助BBMD,BACnet/IP协议可以间接地支持跨网段查询和其他通信操作。通过配置正确的路由规则和BBMD服务,位于不同IP子网的BACnet设备能够跨越这些子网边界进行交互。

BACnet/IP 协议工作过程中,一定要发广播吗

BACnet/IP 协议确实利用了广播机制来进行设备发现和服务请求,特别是在网络初始化阶段或者寻找特定服务时。例如,当一个BACnet/IP设备新加入网络或者需要查找特定的服务提供者时,会通过发送全局广播或多播消息来实现这一目的。

然而,并非所有BACnet/IP的工作过程都需要广播。一旦设备之间建立起联系,后续的通讯通常会转变为点对点(unicast)方式,比如读写具体对象属性值、执行控制命令等操作。对于跨网段通信,如前所述,会通过BBMD(BACnet Broadcast Management Device)进行中继,而不是直接广播。

总之,虽然广播是BACnet/IP协议的一个重要组成部分,但不是所有通讯都依赖广播,而是根据具体的应用场景和需求选择合适的通讯模式。

能不能跳过广播阶段,直接点对点通信

理论可以,可能实现的比较少。

在BACnet/IP协议中,如果已知目标设备的具体IP地址和端口号,确实可以直接进行点对点(unicast)通信,无需经过广播阶段。例如,在以下情况下:

在系统集成或编程阶段,你已经知道各BACnet/IP设备的网络地址,可以直接指定目标地址进行数据读取或控制操作。

设备之间之前有过通信历史,已经记录了对方的网络地址信息。

但是,在设备初次接入网络或者需要寻找新的服务提供者时,通常还是需要通过广播来发现和建立连接。这是因为BACnet/IP协议设计之初就包含了自动发现和自我描述的特性,以便于设备在网络中的自组织和协同工作。

总结来说,尽管在某些条件下可以直接进行点对点通信,但在实际应用中,广播功能仍然是BACnet/IP网络正常运行和设备间有效互连的重要组成部分。