В данном подразделе рассматриваются наиболее общие вопросы работы терминала в различных режимах. Приводимые алгоритмы могут изменяться в зависимости от конкретного применения и состава аппаратных средств.
Контроллер канала.
Основной задачей КК является инициализация передач информации в канале и контроль их прохождения. В связи с этим КК должен иметь возможность считывать необходимую информацию из подсистемы, передавать ее в МК и наблюдать за сообщениями, передаваемыми оконечными устройствами. В зависимости от необходимости КК может осуществлять контроль поступающих сообщений с различной глубиной и использовать различные способы восстановления связи при обнаружении сбоев. Наиболее типичным вариантом является повторная инициализация, которая используется для устранения наиболее частых сбоев случайного характера. При обнаружении повторных сбоев управление передается программе процессора подсистемы, что обычно осуществляется через прерывание.
Алгоритм работы терминала, работающего в режиме КК, приведен на рис. 2.11. Рассмотрен вариант обеспечения одного цикла передачи в канале без учета возможного выполнения контроллером служебных команд, получаемых из подсистемы (<Останов>, <Безусловный переход> и т. д.).
Управляющая информация может быть представлена как в формате КС стандарта, так и в виде слов управления, содержащих дополнительные поля, например поле, определяющее тип обмена, код числа повторов, адрес данных в ОЗУ и т.д.
В зависимости от требований системы ответные слова, поступающие в КК, могут автоматически передаваться в подсистему. На рис. 2.15 рассмотрен вариант алгоритма КК, работающего на одну ЛПИ. При использовании резервных линий КК может осуществлять по ним повторные передачи, если обнаружен сбой или неисправность в основном канале.
Поступающие в КК ОС контролируются на достоверность. Под контролем достоверности ОС понимается контроль на правильность формы и полярности синхроимпульса, четности слов и достоверность кода <Манчестер-2>. При обнаружении в ОС установленных разрядов (за исключением ответов на команды <Передать ОС> и <Передать последнее КС>) контроллером могут быть выбраны ситуации, означающие сбой при обмене. Например, в ОС установлен разряд <Ошибка в сообщении> при обмене КК- ОУ. Возможно неправильное сочетание разрядов ОС. Например, одновременно установлены разряды <Принято управление каналом> и <Получена групповая команда>. В этом случае возможна попытка повторного обмена.
При контроле достоверности массива ИС помимо контроля числа поступающих слов и их достоверности осуществляется контроль непрерывности передачи массива.
В некоторых случаях используется так называемый <Эхо-контроль> передачи. Передаваемые в МК слова одновременно контролируются декодером КК на достоверность. Использование эхо-контроля позволяет, с одной стороны, осуществлять проверку исправности кодирующей и декодирующей аппаратуры самого КК, а с другой - позволяет получить информацию о состоянии ЛПИ. Ошибка по эхо-контролю может означать появление помехи или неисправности в линии. В этом случае целесообразно осуществить попытку повторной передачи или перейти на резервную ЛПИ. Перед тем как выдать в МК командное слово, КК может осуществлять прослушивание ЛПИ. В самом деле, нет смысла осуществлять передачу, если известно, что в ЛПИ наблюдается помеха или генерация. В этом случае важную роль играет правильный выбор критериев определения помехи и алгоритма действий контроллера при ее обнаружении.
Полная дешифрация установленных разрядов состояния ОС обычно осуществляется управляющим процессором КК. Установка определенных разрядов может вызвать переход в программе КК. Так, при обнаружении разряда <Запрос на обслуживание> может быть осуществлен переход на подпрограмму обслуживания данного ОУ.
В алгоритме, представленном на рис. 2.11, не показана реакция КК на обнаружение установленного в ОС разряда <Подсистема занята>. Если ОУ установило этот разряд в ответ на команду передачи массива данных, информационные слова не будут вы даны вслед за ОС, однако контроллер не должен воспринимать эту ситуацию как ошибку обмена. В этом случае повторная передача в данное ОУ не имеет смысла до освобождения его подсистемы.
В ГОСТ 26765.52-87 принят подход, по которому все сообщение считается недостоверным и бракуется, если обнаружена ошибка хотя бы в одном ИС. Существует два основных варианта алгоритма передачи слов данных в подсистему. В одном случае слова передаются в подсистему по мере их поступления в ОУ, а сигнал, определяющий достоверность данных, выдается после приема последнего слова. В этом случае в подсистеме должны быть предусмотрены средства, позволяющие блокировать использование недостоверной информации. Возможно использование в качестве буфера стека типа <первым пришел первым ушел> (FIFO) на 32 слова. В этом случае в подсистему выдаются только достоверные данные.
Помимо рассмотренных возможны и другие ситуации, когда передача информационных слов в подсистему не будет осуществляться. В том случае, если в ОС установлен разряд <Подсистема занята>, прием и передача массивов данных невозможны; получив ОС, контроллер должен обратиться в данное ОУ после некоторой паузы. Получив достоверное КС, оконечное устройство сбрасывает все разряды ОС, а затем вновь устанавливает их, если причины, вызывавшие их установку, сохранились. Исключением являются две команды <Передай ОС> (код 00010) и <Передай последнее КС> (код 10010).
Наиболее сложен режим передачи информации между двумя ОУ. В этом случае ОУ, принимающее информацию, должно контролировать паузу между КС и ОС передающего терминала и анализировать само ОС.
Наибольшее распространение получил алгоритм, по которому принимающее информацию ОУ запоминает адресную часть второго КС и сравнивает ее с адресом, переданным в ОС. Кроме того, ОУ может анализировать и такие разряды ОС как <Неисправность терминала>, <Неисправность подсистемы>, <Ошибка в сообщении> и <Подсистема занята>. Два первых разряда несут информацию о возможной недостоверности передаваемых данных. Принимающее ОУ должно определить возможность передачи таких данных в подсистему.
Для устранения возможной генерации в ОУ должна быть предусмотрена возможность автоматической блокировки передатчика после определенного времени непрерывной передачи в канал. Блокировка передатчика возможна и по специальной команде, передаваемой контроллером. В этом случае также возможно несколько вариантов алгоритма функционирования ОУ. Наиболее простым является алгоритм, по которому блокировка передатчика по какой-либо линии означает отключение ОУ от данной ЛПИ. Однако в этом случае сбой в схеме управления может привести к тому, что ОУ отключится от всех ЛПИ и установить терминал в рабочее состояние со стороны контроллера будет невозможно. Для устранения такой ситуации может быть использована команда <Установить исходное состояние> (код 01000). Получив такое КС по заблокированной шине, ОУ снимает блокировку передатчика.
Таким образом, выбор алгоритма функционирования терминала осуществляется с учетом обязательных требований стандарта и особенностей конкретной системы.