"ОПИСАНИЕ протокола обмена между ПЭВМ и приборами ОВЕН" не совсем корректное, особенно это касается "СТРУКТУРНОЙ СХЕМЫ ПРОТОКОЛА ОВЕН", вот и претензий много
я, честно говоря, не первый раз такие спецификации читаю и работаю с ними, поэтому когда писал конфигуратор команд для протокола owen, делал ровно то, что написано в этих документах,
а получилось это только после того, как увидел 2 "живые" команды на форуме
вот чтобы такого не происходило, я бы порекомендовал сделать всего 3 дополнения:
1. перерисуйте эту схему так, чтобы был виден четкий порядок бит, раз уж там они есть
2. ваш CRC расчитывается с исключением из пакета кроме маркеров еще и самой контрольной суммы, т.е. не текущая, не нулевая, а вообще без этого члена
3. в документации приведите 1-2 готовые команды, чтобы не ломать мозг
получается, что заголовок имеет такую структуру:
Low - младший байт адресаКод:typedef struct tagOwenHeader{
WORD Low : 8;
WORD Size : 4;
WORD Query : 1;
WORD High : 3;
}OWEN_HEADER, *POWEN_HEADER;
Size - размер поля данных - 2 (2 - это размер хеша имени)
Query - признак запроса
High - старшие 3 бита адреса
перед расчетом CRC хеш команды записывается в пакет перевернутым байтами, т.е. сначала high, потом low,
после расчета CRC, сам CRC так же переворачивается, после чего, вся полученная последовательность кодируется тетрадами
на счет уровня приложения-представления - пока не проверял, будем смотреть дальше
на счет переворачиваний, я пока без самого девайса не понял, но если разбить пакет на 3 сущности: заголовок, команда, CRC, то можно в принципе перевернуть все это дело перед кодированием тетрадами, но тогда не будет сходиться CRC и в данных будет бардак, либо можно тетрады выводить старшим полубайтом вперед, тогда можно не переворачивать, (все зависит от конечной реализации авторов; сам склюняюсь к тому, что все таки напутали порядок полубайтов), вобщем я сделал пока как есть
в приложении мой конфигуратор команд, это консолька, которая позволяет просто собрать команду, в конечный вид, перед отправкой, так что сам девайс ей не нужен (если кто-то будет вводить имя команды, не забывайте про пробелы в конце этой команды, например "dev " или "ver ")
(завтра проверю на девайсе, если успею, а сегодня просто выкладываю, т.к. команды уже сходятся по текущей теме и еще по этой: http://www.owen.ru/forum/showthread.php?t=7784)