* Байты, необходимые для выполнения команды (ми­нимальное число — 0).

** Байты, необходимые для размещения добавочных байтов «пробел» (минимальное число — 0)

.

Ч

Черт. 20

ерт. 19
  1. Общие требования

Крейт-контроллер обычно поджидает заглавный байт. Последова ₽льный драйвер посылает командное сообщение (см. разд. 13), состоящее из заглавного байта, командного и информационно­го байтов, контрольного байта, последовательности байтов «Пробел» и конечного байта. Крейт- контроллер опознает заглавный байт, адресованный ему, принимает и контролирует команду и дан­ные, выполняет команду и посылает ответ в периоде пространства и, наконец, заканчивает запись событий, когда он принимает конечный байт.

  1. С о с т о я н и е поиска заглавного байта

Эта последовательность предполагает, что крейт-контроллер принял ранее один или более раз­граничительных байта (конечный или конечный контрольный байт предыдущего сообщения, за которым, возможно, следует один или более байтов ожидания) и ожидает заглавный байт в начале нового сообщения.

Когда крейт-контроллер ждет заглавный байт, он должен ретранслировать каждый байт, который он принимает, а также проверять содержимое каждого байта в целях выполнения соответствующего действия, а именно:

  • если крейт-контроллер принимает разграничительный байт (с разрядом 7-1 и правиль­ной четностью байта), он должен остаться в ожидании заглавного байта и дать разрешение на выдачу своих сообщений о требовании обслуживания;

  • если крейт-контроллер принимает неразграничительный байт (с разрядом 7-0, верной четностью, а поле адреса крейта соответствует его 6-разрядному адресу), он должен воспри­нять его как заглавный байт командного сообщения, адресованного ему.

Он должен запретить выдачу своих сообщений о требовании обслуживания и пригото­виться принять остальную часть командного сообщения;

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

  1. С о с т о я н и е приема командного сообщения

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

Адресуемый последовательный крейт-контроллер должен использовать состояние разря­дов SF16 и SF8 в поле функции командного сообщения (см. 16.4) для определения, ожидает­ся ли контрольный байт как пятый (если8Р16 = 0 и SF8 = 1) или как девятый байт (если SF16=1hSF8 = 0) принимаемого сообщения.

Адресуемый крейт-контроллер должен проверить четность по столбцам принятого ко­мандного сообщения от заглавного байта до контрольного байта включительно. Он также должен проверить нечетность отдельно по каждому байту.

Адресуемый крейт-контроллер может проверить, равно ли «00» содержимое поля идентифика­ции типа сообщения (см. 16.7).

  1. С о с т о я н и е выполнения команды

Адресуемый крейт-контроллер должен выполнять команду и посылать соответствующее ответное сообщение, если удовлетворены следующие условия:

  1. данные побайтного контроля и контроля четности по столбцам верны;

  2. данные Ml-поля (если это проверено) верны;

  3. крейт-контроллер находится в режиме работы с магистралью (on-line) (см. 48.1); если он автономен (off-line), или же команда адресуется к его внутренним функциональным узлам;

  4. крейт-контроллер находится в режиме обхода (см. 48.2) или, если он находится в режи­ме обхода, то данная команда является командой, сбрасывающей этот режим.

В противном случае последовательный крейт-контроллер не должен выполнять команду.

  1. Состояние передачи ответа

Если адресуемый крейт-контроллер остается в состоянии синхронизации сообщений (и в состоянии синхронизации байта, если таковое требуется) во время цикла команда/ответ, он должен послать ответное сообщение.

Если крейт-контроллер выполняет команду, он должен послать ответное сообщение с. форматом, соответствующим коду функции и с содержимым результатов операции. Цикл от­ветного сообщения не должен начинаться до того, как установлены ответы 0 и X (и данные чтения, если таковые имеются). Если выполнение команды включает операцию на магистрали крейта, передача ответного сообщения не должна начинаться раньше времени приведенно­го на черт. 9 МЭК 516.

