next up previous contents
Next: Динамический расчет траектории Up: Программное обеспечение системы управления Previous: Программное обеспечение системы управления

Структура и функции ядра

Ядро состоит из трех программных секций, размещаемых в ОЗУ контроллерной ЭВМ в перечисленном порядке:

1.
Абсолютная секция, описывающая точки входа процедур прерывания от ИРПР, таймера, ошибок арифметического переполнения, тайм-аута шины и сбоя питания.
2.
OTS$I - перемещаемая секция чистого кода программы.
3.
USER$D - перемещаемая секция постоянных и переменных данных программы, где с последней метки программы (track) размещается расчетная траектория движения.

При таком расположении программных секций загружаемая часть ядра размещается в начальных адресах и занимает менее 5% объема оперативной памяти, так что функция загрузки - IFDRL выполняется за доли секунды.

Алгоритмы функционирования основных модулей ядра изображены на рис. [*].

  
Figure: Алгоритмы функционирования основных модулей ядра.
\begin{figure}\hspace{1cm}{\vbox
{
\centerline{\hbox{\psfig{figure=contr.ps,wi...
...ght=12cm}
\psfig{figure=clock.ps,width=8cm,height=12cm}
}
}
}
}
\end{figure}

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

Таким образом, можно считать, что в контроллере параллельно существуют три процесса (рис. [*]):

1.
фоновый - CONTR;
2.
оперативный с низким приоритетом, возбуждаемый портом ввода - RES;
3.
оперативный с высоким приоритетом, возбуждаемый таймером - CLOCK.

 
 
Table: Функции асинхронных процедур.
Код Имя Что делает
команды модуля  
@ AGAIN Включает питание привода каретки.
а DONE Завершает текущий процесс и выключает питание привода.
б ACSLR Осуществляет пуск и ускоренное движение вправо.
ц ACSLF То же, влево.
д VELR Осуществляет пуск и движение по расчитанной траектории.
е POINS Осуществляет установку каретки в заданную точку.
ф FINAL Выключает все внешние устройства, останавливает процессор.
г INPUT Осуществляет ввод таблицы параметров и рассчитывает начало
    траектории.

Функция первого процесса будет рассмотрена в разд. [*], здесь же удобнее начать с процесса RES.

Процесс RES запрещает прерывания от входного порта, сохраняет в стеке необходимые регистры оперативного назначения (РОН) и регистр состояния крейт-контроллера, затем читает содержимое порта и использует его как указатель в таблице процедур (команд), одну из которых вызывает. Завершается RES восстановлением данных в обратном порядке и установкой бита разрешения прерывания.

RES может вызывать ряд процедур, оформленных в виде компактных модулей. Функции этих модулей перечислены в табл. [*].

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

Процесс CLOCK начинает функционировать сразу, как только CONTR оформит стек и снизит приоритет процессора. Структура подпрограммы, реализующей этот процесс, состоит из основного модуля и нескольких ветвей, планируемых процедурами из RES или внешними событиями. Основной модуль имеет точку входа CLOCK, указываемую вектором обработки прерываний от таймера и завершается инструкцией RTI. Внутри, как и в RES, производится сохранение регистров и состояния КАМАК и вызывается процедура, на которую указывает содержимое ячейки MODE. То есть любая из процедур может записать в MODE имя желаемой операции, которая прервет на следующем такте любую другую (в том числе и себя) и гарантированно будет выполняться в течение 10 мс. Аналогичную роль выполняет содержимое ячейки - BMODE, являющееся указателем процедуры, выполняемой при срабатывании датчика начального положения каретки.

 
 
Table: Работа синхронных модулей.
Имя Вызывает Меняет Что делает
модуля модули MODE  
DMEAS По BMODE - Формирует импульсы опроса датчика и считывает код угла поворота, по сигналу концевого выключателя вызывает процедуру, указываемую BMODE.
TIMZER DMEAS - Формирует код величины рассогласования между текущим отсчетом датчика и нулем, при многократном вызове позволяет устанавливать каретку в нулевое положение.
POINT DRIVER + То же, для произвольной точки.
FONDLY DRIVER + Формирует задержку движения для регистрации фонового уровня неба.
MEASU DRIVER + Отрабатывает текущее значение координаты, задаваемой массивом TRACK, по достижении границы массива устанавливает флаг перерасчета траектории.
DRIVER DMEAS - Измеряет величину рассогласования заданной и действительной траекторий, рассчитывает величину управляющего воздействия на ЦАП.
RETRN   - Пустая операция.

Таким образом, несмотря на наличие многопроцессного функционирования, сохранена быстрая реакция на изменение внешних условий, с задержкой не более одного временного дискрета.
next up previous contents
Next: Динамический расчет траектории Up: Программное обеспечение системы управления Previous: Программное обеспечение системы управления
Vladimir Chernenkov
2000-10-09