2 - Расчётно-пояснительная записка (1061386), страница 2
Текст из файла (страница 2)
Количество бит данных может составлять 5, 6, 7 или 8 (5- и 6-битные форматы распространены незначительно). Количество стоп-бит может быть 1, 1,5 или 2 (“полтора бита” означает только длительность стопового интервала).
В данной работе предоставляются следующие варианты передачи данных:
-
скорость передачи данных: 2400, 4800 и 9600;
-
количество стоповых бит: 1, 2, 1.5;
-
бит четности: нет, чёт, нечёт, маркер, пробел;
-
число информационных битов: 8, 7, 6, 5;
-
таймаут ReadTotalTimeoutConstant: 1000 мс;
-
таймаут WriteTotalTimeoutConstant: 1000 мс.
3.1.4. Реализация физического уровня
3.1.4.1. Открытие порта
В ОС Windows доступ к COM-портам предоставляется посредством файловых интерфейсов. В данной работе доступ предоставляется с помощью функций, использующих эти интерфейсы:
-
OpenPort – используя функцию WinAPI CreateFileA возвращает значение типа HANDLE открытого порта. В случае неудачи открытия порта возвращает системное значение INVALID_HANDLE_VALUE;
-
ListenPort – запускает поток (Thread) прослушивания порта для обнаружения факта передачи файла, осуществления рукопожатия и приёма файла.
В функции OpenPort настраиваются значения таймаутов, которые необходимы для правильной работы функций чтения из порта и записи в порт. В программе определяются следующие значения: ReadTotalTimeoutConstant определяет срок ожидания в миллисекундах для завершения операции чтения из порта, WriteTotalTimeoutConstant определяет срок ожидания в миллисекундах для завершения операции записи в порт.
3.1.4.2. Закрытие порта
Закрытие порта происходит посредством стандартной функции WinAPI CloseHandle, которая возвращает логическое значение true, если порт закрыт, и false, если при закрытии порта произошла ошибка.
3.1.4.3. Передача данных
Передача данных осуществляется вызовом функции SendFile, принимающая в качестве параметра строковое значение имени файла.
3.1.4.4. Прием данных
Прием данных реализуется в потоке прослушивания порта. Сначала обнаруживается факт передачи, затем следует процедура рукопожатия, после которой принимается имя файла, а затем его содержимое.
3.2. Канальный уровень
3.2.1. Протокол связи
Важнейшими понятиями протокола связи являются управление ошибками и управление потоком. В основном протокол содержит набор соглашений или правил, которого должны придерживаться обе стороны связи для обеспечения получения и корректной интерпретации информации, передаваемой между двумя сторонами. Таким образом, помимо управления ошибками и потоком протокол связи регулирует также следующие вопросы:
-
формат передаваемых данных (число битов на каждый элемент и тип используемой схемы кодирования)
-
тип и порядок сообщений, подлежащих обмену для обеспечения (свободной от ошибок и дубликатов) передачи информации между двумя взаимодействующими сторонами.
Например, перед началом передачи данных требуется установить соединение между двумя сторонами, тем самым проверяется доступность приемного устройства и его готовность воспринимать данные. Для этого передающее устройство посылает специальную команду: запрос на соединение и ожидает ее приема с другого COM-порта.
3.2.2. Защита передаваемой информации
При передаче данных по линиям могут возникать ошибки, вызванные электрическими помехами, связанными, например, с шумами, порожденными коммутирующими элементами сети. Эти помехи могут вызвать множество ошибок в цепочке последовательных битов.
Метод четности/нечетности или полученная в развитие этого метода контрольная сумма блока не обеспечивают надежного обнаружения пачки ошибок. Для этих случаев чаще всего применяется альтернативный метод, основанный на полиномиальных кодах. Полиномиальные коды используются в схемах покадровой (или поблочной) передачи. Это означает, что для каждого передаваемого кадра формируется один-единственный набор контрольных разрядов, значения которых зависят от фактического содержания кадра.
Приемник выполняет те же вычисления с полным содержимым кадра; если при передаче ошибки не возникли, то в результате вычислений должен быть получен заранее известный ответ. Если этот ответ не совпадает с ожидаемым, то это указывает на наличие ошибок.
В данной программе передаваемая информация защищена циклическим кодом Х3+X+1.
3.2.3. Циклическое кодирование
Алгоритм кодирования состоит в том, что каждый байт, подлежащий кодированию, разбивается на части по 4 бита, после чего делится на полином, и результат деления, 1 байт, передаётся по сети, т.е. в итоге из каждого байта получается два. На принимающей стороне производится обратные операции, определяем частное и остаток. По остатку определяем вектор ошибки, если остаток нулевой, то данные дошли безошибочно, если же ненулевой, то выводится сообщение об ошибке.
3.2.4. Передача данных
При выборе файла и дальнейшей его отправке ведущая станция формирует сначала заголовочный кадр и посылает его. Станция-получатель обрабатывает этот кадр, предоставляя пользователю выбор директории сохранения файла. Если все прошло успешно, станция-получатель отправляет положительную квитанцию. После этого начинается обмен станциями кадрами, ведущая станция посылает информационные кадры, а станция-получатель после каждого принятого кадра отправляет положительную квитанцию. В случае ошибки в информационном кадре компьютер – станция-получатель передаёт ведущей станции отрицательную квитанцию, и она повторяет передачу сообщения. Когда переданы все информационные кадры, ведущая станция посылает пустой заголовочный кадр, который сигнализирует об успешной передаче файла.
Установление логического соединения происходит путем отправления L-кадра. Станция-получатель сигнализирует о наличии соединения ответным посылом L-кадра.
Разрыв логического соединения происходит путем отправления U-кадра. Станция-получатель сигнализирует о разрыве соединения ответным посылом U-кадра.
3.2.5. Форматы кадров
Рисунок 6. Формат кадра
Кадр содержит следующие поля:
1) стартовый байт – последовательность (FF)h, то есть последовательность (11111111) в двоичной системе;
2) тип кадра - поле, содержащее код типа кадра:
-
0x00 – I-кадр (информационный кадр);
-
0x01 – L-кадр (кадр установки логического соединения);
-
0x02 – U-кадр (кадр разрыва логического соединения);
-
0x03 – ACK (кадр подтверждения безошибочного приема тестового сообщения – положительная квитанция);
-
0x04 – NoACK (кадр запроса повторения последнего отправленного кадра);
-
0x05 – HED (заголовочный кадр, содержащий информацию об имени файла и его размере);
3) длина поля данных;
4) данные – передаваемые в кадре;
5) стоповый байт – последовательность (FF)h, то есть последовательность (11111111) в двоичной системе.
3.3. Прикладной уровень
Прикладной уровень представляет собой графический интерфейс пользователя (GUI).
Рисунок 7. Главное окно программы
Рисунок 8. Окно "О программе"