移动端不支持 BACnet 分段

BACnet segmentation-not-supported on mobile

我正在实现一个 bacnet 库来读写一些对象实例。 但我不明白,为什么在 PC 和像 Yabe 这样的应用程序中,如果我要求一个公共控制器读取超过 300 个对象,则支持分段,而不是在移动设备 phone 和相同的请求下对于同一控制器,不支持分段。 PC和smartphone在同一个Wifi网络中。 那么problem/difference是什么?

PC 或手机都带不了什么phone。任何 IP 兼容设备移动 phone、台式机、笔记本电脑、Arduino 芯片都可以与 BACnet 一起使用。 你的问题是分割。您将不得不处理来自控制器的分段消息。 每个 BACnet 控制器供应商都指定了 MaxApduLength(即在一个 UDP 数据包中传输的最大数据长度)。标准 APDU 长度为 1476 字节。因此 BACnet 控制器发送的数据不能超过其中指定的 APDU 长度。

从控制器请求 300 个对象肯定会导致 APDU 大于控制器的限制。在这种情况下,Controller 将向您发送分段消息,每个消息都带有序列号。您将必须处理这些所有分段的消息并将它们组合在一条消息中,然后您才能得到准确的响应。这与 Yabe 和其他 BACnet 客户端相同。

我还在 Java 和 Swift 4.0 中为我们的移动应用程序编写了 BACnet 库,两者都可以从添加了分段支持的控制器中读取任意数量的对象。我已经用拥有超过 400 个对象的控制器测试了这些。

分段用于太大而无法放入数据链路上的一个帧的 APDU(响应)。如果两个设备都支持分段,那就太好了。如果其中一个设备不支持分段,并且 APDU 不适合,则会发出 "Segmentation not supported" 错误。 (然后您必须重试一个较小的请求)。