Чем 8-битный буфер отличается от 16-битного в PMP20?

Проверено экспертом Опубликовано: 02.08.2024 3231 просмотр Помогло 91%

Режим буфера задаётся в блоке параметров сокета и определяет, как байты посылки раскладываются по регистрам контроллера. Нулевое значение поля означает восьмибитный режим, любое ненулевое — шестнадцатибитный.

Восьмибитный режим. Старший байт регистра не используется: контроллер отправляет и принимает только младший байт каждого регистра. Один регистр — один байт посылки. Режим неэкономный по памяти, зато исключает путаницу с порядком байтов и удобен для текстовых посылок, где каждый символ ложится в свой регистр.

Шестнадцатибитный режим. В регистр укладываются два байта. Порядок оговорён руководством прямо: при приёме контроллер сначала сохраняет младший байт, затем старший; при отправке сначала отправляет младший байт, затем старший.

Отсюда практическое следствие: если удалённое устройство передаёт слова старшим байтом вперёд, принятые значения будут выглядеть как «переставленные» — вместо 258 придёт 513. Лечится это не сменой режима буфера, а перестановкой байтов в программе после приёма.

Есть и автоматика, о которой стоит помнить: если фактическая длина принятого пакета больше заданной, данные сохраняются в шестнадцатибитном режиме независимо от настройки. То есть проект, отлаженный на коротких посылках в восьмибитном режиме, может неожиданно сменить раскладку данных, когда прибор пришлёт посылку длиннее ожидаемой. Именно поэтому длину приёма стоит задавать с запасом и контролировать фактическое число принятых байт.

Обе стороны обмена должны быть настроены согласованно — это первое, что проверяют, когда связь есть, а числа приходят бессмысленные.

Прикреплённая документация

Георгий Жуков Георгий Жуков Ведущий инженер

Этот ответ был полезен?

Не нашли ответ?

Инженер сервисной службы ответит на почту. Вопросы, которые повторяются, мы публикуем в базе знаний — без ваших контактов.

Вопрос из раздела Чем 8-битный буфер отличается от 16-битного в PMP20?