* Байты, необходимые для выполнения команды (минимальное число — 0).
** Байты, необходимые для размещения добавочных байтов «пробел» (минимальное число — 0)
.
Ч
Черт. 20
ерт. 19Общие требования
Крейт-контроллер обычно поджидает заглавный байт. Последова ₽льный драйвер посылает командное сообщение (см. разд. 13), состоящее из заглавного байта, командного и информационного байтов, контрольного байта, последовательности байтов «Пробел» и конечного байта. Крейт- контроллер опознает заглавный байт, адресованный ему, принимает и контролирует команду и данные, выполняет команду и посылает ответ в периоде пространства и, наконец, заканчивает запись событий, когда он принимает конечный байт.
С о с т о я н и е поиска заглавного байта
Эта последовательность предполагает, что крейт-контроллер принял ранее один или более разграничительных байта (конечный или конечный контрольный байт предыдущего сообщения, за которым, возможно, следует один или более байтов ожидания) и ожидает заглавный байт в начале нового сообщения.
Когда крейт-контроллер ждет заглавный байт, он должен ретранслировать каждый байт, который он принимает, а также проверять содержимое каждого байта в целях выполнения соответствующего действия, а именно:
если крейт-контроллер принимает разграничительный байт (с разрядом 7-1 и правильной четностью байта), он должен остаться в ожидании заглавного байта и дать разрешение на выдачу своих сообщений о требовании обслуживания;
если крейт-контроллер принимает неразграничительный байт (с разрядом 7-0, верной четностью, а поле адреса крейта соответствует его 6-разрядному адресу), он должен воспринять его как заглавный байт командного сообщения, адресованного ему.
Он должен запретить выдачу своих сообщений о требовании обслуживания и приготовиться принять остальную часть командного сообщения;
если крейт-контроллер принимает какой-нибудь другой байт, кроме разграничительного или заглавного байта сообщения, адресованного ему, он должен воспринять его как заглавный байт сообщения для (или от) другого контроллера. Он должен запретить выдачу своих сообщений о требовании обслуживания и ретранслировать последующее сообщение без изменений.
С о с т о я н и е приема командного сообщения
При приеме командного сообщения адресуемый крейт-контроллер должен передать сокращенную форму командного сообщения (см. 13.2), состоящего только из заглавного и конечного байта, за которым следует ряд байтов ожидания, необходимых для подготовки им ответного сообщения (см. разд. 14).
Адресуемый последовательный крейт-контроллер должен использовать состояние разрядов SF16 и SF8 в поле функции командного сообщения (см. 16.4) для определения, ожидается ли контрольный байт как пятый (если8Р16 = 0 и SF8 = 1) или как девятый байт (если SF16=1hSF8 = 0) принимаемого сообщения.
Адресуемый крейт-контроллер должен проверить четность по столбцам принятого командного сообщения от заглавного байта до контрольного байта включительно. Он также должен проверить нечетность отдельно по каждому байту.
Адресуемый крейт-контроллер может проверить, равно ли «00» содержимое поля идентификации типа сообщения (см. 16.7).
С о с т о я н и е выполнения команды
Адресуемый крейт-контроллер должен выполнять команду и посылать соответствующее ответное сообщение, если удовлетворены следующие условия:
данные побайтного контроля и контроля четности по столбцам верны;
данные Ml-поля (если это проверено) верны;
крейт-контроллер находится в режиме работы с магистралью (on-line) (см. 48.1); если он автономен (off-line), или же команда адресуется к его внутренним функциональным узлам;
крейт-контроллер находится в режиме обхода (см. 48.2) или, если он находится в режиме обхода, то данная команда является командой, сбрасывающей этот режим.
В противном случае последовательный крейт-контроллер не должен выполнять команду.
Состояние передачи ответа
Если адресуемый крейт-контроллер остается в состоянии синхронизации сообщений (и в состоянии синхронизации байта, если таковое требуется) во время цикла команда/ответ, он должен послать ответное сообщение.
Если крейт-контроллер выполняет команду, он должен послать ответное сообщение с. форматом, соответствующим коду функции и с содержимым результатов операции. Цикл ответного сообщения не должен начинаться до того, как установлены ответы 0 и X (и данные чтения, если таковые имеются). Если выполнение команды включает операцию на магистрали крейта, передача ответного сообщения не должна начинаться раньше времени приведенного на черт. 9 МЭК 516.
Если крейт-контроллер не выполняет команду из-за того, что данные для контроля по четности или проверки Ml-поля (см. условия а и б пункта 18.3) неверные, он должен послать трехбайтовое ответное сообщение об ошибке (см. 6.2).
Если крейт-контроллер не выполняет команды из-за того, что не соблюдены условия, касающиеся автономного режима работы магистрали крейта или режима обхода (см. условия в и г пункта 18.3), он должен Послать ответное сообщение с форматом, соответствующим коду функции и с разрядом SX в состоянии логического «0» для указания, что контроллер не принял команду (см. 63.2).
Если команда не была выполнена, то можно начать передачу ответного сообщения, как только крейт-контроллер получит контрольный байт.
Для определения видов операций, связанных с сигналами исправления устройства обхода и устройства отключения, инициирование ответного сообщения задержано по отношению к выполнению команды (см. 48.2 и 48.3).
Следом за контрольным байтом последовательный драйвер передает, а крейт-контроллер принимает ряд байтов «Пробел», составляющих пространство ответа. Во многих типичных случаях синхронизации цикла канала крейта и скорости передачи данных последовательной магистрали выполнение команды может быть закончено до приема крейт-контроллером первого байта «Пробел». В этом случае крейт-контроллер может передать заглавный байт ответного сообщения, как только он получит первый байт «Пробел», затем передать байт состояния ответа, как только он получит второй байт «Пробел» и т. д.
'Каждый байт ответного сообщения должен быть передан адресуемым последовательным крейт-контроллером в ответ на принятый байт. После приема контрольного байта и до посылки заглавного байта ответного сообщения последовательный контроллер должен принять любые неразграничительные байты и передать байты ожидания. Крейт-контроллер должен принять любой полученный неразграничительный байт, пока он передает каждый байт ответного сообщения, а при передаче конечного контрольного байта, крейт-контроллер должен принять любой полученный байт, включая разграничительный байт.
Если адресуемый крейт-контроллер получает разграничительный байт после того, как он опознал заглавный байт командного сообщения, и до передачи конечного контрольного байта ответного сообщения, он должен выйти из цикла обмена команда/ответ и перейти в состояние потери синхронизации сообщения (см. 40.2).
В следующих трех подразделах описывается, что крейт-контроллер начинает генерировать ответное сообщение, как правило, когда получает первый байт «Пробел», и что он генерирует конечный контрольный байт, как только он получает конечный байт командного сообщения. В разд. 23 описаны другие допустимые условия, при которых крейт-контроллер принимает байты Пробел» до того, как он закончит выполнение команды в момент передачи и после передачи конечного контрольного байта.
Операция чтения
Последовательность байтов, передаваемых последовательным драйвером и крейт-контроллером, приведена на черт. 15 и 16 для поразрядно-последовательного и побайтно-последовательного режимов соответственно. Командное сообщение не включает поле записи данных. Ответное сообщение включает поле 24-разрядной информации чтения.
В поле функции командного сообщения разряды SF16 = 0 и SF8 = 0 обозначают операции чтения. Поэтому крейт-контроллер находит контрольный байт как пятый байт в полученном сообщении и выполняет контроль четности по столбцам по первым пяти байтам сообщения.
Операция записи
Последовательность байтов, передаваемых последовательным драйвером и крейт-контроллером, приведена на черт. 17 и 18 для поразрядно-последовательного и побайтно-последовательного режимов соответственно. Командное сообщение включает поле 24-разрядной информации записи. Ответное сообщение не включает поле данных чтения.
В поле функции командного сообщения разряды SF16 = 1 и SF8 = 0 обозначают операции записи. Поэтому крейт-контроллер находит контрольный байт как девятый байт полученного сообщения и выполняет контроль четности по столбцам в первых девяти байтах сообщения.
Операция управления
Последовательность байтов, передаваемых последовательным драйвером и крейт-контроллером, приведена на черт. 19 и 20 для поразрядно-последовательного и побайтно-последовательного режимов соответственно. Ни командное, ни ответное сообщения поле данных не включает.
В поле функции командного сообщения разряд SF8 = 1 обозначает операцию управления (ни чтение, ни запись), и поэтому крейт-контроллер ждет контрольный байт как пятый байт в полученном сообщении и выполняет контроль четности по столбцам в первых пяти байтах сообщения.
Сокращенное командное сообщение
Адресуемый крейт-контроллер должен передавать сокращенное командное сообщение в ответ на полученное командное сообщение, состоящее только из заглавного байта (содержащего поле адреса крейта) и конечного байта.
Такая практика отражена в последовательности команда/ответ, приведенной на черт. 15—20, и она является обязательным свойством крейт-контроллера типа L2 (см. приложение А, пункт А3.2). Она рекомендована для всех других крейт-контроллеров по следующим причинам. Только один крейт-контроллер может реагировать на командное сообщение, даже если, например, тот же адрес крейта предназначен более чем одному крейту. Последовательный ряд разграничительных байтов, следующий за сокращенным командным сообщением, дает возможность указать начало ответного сообщения, а также обеспечивает возможность для прямоточных (прозрачных) крейт-контроллсров генерировать запросы (см. 24) и восстанавливать синхронизм байтов (см. 41.3).
Однако в некоторых областях применения требуется, чтобы адресуемый крейт-контроллер ретранслировал командное сообщение до (и включительно) контрольного байта. В этих случаях необходимо предусмотреть соответствующие крейт-контроллеры и последовательные драйверы, но они вполне могут сосуществовать на одном и том же последовательном канале с другими контроллерами, которые генерируют рекомендуемое сокращенное командное сообщение.
Если последовательный крейт-контроллер не передает сокращенную форму командного сообщения, то он должен передать по крайней мере один разграничительный байт в ответ на полученный байт непосредственно перед передачей заглавного байта ответного сообщения.
Пространство ответа
Этот раздел охватывает некоторые дополнительные аспекты байтов «Пробел», генерированных последовательным драйвером во время передачи командного сообщения, которые частично или полностью заменяются ответным сообщением от адресуемого крейт-контроллера.
3 а в е р ш е н и е цикла операций магистрали крейта
Если период байта длинный по сравнению со временем выполнения команды, адресуемый крейт-контроллер готов послать ответ до того, как он получит первый байт «Пробел». При этих условиях первый байт ответного сообщения может быть передан крейт-контроллером вместо первого байта «Пробел».
В противном случае крейт-контроллер принимает один или более байтов «Пробел» перед тем, как он посылает ответ, и количество дополнительных байтов «Пробел», обозначенных знаком «*» на черт. 15—20, не равно нулю. Крейт-контроллер передает байты ожиданий вместо полученных байтов «Пробел», пока он не выполнит команду. Затем он передает первый байт ответного сообщения вместо следующего байта «Пробел».
Окончание цикла команд a/о т в е т
В одном режиме последовательный драйвер продолжает генерировать дополнительные байты «Пробел» до тех пор, пока он не получит ответного сообщения. Затем он генерирует конечный байт для окончания цикла. Этот режим обладает таким преимуществом, что он устраняет необходимость контроля со стороны последовательного драйвера точного количества байтов «Пробел». Его недостатком является то, что он снижает возможность генерировать запросы от адресуемого крейт-контроллера; во избежание блокировки требуются меры предосторожности, если команда адресуется несуществующему крейту. Количество дополнительных байтов «Пробел», обозначенных знаком «**» на черт. 15—20, не равно нулю, и крейт-контроллер передает байты ожидания вместо полученных байтов «Пробел».
В другом из возможных режимов последовательный драйвер генерирует расчетное число байтов «Пробел», а затем заканчивает цикл посылкой конечного байта. Он продолжает генерировать байты ожидания, пока не получит ответного сообщения. В этом режиме имеется немного дополнительных байтов «Пробел» или совсем нет ни одного.
Оба режима завершения цикла команда/ответ приводят к простому восстановлению после ошибок (разд. 64), так как каждый цикл завершается до того, как начат следующий.
Возможен режим соответствующий высокой производительности с низким коэффициентом ошибки, когда последовательный драйвер не ждет получения ответа на командное сообщение, прежде чем начнет генерировать следующий. В этом режиме последовательный драйвер генерирует точный минимум байтов «Пробел», в результате чего адресуемый крейт-контроллер генерирует конечный контрольный байт ответного сообщения, когда он получает конечный байт командного сообщения. В условиях, когда ошибок нет, последовательный драйвер, работая в этом режиме, передает последовательность командных сообщений и принимает соответствующую последовательность ответных сообщений в том же относительном порядке, но, возможно, значительно позже и со вставленными запросами. В данном режиме нельзя полагаться на повторное чтение в процессе восстановления от ошибок передачи.