Xbee mesh network series 2 dropped frames

Hi,

I have created a 11 xbee series 2 mesh network, where 1 is the coordinator and the other 10 are routers.

First question: According to the manual the max payload data are 72 bytes (besides the header data) per frame, but i successful send 120 bytes, there is any issue to send this amount of data?

Considering the max payload data per sent frame through xbee series 2 is 72 bytes (besides the header data), my main goal for this project is that every router be able to send 1200 bytes of data (besides header data) per second to the coordinator (ideally send a frame every 50ms).

Issues:

  • After send a frame (Serial1.write()), when i’m trying check the status of the sent frame by reading (Serial1.read()) the ack frame of 11 bytes, sometimes it came incomplete, with missing bytes.

  • Once i can’t read the ack frame properly, i change the approach by adding a sequence ID in the sent data, and then check it in coordinator side if it receive all frames from routers. But it also drop some frames, mainly at the beginning of transmission.

Any idea what is the reason of this behavior, should i configure the coordinator or routers with some particular values? I’m using the XCTU Version: 6.1.2 just for config the modules.

Basically my code is:
1) Coordinator broadcast Many-to-one route request to force the Mesh Discovery, and after 5 seconds send the START command to routers.
2) Routers wait for a START command, from coordinator;
3) The routers start to send frames of 72 bytes (besides the header data) every 50ms;
4) The coordinator receive the data and check if the frame sequence is correct, verifying dropped msgs;

Further information of my setup:

  • I’m using Arduinos Mega;

I have config all xbee devices to operate in,

  • Operate in API mode;
  • PAN (Personal Area Network) ID 10;
  • Define baud rate: 115200 / StopBits 2;

Although max payload of module will still be of 72 bytes, but you are able to transmit 120 bytes because of “Fragmentation” feature of module.

i.e. module will break you data packet into multiple API frames and then recollect payload at destination. Although, to the best I remember, this feature also have a upper limit of 255 bytes.

For second issue of getting partial Ack response frame: Mostly its should be an issue in code itself. try out serial.readline() if you are using python.

Hi,

I’m using arduino, i have to read it byte by byte. Relatively to the dropped frames, i had perform more tests a and all 10 xbee module series 2 are sending 72bytes every 50ms to the coordinator, and the amount of drop frames are huge, approx. 50% of the frames.

I think that is a xbee buffer issue the 202 bytes aren’t enough to deal with that rate and that amount of incoming data.

There is any way to increase the buffer?

There is no method to increase buffer size. Although, in my opinion, its looks less a buffer issue and more traffic issue.

Change frame ID of all API frames to zero in order to disable Acknowledgement. This will help ease traffic better.

Also check “NP” parameter to find max. payload applicable with your current configuration. If its <72, then decrease payload size first.

Due to CSMA-CA, only one module can transmit to coordinator at any instance. If above ideas doesn’t help, then you need to decrease Tx frequency as last remedy.