Буферы предназначены для работы с функциями обмена данными.
Список функций для обмена данными приведен в статье "Библиотека функций" > "Обмен данными".
При работе со всеми цифровыми портами и интерфейсами используются два буфера для приема и отправки данных:
Название | Обозначение | Размер, байты |
---|---|---|
Буфер для приема данных | RXD | 128 |
Буфер для отправки данных | TXD | 64 |
В редакторе при отладке буферы изображены в виде массива байт, индексированных с 0
до (размер_буфера - 1)
.
Для отправки данных используется множество функций, но базовой следует считать RS_SEND.
На примере нее кратко опишем процедуру отправки.
Процедуру отправки данных можно разделить на несколько основных этапов:
Для приема данных используется множество функций, но базовой следует считать RS_RECV.
На примере нее опишем процедуру отправки.
Процедуру приема данных можно разделить на несколько основных этапов:
Если при отправке данных процедура крайне проста, то при работе с приемом данных следует учитывать важную особенность обработки данных - устройство способно принять неограниченно большой объем данных, но RXD буфер позволяет хранить не более 128
байт.
Если устройство будет выполнять прием данных, объем которых превышает 128
байт, то произойдет переполнение RXD буфера. При переполнении, RXD буфер хранит только последние 128
байт принятых данных.
При этом за один цикл исполнения функции приема устройство помещает из интерфейса в RXD буфер не более 64
байт данных.
Поэтому, если необходимо обработать данные, объем которых превышает 128
байт следует составить программу таким образом, что после каждого цикла работы функции приема данных из интерфейса, выполняется обработка текущего содержимого RXD буфера. Этот подход позволит за несколько итераций обработать весь необходимый объем данных.
Получается, что при работе с большими объемами данных RXD буфер является скользящим окном по потоку входящей информации. Размер окна равен
128
байтам, а максимальное смещение за один цикл равно64
байтам.
Ниже наглядно изображен процесс приема данных, объем которых немного превышает объем RXD буфера:
64
байта, увеличивает счетчик принятых данных size
на 64
и помещает данные в RXD буфер, начиная с индекса 0
.64
байта, увеличивает счетчик принятых данных size
на 64
и помещает данные в RXD буфер, начиная с индекса 64
.Х
байт, увеличивает счетчик принятых данных size
на Х
. Стирает первые Х
байт в RXD буфере. Смещает содержимое RXD буфера на Х
байт «влево» (т.е. байт по индексу Х-1
теперь будет располагаться по индексу 0
). Увеличивает счетчик переполнения offset
на X
. Помещает данные в RXD буфер, начиная с индекса (128-Х)
.В качестве частного случая обмена данными предусмотрена операция "Транзакция". Это последовательность двух предыдущих операций "Отправка" и "Прием". Такой подход удобно использовать для работы с устройствами по принципу "запрос/ответ".
Для осуществления транзакции используется множество функций, но базовой следует считать RS_TRANS.
На примере нее опишем суть "Транзакции".
Эту процедуру можно разделить на несколько основных этапов: