![]() |
|
![]() ![]() ![]() |
|
EEEEEE |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 15.5.2006 Репутация: нет Всего: нет |
Есть описание пакета передачи.
Определение пакета. Устройство выдает и принимает по последовательному каналу RS-232 информацию в виде последовательности следующих пакетов: <Флаг><Идентификатор>... слова данных ...<КС><Флаг><ПрК> где: <Флаг> - Символ начала/конца пакета данных, длина 1 байт, значение - символ ASCII <DLE> (10h -> 0001000). <Идентификатор> - идентификационное число типа пакета (номер пакета) длиной 1 байт, выраженное в виде 2-х шестнадцатеричных цифр. Этот байт может иметь любое значение, отличное от 10h <DLE> или 03h <ETX> (00000011). Конкретное значение идентификационных чисел приводится далее. Слова данных - конкретная передаваемая информация. Передается сначала младший байт слова данных, затем старший. Если в информации встречается байт 10h, то он должен быть повторен два раза для того, чтобы можно было его отличить от символа начала/конца пакета <Флаг>. Соответственно, на приемном конце все встречающиеся двойные байты 10h должны быть сжаты в одиночные символы 10h. <КС> - контрольная сумма длиной 2 байта. Сумма по модулю 2 всех слов (длиной 16 бит) конкретной передаваемой информации. Передается сначала младший байт контрольной суммы, затем старший. Если значение байта равно 10h, то он повторяется 2 раза (как и в словах данных). <ПрК> - символ конца текста, длина 1 байт, значение - символ ASCII <ETX> (03h). Подскажите, пожалуйста, дилетанту: 1. Как сформировать и переслать пакет 41h, который является <Идентификатор>, при том, что передача в порт осуществляется массива типа char? 2. Как рассчитать <КС> - контрольную сумму и переслать сначала младший байт контрольной суммы, затем старший? Повторяюсь. 3. Как переслать данные с учетом того, что передается сначала младший байт слова данных, затем старший? Данные могут быть по типу от char до Double? |
|||
|
||||
vladimir_ad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 7.9.2007 Репутация: нет Всего: нет |
я поступил бы так:
1 создаем место для строки и используя sprintf и тд заполняем ее данными. Далее остается отправить строку в коммуникационный порт; 2 указатель на передаваемые данные интерпретируем как указатель на слово и суммируем содержимое буфера данных; 3 указатель на передаваемые данные интерпретируем как указатель на char и последовательно печатаем в нашу строку. |
|||
|
||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
1. А что тебя тут смущает-то? Диапазон значений char (на платформе x86) лежит от 00h до FFh, и 41h сюда влезает только так...
2. Насчёт расчёта КС -- не знаю, нужно её алгоритм в документации смотреть. Может, она -- простое суммирование по модулю 2, может -- CRC32. Непонятно. Что касается разбить КС на два char -- вот код:
Как-то так... |
|||
|
||||
vladimir_ad |
|
||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 7.9.2007 Репутация: нет Всего: нет |
![]()
![]() |
||||
|
|||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
Я тогда ещё не проснулся.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |