为XBee开发通信协议

时间:2016-06-21 10:46:33

标签: serial-port communication xbee

我在API模式下使用XBee Digimesh模块在不同的工业机器之间发送数据,允许它们共享数据,信息和命令。

API模式提供了一些基本命令,主要用于执行寻址和与XBee模块本身通信以进行配置等。

通过相应的XBee API-Command发送用户数据,该命令允许发送最大有效载荷为72字节的用户定义数据。

由于我想扩展这种通信以允许集成更多的机器等,我正在考虑如何实现一个基本的通信系统,该系统完全适合仅72字节的超小有效负载。

来自网络,我通常会在这里使用某种JSON,但这会很快填满有效载荷。

此外,无法发送包含大量信息的帧,因为这样也可以非常快速地填充有效载荷。

所以我提出了一种不同的沟通方式。而不是发送包含信息的帧,如何发送某种消息如下:

  • 机器广播:谁在那里?
  • 机器-B答案:这是我,我是一台xxx-Machine
  • Machine-C答案:这是我,我是一台xxx-Machine

Machine-A现在评估回复并决定使用Machine-B(因为Machine-C与As接口不匹配):

  • 机器A到B:你好B,请给我一些价值!
  • 机器B到A:你去:2.349590

这可以扩展到不同的短消息。在每条消息之后,发送方保持状态中的消息类型,并且将根据状态/上下文评估答复。

我试图避免的是定义一个基于位的协议(如MIDI),它将所有事件定义为基于位的标志。由于我们现在还没有添加什么类型的硬件,我希望通信协议非常灵活,不需要协调器或消息代理等。

但是,由于这是我第一次考虑通信协议,我很想知道是否有一些现有的框架可以处理轻负载上的复杂通信。

1 个答案:

答案 0 :(得分:0)

您可能希望阅读ZigBee Cluster Library规范,重点关注常规命令。它描述了一个属性发现和检索系统。每个属性都有一个16位ID和一个数据类型(各种大小的整数,枚举类型,位图),用于确定其大小。

这是为802.15.4网络的小型有效负载而设计的协议,您可以将协议基于其子集。其他ZigBee规范只是给定16位集群ID的已定义属性(和命令)的列表。

您的主设备可以通过发现过程获取属性ID列表,然后发送请求以一次性获取多个ID的值。响应将使用16位ID,8位属性类型和可变长度数据紧密打包。即使您的主设备不知道ID对应的内容,它也可以将数据传递给知道的其他系统(如Web服务器)。