Если крейт-контроллер не выполняет команду из-за того, что данные для контроля по четности или проверки Ml-поля (см. условия а и б пункта 18.3) неверные, он должен послать трехбайтовое ответное сообщение об ошибке (см. 6.2).

Если крейт-контроллер не выполняет команды из-за того, что не соблюдены условия, касающиеся автономного режима работы магистрали крейта или режима обхода (см. условия в и г пункта 18.3), он должен Послать ответное сообщение с форматом, соответствующим коду функции и с разрядом SX в состоянии логического «0» для указания, что контроллер не при­нял команду (см. 63.2).

Если команда не была выполнена, то можно начать передачу ответного сообщения, как только крейт-контроллер получит контрольный байт.

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

Следом за контрольным байтом последовательный драйвер передает, а крейт-контроллер при­нимает ряд байтов «Пробел», составляющих пространство ответа. Во многих типичных случаях син­хронизации цикла канала крейта и скорости передачи данных последовательной магистрали выпол­нение команды может быть закончено до приема крейт-контроллером первого байта «Пробел». В этом случае крейт-контроллер может передать заглавный байт ответного сообщения, как только он получит первый байт «Пробел», затем передать байт состояния ответа, как только он получит второй байт «Пробел» и т. д.

'Каждый байт ответного сообщения должен быть передан адресуемым последовательным крейт-контроллером в ответ на принятый байт. После приема контрольного байта и до посыл­ки заглавного байта ответного сообщения последовательный контроллер должен принять лю­бые неразграничительные байты и передать байты ожидания. Крейт-контроллер должен при­нять любой полученный неразграничительный байт, пока он передает каждый байт ответного сообщения, а при передаче конечного контрольного байта, крейт-контроллер должен принять любой полученный байт, включая разграничительный байт.

Если адресуемый крейт-контроллер получает разграничительный байт после того, как он опознал заглавный байт командного сообщения, и до передачи конечного контрольного байта ответного сообщения, он должен выйти из цикла обмена команда/ответ и перейти в состояние потери синхронизации сообщения (см. 40.2).

В следующих трех подразделах описывается, что крейт-контроллер начинает генерировать от­ветное сообщение, как правило, когда получает первый байт «Пробел», и что он генерирует конеч­ный контрольный байт, как только он получает конечный байт командного сообщения. В разд. 23 описаны другие допустимые условия, при которых крейт-контроллер принимает байты Пробел» до того, как он закончит выполнение команды в момент передачи и после передачи конечного контрольного байта.

  1. Операция чтения

Последовательность байтов, передаваемых последовательным драйвером и крейт-контролле­ром, приведена на черт. 15 и 16 для поразрядно-последовательного и побайтно-последовательного режимов соответственно. Командное сообщение не включает поле записи данных. Ответное сооб­щение включает поле 24-разрядной информации чтения.

В поле функции командного сообщения разряды SF16 = 0 и SF8 = 0 обозначают операции чтения. Поэтому крейт-контроллер находит контрольный байт как пятый байт в полученном сооб­щении и выполняет контроль четности по столбцам по первым пяти байтам сообщения.

  1. Операция записи

Последовательность байтов, передаваемых последовательным драйвером и крейт-контролле­ром, приведена на черт. 17 и 18 для поразрядно-последовательного и побайтно-последовательного режимов соответственно. Командное сообщение включает поле 24-разрядной информации записи. Ответное сообщение не включает поле данных чтения.

В поле функции командного сообщения разряды SF16 = 1 и SF8 = 0 обозначают операции записи. Поэтому крейт-контроллер находит контрольный байт как девятый байт полученного сооб­щения и выполняет контроль четности по столбцам в первых девяти байтах сообщения.

  1. Операция управления

