Чем 8-битный буфер отличается от 16-битного в PMP20?
Режим буфера задаётся в блоке параметров сокета и определяет, как байты посылки раскладываются по регистрам контроллера. Нулевое значение поля означает восьмибитный режим, любое ненулевое — шестнадцатибитный.
Восьмибитный режим. Старший байт регистра не используется: контроллер отправляет и принимает только младший байт каждого регистра. Один регистр — один байт посылки. Режим неэкономный по памяти, зато исключает путаницу с порядком байтов и удобен для текстовых посылок, где каждый символ ложится в свой регистр.
Шестнадцатибитный режим. В регистр укладываются два байта. Порядок оговорён руководством прямо: при приёме контроллер сначала сохраняет младший байт, затем старший; при отправке сначала отправляет младший байт, затем старший.
Отсюда практическое следствие: если удалённое устройство передаёт слова старшим байтом вперёд, принятые значения будут выглядеть как «переставленные» — вместо 258 придёт 513. Лечится это не сменой режима буфера, а перестановкой байтов в программе после приёма.
Есть и автоматика, о которой стоит помнить: если фактическая длина принятого пакета больше заданной, данные сохраняются в шестнадцатибитном режиме независимо от настройки. То есть проект, отлаженный на коротких посылках в восьмибитном режиме, может неожиданно сменить раскладку данных, когда прибор пришлёт посылку длиннее ожидаемой. Именно поэтому длину приёма стоит задавать с запасом и контролировать фактическое число принятых байт.
Обе стороны обмена должны быть настроены согласованно — это первое, что проверяют, когда связь есть, а числа приходят бессмысленные.
Прикреплённая документация
Георгий Жуков
Ведущий инженер