我正在实现一个 bacnet 库来读取和写入一些对象实例。但我不明白,为什么使用 PC 和 Yabe 之类的应用程序,如果我要求一个通用控制器读取 300 多个对象,则支持分段,而不是使用手机和对同一个控制器的相同请求不支持分段。PC 和智能手机都在 Wifi 上的同一网络中。那么问题/区别是什么?
问问题
482 次
2 回答
1
用 PC 或手机拿取什么都没有。任何与 IP 兼容的设备手机、台式机、笔记本电脑、Arduino 芯片都可以与 BACnet 配合使用。你的问题是细分。您将不得不处理来自控制器的分段消息。每个 BACnet 控制器供应商都指定 MaxApduLength(即在一个 UDP 数据包内传输的最大数据长度)。标准 APDU 长度为 1476 字节。因此 BACnet 控制器不能发送超过其中指定的 APDU 长度的数据。
从控制器请求 300 个对象肯定会导致 APDU 大于控制器的限制。在这种情况下,控制器将向您发送分段消息,每个消息都带有序列号。您将必须处理所有分段消息并将它们组合成一条消息,然后只有您会得到准确的响应。Yabe 和其他 BACnet 客户端也是如此。
我还用 Java 和 Swift 4.0 为我们的移动应用程序编写了 BACnet 库,它们都可以从添加了分段支持的控制器中读取任意数量的对象。我已经用具有 400 多个对象的控制器测试了这些。
于 2020-02-18T22:07:13.417 回答
0
分段用于 APDU(响应)太大而无法容纳在数据链路上的一帧中。如果两个设备都支持分段,那就太好了。如果其中一个设备不支持分段,并且 APDU 不适合,则发出“不支持分段”错误。(然后您必须重试较小的请求)。
于 2020-02-19T09:12:37.700 回答