При работе с модулем появились еще некоторые вопросы, вот, например, по поводу чтения состояний входов. При работе по протоколу DCON на запрос от мастера, модуль шлет такой пакет: >(данные)(контрольная сумма)CR. Поля (данные) и (контрольная сумма) имеют размер два байта. Насколько я понимаю принцип формирования этих полей следующий:
Поле (данные)
Модуль формирует 16 бит, из которых первые 4 бита равны 0, а биты 11 - 0 соответствуют состояниям выходов 12 - 1. Далее сформированные 16 бит делятся на 2 байта, каждый из которых представлен в двоичном виде. В сеть, в поле (данные), посылаются два символа, с ASCII кодами, равными десятичным эквивалентам двоичных значений этих двух байтов.
Чтоб было понятно, что я имею ввиду, приведу пример:
<hr>Пусть состояние входов модуля таково: 1010 1010 1010 (замкнуты входы 1,3,5,7,9,11, входы 2,4,6,8,10,12 разомкнуты).
Модуль формирует 16 бит: 0000 1010 1010 1010. Поле (данные) будет состоять из двух символов: первый с кодом 10 - символ "◙", второй с кодом 160 - символ "а" (кириллицей).
<hr>
Поле (контрольная сумма)
Модуль складывает ASCII код символа ">" с ASCII кодами символов из поля (данные), то есть рассчитывает сумму трех десятичных чисел. Далее берется остаток от деления полученной суммы на 256, этот остаток переводится в шестнадцатиричную систему и выводится в поле (контрольная сумма).
Пример:
<hr>Состояния входов модуля МДВВ такое же, как в вышеприведенном примере. Модуль формирует контрольную сумму следующим образом:
Контрольная сумма = 62 (код ">") + 10 (код "◙") + 160 (код кириллической "a") = 232 = 0xE8
Поле (контрольная сумма) будет содержать символы "E" и "8"
<hr>
Скажите пожалуйста, правильно ли я понял принцип формирования полей?