1. Формальные решения или соглашения по техническим вопросам, подготовленные Техническими комитетами, в которых представлены заинтересованные Национальные комитеты, выражают, по возможности наиболее точно, согласованное международное мнение по рассматриваемым стандартам.
2. Стандарты имеют статус рекомендаций для международного использования и приняты Национальными комитетами именно в этом смысле.
3. В целях распространения международной унификации, МЭК выражает пожелание, чтобы все Национальные комитеты приняли текст рекомендаций МЭК для своих национальных норм, насколько позволят национальные условия. Любое различие между рекомендацией МЭК и соответствующими национальными нормами должно быть, насколько возможно, ясно указано в последних.
4. МЭК не формулирует какие-либо процедуры, касающиеся маркировки в знак признания продукции, и не несет ответственности, когда продукция объявлена соответствующей одной из рекомендаций.
Настоящий стандарт подготовлен Техническим комитетом 45: Ядерное приборостроение. Текст стандарта основан на следующих документах:
Полную информацию о голосовании по одобрению этого стандарта можно получить из Отчета о голосовании, указанного выше.
В стандарте использована Публикация МЭК 935(1990): Фастбас - Модульная быстродействующая система сбора данных.
СТАНДАРТА
Настоящий стандарт определяет стандартные программы для доступа к системе Фастбас - стандартизованной модульной быстродействующей системе сбора данных и управления, определенной ГОСТ 34.340 - Фастбас - модульная быстродействующая система сбора данных.
Принято, что читатель знаком с системой Фастбас.
Стандартные программы (Рутины), определенные настоящим стандартом, применимы к системам Фастбас, соответствующим ГОСТ 34.340. Назначение документа - обеспечить разработчиков стандартными программами, имеющими единый смысл для всех пользователей, чтобы уменьшить дублирование в разработках программ и максимально повысить взаимозаменяемость в программах и аппаратуре Фастбас.
Пункты стандарта, в которых использовано слово "должен", являются обязательными.
Пункты, в которых использовано слово "следует", являются рекомендацией предпочтительной практики, которой нужно следовать, если нет серьезных причин к иным решениям.
Пункты, в которых использовано слово "можно", указывают на допустимые решения и оставляют разработчику свободу выбора.
Отдельные Воплощения стандарта, отнесенные к случаям, которые определены в этом стандарте как "зависящие от воплощения", должны быть ясно описаны в соответствующей документации.
Воплощение, противоречащее любому обязательному параграфу, нельзя рассматривать как воплощающее этот стандарт.
Для использования этого стандарта не требуется ни лицензий, ни иных разрешений.
В гл. 2 описаны некоторые основные положения, общие для всех Рутин.
Гл. 3 посвящена Рутинам, применяемым в связи с использованием Среды, с которой работает система Фастбас.
В гл. 4 описаны Операционные параметры, которые образуют часть Среды Фастбас.
В гл. 5 описаны буферные режимы, которые действующая программа использует для управления доступом к буферам данных пользователя.
В гл. 6 описаны Рутины для выполнения простых передач Фастбас.
В гл. 7 описаны Рутины для выполнения сложных передач Фастбас.
В гл. 8 описаны Рутины для выполнения примитивных действий Фастбас.
В гл. 9 описаны Рутины для обработки асинхронных событий в системе Фастбас, для реакций на запрос обслуживания и реакций на сообщения о прерывании.
В гл. 10 описаны Рутины, зависящие либо от системы, либо от порта.
В гл. 11 описаны отзывы Воплощения на ошибки. Описаны Рутины, управляющие отзывами, и Рутины для извлечения статусной информации о предыдущих действиях.
Гл. 12 содержит список всех кодов ошибок наряду со степенью их серьезности.
В настоящем стандарте использованы термины, имеющие смысл, специфический для системы Фастбас. Такие термины, как "принудительная передача", "широкая адресация", "Сегмент" и другие, определены в стандарте Фастбас. Их определения здесь не повторяются.
Рутины в этом стандарте определены как средство связи между "Пользователем", который их вызывает, и "Воплощением", которое вызываемо Рутиной. В сферу Фастбас-сессии входят понятия "Пользователь" или "Процесс пользователя". Некоторые общие термины определены ниже.
"Фастбас-действия" непосредственно управляют линиями в сегменте Фастбас или считывают с линий. Не все Воплощения Фастбас поддерживают все действия этого типа, возможные в принципе.
"Примитивным Фастбас-действием" является одно из следующих возможных логически завершенных поддействий:
Цикл арбитража.
Первичный адресный цикл.
Вторичный адресный цикл данных.
Цикл данных.
Освобождение устройства (Завершающая последовательность).
Освобождение магистрали.
Не все Воплощения в Фастбасе поддерживают исполнение каждого одиночного поддействия, но все Воплощения должны поддерживать Операции и Передачи так, как они определены ниже, чтобы их можно было квалифицировать как Воплощения этого стандарта.
"Операция" состоит из Первичного адресного цикла, за которым следует ноль или более Циклов данных и Завершающая последовательность.
"Простая операция" - это Операция, в которой первый Цикл данных после Первичного адресного цикла может определять только Вторичный адрес.
"Передача" состоит в получении Мастером владения магистралью, сопровождаемого исполнением одной или больше Операций с последующим освобождением магистрали.
"Простая передача" - это передача с исполнением единственной Простой операции.
"Контроллер" является зачинателем вызовов Фастбас-действий, описанных в этом стандарте.
"Порт" Фастбас связывает Контроллер с Сегментом Фастбас.
Между Контроллером и Сегментом Фастбас могут существовать множественные маршруты. Для различения разных маршрутов должны быть использованы идентификаторы портов port_id.
Понятие "Стандарт Фастбас", используемое здесь, ГОСТ 34.340 - Фастбас - модульная быстродействующая система сбора данных.
2.2.1. Обзор
Стандарт Фастбас определяет протокол, по которому Мастер сначала получает владение магистралью, устанавливает соединение с одним или несколькими Слугами, а затем передает данные. Мастер может прервать соединение со Слугами и, не оставляя контроль над Сегментом, может установить соединение с другим Слугой. В любой момент Мастер может освободить магистраль, чтобы другой Мастер мог получить управление магистралью сразу же после прекращения связки с адресатом.
Все эти действия имеют место в Среде, относительно которой Пользователь имеет некоторые средства управления. Именно степень управления, доступная Пользователю, будет изменяться от одного Воплощения к другому. Контроллер может или может не быть способным изменять параметры, влияющие на Фастбас-действия, а также и система программирования процессора может или не может допускать использование определенных операций или техники. Чтобы сделать возможным использование широкого диапазона аппаратных и программных ресурсов, которые могут быть доступны при различных приложениях, в этом стандарте проведены различия между действиями, которые имеют место в собственно Сегменте Фастбас, и Средой, в которой происходят действия. Рутины определены так, чтобы управлять как характером Среды, так и действиями, происходящими в Сегменте.
Процессы в системе Фастбас определяются инструкциями, выдаваемыми Контроллером. Контроллер может быть большой вычислительной системой со многими стандартными периферийными устройствами, как диски и магнитофоны (в дополнение к Фастбасу), и с многопользовательской многозадачной операционной системой, которая обеспечивает возможность для одновременных работ в широком диапазоне, таких как разработка программ и сбор данных. В другом случае в устройстве Фастбас может быть процессор, имеющий хотя бы только рудиментарную операционную систему для одного пользователя и одной задачи. Такой процессор может выполнять программы, подготовленные на стороне и хранимые в постоянной памяти.
Результатом исполнения одних инструкций, выдаваемых Контроллером Фастбас, будут циклы различного типа в собственно системе Фастбас, в то время как другие инструкции будут управлять Средой, в которой имеют место циклы Фастбас. Эта Среда содержит уровень арбитража, используемый Мастером в соревновании за владение магистралью, различные выдержки времени, условия об удержании или освобождении магистрали в конце текущей Операции и т.д. В этом стандарте предусмотрена возможность спецификации таких условий, хотя от конкретного Порта Фастбас не требуется способность воспринимать все изменения.
В другом аспекте Среда определяет, как система ведет себя после окончания вызванной Рутины Фастбас. Предусмотрен автоматический отклик на ошибочные условия и автоматическое извещение об ошибках. Пользователь имеет контроль над реакциями аппаратных и программных средств в определенных условиях, а также над тем, что выводить или не выводить для показа.
Среда также определяет источник инструкций для Порта Фастбас. Эти инструкции могут исходить непосредственно от стандартной программы, как только она встречается в исполняемой программе, или они могут быть взяты из Списка инструкций, который был создан предварительно. Создан ли в системе Фастбас Список или нет, время вызова Рутины определяется Средой.
2.2.2. Определение понятия "Среда"
"Среда" - это информация, которую хранит Воплощение по воле Пользователя. Эта информация состоит из пяти компонентов:
1. Комплект "Операционных параметров", которые имеют значения, фиксированные по умолчанию, и могут быть явно установлены Пользователем (см. гл. 4).
2. Информация, управляющая откликом Воплощения на ошибки и другие несанкционированные условия (см. гл. 4 и 11).
3. Информация, относящаяся к последовательностным буферам (см. гл. 5).
4. Информация о состояниях, выдаваемая Воплощением, описывающая исполненные действия и ошибки (см. гл. 11).
5. "Список" действий Фастбас. Этот список используют только в Режиме отложенного исполнения в качестве записи действий, подлежащих исполнению позднее. В Среде, которая не поддерживает Режим отложенного исполнения, Список отсутствует (см. гл. 3).
2.2.3. Идентификатор Среды
К Среде обращаются при помощи параметра environment_id - идентификатора Среды, который придается большинству Рутин Фастбас. Воплощение должно предусматривать Среду-по-умолчанию, имеющую идентификатор Среды FB_DEFAULT_EID. Вызовом одной из Рутин, указанных в разделе 3.2, могут быть созданы другие Среды. Пользователь может работать одновременно с несколькими Средами.
2.2.4. Режим исполнения
Среда может содержать один из двух Режимов исполнения: "Режим немедленного исполнения" или "Режим отложенного исполнения". Режим исполнения указывает состояние Операционного параметра FB_PAR_DELAY_EXEC - соответственно FB_FALSE или FB_TRUE. Первоначальный Режим исполнения зависит от того, как создана Среда. Среда, созданная "немедленно", должна всегда оставаться с Режимом немедленного исполнения. Среда, созданная "отложенно", может быть изменена последовательно на Режим немедленного исполнения и обратно при помощи изменений значения FB_PAR_DELAY_EXEC.
Для Воплощения обязательно поддержание Режима немедленного исполнения, в то время как поддержание Режима отложенного исполнения реализуется по желанию.
Режим исполнения влияет на то, что происходит, когда вызывается Рутина действия.
Действия, вызванные Рутинами действия, когда идентификатор Среды не прошел как параметр, должны всегда исполняться немедленно.
Магистраль Фастбас и адресные связки предусматривают правильное использование магистрали множеством Мастеров. Программное Воплощение должно обеспечивать взаимное исключение нескольких Мастеров, достигающих Фастбас через один и тот же Порт. Воплощение должно предотвращать доступ других Пользователей к магистрали через Порт, если какой-нибудь Пользователь уже установил через этот Порт Владение магистралью (связка GK) или связался с другим адресом (связка AS-AK).
Явное определение Порта является операцией высокого уровня, которая обеспечивает пользователю гарантию исключительного использования Порта Фастбас для выполнения серии операций без соревнования за Порт. Следует заметить, что определение Порта само по себе не гарантирует использование самой магистрали (см. раздел 10.3).
2.2.6. Сессия Фастбас
Вызов Рутины FB_OPEN, описанный в гл. 3, определяет сессию Фастбас. В пределах этой сессии пользователь должен иметь доступную Среду-по-умолчанию (отмеченную идентификатором Среды FB_DEFAULT_EID). Любые назначения Порта или Устройства (см. гл. 10) действительны в течение всей выполняемой сессии Фастбас.
2.2.7. Рутины действия
В последующих описаниях Рутин некоторые из них отмечены как "Рутины действия". Этим Рутинам присуще "действие", влияющее на систему Фастбас или "Буферы данных", или на то и другое. Все Рутины, в имени которых есть слова READ или WRITE (вместо GET или SET, см. раздел 4.1), являются Рутинами действия.
В Режиме немедленного исполнения, когда вызвана Рутина действия, действие выполняется сразу. Статусная информация об успехе или неудаче действия запоминается в Среде (Статусная история, см. гл. 11). Точное действие, подлежащее исполнению, зависит от вызванной Рутины и от состояния Операционных параметров. Передача данных Рутиной действия в буферы Пользователя и обратно происходит в соответствии с определенным Режимом буфера (см. гл. 5).
В Режиме отложенного исполнения, когда вызвана Рутина действия, действие начинается не сразу. При этом действие, определенное Рутиной в соответствии с состоянием Операционных параметров на данный момент, вносится в "Список" действий и может быть выполнено в любое более позднее время. Возвратный код Рутины дает индикацию лишь успеха в добавлении действия к Списку, но на этой стадии Статусная история не создается и предыдущая Статусная история остается нетронутой. На этой стадии не происходят передачи данных в Буферы данных (за исключением единственного слова WRITE [записать] данные - в режиме FB_BUFFER_VALUE - см. гл. 5).
Рутина FB_LIST_EXECUTE вызывает исполнение по порядку всех действий, запомненных в Списке. Когда вызвана эта Рутина, создается Статусная история и передаются данные в Буферы данных Пользователя и обратно, как полагается для каждого действия.
2.2.8. Время вызова и время исполнения
При описании результатов работы Рутин действия используют два термина, причем один и тот же термин может быть применен к описанию режимов как немедленного, так и отложенного исполнений. "Время вызова" относится к моменту вызова Рутины действия, а "Время исполнения" - к моменту, когда начинается само действие. Поэтому в Режиме немедленного исполнения Время исполнения то же самое, что Время вызова, в то время как в Режиме отложенного исполнения Время исполнения - это момент вызова Рутины FB_LIST_EXECUTE.
Каждой Рутине присвоено описательное имя в двух формах: полное имя (до 32 знаков) и краткое имя (до 6 знаков). Все полные имена начинаются с FB_ и все краткие - с F. По этому стандарту оба имени полагается набирать на верхнем регистре клавиатуры.
Воплощение должно узнавать краткие имена. Воплощению следует узнавать полные имена.
Имя, тип данных и направление приведены для каждой Рутины в следующей форме.
Поле <имя> используют только для ссылок на параметр внутри последующего описания Рутины. По этому стандарту поле <имя> полагается всегда набирать строчными буквами нижнего регистра.
Поле <тип> показывает использование и, для каждого Воплощения, потребный объем памяти для параметра. Обозначение типа всегда начинается с букв FB_ с последующими строчными буквами.
Многие параметры хранятся как слова из 32 битов. Однако во многих случаях значения аргументов, которые можно взять, ограничены. Некоторые значения, подобные идентификаторам Среды, присвоены Рутиной и не должны быть изменяемы Пользователем. Другие типы должны иметь только символические значения, определенные этим стандартом. Преобразование этих имен в запоминаемые значения зависит от Воплощения. Ниже представлены поля <тип> с указанием их применения:
Тип может быть расширен при помощи префикса "array_of", который отмечает массив не определенного размера. Размер массива в байтах всегда дается как отдельный параметр.
Представление этих типов в Среде Фортрана-77 дано в Приложении C.
Поле <направление> указывает на направление потока информации и должно иметь одно из следующих значений:
Например. Рутина FRD или FB_READ_DAT имеет следующие параметры:
Здесь показано, что параметр в первой строке является Возвращаемым кодом, возвращаемым программой, во второй строке параметр является управляющим идентификатором, переданным программе и не возвращенным. Третий и четвертый параметры - это 32-разрядные слова, передаваемые программе. Параметры buffer_mode и buffer_specifier определяют источник или назначение данных в Контроллере и обсуждаются ниже. Параметр buffer_specifier может быть в одной или иных формах, записанных для каждой Рутины.
Любая Рутина действия среди своих параметров имеет два параметра буферов:
Здесь значение параметра Буферного режима определяет значение второго параметра, его тип и, возможно, его направление.
В трех возможных Буферных режимах для передачи данных допускается использование переменной специфицированной величины (литерала) или нумерованного последовательностного буфера. Режимы даны ниже:
Буферные режимы и их использование в Средах Режимов отложенного и немедленного исполнений обсуждаются более детально в гл. 5.
В Приложении C дано предлагаемое представление типов Фастбас-данных в Среде Фортрана-77.
В этом стандарте каждой Рутине присвоена одна из категорий:
Рутины категории A обязательны для любого Воплощения.
Рутины категории B обязательны для любого Воплощения, поддерживающего Среду Режима отложенного исполнения.
Рутины категории C должны придаваться тем Контроллерам Фастбас, которые могут быть запрограммированы для выполнения одиночных Фастбас-циклов или управления отдельными сигнальными линиями в магистрали Фастбас.
Рутины, соответствующие категории I, должны создаваться, когда Контроллер предназначен для работы в качестве Слуги, и принимать сообщения о прерываниях Фастбас или выполнять действия, связанные с выставлением сигнала SR.
Рутины категории S являются системными и зависят от Воплощения. Их Воплощение необязательно и их Операция может не быть одной и той же для всех Воплощений.
Рутины категории E произвольны для любого Воплощения.
Конкретное Воплощение Рутин Фастбас может зависеть от архитектуры Контроллера и Порта. В поддержании или отсутствии Режима отложенного исполнения заключается главное различие между Воплощениями. Это различие отображается в Воплощении (см. гл. 2).
Все Воплощения должны обеспечивать Среду-по-умолчанию, обозначаемую идентификатором среды FB_DEFAULT_EID. Эта Среда должна быть только Средой Режима немедленного исполнения.
В Воплощениях, которые не поддерживают Режим отложенного исполнения, Среда-по-умолчанию, равно как и любая Среда, создаваемая пользователем, должна содержать операционные параметры, отклик на ошибки и статусную информацию, а также информацию о Последовательном буфере, если он есть. В Воплощениях, которые поддерживают Режим отложенного исполнения, любые Среды, созданные Пользователем с Режимом отложенного исполнения, должны быть способны содержать дополнительно Список действий, подлежащих исполнению.
Описаны две Рутины, которые должны быть вызываемы любой программой до и в конце Фастбас-сессии.
3.1.1. Открытие Фастбас-сессии
До вызова любой Рутины, определенной этим стандартом, Пользователем должна быть вызвана нижеследующая Рутина. Параметры, зависящие от воплощения, могут быть введены для спецификации деталей, указывающих, как должна быть использована Система Фастбас.
Ни один из Операционных параметров не должен влиять на эту Рутину.
Этот вызов может быть использован для выполнения программной и аппаратной инициализации Контроллера, но не должен выполнять какого-либо Фастбас-действия на магистрали.
Не влияя на Фастбас-сегмент или выполнение какой-либо операции Фастбас, в Среде-по-умолчанию все Операционные параметры должны принимать свои состояния-по-умолчанию.
Если FB_OPEN была вызвана раньше, чем FB_CLOSE, Рутина FB_CLOSE должна быть обязательно выполнена.
3.1.2. Закрытие Фастбас-сессии
Если использование системы Фастбас больше не требуется, Пользователь должен вызвать следующую Рутину:
Если Пользователь покидает Порт Фастбас, когда на каких-либо линиях магистрали выставлены сигналы, эти сигналы должны быть сняты. Ни один из операционных параметров не должен влиять на эту Рутину. Если после вызова Рутины FB_CLOSE Пользователь вызывает любую Рутину, определенную в этом стандарте, до нового вызова Рутины FB_OPEN, должно быть выдано извещение об ошибке.
Статусная история не генерируется.
Должна быть создана или назначена Среда, состояние которой по умолчанию определяется Воплощением в Режиме немедленного исполнения (FB_PAR_DELAY_EXEC имеет значение FB_FALSE). Для Сред, создаваемых таким путем, Операционный параметр FB_PAR_DELAY_EXEC должен быть только читаемым. Возвращаемое значение environment_id (идентификатора Среды) должно быть использовано в качестве входного параметра для определения Среды для других Рутин.
Для Воплощений, распределяющих память, эта Рутина должна обеспечивать доступность необходимой для Среды зоны памяти и возвращать идентификатор среды.
(В тех Воплощениях, где распределение памяти должен выполнять Пользователь, параметр идентификатора Среды указывает Пользователю назначенную зону адресов, которая должна быть использована для хранения и идентификации определения Среды. В этом случае направлением параметра является IN).
Должна быть создана или назначена Среда с Режимом отложенного исполнения. Операционный параметр FB_PAR_DELAY_EXEC имеет значение FB_TRUE, а в других отношениях Среда находится в состоянии, которое по умолчанию определено Воплощением. Для Сред, создаваемых таким путем, Операционный параметр FB_PAR_DELAY_EXEC должен быть read/write [чтение/запись]. Должен быть определен соответствующий идентификатор Среды environment_id и использован для определения Среды для других Рутин этого стандарта. Параметр maximum_calls [максимальное число вызовов] должен задавать максимальное число Фастбас-действий, которые могут быть указаны в Списке.
Созданная Среда должна содержать пустой или нулевой Список. Для Воплощений, распределяющих память, эта Рутина должна обеспечивать доступность необходимой для Среды зоны памяти и возвращать идентификатор Среды.
(В тех Воплощениях, где распределение памяти должен выполнять Пользователь, параметр идентификатора Среды указывает Пользователю назначенную зону адресов, которая должна быть использована для хранения и идентификации определения Среды и относящегося к ней Списка. В этом случае направлением параметра является IN).
3.2.3. Среда с освобождением ресурсов
Все ресурсы системы, связанные со Средой, определенной идентификатором environment_id, должны быть освобождены. Этот идентификатор должен стать недействительным для использования в последующих вызовах Рутин этого стандарта.
3.2.4. Среда с восстановлением ресурсов
Среда, определенная идентификатором environment_id, должна быть восстановлена в состояние, которое определено по умолчанию Воплощением. В Воплощениях с исполнением Списка действий Среда должна содержать пустой или нулевой Список. Идентификатор environment_id должен оставаться действительным для последующих вызовов Рутин этого стандарта.
3.2.5. Копирование Среды
Эта Рутина должна создавать новую Среду, определяемую идентификатором to_environment_id и идентичную текущему состоянию Среды, которое выражается идентификатором from_environment_id. К идентификатору to_environment_id должны применяться п. п. 3.2.1 и 3.2.2 описания идентификатора environment_id соответственно для Сред с Режимами немедленного и отложенного исполнений.
3.2.6. Получение Среды
Информация в Среде, определенной идентификатором environment_id, должна быть передана в массив user_array. Этот массив должен иметь длину array_size байтов. Действительное число переданных байтов должно быть возвращено в виде byte_count. Если user_array недостаточно велик, чтобы содержать определенную Среду, должно быть возвращено сообщение об ошибке, а возвращенное значение byte_count должно быть числом байтов, необходимых для безошибочной передачи.
3.2.7. Установка Среды
Информация байтов byte_count в массиве user_array должна быть передана Среде, определенной идентификатором environment_id.
Информация должна быть запомнена в массиве user_array в предыдущем вызове FB_GET_ENVIRONMENT. Для Воплощений, распределяющих память, создается новая Среда, идентифицированная возвращенным параметром environment_id. Для Воплощений, в которых распределение памяти должен выполнять Пользователь, параметр environment_id указывает массив, определяемый Пользователем, который будет содержать описание Среды.
правильности Списка
3.3.1. Исполнение Списка
В Среде, определенной идентификатором environment_id, эта Рутина должна запускать подтверждение правильности Списка (если подтверждение не сделано раньше) и затем запускать исполнение Списка (см. раздел 2.2). Состояние Операционного параметра FB_PAR_DELAY_EXEC должно быть игнорировано.
Создается Статусная история (см. гл. 11).
3.3.2. Подтверждение правильности Списка
Успешное исполнение этой Рутины должно показать, если оно может быть индицировано, что Список в Среде, определенной идентификатором environment_id, будет успешно исполнен при наличном идентификаторе port_id.
3.3.3. Установка текущего указателя в определенном Списке
Эта Рутина должна возвращать указатель на следующее свободное место в Списке, относящемся к рассматриваемой Среде.
После исполнения Списка возвращенное значение может быть использовано для извлечения статусной информации о Списке (см. гл. 11).
Операционные параметры (далее ОП) позволяют скроить Среду для конкретных применений. Когда создают Среду, ей придают набор ОП, которые все имеют значение по умолчанию, возможно, зависящие от их назначения. Текущее значение ОП может быть изменено Рутиной FB_PAR_SET, а ее текущее значение определяется Рутинами FB_PAR_GET и FB_PAR_READ.
4.1.1. Операционные параметры в Режиме отложенного исполнения
Имеются два типа ОП, различие между которыми становится ясным только в Средах с Режимом отложенного исполнения. Параметры первого типа, Всеобщий и Обрабатывающий ошибки ОП (раздел 4.4), должны, по самой своей природе, оставаться неизменными в течение исполнения Списка. Параметры второго типа, Фастбас-протокола (раздел 4.5), относятся непосредственно к действиям в системе Фастбас и могут быть изменены Рутинами действия, входящими в список. Всеобщий и Обрабатывающий ошибки ОП могут быть изменены только Рутиной FB_PAR_SET, в то время как ОП Фастбас-протокола могут быть изменены как Рутиной FB_PAR_SET, так и Рутиной FB_PAR_WRITE.
Рутина FB_PAR_SET переопределяет текущее значение ОП и, следовательно, переопределяет исходную Среду для исполнения Списка (для Среды с Режимом отложенного исполнения). Рутина FB_PAR_WRITE позволяет изменить ОП Фастбас-протокола во время исполнения Списка, но без влияния на действия набора ОП, когда Список исполняется повторно. Эффект любого действия FB_PAR_WRITE может быть изменен между последующими исполнениями Списка изменением значений в соответствующем буфере данных. Рутина FB_PAR_READ позволяет опрашивать ОП Фастбас-протокола во время исполнения Списка.
Операционные параметры определяют часть Среды. ОП, относящиеся к различным идентификаторам environment_id, полностью независимы. ОП представляется одним 32-битным значением. Некоторые ОП принимают значения только FB_TRUE и FB_FALSE. Некоторые ОП могут быть только читаемы. Установка только читаемого параметра в значение, фиксированное Воплощением, не должна рассматриваться как ошибка. Могут быть также и ОП, специфичные для Воплощения.
Краткая форма имен всех ОП, определенных ниже, должна быть узнаваема любым Воплощением.
От Воплощения, предлагаемого этим стандартом, не требуется доступ ко всем ОП. ОП, которые не поддерживаются программным или аппаратным Воплощением, если к ним обращаются, должны возвращать извещение об ошибке (см. гл. 12).
Воплощение должно определять значения по умолчанию для всех поддерживаемых параметров. Если значения по умолчанию определены в этом стандарте, то именно они должны быть использованы во всех Воплощениях.
Воплощение может ограничивать доступ к некоторым ОП (и возвращать код ошибки, указывающий на недостаточную привилегию для предпринятой операции, когда сделана попытка ее проведения). Это может быть особенно необходимо, когда Воплощение допускает множество Пользователей.
Для обеспечения доступа к ОП должны быть использованы следующие Рутины. Параметры всегда должны быть вызываемы по их именам, определенным последующими пунктами стандарта.
4.3.1. Операционный параметр инициализации
Эта Рутина должна вызвать восстановление ОП, специфицированного через parameter_id, к своему значению по умолчанию, определенному Воплощением в конкретной Среде. Если parameter_id придан Рутине FB_PAR_ALL (FPALL), то все параметры должны быть установлены в их значения по умолчанию.
4.3.2. Операционный параметр установки
После вызова эта Рутина должна присваивать значения parameter_value Операционному параметру, специфицированному через parameter_id в конкретной Среде. После обращения к этой Рутине значение parameter_value должно стать текущим значением для названного ОП.
4.3.3. Операционный параметр получения
После вызова эта Рутина должна возвращать текущее значение названного ОП в конкретную Среду в качестве значения parameter_value.
4.3.4. Операционный параметр чтения
Независимо от режима исполнения в конкретной Среде, эта Рутина должна во Время исполнения поместить текущее значение названного ОП в определенный буфер данных. Эта Рутина должна быть использована только для ОП, описанных в разделе 4.5.
4.3.5. Операционный параметр записи
Независимо от Режима исполнения в конкретной Среде, эта Рутина должна во Время исполнения изменять текущее значение названного ОП на значение Времени исполнения в определенном буфере данных. Действия FB_PAR_WRITE не должны переходить от одного исполнения Списка на последующее исполнение. Эта Рутина должна быть использована только для ОП, описанных в разделе 4.5.
4.3.6. Проталкивание текущих Операционных параметров в стек
После вызова эта Рутина должна переместить текущие ОП конкретной Среды во внутренний стек ОП, специфичных для Среды.
4.3.7. Выталкивание текущих Операционных параметров из стека
После вызова эта Рутина должна заменить ОП названной Среды параметрами, извлеченными с верха внутреннего стека ОП, специфичных для Среды.
Операционные параметры
Всеобщие операционные параметры - это параметры, связанные с действиями или элементами, которые не относятся прямо к деталям действий собственно системы Фастбас (последние описаны в разделе 4.5). Всеобщими операционными параметрами являются, например, определенность Порта Фастбас, указание, ожидать ли завершения Фастбас-действия до возвращения служебной информации к вызывающему или нет, объемы информации и Режим исполнения в Среде. Обрабатывающие ошибки ОП используются для управления извещениями о статусе. Они обсуждаются более детально в гл. 11. Термины Суммарный статус и Дополнительный статус определены в разделе 11.3.
4.4.1. Идентификатор Порта контроллера
Этот ОП должен идентифицировать Контроллер и Порт Фастбас, через которые проходит любое действие. Допустимо, чтобы данный Контроллер имел более одного Порта Фастбас. Этот параметр, зависящий от Воплощения, определяет, какой Порт использовать для последующих запросов действий, когда в Фастбасе доступны несколько маршрутов.
В режиме отложенного исполнения:
Заметим, что замена Порта, используемого данной Средой после того как составлен Список действий, подлежащих исполнению, может привести к тому, что невведенные или незаконные параметры будут присвоены Порту. Это затруднение может быть преодолено лишь при следующем вызове Рутины FB_LIST_EXECUTE.
4.4.2. Не ждать завершения действия
Если этот ОП установлен в FB_FALSE, то любая Рутина действия или вызов FB_LIST_EXECUTE должны выдать возвращение вызывающей Рутине только лишь сразу после завершения запрошенных действий - с ошибками или без ошибок. Если параметр установлен в FB_TRUE, возвращение вызывающей Рутине должно быть выполнено немедленно после того, как начались запрошенные действия, - возможно, до их завершения.
4.4.3. Отложенное исполнение
Этот ОП определяет Режим исполнения в Среде. Он имеет значение FB_FALSE для Среды с Режимом немедленного исполнения или значение FB_TRUE для Среды с Режимом отложенного исполнения.
4.4.4. Объем Среды
Этот параметр (только для чтения) должен выражать текущий объем Среды в байтах.
4.4.5. Генерация ограниченного статуса
Установка этого ОП в FB_TRUE разрешает более быстрое исполнение Рутин действия или FB_LIST_EXECUTE при пожертвовании детальной статусной информации о выполненных действиях.
Если этот ОП имеет значение FB_FALSE, то каждая Рутина действия или вызов FB_LIST_EXECUTE должны сохранить как Суммарную, так и Дополнительную статусную информацию (см. гл. 11). При значении FB_TRUE должна быть сохранена лишь Суммарная статусная информация.
Установка этого ОП в FB_TRUE разрешает более быстрое исполнение Рутин действия или FB_LIST_EXECUTE при пожертвовании более детального Возвратного кода.
Если этот ОП имеет значение FB_TRUE, Возвратный код, возвращаемый Рутиной, должен содержать лишь Серьезность любой встреченной ошибки. То есть он должен быть одним из кодов ошибок: FB_ERR_SUCCESS, FB_ERR_INFO, FB_ERR_WARN, FB_ERR_ERROR или FB_ERR_FATAL. Более детальная статусная информация может быть получена вызовом одной из Рутин, декодирующих статус (см. гл. 11).
Если этот ОП имеет значение FB_FALSE, Возвратный код должен быть Кодом ошибки, содержащим статусную информацию и соответствующую Серьезность.
4.4.7. Порог Серьезности для обработчика ошибок
Этот ОП должен определять порог Серьезности, при котором будет вызван Обработчик ошибок Пользователя. Если в результате исполнения Действий или Списка действий, наиболее серьезный код ошибки равен или больше порога, то Обработчик ошибок Пользователя (с использованием Рутины FB_STATUS_CONNECT) должен быть вызван до того, как начнет работать Автоматический извещатель об ошибках.
4.4.8. Порог Серьезности для извещателя об ошибках
Этот ОП должен определять порог Серьезности, при котором будет происходить автоматическое извещение об ошибках. Средства для извещения об ошибках зависят от Воплощения.
Если Серьезность Возвратного кода, возникающего в результате вызова любой Рутины этого стандарта (модифицированной любым вызовом Обработчика ошибок Пользователя), равна или больше этого порога, автоматическое извещение об ошибке или ошибках должно происходить до получения Возвратного кода от Рутины.
4.4.9. Порог Серьезности исключительной ситуации
Сразу же после окончания любого автоматического извещения об ошибках, этот ОП должен определить порог Серьезности, при котором будет генерировано состояние исключительной ситуации - обычно прекращение программы. Детали этого состояния должны зависеть от Воплощения.
Если Серьезность Возвратного кода, возникающего в результате вызова любой Рутины этого стандарта (модифицированной любым вызовом Обработчика ошибок Пользователя), равна или больше этого порога, должно быть дано извещение об исключительной ситуации.
4.4.10. Порог Серьезности сообщения
Этот ОП должен определять порог Серьезности, при котором будет происходить автоматическое извещение об индивидуальных кодах ошибок.
Возвратный код, возникающий в результате вызова Рутины (модифицированной любым вызовом Обработчика ошибок Пользователя), и любые коды ошибок в Суммарном или Дополнительном статусах, чья Серьезность равна порогу или больше его, должны быть доложены.
4.4.11. Доклад сжатого сообщения
Этот ОП должен управлять количеством статусной информации, которая должна быть доложена при любом вызове автоматического докладчика ошибок.
Если значение параметра FB_FALSE, будет доложена вся имеющаяся статусная информация, связанная с любым кодом ошибок, предназначенным для доклада. Если значение FB_TRUE, то автоматический докладчик ошибок передаст только одно сообщение.
Детали содержания и объем сообщения зависят от Воплощения.
4.4.12. Доклад о каждом действии
Этот ОП должен устанавливать, нужно ли автоматическому докладчику ошибок передавать информацию об исполненных действиях.
Если значение FB_FALSE, такую информацию докладывать не нужно.
Если значение FB_TRUE, автоматический докладчик ошибок будет докладывать о каждом действии, когда оно происходит.
Детали и объем сообщения зависят от Воплощения.
лимита времени
Операционные параметры, связанные с Фастбас-протоколом, обусловливают действия в магистралях Фастбас, выполняемые Портом. Эти параметры могут быть доступны через Рутины FB_PAR_GET, FB_PAR_SET, FB_PAR_READ и FB_PAR_WRITE. Действия Рутин FB_PAR_READ и FB_PAR_WRITE могут быть отложены в зависимости от Среды, а действия FB_PAR_GET и FB_PAR_SET безотлагательны.
Стандарт Фастбас определяет четыре таймера в Мастере Фастбас. Для управления этими таймерами (когда они могут быть управляемы Воплощением) предусмотрены Операционные параметры. Определен также всеобщий программный таймер. По умолчанию все таймеры должны быть разрешены.
Если в течение Фастбас-цикла на линиях SS (статус Слуги) возникнет неожиданный сигнал, Воплощение может отозваться на ошибку повторением цикла. Средства для спецификаций этого отзыва описаны в гл. 11. Определены ОП для спецификации числа повторов и временного интервала между ними.
4.5.1. Уровень арбитража
Этот параметр должен определять значение кода, который нужно использовать в Регистре уровня арбитража (CSR#8<05:00>) у соответствующего Мастера для последующего вызова Рутины действия. Кроме хранения Уровня арбитража Мастера, этот регистр содержит также информацию относительно протокола, который Мастеру нужно использовать при выставлении сигнала AR (см. стандарт Фастбас - ГОСТ 34.340- или МЭК 935, п. 6.3.1 и раздел 8.11).
Этот параметр, как и другие, указанные ниже и влияющие на процесс арбитража, следует устанавливать только через Процессор-хозяин.
4.5.2. Протокол Арбитража с обеспеченным доступом
Этот параметр должен определять состояние CSR#8<07> (бита обеспеченного доступа в Регистре уровня арбитража) для последующих вызовов Рутины действия. Если FB_TRUE, этот бит должен быть установлен, а если FB_FALSE, бит должен быть очищен. Когда CSR#8<07> = 1, Мастер при выставлении AR должен следовать Протоколу обеспеченного доступа.
4.5.3. Протокол Арбитража с приоритетным доступом
Этот параметр должен определять состояние CSR#8<06> (бита Приоритетного доступа в Регистре уровня арбитража) для последующих вызовов Рутины действия. Если FB_TRUE, этот бит должен быть установлен, а если FB_FALSE, бит должен быть очищен. Когда CSR#8<06> = 1, Мастер при выставлении AR должен следовать Протоколу приоритетного доступа.
4.5.4. Владение магистралью на время передачи целого блока
Этот параметр должен устанавливать, будет или не будет освобождена магистраль Фастбас во время любой последующей Операции передачи блока.
Если значение параметра FB_FALSE, Мастер может любым доступным ему способом разделить передачу целого блока на ряд передач последующих частей блока - блочков (см. п. 6.1.5).
Операционные параметры FB_PAR_HOLD_BUS, FB_PAR_HOLD_BUS_NO_AR, FB_PAR_HOLD_AS и FB_PAR_HOLD_ON_ERROR, определенные ниже, имеют преимущество, переопределяя этот параметр в решении, будет или не будет отменено Владение магистралью.
4.5.5. Размер блочка при передаче блока
Этот параметр должен определять максимальный размер блочка для последующих передач блоков.
4.5.6. Принудительная передача блока данных
Если этот параметр имеет значение FB_TRUE, любые последующие передачи блоков должны быть выполнены в Режиме принудительной передачи (MS = 3).
Временной интервал между фронтами сигнала (от DS(u) до DS(d)) получается от параметра FB_PAR_CLOCK, если Воплощение имеет к нему доступ.
4.5.7. Период циклов данных при Принудительной передаче блока данных
Когда происходит Принудительная передача блока данных, фронты сигнала DS следуют с периодом, задаваемым Мастером. Если этот период может быть установлен программно, он должен быть определен этим параметром.
4.5.8. Устройство с фиксированным Адресом следующей передачи (NTA)
Когда значение этого параметра FB_TRUE, он должен быть использован для указания о том, что передача данных происходит к Устройству или от Устройства, которое не изменяет число в Регистре адреса следующей передачи (NTA) (например, устройства, подобные ПВПВ).
Такое Устройство принимает или посылает множество слов данных из единственного Внутреннего адреса. Порт, передающий данные к или от такого Устройства, должен быть уверен в такой особенности, чтобы корректно повторить Операцию, если случится ошибка, а также в случае разбиения блочной передачи на несколько более коротких блочных передач.
Заметим, что любая Операция с таким Устройством может быть повторена корректно, если только в дополнение Устройство имеет защитный буферный регистр, описанный в разделе 11.3 стандарта Фастбас. (Присутствие защитного буфера прозрачно для Мастера).
4.5.9. Передача данных короткими словами
Если этот параметр имеет величину FB_FALSE, каждое слово данных, передаваемое к или от определенного Буфера данных, должно быть шириной в 32 бита. Если этот параметр установлен в FB_TRUE, каждое слово данных должно иметь ширину, задаваемую параметром FB_PAR_SHORT_WORD_SIZE.
Биты FB_PAR_SHORT_WORD_SIZE передаются по Фастбас-линиям адрес/данные с низшими номерами битов. Остающиеся линии AD очищаются записью Фастбас и игнорируются при чтении. Этот параметр должен применяться только в Циклах данных, но не в Первичном или Вторичном адресных циклах.
4.5.10. Размер короткого слова
Этот Операционный параметр выражается числом битов короткого слова, зависит от Воплощения и предназначен только для чтения.
4.5.11. Генерация контроля четности
Этот параметр должен использоваться портом Фастбас для управления генерацией четности.
Заметим, что по стандарту Фастбас создается либо проверка на нечетность, либо отсутствие проверки, поэтому четность генерировать не следует, за исключением генерации в целях диагностики.
4.5.12. Действие Географической адресации
Если этот ОП имеет значение FB_TRUE, Порт должен установить линию EG, чтобы обеспечить узнавание Географического адреса при выполнении Первичного адресного цикла в запрошенной Операции. Если же Порт не имеет средств управления линией EG, этот параметр должен быть неподдерживаемым.
4.5.13. Без Цикла арбитража
Если этот ОП имеет значение FB_TRUE, Цикл арбитража должен отсутствовать в запрошенной Передаче Фастбас.
Этот параметр игнорируется Рутинами примитивных действий в гл. 8.
4.5.14. Без Первичного адресного цикла
Если этот ОП имеет значение FB_TRUE, в запрошенную Операцию не должен быть включен Первичный адресный цикл. Параметр Первичного адреса должен быть проигнорирован.
Если Операция, подлежащая исполнению, имеет этот параметр установленным в FB_TRUE и предварительно не было установлено соединение с адресом, должна быть возвращена ошибка и Операция не должна быть выполнена.
Этот параметр игнорируется Рутинами примитивных действий в гл. 8.
4.5.15. Без Вторичного адресного цикла для Операций в Области данных
Этот ОП должен действовать только при Операциях в Области данных. Если он имеет значение FB_TRUE, Вторичный адресный цикл не должен быть выполнен в качестве части Фастбас-операции. Параметр Вторичного адреса должен быть проигнорирован. Если он имеет значение FB_FALSE, Вторичный адресный цикл должен быть выполнен.
Этот параметр игнорируется Рутинами примитивных действий в гл. 8.
4.5.16. Без Вторичного адресного цикла в Области регистров CSR
Этот ОП должен действовать только при Операциях в Области регистров CSR. Если он имеет значение FB_TRUE, Вторичный адресный цикл не должен быть выполнен в качестве части Фастбас-операции. Параметр Вторичного адреса должен быть проигнорирован. Если он имеет значение FB_FALSE, Вторичный адресный цикл должен быть выполнен.
Заметим, что стандарт Фастбас требует почти во всех случаях, чтобы Операции в области CSR содержали Вторичный адресный цикл. Этот параметр игнорируется Рутинами примитивных действий в гл. 8.
4.5.17. Без Цикла данных
Если этот параметр имеет значение FB_TRUE, Цикл данных не должен быть выполнен как часть запрошенной Фастбас-операции.
Этот параметр игнорируется Рутинами примитивных действий в гл. 8.
4.5.18. Удерживать Владение магистралью
Если этот параметр имеет значение FB_TRUE, Владение магистралью должно удерживаться до завершения данной Операции, то есть сигнал GK должен быть выставленным. В противном случае Владение магистралью должно быть прекращено до или при завершении Операции, если только не выдается сигнал Фастбас-ошибки и к тому же параметр FB_PAR_HOLD_BUS_ON_ERROR имеет значение FB_TRUE.
Этот параметр игнорируется Рутинами примитивных действий в гл. 8.
4.5.19. Удерживать Владение магистралью, если не выставлен сигнал AR
Если этот параметр имеет значение FB_TRUE, Владение магистралью должно удерживаться до завершения данной Операции, если сигнал AR не выставлен на магистрали. Как только обнаружено выставление сигнала AR, магистраль должна быть освобождена. Иначе говоря, Владение магистралью должно быть прекращено до или при завершении Операции. Владение должно удерживаться, если ОП FB_PAR_HOLD_BUS имеет значение FB_TRUE или выдается Фастбас-ошибка и при этом значение параметра FB_PAR_HOLD_BUS_ON_ERROR равно FB_TRUE.
Этот параметр игнорируется Рутинами примитивных действий в гл. 8.
4.5.20. Удерживать связку с адресом
Если этот параметр имеет значение FB_TRUE, любая Фастбас-связка с адресом должна поддерживаться и после окончания Операции, то есть сигнал AS должен быть выставленным. В противном случае связка с адресом должна быть прекращена при завершении Операции, если только не случается фатальная Фастбас-ошибка и не задействован параметр FB_PAR_HOLD_ON_ERROR.
Этот параметр игнорируется Рутинами примитивных действий в гл. 8.
4.5.21. Удерживать сигналы Мастера при ошибке
Если этот параметр имеет значение FB_TRUE и Операция обрывается вследствие Фастбас-ошибки, Порт должен поддерживать любые сигналы, выставленные в настоящий момент. Сигналы должны поддерживаться до намеренного их снятия.
4.5.22. Долгий таймер
Если выдержка времени Долгого таймера может быть установлена программно, она должна быть определена этим параметром. Если она читаема, в этом параметре следует содержать ее значение. Если случается окончание лимита времени, должен быть возвращен соответствующий код ошибки.
Выдержка времени Долгого таймера будет также записана в регистр Порта CSR#1C (если регистр реализован).
Долгий таймер запускается при начале Действия или исполнения Списка (если он уже не работает благодаря значению FB_TRUE параметра FB_PAR_LONG_TIMER_ON). Он останавливается и сбрасывается при завершении Действия или исполнения Списка, если значение параметра FB_PAR_LONG_TIMER_ON не равно FB_TRUE (смотри п. 4.5.24).
Заметим, что Долгий таймер действует в течение всей Фастбас-передачи и таким образом позволяет функционировать таймерам Арбитража или GK.
4.5.23. Отключение Долгого таймера
Этот параметр должен быть установлен в значение FB_TRUE для отключения выдержки времени Долгого таймера (в бите CSR#9<04>).
Этот параметр должен быть установлен в FB_TRUE, если требуется подавить сброс Долгого таймера при завершении Действия или исполнения Списка и перезапустить таймер в начале Действия или исполнения Списка (при этом таймер продолжает счет времени).
4.5.25. Таймер ожидания
Если выдержка времени Таймера ожидания может быть установлена программно, она должна быть определена этим параметром. Если она читаема, ее следует возвращать с этим параметром. Этот таймер начинает работать, когда Мастер обнаруживает на линии WT выставленный сигнал, а когда сигнал WT не выставлен, таймер сбрасывается и запрещается. Если случается окончание этого лимита времени, должен быть возвращен соответствующий Код ошибки.
Выдержка Таймера ожидания будет также записана в регистр Порта CSR#1D (если он реализован).
4.5.26. Отключить Таймер ожидания
Этот параметр должен быть установлен в FB_TRUE, если нужно устранить лимит времени в Таймере ожидания.
4.5.27. Адресный таймер
Если выдержка времени в Адресном таймере может быть установлена программно, она должна быть определена этим параметром. Если она читаема, ее следует возвращать с этим параметром. Когда бы Порт ни генерировал фронт сигнала AS (AS(u) или AS(d)), таймер запускается для получения подтверждающего фронта сигнала AK. Если случается окончание лимита времени, должен быть возвращен соответствующий Код ошибки.
Выдержка времени Адресного таймера будет также записана в регистр Порта CSR#1E (если он реализован).
4.5.28. Отключить Адресный таймер
Этот параметр должен быть установлен в FB_TRUE, если нужно устранить лимит времени в Адресном таймере (в регистре CSR#9<06>).
4.5.29. Таймер данных
Если выдержка времени в Таймере данных может быть установлена программно, она должна быть определена этим параметром. Если она читаема, ее следует возвращать с этим параметром. Когда бы Порт ни генерировал фронт сигнала DS, таймер должен запускаться для приема соответствующего фронта сигнала DK. Если случается окончание лимита времени, должен быть возвращен соответствующий Код ошибки.
Выдержка времени Таймера данных будет также записана в регистр Порта CSR#1F (если он реализован).
4.5.30. Отключить Таймер данных
Этот параметр должен быть установлен в FB_TRUE, если нужно устранить лимит времени в Таймере данных (в регистре CSR#9<07>).
4.5.31. Программный таймер
Этот параметр обеспечивает единообразное определение одного или нескольких Программных таймеров, которые будут содержаться в любом Воплощении. Он дает средство для возврата управления вызывающей Рутине, когда Действие или Список оказываются слишком длинными для исполнения.
В сети Фастбас этот параметр установкой бита в регистре CSR#9 не устраняется.
Истечение лимита времени Программного таймера не вызывает никаких изменений в состоянии системы Фастбас.
Программный таймер запускается в начале Действия или исполнения Списка (если он уже не работает благодаря значению FB_TRUE параметра FB_PAR_SOFT_TIMER_ON), или когда его значение установлено с помощью параметра FB_PAR_SOFT_TIMER. Таймер останавливается и сбрасывается при окончании Действия или Списка, если значение параметра FB_PAR_SOFT_TIMER_ON не равно FB_TRUE (см. п. 4.5.33).
4.5.32. Отключить Программный таймер
Этот параметр должен быть установлен в FB_TRUE, если нужно устранить лимит времени в Программном таймере.
Этот параметр должен быть установлен в FB_TRUE, если нужно подавить сброс таймера при окончании Действия или Списка и перезапустить таймер в начале Действия или исполнения Списка.
4.5.34. Число повторений
Этот параметр должен определять число повторений Фастбас-циклов, приводящих к выдаче Кода ошибки с Серьезностью, не равной значению FB_SEV_SUCCESS, если соответствующий Ответный код (см. раздел 11.6) указывает, что следует предпринять повторения.
Заметим, что если желательно большее число повторений, то на уровне Пользователя могут быть повторены все действия.
4.5.35. Время повторения
Когда должны быть повторены Цикл данных или Вторичный адресный цикл, повторение должно быть выполнено как можно быстрее. Однако, когда должен быть повторен Первичный адресный цикл, иногда необходимо выжидать конечный отрезок времени между каждыми попытками. Если код SS = 1 (сеть занята), Мастер должен не повторять адресный цикл немедленно, чтобы избежать возможного системного зависания. Этот параметр применяют для определения среднего значения случайного выжидания, которое следует вводить между повторениями.
Для каждой Рутины действия, выполняющей передачу данных к "Буферу данных" или от Буфера, режим передачи и местоположение Буфера определяет пара аргументов. Первый аргумент пары ("режим передачи") устанавливает, как должен быть интерпретирован второй аргумент. Второй аргумент пары ("спецификатор буфера") является либо идентификатором Последовательного буфера, либо переменной или идентификатором массива, либо самим значением данных. Допустимые Режимы буфера, определенные в гл. 2, описаны ниже.
5.1.1. Буфер специфицирован в качестве переменной или массива
Поддержание этого Режима буфера должно быть предусмотрено для Режима немедленного исполнения. Оно необязательно для Режима отложенного исполнения.
Когда параметр Режима буфера имеет величину FB_BUFFER_VAR, спецификатор Буфера должен быть переменной. Во Время исполнения данные должны быть записаны от или прочитаны на определенную переменную.
5.1.2. Буфер специфицирован в качестве значения
Этот Режим буфера должен допускаться только для Операций записи единственного слова и должен быть предусмотрен для Сред с Режимом отложенного исполнения. Он не обязателен для Сред с Режимом немедленного исполнения.
Когда параметр режима буфера имеет величину FB_BUFFER_VALUE, спецификатор буфера должен иметь значение в виде одного слова данных, значение которого в Момент вызова приписывается Времени исполнения.
5.1.3. Буфер специфицирован в качестве идентификатора Последовательного буфера
Поддержание этого Режима буфера должно быть предусмотрено для Режима отложенного исполнения.
Когда параметр Режима буфера установлен на FB_BUFFER_SEQ, последующие Фастбас-действия при том же спецификаторе буфера (идентификатор последовательного буфера) выполняют поочередно запись в или чтение из того же самого Последовательного буфера. В этой главе описаны Рутины FB_READ_BUFFER_POINTER, FB_WRITE_BUFFER_POINTER и FB_DISPLACE_BUFFER_POINTER, обеспечивающие доступ к указателю местоположения текущих данных в Последовательном буфере.
Может быть объявлен тип Последовательного буфера - Внутренний или Внешний.
"Внутренний буфер" должен быть доступен для вызывающей программы непосредственно. (Поскольку в этом стандарте не предусмотрен механизм для достижения параметров в разных Средах, ссылки на Внутренние буферы данных должны происходить в каждом случае только из одной Среды).
По желанию возможно создание "Внешних буферов", в которых Буфер данных может и не быть непосредственно доступен для программы, которая его использует.
Значение идентификатора буфера определяется Пользователем и должно быть единственным внутри Среды. "Последовательный буфер" должен быть объявлен с использованием одной из Рутин, описанных ниже, до исполнения любой операции, в которой имеется ссылка на буфер.
5.2.1. Объявить Внутренний буфер
Эта Рутина должна связывать специфицированный идентификатор Последовательного буфера (seq_buffer_id) со специфицированным идентификатором Внутреннего буфера (buffer_array), содержащим байты размера буфера (buffer_size). Указатель буфера сбрасывается. Внутренний буфер является локальным для вызывающей программы и доступен для нее непосредственно. Фастбас-действия с их параметрами buffer_mode, установленным в FB_BUFFER_SEQ, и buffer_specifier, установленным в то же значение, что и значение seq_buffer_id, должны использовать тот же самый Внутренний буфер.
5.2.2. Объявить Внешний буфер
Эта Рутина должна связывать специфицированный идентификатор Последовательного буфера со специфицированным Внешним буфером, который характеризуется аргументом buffer_location размером buffer_size байтов. Буфер является внешним по отношению к Пользователю и может не быть непосредственно доступен для него (буфер может быть размещен, например, в Порте). Любые Фастбас-операции с их параметрами buffer_mode, установленным в значение FB_BUFFER_SEQ, и buffer_specifier, установленным в то же значение, что и seq_buffer_id, должны использовать один и тот же Внешний буфер. Параметры buffer_location и buffer_size должны зависеть от Воплощения.
5.2.3. Отключить Внутренний последовательный буфер данных
Эта Рутина при будущем использовании должна отключать специфицированный идентификатор буфера. Его значение становится недействительным до тех пор, пока он не будет заново объявлен как Внутренний или Внешний буфер, как описано выше.
5.2.4. Считать указатель Последовательного буфера
Эта Рутина должна копировать текущий указатель Последовательного буфера, связанный с параметром seq_buffer_id, в Буфер, специфицированный параметрами доступа к буферу buffer_mode и buffer_specifier. Значение указателя Последовательного буфера должно быть выражено в байтах относительно начала Последовательного буфера. При указании на первое место Последовательного буфера значение указателя должно быть равным нулю.
5.2.5. Записать указатель Последовательного буфера
Указатель данных в специфицированном Последовательном буфере устанавливается в значение, содержащееся в Буфере данных, специфицированном параметрами доступа к буферу buffer_mode и buffer_specifier. Специфицированное значение должно быть выражено в байтах относительно начала Последовательного буфера. При указании на первое место Последовательного буфера значение указателя должно быть равно нулю.
5.2.6. Сместить указатель Последовательного буфера
Во Время исполнения эта Рутина должна сместить текущий указатель Последовательного буфера, связанный с параметром seq_buffer_id, на величину (в байтах), содержащуюся в Буфере данных, специфицированном параметрами доступа к Буферу buffer_mode и buffer_specifier.
Рутины, описанные в этой главе, вызывают передачи Фастбас, которые являются последовательностями циклов Фастбас.
В этом разделе представлены условия, при которых различные циклы Фастбас явно или неявно вызываются Рутинами, описанными в этой и следующих главах. Сами циклы описаны в стандарте Фастбас.
6.1.1. Арбитраж
Арбитраж должен выполняться автоматически, если Порт не владеет магистралью и если параметр FB_PAR_NO_ARBITRATION имеет значение FB_FALSE. Если этот параметр имеет значение FB_TRUE или если Порт уже владеет магистралью, арбитраж должен подавляться.
Используемый уровень арбитража должен быть определен ОП FB_PAR_ARBITRATION_LEVEL.
Перед установкой AR Мастер должен учитывать состояние линии AI, если ОП FB_PAR_ASSURED_ACCESS имеет значение FB_TRUE, или же учитывать уровень арбитража текущего мастера, если параметр FB_PAR_PRIORITIZED_ACCESS имеет значение FB_TRUE.
Первичный адресный цикл должен выполняться до тех пор, пока ОП FB_PAR_NO_PRIM_ADDR не будет равен FB_TRUE, в то время как вызвана Рутина Действия. Используемый Первичный адрес должен быть (во время вызова) величиной параметра "primary_address" в Рутине.
Если ОП FB_PAR_EG_UP имеет значение FB_TRUE, в то время как вызвана Рутина, линия магистрали EG должна быть, в случае соответствия, установлена Портом во время Первичного адресного цикла.
Автоматический возврат по ошибке должен быть определен путем использования Рутины FB_STATUS_RESPONSE, описанной в гл. 11.
После каждого Первичного адресного цикла магистраль должна быть освобождена (т.е. GK сброшен) перед или в течение последнего цикла данных Операции, если только во время вызова Рутины не были выполнены следующие условия:
параметр FB_PAR_HOLD_BUS имел значение FB_TRUE или
параметр FB_PAR_HOLD_BUS_ON_ERROR имел значение FB_TRUE и встретилась ошибка, которая остановит дальнейшее выполнение Операций Фастбас, или
параметр FB_PAR_HOLD_BUS_NO_AR имел значение FB_TRUE и было обнаружено, что AR не установлен.
С Первичным адресным циклом связаны следующие состояния с ошибками:
6.1.3. Вторичный адресный цикл записи
Если ОП FB_PAR_NO_SEC_ADDR имеет значение FB_FALSE, для Рутин Области адресов данных за Первичным адресным циклом должен следовать Вторичный адресный цикл. Если этот ОП имеет значение FB_TRUE, Вторичный адресный цикл должен быть пропущен и параметр "primary_address" должен игнорироваться.
Если ОП FB_PAR_NO_SEC_ADDR_CSR имеет значение FB_FALSE, для Рутин Области адресов регистров управления и состояний (CSR) за Первичным адресным циклом должен следовать Вторичный адресный цикл. Если этот ОП имеет значение FB_TRUE, Вторичный адресный цикл должен быть пропущен и параметр "primary_address" должен игнорироваться.
Используемый Вторичный адрес должен быть (во время вызова) величиной параметра "secondary_address" в Рутине (если не утверждается обратное в описании Рутины).
Автоматические повторные попытки в случае возникновения ошибок должны быть определены с использованием Рутины FB_STATUS_SET_RESPONSE, описанной в гл. 11.
Со Вторичными адресными циклами связаны следующие состояния с ошибками:
6.1.4. Циклы данных
Циклы данных вызываются большинством Рутин, описанных в этой главе, как установлено ниже для каждой Рутины, если только FB_PAR_NO_DATA_CYCLE не имеет значения FB_TRUE при вызове Рутины.
Автоматические повторные попытки в случае возникновения ошибок должны быть определены с использованием Рутины FB_STATUS_SET_RESPONSE, описанной в гл. 11.
Параметр FB_PAR_SHORT_DATA_WORD, будучи равным FB_TRUE, вызывает в течение цикла данных упаковку в буфер данных или распаковку из буфера данных слов длиной менее 32 бит.
ОП FB_PAR_PIPELINE должен определять, выполняется ли Рутинами передач блоков Передача блока или Принудительная передача.
С Циклами данных связаны следующие состояния с ошибками:
Управляя передачей блока, Мастер может следовать одной из нескольких стратегий, в зависимости от его возможностей в отношении аппаратного обеспечения и величин некоторых ОП.
Мастер должен передавать целый блок за одну непрерывную операцию, если ОП FB_PAR_WHOLE_BLOCK имеет значение FB_TRUE.
Если этот параметр имеет значение FB_FALSE, Мастер может делить передачу целого блока на передачу нескольких блочков меньшего размера. Максимальный размер этих блочков определяется ОП FB_PAR_BLOCKLET_SIZE.
После передачи каждого из этих блочков Мастер должен либо освободить магистраль и принять участие в следующем цикле арбитража, либо проверить состояние AR и освободить магистраль, если только определено, что AR установлен.
Мастеры, которые способны реагировать на состояние AR, могут вместо использования блочков фиксированного размера непрерывно контролировать состояние AR в течение передачи и реагировать надлежащим образом, когда устанавливается AR.
6.1.6. Разъединение
После того как Операция вызвана Рутиной, описанной в этой главе, должно произойти полное разъединение со Слугой, если только не были выполнены следующие условия: параметр FB_PAR_HOLD_AS имел значение FB_TRUE во время вызова, или параметр FB_PAR_HOLD_BUS_ON_ERROR имел значение FB_TRUE и встретилась ошибка, которая остановит дальнейшее выполнение Операций Фастбас.
Должна происходить передача одиночного слова данных.
Код MS выбора режима передачи, использованный для Первичного адресного цикла, и состояние линии чтения RD для цикла данных должны устанавливаться в зависимости от вызываемых Рутин следующим образом:
Цикл Данных должен иметь значение MS = 0.
Должно употребляться управление исполнением отдельных циклов, определенное в разделе 6.1.
Должна происходить передача блока.
Код MS выбора режима передачи, использованный для Первичного адресного цикла, и значение RD линии чтения для передачи блока должны устанавливаться в зависимости от вызываемых Рутин следующим образом:
Код MS выбора режима передачи, использованный для передачи блока, должен зависеть от значения ОП FB_PAR_PIPELINE. Если значение этого параметра равно FB_FALSE, то MS = 1. Если значение этого параметра равно FB_TRUE, то MS = 3.
Должно употребляться управление исполнением отдельных циклов, определенное в разделе 6.1.
6.2.3. Рутины Вторичного адреса
Должна производиться передача одиночного слова данных в Регистр адреса следующей передачи NTA или из него. Код MS выбора режима передачи, использованный для Первичного адресного цикла, и значение RD линии чтения для Вторичного адресного цикла должны устанавливаться в зависимости от вызываемых Рутин следующим образом:
В Цикле данных должно иметь место MS = 2. Должно употребляться управление исполнением отдельных циклов, определенное в разделе 6.1, за исключением Вторичного адресного цикла, включающего считывание или запись с передачей данных в или из Буфера данных во время исполнения.
ОП FB_PAR_NO_SEC_ADDR должен быть активным. Так, если этот ОП установлен в FB_TRUE, за Первичным адресным циклом не последует никакого действия, отличного от завершающей последовательности.
При окончании времени исполнения в Буфер данных Рутины FB_READ_LENGTH должно быть возвращено число байтов, переданных в или из буфера пользователя во время последнего Фастбас-действия (в специфицированной среде) с использованием спецификатора буфера пользователя.
Определяемые в этой главе Рутины являются подмножеством большого количества возможных сложных Передач Фастбас. Отдельные Фастбас-действия выполняются при тех же самых условиях, которые описаны в разделе 6.1.
Возможные варианты доступа к маршрутной таблице Соединителя сегментов (СС) определяются следующими рутинами.
Порт Слуги в СС при Географическом адресе, определяемом ОП primary_address, должен быть адресован в Области адресов CSR. За Вторичным адресным циклом со значением адреса 40h следует Цикл записи данных при MS = 0 и значении ОП route_address, который специфицирует (начальный) адрес для доступа в маршрутную таблицу. За Циклом записи данных должен следовать Вторичный адресный цикл со значением адреса 41h - регистр данных Маршрутной таблицы. Для Рутин FB_READ_ROUTE_TABLE и FB_WRITE_ROUTE_TABLE должен быть выполнен Цикл данных при MS = 0, а для рутин FB_READ_ROUTE_TABLE_BLOCK и FB_WRITE_ROUTE_TABLE_BLOCK должна быть выполнена передача блока при MS = 1. Данные должны быть переданы в специфицируемый Буфер данных или из специфицированного Буфера данных.
Со Слугой должна быть выполнена Операция чтения (слова или блока), использующая ОП primary_address1 и secondary_address1. Если чтение завершено без ошибки, то считанные этой Операцией данные должны быть затем записаны другому Слуге с использованием параметров primary_address2 и secondary_address2. Если в качестве промежуточного Буфера данных используется Последовательный буфер (Sequential Buffer), то указатель буфера должен быть перемещен со считывания на запись так, чтобы считанные данные не могли быть записаны вновь.
Сображения, изложенные в разделе 6.1, должны быть применены как для Операций считывания, так и для Операций записи.
При передаче одиночного слова данные должны быть считаны во внутренний Буфер данных, как определяется в Воплощении, т.е. в вызов Рутины передачи не будут включены ОП, определяющие буфер. Для передачи блока необходимо специфицировать промежуточный буфер.
при Чтении - Модификации - Записи
Должно быть считано слово из регистра Слуги, специфицированного ОП primary_address и secondary_address. Владение магистралью должно поддерживаться, пока выполняется арифметическая или логическая операция, специфицированная ОП operator_id. При выполнении операции используется значение, считанное как первый параметр, и операнд, как второй параметр в ОП operator_id. Результат этой операции записывается в тот же самый регистр Слуги. Затем Владение магистралью снимается.
Значения параметра operator_id приводятся в следующей таблице:
Эти Рутины используют для чтения блоков данных последовательно из нескольких различных Фастбас-устройств. Каждая Рутина содержит отличающуюся процедуру выбора Фастбас-адресов, с которых будет начинаться чтение блока.
7.4.1. Считать данные из последовательных адресов Устройств
Должна быть выполнена передача блока размером до max_bytes по адресу, специфицированному параметрами start_primad и secondary_address. Данные должны быть переданы из специфицированного Буфера данных или переданы в него. Порт освобождает присоединенного Слугу без прекращения Владения магистралью и вычисляет новый первичный адрес путем прибавления значения primad_step к текущему значению параметра первичного адреса. Если новый первичный адрес не превосходит значения параметра last_primad, должен быть передан еще один блок данных размером до величины max_bytes, данные присоединяются к данным предварительно переданного блока. Этот процесс должен повторяться до тех пор, пока не будет превышено значение last_primad, после чего магистраль должна быть освобождена.
7.4.2. Читать данные из Устройств, откликающихся на сканирование Т-штырьков
После Цикла широкой первичной адресации с использованием параметра primary_address, при значении MS = 2 (FRDTPS) или MS = 3 (FRCTPS), должен следовать Цикл чтения одиночного слова данных при значении MS = 0. Параметр primary_address должен иметь сброшенным Глобальный бит (бит 1) и должен быть специфицирован в соответствии с п. п. 3, 3а, 4, 5 или 6 Табл. III Стандарта Фастбас.
Для каждого набора бит в считанном слове создается Географический адрес, состоящий из поля GP (адрес группы), специфицированного параметром primary_address, и декодированного значения позиции установленного бита в слове данных. Для каждого такого адреса за Вторичным адресным циклом, использующим значение параметра secondary_address, должна следовать передача блока в виде Операции чтения данных, выполняемая для числа байт, не превосходящего значения параметра max_bytes. Данные из успешно переданного блока должны быть каскадированы в специфицированном Буфере данных.
7.4.3. Присоединить Фастбас-устройство
За Первичным адресным циклом в Области адресов регистров CSR должен следовать Вторичный адресный цикл, определяющий адрес 4. Цикл записи данных в виде одиночного слова выполняется затем с адресом Фастбас-порта как с данными. Соображения, изложенные в разделе 6.1, должны быть применены за исключением того, что значение Вторичного адреса всегда равно 4.
7.4.4. Отсоединить Фастбас-устройство
После Первичного адресного цикла в Области адресов CSR должен следовать Вторичный адресный цикл, определяющий адрес, равный 0. Затем должен быть выполнен Цикл записи данных одиночного слова со значением 80000 (шестнадцатеричное). Соображения, изложенные в разд. 6.1, должны быть применены за исключением того, что значение Вторичного адреса будет всегда равно 0.
Эта Рутина должна выполнять Передачу блока данных в точном соответствии с п. 6.2.2 при длине блока, равной одной четверти значения message_len_bytes (в 32-разрядных словах).
Первичный адрес должен быть определен в Области адресов CSR и может быть либо Географическим, либо Логическим, либо Широким. Вторичный адрес должен быть выработан Рутиной по значению, специфицируемому номером блока адресов в Устройстве обслуживания прерываний (см. Стандарт Фастбас, разд. 8.2).
Сообщение должно быть скопировано Воплощением во Внутренний буфер, а младшие четыре бита первого слова данных должны быть заменены на значение, соответствующее числу передаваемых слов данных и вычисляемое по формуле (message_len_bytes/4-1).
Воплощению следует заменить второе слово сообщения на адрес Мастера, посылающего сообщение.
Рутины примитивных Фастбас-действий разделены на две группы. Рутины для одиночных Фастбас-циклов изложены в разделе 8.3, а Рутины для работы с отдельными линиями магистрали - в разд. 8.4.
При своем завершении Рутина примитивных действий может оставить Фастбас в состоянии, в котором магистраль не может быть использована другими пользователями (см. п. 2.2.5).
В Рутинах, представленных в этой главе, не применяют следующие ОП (описанные в гл. 4):
FB_PAR_NO_WAIT
FB_PAR_NO_ARBITRATION
FB_PAR_NO_PRIM_ADDR
FB_PAR_NO_SEC_ADDR
FB_PAR_NO_SEC_ADDR_CSR
FB_PAR_NO_DATA_CYCLE
FB_PAR_HOLD_BUS
FB_PAR_HOLD_BUS_NO_AR
FB_PAR_HOLD_AS.
Как Владение магистралью, так и любое адресное соединение не может быть отменено при завершении Рутины примитивных действий, если только отмена не вызвана Операцией специально.
Эти Рутины формируют полный набор, с помощью которого могут быть выработаны Рутины передач.
Если Рутина одиночного цикла вызывает фронт импульса на AS-или DS-линиях, следует дожидаться фронта подтверждения AK или DK и проверить соответствующий SS-код.
8.3.1. Арбитраж
Эта Рутина должна принудить Мастера провести арбитраж на Владение магистралью (см. разд. 6.1).
8.3.2. Отказ от Владения магистралью
Эта Рутина должна вызывать сброс линии GK Мастером.
8.3.3. Первичный адресный цикл
Первичный адресный цикл должен быть выполнен так, как предписано п. 6.1.2, с использованием данных из специфицированного Буфера данных в качестве Первичного адреса и при значении кода MS, соответствующего вызванной Рутине:
8.3.4. Разъединение
Все сигналы, за исключением GK, Мастер должен снять с магистрали.
8.3.5. Передачи одиночного слова
Цикл данных или Вторичный адресный цикл должны быть выполнены и данные должны быть переданы в Буфер данных или из него так, как предписано п. 6.2.1. В зависимости от вызываемой Рутины коды RD и MS должны иметь значения:
8.3.6. Передачи блока
Передача блока должна быть выполнена так, как предписано п. 6.2.2. Направление передачи данных должно зависеть от вызываемых Рутин следующим образом:
Используемое значение кода MS должно зависеть от значения параметра FB_PAR_PIPELINE следующим образом:
Длина передачи данных может быть определена вызовом Рутины FB_READ_LEGTH, описанной в п. 6.2.4.
Эти Рутины составляют законченный набор, который дает возможность выполнить любую Фастбас-операцию, включая функции диагностики и тестирования.
Когда Рутины этого раздела вызывают фронты на линиях строба AS или DS, то не предусматривается никакой проверки соответствующего подтверждения или проверки состояния SS-линий.
В Воплощении, поддерживающем Рутины FB_LINE_READ и FB_LINE_WRITE, должны быть определены имена для всех линий магистрали Фастбас, однако не требуется обеспечивать доступ к каждой линии и можно возвращать код ошибки для индикации того, что доступ к конкретной линии не поддерживается.
В Рутинах, о которых пойдет речь ниже, диапазон значений параметров типа FB_integer определяется значениями параметров типа FB_LINE_ в соответствии со следующей таблицей:
Таблица 1
Определение типа FB_LINE и соответствующего диапазона
8.4.1. Читать отдельную(-ные) линию(-ии) магистрали
Текущее состояние Фастбас-линий (линии), определяемое параметром line, должно быть возвращено в специфицированный Буфер данных.
8.4.2. Записать отдельную(-ные) линию(-ии) магистрали
На линиях, определяемых параметром line, должны быть выставлены значения сигналов, взятые из специфицированного Буфера данных.
8.4.3. Читать внутреннюю(-ие) линию(-ии)
Текущее состояние сигнала(-ов), внутренних для Порта Фастбас и произведенных Портом, относящихся к линии(-ям), которые определены параметром line, должно быть возвращено в специфицированный Буфер данных.
Точное значение возвращаемой величины определяется Воплощением.
О ПРЕРЫВАНИЯХ
Рутины, описываемые в настоящей главе, устанавливают связь между программным обеспечением Мастера и обнаружением портом Мастера выставления сигнала SR или же получением Фастбас-сообщения о прерывании.
Существует два стандартных протокола прерываний в FASTBUS:
1. Любой Модуль в любое время может выставить сигнал SR запроса на обслуживание, это может быть обнаружено Мастером.
2. Мастер может послать Фастбас-сообщение о прерывании (длиной до 16 слов) в Блок адресов CSR приема прерывания в принимающем Устройстве обслуживания прерываний (УОП).
(Подробные описания содержатся в Стандарте Фастбас, в гл. 9.)
Сигнал SR может вызвать Рутину пользователя на исполнение в асинхронном режиме (через прерывание контроллера), или значение сигнала может быть планомерно опрошено.
Сигнал SR может быть опрошен Примитивной Рутиной FB_LINE_READ (FLR). Пользователь может нацелить Рутину пользователя так, чтобы она асинхронно вызывалась при установке сигнала SR.
Одним из параметров, обеспечивающих такую связь, является параметр SR_Source_Address (адрес источника запроса на обслуживание). Им может быть Географический адрес модуля, установившего сигнал SR, по которому вызвана Рутина пользователя, или FB_SR_DEFAULT (см. ниже).
Процесс, с помощью которого устройства устанавливают сигнал SR, зависит от программного и аппаратного обеспечения. Настоящий стандарт не требует от Воплощения того, чтобы оно было в состоянии определять источник сигнала SR, а только рекомендует делать это, если возможно. Воплощение со знанием топологии системы Фастбас может производить сканирование штырьков ТР. Кроме того, Воплощение может планомерно опрашивать адрес каждого из источников сигнала SR, для которых предусмотрена описываемая связь, чтобы определить, кем выставлен SR (возможно, что более чем одним устройством).
Для резервной Рутины FB_SR_DEFAULT должен быть предусмотрен параметр SR_source_address, чтобы учесть случаи, когда Воплощение не может определить адрес источника сигнала SR и когда Пользователь желает иметь связь со всеми выставляемыми сигналами SR независимо от конкретного источника. Если Рутина связана с названным параметром SR_source_address, должна быть вызвана программа Пользователя, когда обнаружено, что ни одно из присоединенных устройств не выставляет SR или Воплощение не может определить источник выставления SR.
Предусмотрены Рутины, позволяющие привилегированному Пользователю устанавливать или сбрасывать связи с SR из конкретного Порта. Связи по SR устанавливаются по умолчанию, как только выполнена явная связь.
9.2.1. Очистка установленного запроса на обслуживание
Воплощению следует обеспечить отмену установленных сигналов SR в устройстве, выставившем SR, до вызова присоединенной Рутины (с использованием битов CSR#0, описанных в п. 8.3.2 стандарта Фастбас). К области действий присоединенной Рутины относятся сброс источника SR и повторное выставление сигналов SR в устройстве.
9.2.2. Присоединить Рутину к SR
Когда обнаружен сигнал SR и устройство, специфицированное параметром SR_source_address, выставляет SR, должна быть вызвана специфицированная Рутина, если доступен Порт. Если SR_source_address определен как FB_SR_DEFAULT, все обнаруженные запросы SR от источников, которые не присоединены явно, будут переданы специфицированной Рутине.
Параметр, передаваемый присоединенной Рутине, должен быть следующим:
SR_source_address FB_word (IN)
ОП SR_sourse_address должен быть первичным адресом Слуги, выставляющего SR, за исключением случая, когда FB_SR_DEFAULT был передан к FB_SR_CONNECT. В этом случае FB_SR_DEFAULT также должен быть передан Рутине Пользователя.
9.2.3. Отсоединить Рутину от SR
После вызова этой Рутины должна быть разорвана ранее установленная связь (для специфицированного port_id) между выставлением сигнала SR устройством с Географическим адресом SR_source_address и Рутиной, специфицированной Пользователем. С этого момента выставление сигнала SR устройством не будет приводить к вызову Рутины, специфицированной Пользователем. Если специфицирован SR_source_address для FB_SR_SOURCE_ALL, все подобные связи, созданные для специфицированного Порта, должны быть разорваны.
9.2.4. Разрешить связи с SR
Специфицированный Порт должен получить возможность отвечать на сигнал SR путем вызова какой-либо присоединенной Рутины.
9.2.5. Отменить связи с SR
После вызова этой Рутины Воплощение не должно вызывать никакую присоединенную Рутину, вследствие выставления SR, обнаруженного специфицированным port_id. Любой ожидающий обработки сигнал SR должен быть игнорирован.
Приведенные ниже описания используют для объявления таких Рутин, которые служат для приема сообщения о Фастбас-прерывании Портом Фастбас. Предполагается, что Пользователь не имеет непосредственного доступа к приемнику Фастбас-прерываний [Fastbus Interrupt Receiver - FIR] <*>). Прием сообщений и приведение в действие FIR производится Воплощением, которое отфильтровывает и диспетчеризует приходящие к Пользователю сообщения.
--------------------------------
<*> В разделе 9.1 основного стандарта МЭК 935 Система Фастбас FIR назван иначе: ISD - Interrupt Service Device, а в ГОСТ 34.340 соответственно УОП - Устройство обслуживания прерываний. Поскольку в названия Рутин входят FIR, далее использовано это обозначение. Примечание научного редактора.
Если Порт лишен возможности принимать Сообщения о прерывании, никакая из присоединенных Рутин не будет вызвана. Порт по умолчанию должен иметь возможность принимать сообщения и передавать их присоединенным Рутинам.
9.3.1. Связать Рутину с FIR
Эта Рутина должна создавать связь между специфицированной Рутиной и специфицированным Блоком приемника прерываний <*> идентифицированного Порта. Значение параметра receiver_block_num, равное 0, должно специфицировать Блок приемника прерываний в диапазоне адресов от CSR#100 до CSR#10F, а значение параметра receiver_block_num, равное 1, должно специфицировать блок в диапазоне от CSR#110 до CSR#11F, и т.д.
--------------------------------
<*> В ГОСТ 34.340- иное название: Блок адресов CSR приема прерываний в Устройстве обслуживания прерываний (УОП). Примечание научного редактора.
Когда сообщение принято в специфицированный Блок приемника прерываний, содержимое слова filter_word_num сообщения о прерывании должно быть сложено со значением параметра filter_mask путем операции поразрядного И, а результат должен быть сопоставлен со значением параметра filter_value. В случае равенства Рутина должна быть вызвана, в противном случае никаких дальнейших действий не производится.
Все присоединенные Рутины, удовлетворяющие этому критерию, должны быть вызваны в порядке, зависящем от Воплощения.
Передаваемые присоединенной Рутине параметры должны быть такими:
9.3.2. Отсоединить Рутину от FIR
Эта Рутина должна побудить Воплощение отменить дальнейшее ассоциирование специфицированных Рутины и фильтра, с одной стороны, с приемом сообщения о прерывании в Блоке приемника прерывания специфицированного Порта, с другой стороны.
9.3.3. Разрешить связи с FIR
Воплощение должно получить возможность установить доступ к Сообщениям о Фастбас-прерываниях для Порта, специфицированного параметром port_id, а затем передать эти сообщения предназначенным присоединенным Рутинам.
9.3.4. Отменить связи с FIR
Воплощение делается неспособным к вызову любой присоединенной Рутины пользователя в результате приема сообщения специфицированным Портом.
Рутины системных ресурсов и Портов обеспечивают доступ к общим средствам синхронизации, а в машинно-независимом режиме - к специфическим функциям Порта.
Необходимо отметить, что доступ к Рутинам системных ресурсов в общем случае будет воздействовать на других пользователей многопользовательской системы, в связи с чем может потребоваться некоторая система приоритетов. Если пользователю не предоставляется доступ к функции, должна быть возвращена ошибка FB_ERR_NO_PRIVILEGE.
Нижеприведенные Рутины позволяют пользователю проверять состояние Рутины действия или вызова FB_LIST_EXECUTE. Вообще эти средства наиболее полезны в случае, когда операционный параметр FB_PAR_NO_WAIT установлен в FB_TRUE и когда возврат в вызывающую Рутину был произведен прежде завершения запрошенного действия. Пользователь может непосредственно объявить Рутину для вызова на выполнение и протестировать или ожидать завершения Рутины действия или выполнения FB_LIST_EXECUTE.
10.1.1. Ждать завершения операции
Рутина должна ожидать завершения всех операций, связанных со специфицированным environment_id.
10.1.2. Проверить состояние завершения
Рутина должна проверять, завершены ли все операции, специфицированные для среды. Если все операции завершены, должно быть возвращено булевское значение FB_TRUE, иначе FB_FALSE.
10.1.3. Присоединить Рутину завершения
Рутина должна устанавливать связь между специфицированной Рутиной и завершением Рутины действия либо Списка действий. В конкретный момент времени может быть присоединена только одна Рутина завершения. При попытке установить связь еще с одной Рутиной должна быть возвращена ошибка.
10.1.4. Отсоединить Рутину завершения
Эта Рутина должна побуждать Воплощение далее не соотносить присоединенную Рутину разъединения с завершением работы Рутины действия либо Списка действий.
Эта Рутина должна сбрасывать Порт Фастбас. Подробно действие такого сброса должно быть определено в Воплощении.
Все сигналы, установленные Портом на магистрали, должны быть сброшены.
Сброс Порта может влиять на других Пользователей. В многопользовательской системе Пользователь обычно будет требовать привилегии для успешного выполнения этой Рутины.
В многопользовательском Воплощении нижеприведенные Рутины могут применяться Пользователем в целях присвоения и отмены присвоения Порта для его исключительного использования.
10.3.1. Назначить Порт Фастбас
Эта Рутина должна пытаться назначить право исключительного использования специфицированного Порта Пользователю, связанному с вызываемой Рутиной. В случае неуспеха должна быть возвращена ошибка. Назначение Порта будет воздействовать на других пользователей из-за предотвращения их доступа к этому Порту.
10.3.2. Отменить назначение Порта Фастбас
Эта Рутина должна отменять назначение специфицированного Порта.
10.3.3. Назначить Порт Фастбас с таймаутом
Эта Рутина должна пытаться назначить право исключительного использования специфицированного Порта пользователю, связанному с вызываемой Рутиной. В случае неуспеха в течение времени, определенного Рутиной, должна быть возвращена ошибка.
Рутина должна возвращать тип и номер версии аппаратного (hw) и программного (sw) обеспечения, используемых в специфицированном Порте.
Параметр типа аппаратного обеспечения устанавливают равным значению идентификатора Модуля Фастбас (определен в регистре CSR#0-, примечание переводчика). Версия аппаратного обеспечения может быть определена тем, кто воплощает стандарт.
Тип программного обеспечения присваивают способом, аналогичным назначению идентификатора модуля, как описано в стандарте Фастбас, п. 8.3.1. Таким образом, значение старших битов 16-разрядного идентификатора программного обеспечения присваивается Президентом Комитета NIM по запросу организаций, желающих получить эти значения.
Версия программного обеспечения определяется тем, кто воплощает стандарт, и должна быть включена в документацию, сопровождающую Воплощение.
В соответствии с параметром error_code должно быть выработано сообщение об ошибке. Должно быть произведено некоторое действие, зависимое от Воплощения, чтобы привлечь внимание Пользователя.
В соответствии с параметром error_code должно быть выработано сообщение об ошибке. Результат возвращается в параметре message.
В этой главе описаны Рутины для управления обработкой ошибок, обнаруженных при исполнении стандартных Рутин, и Рутины для получения подробной информации об условиях, приведших к возникновению этих ошибок.
Вызов любой из Рутин настоящего стандарта должен сопровождаться выработкой кода ошибки, состоящего из Кода состояния и его Серьезности.
Код состояния определяет в основных терминах результат выполнения Рутины. Коды состояния отмечают, завершилась ли Рутина нормально или встретились идентифицированные затруднения. Кроме того, Коды состояния служат для получения подробной информации и конечных условий выполненного Действия.
"Серьезность" [Severity] Кода ошибки используют как переключатель в различных автоматических действиях сбора сообщений об ошибках. Почти каждая Рутина в настоящем стандарте вырабатывает "Код Возврата" [Return Code], который по умолчанию есть Код Ошибки и, следовательно, содержит как статусную информацию, так и информацию о Серьезности (см. п. 4.4.6). Серьезность может быть изменена относительно значения, заданного по умолчанию, посредством вызова FB_STATUS_SET_SEVERITY или в результате отклика на появление ошибки (см. ниже). Вне зависимости от модификаций Серьезности, Код ошибки, выработанный для занесения в Суммарный статус, должен быть одним из тех, которые описаны в гл. 12.
В дополнение к Коду Возврата, в Режиме немедленного исполнения Рутина действия вырабатывает статусную информацию, состоящую из Кода Ошибки, общего числа байтов, считанных Рутиной, и общего числа байтов, записанных Рутиной. Эта информация образует Суммарный статус (одно или оба сосчитанных числа байтов могут и не относиться к какой-либо конкретной Рутине).
Суммарный Статус должен всегда быть доступен через вызов FB_STATUS_GET_SUMMARY.
Добавочная информация о состоянии для каждой Рутины действия может быть собрана и запомнена как Дополнительный статус [Supplementary Status], связанный с Суммарным статусом. Дополнительный Статус обычно зависит от Контроллера и Воплощения стандарта.
Каждый терм Дополнительного статуса должен содержать Код ошибки.
Необязательные термы, входящие в состав Дополнительной статусной информации, содержат как связанный числовой параметр, определяющий Код Ошибки, и номер индекса, который по способу, зависящему от Воплощения, отмечает часть действия Рутины, заносимой в доклад.
Серьезность Суммарного статуса должна быть равна или больше Серьезности любого из Дополнительных статусов, относящихся к этому Суммарному.
Такой набор Суммарного и Дополнительных статусов образует Историю статусов.
Автоматический докладчик ошибок (см. ниже) использует уровень Серьезности Суммарного статуса, так же как любой Дополнительный статус, для определения того, что надо и что не надо включать в доклад. Существуют Рутины, предназначенные для определения подробностей, предоставляемых Историей статусов.
ОП FB_PAR_NO_STATUS при значении FB_TRUE должен ограничивать накопление статусной информации до уровня Суммарного статуса для достижения ускоренного выполнения действий. Дополнительные статусы не сохраняются.
Некоторые Воплощения могут не иметь возможности для генерации Дополнительного статуса. Для таких Воплощений ОП FB_PAR_NO_STATUS следует делать параметром, защищенным по записи, и со значением по умолчанию FB_TRUE.
Когда любая из Рутин действия, кроме FB_LIST_EXECUTE, вызывается в Среде Режима задержанного исполнения, она вырабатывает только Код возврата. Вызов Рутины не вырабатывает никакой Истории статуса.
Выполнение Списка посредством вызова FB_LIST_EXECUTE должно приводить в результате к генерации Суммарного статуса, который должен содержать код первой обнаруженной ошибки с наивысшим из встреченных уровней Серьезности.
В дополнение к выработке этого Суммарного статуса, выполнение Списка может также, если ОП FB_PAR_NO_STATUS установлен в FB_FALSE, генерировать Дополнительный статус для каждого из действий Списка.
Каждый из Кодов ошибки содержит соответствующую Серьезность. Определяемые Серьезности в порядке их возрастания должны быть следующие:
11.6.1. FB_SEV_SUCCESS (FSSUCC)
Функция, запрошенная Рутиной, выполнена успешно.
11.6.2. FB_SEV_INFO (FSINFO)
Функция, запрошенная Рутиной, выполнена, но с некоторыми замечаниями. Например, при завершении запрошенной Фастбас-активности было сохранено владение магистралью.
11.6.3. FB_SEV_WARNING (FSWARN)
Функция, запрошенная Рутиной, была завершена несмотря на то, что была обнаружена некоторая ошибка (ошибки). Эта ошибка не сделала дальнейший процесс бессмысленным либо невозможным. Например, запрошенное изменение параметра тайм-аута не исполнено в связи с тем, что такое изменение не поддерживается на аппаратном уровне.
11.6.4. FB_SEV_ERROR (FSERR)
Запрошенная функция не была выполнена успешно. Ошибки такого рода обычно делают дальнейшие вызовы или действия Фастбас невозможными или их результаты непредсказуемыми. Например, первичный адресный цикл принял отличный от нуля SS-ответ или переданный параметр был запрещенным.
11.6.5. FB_SEV_FATAL (FSFTL)
Запрошенная функция не была выполнена успешно. Такая неудача достаточно существенна для аварийного завершения программы.
11.6.6. FB_SEV_NEVER (FSNEV)
Одно из применений иерархии уровней Серьезности ошибок состоит в обеспечении метода применения устанавливаемого порога для инициации Определенных специфических действий.
Эта Серьезность, FB_SEV_NEVER, должна быть такой, чтобы пороговые условия никогда не могли встретиться.
Следующая Рутина должна использоваться для изменения уровня Серьезности в зависимости от текущего состояния Кода ошибки или его значения по умолчанию.
В Режиме отложенного исполнения Серьезность, связанная с Кодом ошибки, в первую очередь должна быть текущей при вызове FB_LIST_EXECUTE, а не принимаемой при построении Списка.
Серьезность, связанная со специфицируемым Кодом ошибки, должна устанавливаться в данное значение. Это значение изменяет Серьезность, присвоенную по умолчанию. Серьезность по умолчанию дана в таблице в гл. 12 для каждого Кода ошибки.
Коды ошибок, чья Серьезность была модифицирована в результате отклика на ошибку, должны иметь наименьшую из двух Серьезностей: полученной из последнего отклика и установленной этой Рутиной.
Не все Коды ошибок могут иметь свои Серьезности измененными. При попытке изменить Серьезность для таких Кодов ошибок будет возвращена ошибка.
Во время исполнения каждого Фастбас-цикла Мастером может быть принят один из восьми возможных Кодов состояния Слуги, который, в зависимости от обстоятельств, может содержать либо не содержать ошибку. Также возможно, что цикл не сможет завершиться или даже начаться из-за неспособности Мастера принять возвратную часть подтверждения в течение лимита времени, либо какая-либо другая аппаратная или программная выдержка времени истечет до завершения Цикла или Операции. Код отклика используют для управления ответом на такие условия. Специфицированные ответы для каждого аппаратного состояния должны содержать следующие, определенные ниже, отклики.
Определяемыми откликами должны быть:
В Режиме отложенного исполнения, когда может быть выполнен Список действий, выработка откликов FB_RESP_ABORT и FB_RESP_RETRY_ABORT приводит к прекращению выполнения Списка действий. Активизация дополнительных Кодов отклика, FB_RESP_ABORT_ACTION и FB_RESP_RETRY_ABORT_ACTION, приводит к прекращению того действия, во время выполнения которого обнаружена ошибочная ситуация, но при этом исполнение Списка действий будет продолжено.
В Режиме немедленного исполнения FB_RESP_ABORT_ACTION действует как FB_RESP_ABORT, а FB_RESP_RETRY_ABORT_ACTION действует так же, как и FB_RESP_RETRY_ABORT. Однако, как рассматривается далее, Серьезности результирующего Кода ошибки будут различными.
11.8.1. FB_RESP_IGNORE
Если состояние аппаратных средств таково, что соответствует Коду отклика FB_RESP_IGNORE, Воплощение должно пытаться продолжить действия так, как если бы ошибка не имела места.
В общем случае, возникшая ошибка может предотвратить продолжение любого действия до того, как возникнет заметная опасность.
11.8.2. FB_RESP_ABORT
Эта Рутина должна быть откликом Воплощения по умолчанию на все аппаратные ошибочные состояния, за исключением SS = 0 и, при передаче блока, SS = 2. Если существует специфицированный Код отклика на обнаруженные состояния аппаратуры, исполнение Списка Действий должно быть прекращено.
11.8.3. FB_RESP_RETRY_ABORT
Если имеет место состояние аппаратуры, соответствующее специфицированному Коду отклика, Фастбас-действие, которое вызвало ошибку, будет повторяться. Если после числа попыток повтора, задаваемого текущим значением ОП FB_PAR_NUM_RETRY, состояние ошибки остается, исполнение Списка действий должно быть прекращено.
11.8.4. FB_RESP_RETRY_IGNORE
Если имеет место состояние аппаратуры, соответствующее специфицированному Коду отклика, Фастбас-действие, которое вызвало ошибку, будет повторяться. Если после числа попыток повтора, задаваемого текущим значением ОП FB_PAR_NUM_RETRY, состояние ошибки будет сохраняться, ошибка должна быть проигнорирована и исполнение Списка действий будет продолжено как при FB_RESP_IGNORE.
11.8.5. FB_RESP_ABORT_ACTION
Если имеет место состояние аппаратуры, соответствующее специфицированному Коду отклика, действие должно быть отменено. Если Список действий исполняем, производится попытка исполнения Действия, следующего в списке.
11.8.6. FB_RESP_RETRY_ABORT_ACTION
Если имеет место состояние аппаратуры, соответствующее специфицированному Коду отклика, Фастбас-действие, которое вызвало ошибку, будет повторяться. Если после числа попыток повтора, задаваемого текущим значением ОП FB_PAR_NUM_RETRY, состояние ошибки будет сохраняться, действие должно быть прекращено. Если Список действий исполняем, производится попытка исполнения Действия, следующего в Списке.
11.8.7. Серьезность Кодов ошибок, выработанных для соответствующих откликов на ошибки
Если результатом значения Кода отклика является продолжение Действия или набора Действий, а не прекращение всех Действий, должны быть выработаны дополнительные Коды ошибок по FB_ERR_IGNORE (если ошибка была проигнорирована) или по FB_ERR_RETRY (если были предприняты повторы), или по FB_ERR_ABORT_ACTION (если было прекращено отдельное действие из Списка действий).
Как Код ошибки для первичной ошибки, так и дополнительный Код ошибки имеют соответствующие Серьезности, но в этом случае оба Кода ошибки должны иметь меньшую Серьезность из двух. За счет того, что Серьезностью FB_ER_RETRY является FB_SEV_WARN, Серьезность Кода ошибки по умолчанию или установлению, равная FB_SEV_ERROR, понижается, когда попытки успешны.
Значения по умолчанию Серьезностей для Кодов ошибок, соответствующих Кодам отклика, представлены в таблице.
Кроме того, если это возможно, число попыток повторного исполнения должно быть занесено в Дополнительную статусную информацию.
11.8.8. Специфицировать и определить отклик на ошибку
Следующие Рутины должны использоваться для специфицирования и получения доступа к Кодам откликов. Первая Рутина позволяет специфицировать Код отклика для данного состояния, а вторая - определять текущий Код отклика для данного состояния.
Параметр hardware_error должен принимать одно из следующих значений (могут также использоваться соответствующие полные имена из гл. 12):
где FExSSy есть Код статуса (SS), полученный Мастером в цикле первичного адреса (x = A), вторичного адреса (x = S) или в цикле данных (x = D), принимающий значение у от 0 до 7.
Действие:
Отклик на состояние, соответствующее специфицированному Коду ошибки, должен устанавливаться посредством Рутины FB_STATUS_SET_RESPONSE. Значение по умолчанию откликов на тайм-ауты и ненулевые SS-отклики, за исключением SS = 2 для циклов передачи блоков, должно быть FB_RESP_ABORT. Значение по умолчанию отклика на все SS = 0 должно быть FB_RESP_IGNORE. Значение по умолчанию отклика на SS = 2 для циклов передачи блоков должно быть FB_RESP_ABORT_ACTION.
Последнее установленное значение или, если не было установления, значение по умолчанию отклика системы на состояние аппаратуры данного типа, должно быть возвращено Рутиной FB_STATUS_GET_RESPONSE.
Если Воплощение обеспечивает "автоматическое составление доклада об ошибках", оно должно работать следующим образом:
После выполнения Рутины, перед возвращением управления Пользователю, должен быть вызван Автоматический Докладчик ошибок (АДО). АДО должен сначала проверить Серьезность Кода ошибки в Суммарном статусе и сравнить ее со значением, специфицированным по FB_PAR_HANDLER_THRESHOLD. Если она равна или превосходит FB_PAR_HANDLER_THRESHOLD и Обработчик ошибок Пользователя был подключен, как описано ниже, должен быть вызван Обработчик ошибок Пользователя.
Далее Серьезность Кода ошибки Суммарного статуса сравнивается с серьезностью, специфицированной по FB_PAR_REPORT_THRESHOLD. Если она равна или превосходит это пороговое значение, АДО должен продолжать работу, в противном случае управление должно быть возвращено Пользователю.
Если Код ошибки в Суммарном статусе имеет Серьезность, равную или превосходящую FB_PAR_MESSAGE_THRESHOLD, должен быть выработан доклад об ошибке. Если FB_PAR_REPORT_TERSE имеет значение FB_FALSE, должен быть выработан также доклад для любого из Кодов ошибок Дополнительных статусов, чья Серьезность также равна или превосходит FB_PAR_MESSAGE_THRESHOLD. Если FB_PAR_REPORT_TERSE имеет значение FB_TRUE, то автоматически доклад для Дополнительного статуса вырабатываться не должен. Следует отметить, что если ОП FB_PAR_NO_STATUS имеет значение FB_TRUE, будет выработан только Суммарный статус.
Среда связи, которую использует АДО для передачи и/или отображения сообщений, зависит от Воплощения.
Наконец, если Код ошибки в Суммарном статусе имеет Серьезность, которая равна или превосходит значение, специфицированное FB_PAR_EXCEPTION_THRESHOLD, то должно быть объявлено исключительное состояние или выполнено действие по прекращению выполнения вызывающей программы.
11.9.1. Присоединить Рутину обработки ошибок Пользователя
Рутина обработки ошибок Пользователя User_routine должна соответствовать специфицированной Среде. Любая Рутина, ранее связанная с тем же самым environment_id, автоматически становится отсоединенной.
11.9.2. Отсоединить Рутину обработки ошибок Пользователя
После исполнения этой Рутины никакая Рутина обработки ошибок Пользователя не должна быть ассоциирована с поименованной Средой.
11.9.3. Подробности Рутины обработки ошибок Пользователя
Рутина обработки ошибок Пользователя должна иметь вышеозначенные параметры. Возвращаемый Код ошибки должен быть использован АДО по месту значения в Суммарном статусе. Если Обработчик ошибок Пользователя возвращает return_code, обозначающий, что исполнение не прошло успешно, АДО должен игнорировать Код ошибки, возвращенный Рутиной.
Рутина Пользователя не должна вызывать никакую Рутину Действия.
Суммарный статус вырабатывается всегда при исполнении Рутины действия в Среде Режима непосредственного исполнения или при вызове Рутины FB_LIST_EXECUTE. Нижеприведенная Рутина декодирует информацию Суммарного статуса.
11.10.1. Декодировать Суммарный статус
Эта Рутина должна возвращать следующие значения из специфицированной Среды:
В дополнение к информации Суммарного статуса Воплощение может собирать дополнительную информацию о выполнении Действий - "Дополнительный статус". Величина и тип такого Дополнительного статуса будет зависеть от Воплощения, поэтому точное определение всех параметров не может быть произведено.
Механизм доступа к такой информации определяется так, что каждый вызов одной какой-либо Рутины, описываемой ниже, должен возвращать единичную запись в информацию Дополнительного статуса.
Каждая запись подразумевается состоящей из Кода ошибки, описывающего Статус, и его Серьезности, параметра "associated_parameter", если он применяется, и параметра "where_occured" [где_обнаружен], который отмечает, какое действие либо какая часть действия привели к появлению Кода ошибки. От Пользователя зависит осведомленность о том, какой из Кодов ошибки имеет ассоциированный параметр.
Например, информационный Код ошибки FB_ERR_LAST_PAD должен иметь в качестве ассоциированного параметра значение последнего использованного Первичного адреса.
Если Рутина, используемая для доступа к записям Дополнительного статуса, не может больше выдавать информацию, она должна возвращать Код ошибки FB_ERR_NO_MORE_STATUS.
Повторные вызовы Рутин доступа могут быть использованы для извлечения всей доступной статусной информации.
Дополнительный статус Списка исполнения:
Если доступна информация Дополнительного статуса из вызова FB_LIST_EXECUTE, параметры where_occured и list_pointer являются указателями на действия в пределах Списка, к которому относится статусная информация. В частности, параметр list_pointer (входной параметр Рутин декодирования статуса, см. ниже) может быть получен при построении Списка посредством использования Рутины FB_LIST_GET_POINTER.
11.11.1. Декодировать информацию Дополнительного статуса
Эта Рутина должна возвращать дополнительную статусную информацию о действии.
Первый вызов этой Рутины должен возвращать тот же Код ошибки, что и код, возвращаемый Рутиной FB_STATUS_GET_SUMMARY.
Информация о Действиях, исполненных в Режиме отложенного исполнения:
Первый вызов этой Рутины, которая вырабатывает информацию о конкретном действии из Списка, должен возвратить Код ошибки, эквивалентный тому коду, который был бы занесен в Суммарный статус, если бы действие выполнялось в Режиме непосредственного исполнения.
11.11.2. Декодировать Дополнительный статус при исполнении Списка
Эта Рутина должна возвращать подробную статусную информацию из Истории статуса для специфицированного вызова действия из Списка по способу, идентичному FB_STATUS_GET_SUPPLEMENTARY.
Параметр list_pointer должен быть возвращен посредством вызова FB_LIST_GET_POINTER, производимого непосредственно перед вызовом Рутины, для действия которой должен быть получен статус.
Первый вызов этой Рутины, результатом которого является информация о конкретном действии из Списка, должен возвращать Код ошибки, эквивалентный тому коду, который мог бы быть получен в Суммарном статусе, если бы это действие было выполнено в Режиме непосредственного исполнения.
11.11.3 Поиск информации Дополнительного статуса
Эта Рутина действует идентично Рутине FB_STATUS_GET_SUPPLEMENTARY, за исключением того, что параметр error_code придается вызывающей стороной. Рутина позволяет пользователю извлекать специфицированную запись информации Дополнительного статуса.
Если специфицированный Код ошибки не представлен в Дополнительном статусе, должна быть возвращена ошибка FB_ERR_STATUS_NOT_FOUND.
11.11.4. Найти специфический Дополнительный статус в Списке
Эта Рутина действует идентично FB_STATUS_LIST_SUPPLEMENTARY, за исключением того, что параметр error_code придается вызывающей стороной, чтобы определить, где существует специфический Дополнительный статус.
Рутина должна возвращать информацию только о том действии, для которого Код ошибки и указатель в Списке соответствуют величинам, специфицированным Пользователем.
Должна быть возвращена ошибка FB_ERR_STATUS_NOT_FOUND, если в Дополнительном статусе не обнаружено никакого дополнительного присутствия Кода ошибки.
Необходимо отметить, что FB_STATUS_SEVERITY, FB_STATUS_MATCH и FB_STATUS_THRESHOLD являются функциями, а не подпрограммами.
11.12.1. Проверить Серьезность Кода ошибки
FB_STATUS_SEVERITY является функцией, которая должна возвращать значение Серьезности, специфицированной параметром error_code.
11.12.2. Проверить Код статуса в Коде ошибки
Эта функция должна возвращать значения FB_TRUE, если два Кода ошибки идентичны (исключительно по Серьезности), и FB_FALSE в противном случае.
11.12.3. Проверить Серьезность в Коде ошибки
Эта функция должна возвращать значений FB_TRUE, если Серьезность Кода ошибки равна или больше специфицированной Серьезности, и FB_FALSE в противном случае.
11.12.4. Возвратить Код ошибки специфицированной Серьезности
Эта Рутина должна возвращать Код ошибки с той же самой статусной информацией, что и в параметре error_code, но со специфицированной Серьезностью.
По значениям параметров error_code, associated_parameter и where_occurred должно быть выработано сообщение об ошибке. Некоторые Действия, зависящие от Воплощения, должны быть произведены для привлечения внимания Пользователя к этому сообщению.
По значениям параметров error_code, associated_parameter и where_occurred должно быть выработано сообщение об ошибке. Результат возвращается в параметр message.
Как уже обсуждалось в гл. 11, Код ошибки содержит статусную информацию - Код статуса (описание некоторых состояний, встречающихся при вызове Рутин этого стандарта) и Серьезность.
Описанные в настоящей главе Коды ошибок характеризуют все возможные статусные состояния, которые могут встретиться при выполнении Рутин этого стандарта. Каждый описываемый Код ошибки имеет Серьезность, соответствующую по умолчанию данному статусному состоянию.
Во всех Воплощениях должно использовать краткие имена Кодов ошибок, перечисленные в настоящей главе.
Если Воплощение не включает FB_STATUS_SET_SEVERITY и/или FB_STATUS_SET_RESPONSE (см. гл. 11), то Серьезность каждого Кода ошибки должна быть такой, как описано ниже.
Рутины FB_STATUS_SET_RESPONSE и FB_STATUS_SET_SEVERITY могут изменять ассоциированную с Кодом статуса Серьезность. Если используются эти Рутины, то Серьезность Кода ошибки изменяется.
Во время передачи данных в Буфер данных или из него была обнаружена ошибка доступа. Такое могло бы произойти при обращении к ОЗУ, внутреннему или внешнему последовательному буферу.
Действие, содержащееся в Списке действий и исполняемое посредством вызова FB_LIST_EXECUTE, было преждевременно прекращено из-за наличия ошибки, однако прекращения Списка действий не последовало. Соответствующий возникшей ошибке Код ошибки доступен и связан с этой ошибкой.
Серьезность FB_ERR_ABORT_ACTION должна использоваться для модификации Серьезности, соответствующей возникшей ошибке.
В течение лимита времени после AS(d) не был обнаружен AK(d).
Превышено время таймера АК.
Попытка присоединиться к Рутине окончилась безуспешно из-за того, что присоединение уже было выполнено.
При вызове FB_PAR_SET значение данного параметра не являлось правильным, однако значение его (возможно, преобразованное) было принято каким-либо образом и произошло изменение Среды.
Для Цикла данных во время передачи блока SS = 2 (см. FB_ERR_DATA_SS2).
Запрошенное действие переполнит или переполнило Буфер Данных.
Сессия Фастбас была завершена. В этом состоянии никакая другая Рутина, кроме FB__OPEN, не может быть вызвана (то же значение ошибки будет возвращено при FB_CLOSE, если сессия не была открыта).
Попытка присоединения Рутины закончилась безуспешно, и при этом предварительного присоединения не было.
При выполнении Цикла чтения данных возникла ошибка, связанная с контролем по четности (значение SS могло быть любым, включая 0).
В Цикле данных Фастбас было возвращено значение кода SS = 0.
В Цикле данных было возвращено значение кода SS = 1.
В Цикле данных было возвращено значение кода SS = 2. Необходимо отметить, что во время передачи блока при значении кода SS = 2, по умолчанию следует вырабатывать ошибку FB_ERR_BLOCK_DATA_SS2, которой соответствует серьезность FB_SEV_INFO.
В Цикле данных было возвращено значение кода SS = 3.
В Цикле данных было возвращено значение кода SS = 4.
В Цикле данных было возвращено значение кода SS = 5.
В Цикле данных было возвращено значение кода SS = 6.
В Цикле данных было возвращено значение кода SS = 7.
При попытке произвести разъединение выполнение Рутины было прекращено. Никакое текущее соединение не может существовать.
В течение лимита времени после DS(d) не обнаружено DK(d).
В течение лимита времени после фронта DS не обнаружен фронт DK.
Специфицированная среда является используемой, но может быть недоступной. Ошибка такого рода может иметь место, если предпринята попытка обращения к Среде, когда действие или множество действий выполняются при значении ОП FB_PAR_NO_WAIT, равном FB_TRUE.
Невозможность создания Среды из-за того, что максимально возможное число Сред уже было создано.
Не существует достаточно пространства для создания Среды.
Попытка освобождения Среды окончилась безуспешно. Однако параметр environment_id был действительным.
Обнаружена ошибка с Серьезностью FB_SEV_ERROR. Дополнительная информация может быть доступна через Статусную Историю, если она существует.
Обнаружена ошибка с Серьезностью FB_SEV_FATAL. Дополнительная информация может быть доступна через Статусную Историю, если она существует.
Произошла аппаратная ошибка, зависящая от Воплощения. Любая доступная дополнительная информация об ошибке может быть получена из Статусной истории.
Получено предупреждение об аппаратной ошибке в Порте, зависящей от Воплощения. Любая доступная дополнительная информация может быть получена из Статусной истории.
Поддерживается адресное соединение (связка AS/AK) либо вследствие того, что один из ОП FB_PAR_HOLD_AS или FB_HOLD_BUS_ON_ERROR установлен в FB_TRUE, либо из-за того, что было выполнено Примитивное Фастбас-действие.
Сохранено Владение магистралью Фастбас (GK было установлено Портом). Это произошло либо из-за того, что один из ОП FB_PAR_HOLD_BUS, FB_PAR_HOLD_BUS_NO_AR или FB_HOLD_BUS_ON_ERROR установлен в FB_TRUE, либо из-за того, что было выполнено примитивное Фастбас-действие.
Обнаружена ошибка, которая была игнорирована. Может быть предпринята попытка повтора действия. Код ошибки, соответствующий первоначальной ошибке, должен быть доступен вместе с кодом этой ошибки.
Серьезность FB_ERR_IGNORE должна быть использована для модификации серьезности, доложенной с оригинальной ошибкой.
При вызове FB_SET_PAR значение указываемого ОП недопустимо. В Среде изменений не было произведено.
Возвращено из FB_DECLARE_SEQ_BUFFER или FB_DECLARE_EXT_SEQ_BUFFER; значение поcледовательного параметра bufer_id является неверным для Воплощения.
В конкретном Воплощении обнаружена неожидаемая ошибка. Никакая другая информация не доступна.
Обнаружена ошибка с серьезностью FB_SEV_INFO. Дополнительная информация может быть получена из Статусной истории, если она существует.
Не существует Среды, соответствующей данному значению параметра environment_id.
Неверное значение специфицирует Указатель списка.
Не существует Порта, соответствующего данному значению параметра port_id.
Не существует последовательного буфера (внешнего или внутреннего), соответствующего данному значению параметра buffer_id.
Значение последнего первичного адресной связки в Действии или при вызове FB_LIST_EXECUTE.
Значение последнего вторичного адреса в Действии или при вызове FB_LIST_EXECUTE.
Конечное значение указателя списка в вызове FB_LIST_EXECUTE.
При составлении Списка превышено пространство, допустимое для размещения Списка в Среде
Превышено значение времени Долгого таймера.
Продолжается работа Долгого таймера (т.е. продолжается отсчет времени).
В отсутствие адресного соединения (связки AS/AK) была предпринята попытка выполнить Цикл данных или Вторичный адресный цикл.
Не существует никакого Дополнительного статуса для конкретного действия, Списка или специфицированного Указателя списка.
Пользователь, вызвавший Рутину, не имел достаточных привилегий. Этот Код ошибки может быть возвращен Воплощением, поддерживающим многопользовательский режим, когда вызванная Рутина может приводить к конфликтам-столкновениям с другими Пользователями системы.
Нет Дополнительного статуса. Либо еще не была вызвана ни одна Рутина действия, использующая данную Среду, либо ОП FB_PAR_NO_STATUS был установлен при вызове последней Рутины действия. Этот Код ошибки должен быть возвращен посредством вызова FB_STATUS_FIND_SUPPLEMENTARY или FB_STATUS_FIND_LIST_SUPPLEMENTARY, когда не был найден запрошенный Код ошибки Дополнительного статуса. Подобный Код ошибки также должен быть возвращен посредством вызова FB_STATUS_GET_LIST_SUPPLEMENTARY либо FB_STATUS_FIND_LIST_SUPPLEMENTARY, коща нет Дополнительного статуса, соответствующего специфицированному Указателю списка.
Нормальное завершение. Никаких неожидаемых состояний не обнаружено. Дополнительная информация может быть получена из Статусной истории.
Попытка отсоединения Рутины завершилась безуспешно из-за того, что не существовало соединения.
Владения магистралью Фастбас не было.
Предпринята попытка любого Цикла Фастбас, кроме Арбитража, и при этом Порт не владел магистралью. Это может произойти тогда, когда в требуемом порядке не вызваны Рутины примитивных действий, либо ОП FB_PAR_NO_ARBITRATION установлен в FB_TRUE, но Порт не поддерживал Владение магистралью.
Во время уже открытой Фастбас-сессии был произведен вызов FB_OPEN. Сессия была закрыта и затем повторно открыта. Установленные в предыдущей сессии параметры environment_id отменяются.
Запрошенное действие или множество действий не было еще завершено. Такой Код ошибки может быть возвращен, если в Режиме немедленного исполнения вызвана Рутина действия или же была вызвана FB_LIST_EXECUTE с ОП FB_PAR_NO_WAIT, установленным в FB_TRUE. Такой Код ошибки отмечает то, что запрошенное действие (действия) было начато без фатальной ошибки.
Этот Код ошибки возвращается только при режиме Принудительной передачи. Код индицирует наличие таких проблем, возникающих при выполнении передачи, которые не могут быть доложены посредством других более подробных Кодов ошибок. Например, число полученных фронтов DK не соответствует числу фронтов DS.
При попытке переместить указатель Последовательного буфера превышена граница буфера.
Попытка выполнения Действия была невозможной из-за того, что Порт был активен. Это может произойти в многопользовательской системе, если Порт выполняет действие, запрошенное другим Пользователем, и не используется очередь запросов.
Попытка захватить Порт не была успешной из-за того, что Порт уже был захвачен другим Пользователем.
Попытка выполнения Действия, требовавшего захваченности Порта, была прекращена из-за того, что Порт не был захвачен, либо была попытка освободить Порт, который не был захвачен.
Порт недоступен для использования потому, что он не находится в оперативном состоянии.
Запрос на захват Порта был произведен по отношению к Порту, уже захваченному предыдущим Пользователем.
В Первичном адресном Цикле обнаружено значение SS = 0.
В Первичном адресном Цикле обнаружено значение SS = 1.
В Первичном адресном Цикле обнаружено значение SS = 2.
В Первичном адресном Цикле обнаружено значение SS = 3.
В Первичном адресном Цикле обнаружено значение SS = 4.
В Первичном адресном Цикле обнаружено значение SS = 5.
В Первичном адресном Цикле обнаружено значение SS = 6.
В Первичном адресном Цикле обнаружено значение SS = 7.
Была предпринята попытка установить для ОП режим защиты по записи.
По крайней мере один повтор запрошенного действия был предпринят в связи с обнаружением ошибки. Действие в конце концов выполнено успешно. Код ошибки, соответствующий первоначальной ошибке, следует делать вместе с этим Кодом ошибки.
Серьезность кода FB_ERR_RETRY должна быть использована для модификации Серьезности, доложенной с первоначальной ошибкой.
В течение Вторичного адресного цикла обнаружено превышение лимита времени.
Во Вторичном адресном цикле обнаружено значение SS = 0.
Во Вторичном адресном цикле обнаружено значение SS = 1.
Во Вторичном адресном цикле обнаружено значение SS = 2
Во Вторичном адресном цикле обнаружено значение SS = 3.
Во Вторичном адресном цикле обнаружено значение SS = 4.
Во Вторичном адресном цикле обнаружено значение SS = 5.
Во Вторичном адресном цикле обнаружено значение SS = 6.
Во Вторичном адресном цикле обнаружено значение SS = 7.
Последовательный буфер, соответствующий данному значению параметра buffer_id, используется, но может не быть доступен для Рутин, изменяющих Указатель буфера.
Уже существовал последовательный буфер, соответствующий данному значению параметра buffer_id, при вызовах FB_DECLARE_SEQ_BUFFER или FB_DECLARE_EXT_SEQ_BUFFER. Последовательный буфер был переобъявлен, а указатели переинициализированы.
Пространство недостаточно для объявления другого последовательного буфера.
Поддерживается работа программного таймера (т.е. счет продолжается).
Превышено значение лимита времени программного таймера.
Не может быть найдена Статусная информация для входного значения Указателя списка.
Нет пространства, достаточного для запоминания Статусной истории.
Обнаружено неожидаемое состояние, не оказывающее влияния на выполнение Действий. Дополнительная информация может быть получена из Статусной истории.
Повстречался неизвестный Код ошибки.
В Рутину был передан неизвестный параметр (не определенный Стандартом или Воплощением).
Запрошенное Действие не поддерживается текущим Портом. Этот код может быть выработан в Режиме немедленного исполнения или в Режиме отложенного исполнения при проверке или выполнении Списка.
В стандартную Рутину был передан неподдерживаемый ОП.
Была вызвана Рутина, определяемая настоящим Стандартом, но неподдерживаемая Воплощением.
Вызов FB_GET_ENVIRONMENT привел к переполнению массива Пользователя.
Превышен лимит времени таймера WAIT.
Обнаружена ошибка с Серьезностью FB_SEV_WARNING. Дополнительная информация может быть получена из Статусной истории, если она существует.
ПЕРЕЧЕНЬ ИМЕН РУТИН И ПАРАМЕТРОВ
Это Приложение содержит список всех Имен Рутин, определенных данным стандартом, и аргументы этих Рутин. Рутины приведены в той последовательности, в какой они встречаются в стандарте.
Обозначения некоторых аргументов расшифровываются следующим образом:
A.1. Рутины, сортированные по Краткому имени
A.2. Рутины, сортированные по Полному имени
СПИСОК ЗАРЕЗЕРВИРОВАННЫХ ИМЕН
Имена, помеченные знаком ***, определены только в этой таблице и нигде более в этом стандарте не встречаются.
B.1. Список, сортированный по Полному имени
B.2. Список, сортированный по Краткому имени
В следующей таблице предлагается представление типов данных Фастбас при реализации на ФОРТРАНе 77.
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/gost-r_gosudarstvennyj-standart/47/gost_68880.html
На правах рекламы:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||