package тайм-аут-шина-свободна is новый тайм-аут (инт-времени = > интервал-ответа);
package тайм-аут_соперничества is новый тайм-аут (инт-времени = > интервал-ответа);
•package тайм-аут_заявки is новый тайм-аут (инт-времени
.= > интервал-ответа); package тайм-аут_окна-ответа is новый тайм-аут (инт-времени
= >» интервал-ответа); package тайм-аут-передачи-маркера is новый тайм-аут (инт_времени => интервал-ответа);
package тайм-аут_удержания_маркера is новый тайм-аут
(инт_времени => октетный-интервал); package тайм-аут-оборота-маркера
is array (обслуживаніие-жольца . . 4) of нового тайм-аута (инт_времени => октетный-интервал);
использовано только — 2, 0, 2, 4
Скопировать параметры инициации в качестве текущих зна- чений
ДС := иниц-ДС;
интервал-ответа := иниц-интервал-ответа;
макс_счет_запросов := иниц-макс-счет_запросов;
макс-число-попыток := иниц_макс_число-попыток;
время-удерж-маркера-высш-приоритета
: = иниц-время-удерж-маркера-высш-приоритета; желаемое-время_оборота : — иниц-желаемое-время-оборота; нач-значение-тайм-аута-обслуживания-кольца
: = иниц_нач_значение_тайм-аута_обслуживания-кольца; желание-участвовать := иниц_желание-участвовать;
мин_длина_преамбулы-после_молчания
:= <соответствующий физический параметр>;
получить длину преамбулы из физического уровня Установить начальные значения внутренних переменных в_кольце := false;
СС-известен := false;
наименьший_адрес := false;
станция_ограниченной_активности :== false;
маркер-передан- := false;счет_сбоев_передатчика := 0;
УЗ-СОБЫТИЕ. уведомление (нет_преемника);
тайм-аут_неактивности-шины. старт
(макс-незанятость_1пи'ны);
Состояние ДЕЖУРНОЕ
ДЕЖУРНОЕ лрием-маркера 5. ИСПОЛЬЗОВА
НИЕ-МАРКЕРА
ПМ_протокольный-кадр
И ПМ-кадр.УК = маркер
И ПМ_кадр.АО /= ДС
И ПМ_кадр.АП = ДС
И в-кольце
прием маркера станция-ограниченной-активности := false;
ПС := ПМ_кадр.АО; установлен предшественник
установка наивысшего класса-доступа класс_доступа := макс-класс-доступа;
тайм-аут-удержания-маркера.старт
(время_удерж_маркера-высш-1Приоритета);
ПМ_протокольный_кадр := false;
1. ДЕЖУРНОЕ новый-преемник 1. ДЕЖУРНОЕ
ПМ-протокольный-кадр
И ПМ_кадр.УК = установить-преемника
И ПМ_кадр.АО /— ДС
И ПМ_кадр.АП = ДС
И ПМ_кадр.блок_данных /= ДС
И в-кольце опознан новый преемник СС := ПМ_кадр.блок-данных; наименьший-адрес : = (СС>ДС); СС-известен := true;
станция_ограниченной-активности := false; счет-запросов := 0;
маркер-передан := false;
УЗ_СОБЫТЙЕ.уведомленійе (новый-преемник, СС);Текущее состояние Имя перехода Условие выхода Выполняемое действие |
Следующее состояние |
тайм-аут_неактивности_шины.старт ПМ_протокольный_кадр := false; |
(м а кс-незанятость- шины); |
1. ДЕЖУРНОЕ нет-преемника-1 |
1. ДЕЖУРНОЕ |
ПМ-протокольный_кадр
И ПМ-кадр.УК = установить-преемника
И ПМ_кадр.АО /= ДС
И ПМ-кадр.АП = ДС
И ПМ_кадр.блок_данных = ДС
И в-кольце
преемник — сама станция — единственная станция
в кольце
СС : = ПМ_кадр.блок-данных;
СС_известен := .false; ни одной станции в кольце
станция-ограниченной-активности := false;
счет_запросов := 0;
маркер-передан := false;
УД_СОБЫТИЕ.уведомление (нет-преемника);
тайм-аут_неактивности_шины.старт (макс-незанятость- шины);
ПМ-протокольный-кадр := false;
1. ДЕЖУРНОЕ ввод-запроса- вхождения ПМ_протокольный-кадр И ПМ_кадр.АО /= ДС |
2. ЗАПРОС- ВХОЖДЕНИЯ |
И НЕ (в_кольце И СС-известен) не участвует в работе
кольца
И (желание-участвовать ИЛИ ожидание-любой-передачи)
И ( (ПМ_кадр.УК = запрос-преемника-1)
И ПМ-кадр.УК > ДС
И ПМ_кадр.АП<ДС)
ИЛИ (ПМ_кадр.УК = запрос_преемника-2
И (ПМ_кадр.АО > ДС
ИЛИ ПМ-кадр.АП < ДС ) ) )
Запрос-преемника опознан, . что позволяет данной
станции ответить в качестве возможного преемника.
Предполагается соперничество
счет_прохождений-соперничества := 0;
счет-передач-маркера := 0;
передан-маркер := false;
ВМ := ПМ_кадр.АО; сохранение адреса текущего ВМ;
СС := ПМ_кадр.АП;
наименьший_адрес := (ДС <. СС); станция-ограниченной-активности := false;
инициация «истечения» тайм-аутов-оборота-маркера тайм-аут-оборота-маркера (4) .старт (0);
тайм-аут_оборота-маркера (2) .старт (0);
тайм-аут_оборота-маркера (0). старт (0);
тайм-аут-обор'ота-імаркера (обслуживание-кольца) .старт (
нач-значение_тайм-аута-обслуживания-кольца);
тайм-аут-соперничества.старт (задержка-ответа (ДС <.
ДМ) );
П
1. ДЕЖУРНОЕ
М_протокольный_кадр := false;восст-запроса- 2. ЗАПРОС- вхождения ВХОЖДЕНИЯ
ПМ_протокольный-кадр
И ПМ-кадр.АП /= ДС
И в-кольце
И СС-известен
И (желание_участвовать ИЛИ ожидание-любой-передачи)
И ( (ПМ_кадр.УК = запрос_преемника-1
И ПМ-кадр.АО > ДС
И ПМ-кадр.АП < ДС)
ИЛИ (ПМ_кадр.УК = запрос-преемника-2
И (ПМ_кадр.АО > ДС
ИЛИ ПМ-кадр.АП < ДС) ) )
Данная станция была в кольце, но в данное время она
пропускается по некоторым причинам.
Кадр запрос-преемника опознан, что позволяет данной
станции ответить в качестве возможного преемника.
Предполагается соперничество.
счет-прохождений-соперничества := 0;
счет-запросов := 0;маркер-передан := false;
ВМ :=• ПМ-кадр.АО;
станция-ограниченной-активности := false;
тайм-аут_соперничества.старт (задержка-ответа (ДС <
ВМ) );: ПМ_протокольный_кадр := false;
1. ДЕЖУРНОЕ собственный-кадр-1 1. ДЕЖУРНОЕ
(ПМ_протокольный-кадр ИЛИ маркер-передан)
ИЛИ ПМ_кадр-данных)
И ПМ_кадр.АО = ДС игнорирование собственного кадра тайм-аут_неактивности-шины.старт (макс-незанятость- шины);
ПМ_протокольный-кадр := false;
1. ДЕЖУРНОЕ дублированный- 0. АВТОНОМНОЕ адрес-1
ПМ_іпротокольный-кадр
И ПМ_кадр.АО = ДС
И НЕ маркер-передан
Обнаружен дублированный адрес станции. Инфор- мирование диспетчера сети УЗ-СОБЫТИЕ.уве- домление (дублированный-адрес);
1. ДЕЖУРНОЕ «латание»-кольца 2. ЗАПРОС- ВХОЖДЕНИЯ
ПМ-протокольный-кадр
И ПМ-кадр.УК = кто-следующий
И ПМ-кадр.АО /— ДС
И ПМ_кадр.блок_данных = ПС
И в-кольце
Распознает сообщение кто-следующий от шредшест- • венника предшествующей станции и отвечает со- общением установить-преемника, чтобы «зала- тать» кольцо после выхода из него неисправной станции (предшественника ДС). Возможно сопер- ничествосчет_прохождений-соперничества := 0;
счет_запросов := 0;
маркер_передан := false;
ДС := ПМ-кадр.АО;
станция_ограниченной-активности : = false;
тайм-аут_соперничества.старт (0);
ПМ-протокольный_кадр := false;
1. ДЕЖУРНОЕ несвободиая-шина 1. ДЕЖУРНОЕ пакет-помех
шина не свободна
сброс тайм-аута_неактивности-шины
тайм-аут_неактивности-шины.старт (макс-незанятость- шины);
іпакет-помех := false;
1. ДЕЖУРНОЕ отсутствие-маркера 4. ЗАЯВКА- МАРКЕРА
тайм-аут-неактивности-шины.истек
И молчание-шины
И НЕ (ПМ_протокольный_кадр ИЛИ ПМ-кадр-данных ИЛИ пакет-помех)
И (ожидание-любой-передачи)
ИЛИ в_кольце
ИЛИ (желание_участвовать И НЕ станция_ограниченной-активности))
в случае выхода из строя приемника ДС
нет маркера, поэтому передача заявки
счет_передач-заявки : = 1;
бдз := блок_данных_заявки (счет-передач-заявки); передача (УК = > заявка-маркера, блок-данных
= > бдз);
тайм-аут_заявки.старт (1);
1. ДЕЖУРНОЕ
выход-из-кольца
1. ДЕЖУРНОЕ
ПМ-протокольный-кадр И ПМ-кадр.АО /= ДС И в-кольце
И (желание-участвовать ИЛИ ожидание-любой-передачи)
И ( (ПМ_кадр.УК = запрос-преемника_1
И ПМ_кадр.АО>» ДС
И ПМ_кадр.АП < ДС)
ИЛИ (ПМ-кадр.УК = запрос-преемника-2
И (ПМ-кадр.АО > ДС
ИЛИ ПМ_кадр.АП < ДС) ) )
Данная станция вышла из кольца маркер-передан := false;
станция-ограниченной-активности :=. false;
в-кольце := false;
СС-известен : = false;
УЗ-СОБЫТИЕ.уведомление (нет-преемника);
тайм-аут-неактивности_шины.старт (макс-незанятость- шины);
ПМ-протокольный-кадр := false;
1. ДЕЖУРНОЕ незанятая-стапция 1. ДЕЖУРНОЕ
тайм-аут_неактивности-шины. истек
И молчание-шины
И НЕ (ПМ_протокольный_кадр ИЛИ ПМ-кадр-данных ИЛИ іпакет-помех)
И НЕ ожидание-любой-передачи
И НЕ в-кольце
И (НЕ желание-участвовать ИЛИ станция-ограниченной- активности)
Кольцо вышло из строя
Сброс тайм-аута-неактивности-шины для захвата шины
тайм-аут-снеактивности-шины.старт (макс-незаінятость-Шійны);
1. ДЕЖУРНОЕ передача-ответа 1. ДЕЖУРНОЕ
ПМ-кадр-данных
И ПМ_кадр.АО /= ДС
И ПМ_кадр.АП = ДС
И ПМ_кадр.УК.действие-УДС = запрос-с-ответом
Получен запрос_с-ответом
Станция должна начать выдачу ответа в течение двух интервалов-ответа, если эта факультативная возмож- ность обеспечивается
станция-ограниченной-активности := false; получить_ожидаемый-ответ (
УК — > управление-кадра, АП = > получатель, АО => отправитель, іблок-данпых = > обд, подавление-КПК => подавить-
КПК);
передача (УК = >* управление-кадра,
АП => получатель,
АО => отправитель, блок_данных => сбд, подавление-КПК = > подавить-КПК); маркер-передан := true;
тайм-аут_неактивности-шины.старт (макс-незанятость- шины);
ДЕЖУРНОЕ опознана-другая- 1. ДЕЖУРНОЕ станция
Примечание. Нижеследующее определяет инверсию совокуп- ности всех изложенных выше условий приема-кадра, то есть предполагается то же, что и «в-противном-случае» или «ничего-из_вышеперечисленного».
(ПМ_кадр-данных
И НЕ (ПМ_кадр.УК.действие-УДС = запрос-с-ответом
И ПМ-кадр.АП = ДС)
ИЛИ (ПМ_протокольный-кадр
И НЕ любое из нижеперечисленного
(ПМ_кадр.АО = ДС
ИЛИ (ПМ_кадр.УК = установить-преемника
И ПМ_кадр.АП = ДС
И в-кольце)
ИЛИ (ПМ_кадр.УК = маркер
И ПМ_кадр.АП = ДС
И в-кольце)
ИЛИ (ПМ-кадр.УК = запрос-преемника-1
И (в-кольце ИЛИ желание-участвовать
ИЛИ ожидание-любой-передачи)
И ПМ_кадр.АП < ДС
И ПМ_кадр.АО > ДС)
ИЛИ (ПМ-кадр.УК = запрос-преемника-2
И (в-кольце ИЛИ желание-участвовать
ИЛИ ожидание-любой-передачи) И(ПМ-кадр.АПСДС)
ИЛИ ПМ-кадр.АО > ДС)
ИЛИ (ПМ_кадр.УК = кто-следующий
И ПМ_кадр.блок-данных = ПС) и в-кольце) ) )
маркер-передан : = false;
станция-ограниченной-активности := false; тайм-аут-неактивности-шины.старт (макс-незанятость-шины); ПМ_протокольный_кадр := false;
Состояние ЗАПРОС ВХОЖДЕНИЯ
ЗАПРОС- продолжение- 3. ЗАДЕРЖКА-
ВХОЖДЕНИЯ соперничества ЗАПРОСА
тайм-аут-соперничества. истек
И молчание-шины
И НЕ (ПМ_протокольный_кадр ИЛИ ПМ-кадр-данных ИЛИ пакет-помех) передача (УК = установить-преемника, АП = > ВМ, самый последний надежный АО
блок_данных = > ДС);
тайм-аут_неактивности-шины.старт (макс-незанятость- шины);
ЗАПРОС- потеря- 1. ДЕЖУРНОЕ
ВХОЖДЕНИЯ соперничества-2
(ПМ_протокольный-кадр ИЛИ ПМ-кадр-данных ИЛИ пакет-помех) Исчезновение соперничества и событие повторной обра-
ботки в состоянии 1
ОТСУТСТВИЕ ДЕЙСТВИЙ7.2.3.3. Состояние ЗАДЕРЖКА-ЗАПРОСА
ЗАДЕРЖКА- задержка- 2. ЗАПРОС-
ЗАПРОСА соперничества ВХОЖДЕНИЯ
ПМ_протокольный-кадр
И ПМ_кадр.УК = разрешение-соперничества
И счет-прохождений-соперничества < макс_число передач задержка до следующей соперничающей передачи
длительность задержки зависит от бит адреса, индексируемых
счетом-прохождений-соперничества
счет_прохождеіьий_соперничества : = счет-пірохождений-соперниче- ства + 1 тайм-аут-соперничества.старт (задержка-соперничества
(счет-прохождений-соперничества));
ПМ_протокольный-кадр := false;
ЗАДЕРЖКА- выигрыш- 5. ИСПОЛЬЗОВА-
ЗАПРОСА соперничества НИЕ-МАРКЕРА
ПМ-протокольный-кадр
И ПМ_кадр.УК = маркер
И ПМ_кадр.АП = ДС
И НЕ СС-известен
здесь передается маркер, поэтому станция остается в кольце в_кольце : = true;
СС_известен := true;
ПС := ПМ-кадр.АО;
счет_сбоев-передатчика := 0;
установить класс доступа в наивысшее значение класс_доступа := макс-класс-доступа;
УЗ-СОБЫТИЕ.уведомление (новый-преемник, СС);
тайм-аут_удерж_маркера.старт (время-удерж_маркера_ высш-приор);
ПМ_протокольный_кадр := false;
3. ЗАДЕРЖКА- «латание»- 5. ИСПОЛЬЗОВА-
ЗАПРОСА при-выигрыше НИЕ-МАРКЕРА
ПМ_протокольный-кадр И ПМ-кадр.УК = маркер
И ПМ_ікадр.АП = ДС
И СС_известен
Здесь 'передается маркер, поэтому станция возвращается в
кольцо
ПС := ПМ_кадр.АО;
счет_сбоев_передатчика := 0;
Установить наивысшее значение класса-доступа
класс_доступа := макс-класс-доступа;
тайм-аут_удержания-маркера. старт
(время-удерж_маркера-высш_приоритета);
ПМ_протокольный_кадр := false;
ЗАДЕРЖКА- потеря- 1. ДЕЖУРНОЕ
ЗАПРОСА соперничества-3
(счет-прохождений-соперничества < макс_счет_прохождений
И (ПМ-кадр-данных
ИЛИ (ПМ-протокольный-кадр
И ПМ_кадр.УК = маркер
И ПМ_кадр.АП /= ДС)
ИЛИ (ПМ_протокольный-кадр
И ПМ_кадр.УК /= маркер
И ПМ_кадр.УК /= установить-преемника
И ПМ_кадр.УК /= разрешение-соперничества )))
или (ПМ-протокольный-кадр
И ПМ_кадр.УК = разрешение-соперничества
И счет_прохождений_соперничества > = макс-счет-
прохождений)
—— Что-то еще продолжается, поэтому соперничество долж- но закончиться. Возврат в состояние ДЕЖУРНОЕ и повторная обработка события.
1. ДЕЖУРНОЕ
ОТСУТСТВИЕ ДЕЙСТВИИ3. ЗАДЕРЖКА- конец-
ЗАПРОСА соперничества
(ПМ-кадр_данных
ИЛИ (ПМ-протокольный-кадр
И ПМ_кадр.УК = маркер И ПМ.кадр.АП /= ДС) ИЛИ (ПМ-протокольный-кадр