Последовательность байтов, передаваемых последовательным драйвером и крейт-контролле­ром, приведена на черт. 19 и 20 для поразрядно-последовательного и побайтно-последовательного режимов соответственно. Ни командное, ни ответное сообщения поле данных не включает.

В поле функции командного сообщения разряд SF8 = 1 обозначает операцию управления (ни чтение, ни запись), и поэтому крейт-контроллер ждет контрольный байт как пятый байт в получен­ном сообщении и выполняет контроль четности по столбцам в первых пяти байтах сообщения.

  1. Сокращенное командное сообщение

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

Такая практика отражена в последовательности команда/ответ, приведенной на черт. 15—20, и она является обязательным свойством крейт-контроллера типа L2 (см. приложение А, пункт А3.2). Она рекомендована для всех других крейт-контроллеров по следующим причинам. Только один крейт-контроллер может реагировать на командное сообщение, даже если, например, тот же адрес крейта предназначен более чем одному крейту. Последовательный ряд разграничительных байтов, следующий за сокращенным командным сообщением, дает возможность указать начало ответного сообщения, а также обеспечивает возможность для прямоточных (прозрачных) крейт-контроллсров генерировать запросы (см. 24) и восстанавливать синхронизм байтов (см. 41.3).

Однако в некоторых областях применения требуется, чтобы адресуемый крейт-контроллер ретранслировал командное сообщение до (и включительно) контрольного байта. В этих случаях необходимо предусмотреть соответствующие крейт-контроллеры и последовательные драйверы, но они вполне могут сосуществовать на одном и том же последовательном канале с другими контролле­рами, которые генерируют рекомендуемое сокращенное командное сообщение.

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

  1. Пространство ответа

Этот раздел охватывает некоторые дополнительные аспекты байтов «Пробел», генерированных последовательным драйвером во время передачи командного сообщения, которые частично или полностью заменяются ответным сообщением от адресуемого крейт-контроллера.

  1. 3 а в е р ш е н и е цикла операций магистрали крейта

Если период байта длинный по сравнению со временем выполнения команды, адресуемый крейт-контроллер готов послать ответ до того, как он получит первый байт «Пробел». При этих условиях первый байт ответного сообщения может быть передан крейт-контроллером вместо перво­го байта «Пробел».

В противном случае крейт-контроллер принимает один или более байтов «Пробел» перед тем, как он посылает ответ, и количество дополнительных байтов «Пробел», обозначенных знаком «*» на черт. 15—20, не равно нулю. Крейт-контроллер передает байты ожиданий вместо полученных байтов «Пробел», пока он не выполнит команду. Затем он передает первый байт ответного сообщения вместо следующего байта «Пробел».

  1. Окончание цикла команд a/о т в е т

В одном режиме последовательный драйвер продолжает генерировать дополнительные байты «Пробел» до тех пор, пока он не получит ответного сообщения. Затем он генерирует конечный байт для окончания цикла. Этот режим обладает таким преимуществом, что он устраняет необходимость контроля со стороны последовательного драйвера точного количества байтов «Пробел». Его недо­статком является то, что он снижает возможность генерировать запросы от адресуемого крейт-кон­троллера; во избежание блокировки требуются меры предосторожности, если команда адресуется несуществующему крейту. Количество дополнительных байтов «Пробел», обозначенных знаком «**» на черт. 15—20, не равно нулю, и крейт-контроллер передает байты ожидания вместо полученных байтов «Пробел».

В другом из возможных режимов последовательный драйвер генерирует расчетное число бай­тов «Пробел», а затем заканчивает цикл посылкой конечного байта. Он продолжает генерировать байты ожидания, пока не получит ответного сообщения. В этом режиме имеется немного дополни­тельных байтов «Пробел» или совсем нет ни одного.

Оба режима завершения цикла команда/ответ приводят к простому восстановлению после ошибок (разд. 64), так как каждый цикл завершается до того, как начат следующий.

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