Опубликован: 05.11.2013 | Доступ: свободный | Студентов: 542 / 46 | Длительность: 11:51:00
Лекция 10:

Обмен данными и вопросы кодирования

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

Любые предложения люди понимают иначе, чем тот, кто их вносит.

Закон Чизхолма

Следствие:

Даже если ваше объяснение настолько ясно, что исключает всякое ложное толкование, все равно найдется человек, который поймет вас неправильно.

9.1. Соглашения о связи

При общении с формальными устройствами следует строго придерживаться принятых договоренностей - протоколов взаимодействия. Например, перед обращением к устройству надо проверить, что оно включено и не занято взаимодействием с другим партнером (с другой программой). Такое обычно возможно, если мы "тесно" связаны с устройством, живем в одном адресном пространстве, на одном компьютере.

Но это далеко не всегда так. Часто мы взаимодействуем с другим формальным партнером только через канал передачи данных. Да еще этот канал подвержен внешним воздействиям, которые могут исказить передаваемый сигнал. Тогда кроме соблюдения протокола важны еще и средства контроля приема/передачи данных.

Протокол подобного обмена обычно служит для посылки сообщения от одного источника к нескольким потребителям. Поэтому адрес (идентификационный код) источника включается в заголовок передаваемого блока данных. Для этой цели в начале передачи сообщения следует признак начала (STX), в который включают и идентификатор, и длину передаваемой последовательности.

Получив его, принимающая сторона может зарезервировать буфер необходимого размера для ввода сообщения, после чего отправляет приглашение к продолжению диалога (RTS). По окончании передачи источником данных посылается признак конца сообщения (ETX). В состав завершающей посылки обычно включается контрольная сумма. На переданное сообщение источником ожидается либо подтверждение (AK), либо указание на сбой в приеме данных (NAK). В последнем случае передача повторяется.

Любое принятое сообщение сначала контролируется на целостность, а уже потом расшифровывается (интерпретируется). Принимающая сторона может проверить и то, что отдельные элементы последовательности получены, и то, что все сообщение принято правильно (принятая контрольная сумма совпадает с рассчитанной по тексту сообщения).

При нарушении целостности партнеру обычно направляется просьба повторить посылку. Конечно, при большой "зашумленности" канала связи/передачи оба партнера будут все время переспрашивать друг друга, так и не произведя собственно обмен данными. Поэтому в сообщения стараются ввести такую избыточность, которая позволила бы в ряде случаев не только обнаружить искажение, но и исправить отдельные ошибки в принятом блоке данных.

9.2. Помехозащищенное кодирование

Первый уровень избыточности вводится на уровне передаваемых символов (8 бит), слов, размер которых может быть 16, 32, 64 бита в зависимости от "ширины" линии передачи данных. Например, для этого в состав символа, для кодирования которого используется 8 бит (256 возможных значений), добавляется дополнительный "контрольный" разряд. Этот избыточный бит не создает новых символов, но его значение устанавливается, например, так, чтобы сумма единиц в передаваемом коде была всегда четная.

Другими словами, складывая биты принятого символа по модулю два с учетом контрольного разряда, принимающая сторона должна всегда получать 0. При этом способе избыточного кодирования, передавая код 01001101, мы должны добавить контрольный разряд, равный 0, а для кода 11101100 контрольный разряд должен быть равным 1.

Такая система избыточного кодирования позволяет обнаружить неверно переданный символ, если в его коде произошла одна ошибка (пропуск - замена 1 на 0 или ложное срабатывание - замена 0 на 1).

Как правило, подобного контроля достаточно для фиксации ошибки при приеме. Далее можно запросить источник данных повторить неверно принятый символ. Однако в системах реального времени порой невозможно прервать прием. Связь устанавливается на большие расстояния, и у нас нет возможности ждать реакции приемника на каждый переданный символ.

Передающая сторона вынуждена непрерывно передавать пакет данных, надеясь, что ее верно поймут на стороне приема. В лучшем случае она может подождать реакции в конце передачи и повторить весь пакет заново. Часто бывает нужно не только обнаружить факт наличия ошибки в сообщении, но и постараться исправить его. Для одиночных ошибок для этого достаточно применить похожий прием добавления контрольного разряда и передать в конце сообщения контрольный байт (слово, значение контрольной суммы), разряды которого сформированы по тому же принципу, что и контрольный разряд символа.

Таблица 9.1(a). Пример сообщения из пяти байт
Разряды: 0 1 2 3 4 5 6 7 к.р.
0 байт 1 0 1 1 0 1 0 1 1
1 байт 1 1 1 0 0 1 0 1 1
2 байт 0 0 1 0 0 0 1 0 0
3 байт 1 1 1 1 0 0 1 0 1
4 байт 0 0 0 1 1 0 1 1 0
Контр.байт 1 0 0 1 1 0 1 1 1

В табл. 9.1(а) приведен пример кодирования по указанной схеме сообщения из пяти байт, контрольный разряд каждого из которых формируется по ранее упомянутому алгоритму. Для контроля передачи к сообщению добавлен шестой контрольный байт, значащие разряды которого дополняют соответствующие разряды переданного сообщения до четного количества единиц (в колонках).

При одиночной ошибке (табл. 9.1(б)) четвертого бита в первом байте мы легко установим, что байт был принят неверно. Количество единичных разрядов в нем оказалось при приеме нечетным (семь). Но мы не знаем, какой разряд был искажен.

Таблица 9.1(б). Пример сообщения с ошибкой
Разряды: 0 1 2 3 4 5 6 7 к.р.
0 байт 1 0 1 1 0 1 0 1 1
1 байт 1 1 1 0 0 1 0 1 1
2 байт 0 0 1 0 0 0 1 0 0
3 байт 1 1 1 1 0 0 1 0 1
4 байт 0 0 0 1 1 0 1 1 0
Контр.байт 1 0 0 1 1 0 1 1 1

Это может быть любой из информационных разрядов. А может, мы неверно приняли контрольный разряд байта? Выяснить это удастся только после приема контрольной суммы всего сообщения. Сам байт контрольной суммы дополнен контрольным разрядом и принят правильно (содержит шесть единиц). А при расчете контрольной суммы по колонкам (разрядам) сообщения мы поймем, что в четвертом разряде в контрольной сумме допущена ошибка.

Это позволяет установить, что при приеме первого байта сообщения четвертый разряд был искажен. Мы получили 1, а должны были получить 0.

Конечно, таким образом могут быть обнаружены и исправлены только единичные ошибки в сообщениях. Для более ненадежных линий связи приходится применять избыточные коды с более сложными алгоритмами обнаружения и устранения ошибок. Кроме того, надо помнить и соблюдать правила взаимодействия с партнерами, т.е. строго выполнять те соглашения о связи, которые оформляются в протоколах обмена.

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >