Если ваши данные проходят через XBees, вы должны перевести модули в режим API с помощью escape-символов, разделить ваши данные на логические пакеты и воспользоваться тем фактом, что в режиме API пакет, который передается XBee, либо прибудет нетронутым, либо не за что. Создайте свой протокол, передавая блоки по 1-255 байт, и позвольте модулям XBee беспокоиться о том, как доставлять данные внутри каждого блока. Не беспокойтесь о сохранении целостности отдельных пакетов или подразделений между ними. Модули Digi позаботятся об этом. Самое большое, о чем вам нужно беспокоиться, это тот факт, что даже если узел, который передает пакет, считает, что он не был доставлен и отправляет замену, получатель может в конечном итоге получить его в любом случае - возможно, даже после получения замены. Все может быть проще, если вы спроектируете свой протокол так, чтобы одна сторона была «главной»; если мастер запрашивает кусок данных, ведомый должен отправить его один раз и не беспокоиться о том, получит ли мастер его. Если мастер не получает данные, которые ему нужны, он может запросить их снова.
Подчиненное устройство должно присваивать некоторый вид порядковых номеров данным, а ведущее устройство должно присваивать порядковые номера запросам о том, что ведомое состояние изменено. Если запрос мастера имеет форму «отправить первый элемент, чей порядковый номер больше, чем XXX», и каждый элемент данных ведомого включает свой собственный порядковый номер и номер предыдущего элемента (если они не пронумерованы последовательно ), пакеты с поздним прибытием могут привести к тому, что ведомое устройство отправит избыточно данные ведущему устройству, но ведущему не составит труда игнорировать последующие ответы, поступающие с опозданием. Если ведомое устройство получает запрос на изменение состояния, порядковый номер которого меньше номера предыдущего запроса, он должен игнорировать этот запрос, поскольку он был отменен даже до того, как он был получен.