Автоматизация
Вид материала | Документы |
- В. И. Харитонов > К. И. Меша Одобрено методической > С. С. Драгунов комиссией факультета, 321.05kb.
- Темы курсовых проектов Автоматизация учета налогоплательщиков (НП) физических и юридических, 19.54kb.
- Автоматизация бухгалтерского учета нужна ли она?, 216.55kb.
- Программа вступительного экзамена по приему в магистратуру по специальности 6М070200, 225.94kb.
- Автоматизация работы программ расчета, 29.26kb.
- Автоматизация и моделирование работы предприятий по строительству промышленных объектов, 445.96kb.
- Автоматизация процессов мониторинга объектов железнодорожной инфраструктуры на основе, 315.84kb.
- К рабочей программе учебной дисциплины «Интегрированные системы проектирования и управления»», 31.58kb.
- Автоматизация процесса формирования индивидуальных учебных планов в системе переподготовки, 256.55kb.
- Темы курсовых работ По дисциплине «Бухгалтерские информационные системы» Автоматизация, 14.74kb.
Модуль счетчиков
Рассмотрим программное управление модулем счетчиков, описанным в § 2.5. Пусть на входы счетчиков модуля поступают импульсы от детекторов, регистрирующих излучение в двух точках экспериментальной установки. Требуется включить счетчики на некоторое время, например 100 с, и снять с них показания. Поскольку время экспозиции относительно велико, для его измерения можно воспользоваться системным таймером. В этом случае программа управления модулем может иметь следующую структуру:
инициализация модуля (начальная установка и задание необходимого режима);
задание экспозиции с помощью системной макрокоманды .MRKT и включение счетчиков;
блокировка задачи;
по истечении времени экспозиции — считывание информации со счетчиков и разблокировка задачи;
обработка полученной информации.
Текст программы (в системе РАФОС) будет выглядеть следующим образом:
.MCALL .MRKT, .SPND, .RSUM, .EXIT
CSR = 164000
А0 = 164140; модуль .на станции № 3
А1 = 164142
CNTR = —Bl0l; слово состояния модуля: ;
W1 = 1 (модуль работает как два счетчика);
W2 = О (работа без внешнего управления);
W3 = 1 (действие сигнала I разрешено)
MOV #1000,@#CSR ; генерация сигнала Z, сброс счетчиков, запрет счета
MOV #17.,@#CSR ; F(17) в РУС
MOV #CNTR,@#A0 ; установка режима
.MRKT #ARG,#TIME,#COMP ; задание времени экспозиции
MOV #26.,@#СSR ; разрешение счета
TST @#А0 ; в обоих счетчиках
.SPND ; блокировка задачи
. . . ; обработка полученной информации
.EXIT ; завершение задачи
ARG: .BLK.W 5 ; поле для аргументов макрокоманд
TIME: .WORD 0
.WORD 5000. ; 5000 тиков, т. е. 100 с
СОМР: MOV#24.,@#CSR ; запрет
TST @#А0 ;счета
MOV #2,@#CSR ; F(2) в РУС
MOV@#A0,R1 ; чтение и сброс 1-го счетчика
MOV@#A1,R2 ; чтение и сброс 2-го счетчика
.RSUM ; разблокировка задачи
RTS PC ; выход в задачу
Макрокоманда .MRKT устанавливает запрос к таймеру на время, указанное в поле с меткой TIME, и возвращает управление задаче, которая, разрешив счет в обоих счетчиках, блокируется макрокомандой .SPND.
По истечении заданного интервала времени монитор передает управление подпрограмме завершения, точка входа в которую (метка СОМР) указана среди аргументов макрокоманды .MRKT. Подпрограмма завершения, выполнив считывание информации из счетчиков в регистры R1 и R2, разблокирует задачу с помощью программного запроса .RSUM. По команде RTS PC подпрограмма завершения заканчивает свою работу и задача приступает к обработке полученной информации.
Интерфейс графического дисплея
Визуальное представление информации является важнейшим элементом организации автоматизированного эксперимента. В тех случаях, когда результаты измерений или обработки представляют собой всего несколько чисел, их можно инициировать с помощью модулей счетчиков с индикацией либо на экране алфавитно-цифрового дисплея. Однако чаще результатами измерений являются распределения изучаемых величин (записываемые в памяти ЭВМ в виде значительных по объему массивов), наглядное представление которых возможно только с помощью графических средств. Наряду с универсальными графическими терминалами, управляемыми непосредственно от ЭВМ, для наблюдения экспериментальных результатов используются также обычные телевизоры. Для управления телевизорами (черно-белыми и цветными) разработаны специальные модули К.АМАК. Эти модули обычно содержат запоминающее устройство (ЗУ) для хранения графического кадра. Содержимое ЗУ сканируется с частотой кадровой развертки телевизора и формирует видеосигнал, подаваемый на видеовход телевизора. Для изменения содержимого ЗУ (образования нового графического кадра) используются соответствующие команды К.АМАК.. Интерфейс телевизора обычно имеет широкий набор команд, позволяющий выводить на экран телевизора как графические изображения любого характера, так и тексты. При необходимости наблюдать одновременно несколько изображений (например, несколько графиков) их можно наложить друг на друга или вывести в разные части (квадранты) графического поля.
В рассматриваемом интерфейсе номер квадранта задается с помощью указания соответствующего субадреса: Так, квадранту № 1 (левый верхний) соответствует субадрес А(1), квадранту № 2 (правый верхний) —субадрес А (2), квадранту № 3 (левый нижний) — субадрес А (4) и квадранту № 4— субадрес А (8). Графический кадр может включать также любые два квадранта или все четыре. Так, для вывода изображения в верхнюю половину экрана следует указывать субадрес А(3), в нижнюю половину — субадрес А(12). Графическому кадру размером в целый экран отвечает субадрес А (15).
Для вывода на экран светящейся точки (точнее говоря, для записи координат точки в ЗУ интерфейса) используется функция F(16) с указанием соответствующего субадреса. Координаты точки передаются по линиям W, при этом разряды 0—7 содержат Y-координату, а разряды 8—15 — Х-координату. Таким образом, размер экрана составляет 256 на 256 точек. Для облегчения вывода графиков функций или спектров в интерфейсе предусмотрен режим автоматического инкремента Х-координаты. Для установки этого режима используется команда A(13)F(26), для отмены — A(13)F(24).
Рассмотрим в качестве примера вывод на экран телевизора спектра, накопленного в памяти ЭВМ. Спектр представляет собой массив из 256 целых чисел, нормированных на 256 (в этом случае отпадают проблемы масштабирования). Модуль управления телевизором установлен на станции № 3:
CSR = 164000
А13 = CSR + < 3 * 40> + <13. * 2> А15 = CSR + < 3 * 40> + < 15. * 2 >
MAS: .BLKB 256. ; массив со спектром
MOV #1000,@#CSR ; генерация сигнала Z
MOV #26.,@#CSR ; установка режима
TST @№А13 ; автоматического инкремента по X
MOV #MAS,R1
MOV #256.,R2 ; загрузка счетчика числа шагов цикла
OUT: MOVB (R1)+,@#A15 ; пересылка координаты очередной точки
SOB R2,OUT ; организация цикла
Амплитудно-цифровой преобразователь (АЦП)
АЦП измеряет амплитуды импульсов, поступающих на его вход, расположенный на передней панели, и преобразует их в цифровой код, записываемый в выходной регистр АЦП. При завершении преобразования амплитуды в код формируется сигнал L, который свидетельствует о готовности модуля к передаче в ЭВМ очередного кода.
В модуле используются следующие команды КАМАК:
F(26)A(1) —разблокировка входа преобразователя и сброс выходного регистра;
F(24)A(1) —блокировка входа преобразователя;
F(26)A(0) —разблокировка L-запроса;
F(24)A(0) —блокировка L-запроса;
F(8)A(0) —проверка L-запроса (используется при программировании в режиме циклической проверки готовности) ;
F(27)A(0) —проверка LAM-требования;
F(10)A(0) — сброс LAM-требования;
F(0)A(0) —считывание кода из выходного регистра и сброс LAM-требования;
F(9)A(0) —сброс выходного регистра, сброс LAM-требования,
разблокировка входа преобразователя;
F(2)A(0) —считывание кода, сброс выходного регистра, сброс LAM-требования, разблокировка входа.
АЦП можно обслуживать как в режиме прерываний, так и в режиме циклической проверки готовности. В первом случае существенно повышается эффективность работы ЭВМ, так как помимо обслуживания АЦП ЭВМ может выполнять другую работу (например, обслуживать другие модули); во втором случае обеспечивается минимальное время отклика на внешнее событие. Рассмотрим сначала программирование АЦП в режиме проверки готовности. Процедура управления работой АЦП состоит из следующих этапов:
генерация сигнала Z;
разблокировка входа преобразователя;
ожидание установки LAM-требования;
при обнаружении установки LAM-требования считывание кода, сброс выходного регистра и LAM-требования, разблокировка входа, ожидание следующей установки LAM-требования;
по окончании работы — блокировка входа преобразователя.
Коды, принимаемые из выходного регистра АЦП, могут обрабатываться различными способами. Наиболее распространенный способ заключается в организации в оперативной памяти ЭВМ массива, размер которого совпадает с числом уровней квантования АЦП, и в сортировке приходящих кодов по строкам этого массива — каналам. Сортировка заключается в добавлении 1 к содержимому канала, номер которого совпадает с пришедшим кодом.
Пусть АЦП установлен на станции 3, число уровней квантования составляет 256 и требуется зарегистрировать в общей сложности 60 000 импульсов.
Программа инициализации АЦП, приема кодов и сортировки их по каналам выглядит следующим образом:
SPE: .BLKW 256. ; область для накопления спектра
CNT: ;WORD 0 ; счетчик числа зарегистрированных импульсов
CSR = 164000
А0 = 164140
А1 = 164142
ST: MOV #1000,@#CSR ; генерация Z
MOV #26,@#CSR ; F (26) в РУС
TST @#A1 ; разблокировка входа преобразователя
MOV #27.,@#CSR ; F (27) в РУС
W: TST @#А0 ; проверка готовности. Q= 1? нет.
BPL W ; Повторение проверки готовности
MOV #2,@#СSR ; да. F (2) в РУС
MOV @#А0, R4 ; код из АЦП в R4
ASL R4 ; умножение на 2
INC SPE (R4) ; + 1 в канал
INC CNT ; + 1 в счетчик импульсов
CMP CNT, #60000. ; зарегистрировано заданное количество импульсов?
BEQ FIN ; да. Переход на завершение работы
BR W ; нет. Переход на ожидание готовности
FIN: MOV #24.,@#CSR ; F (24) в РУС
TST @#А1 ; блокировка входа АЦП
При использовании режима прерываний надо написать программу инициализации прерываний и программу обработки прерываний, содержательная часть которой (прием и сортировка кодов) не будет отличаться от соответствующего фрагмента последнего примера.
Программа инициализации прерываний выполняет следующие действия:
генерацию сигнала Z;
установку маски L-запросов в контроллере;
заполнение вектора прерываний;
разблокировку входа преобразователя;
разблокировку L-запроса в модуле;
разрешение прерываний в РУС;
блокировку задачи средствами ОС с целью ожидания прерываний либо выполнение фоновой программы.
Программа инициализации прерываний будет выглядеть следующим образом:
MOV #1000,@#CSR ; генерация Z
MOV #4,@#CSR+2 ; установка маски L-запроса (разряд 2) РЗМ
MOV #IТ,@#150 ; адрес ПОП в вектор прерывания
MOV #240,@#152 ; приоритет 5 в вектор прерывания
MOV #26.,@#СSR ; F (26) в РУС
TST @#А1 ; разблокировка входа преобразователя
TST @#А0 ; разблокировка L - запроса
MOV #100,@#СSR ; разрешение прерываний в РУС
.......... ; фоновая программа
Программа обработки прерываний, принимающая коды из АЦП и накапливающая отсчеты по каналам оперативной памяти, выглядит следующим образом:
IT: MOV #2,@#CSR F (2) в РУС
MOV @#А0, R4 ; код из АЦП в R4
ASL R4 ; умножение на 2
INC SPE (R4) ; + 1 в канал
INC CNT ; + 1 в счетчик импульсов
CMP #60000.,CNT ; зарегистрировано заданное количество импульсов?
BEQ FIN ; да
MOV #100,@:#CSR ; разрешения прерываний в РУС нет.
RTI ; Выход из прерывания
FIN: MOV #24.,@#CSR ; F (24) в РУС
TST @#А1 ; блокировка входа преобразователя
RTI ; выход из прерывания
Модуль памяти
Модуль предназначен для накопления массивов экспериментальных данных, поступающих на его вход в виде цифровых кодов. Использование модуля памяти для регистрации кодов от АЦП позволяет существенно повысить эффективность работы ЭВМ и снизить мертвое время установки, так как в этом случае прерывания, отнимающие значительное время, происходят не после регистрации каждого события, а после заполнения памяти, т. е. гораздо реже.
Основной элемент модуля —ЗУ на 1024 24-разрядных слова. ЗУ организовано аналогично оперативной памяти ЭВМ. С помощью регистра адреса (РА) происходит выбор требуемой ячейки памяти, а с помощью регистра данных (РД) —обмен данными с этой ячейкой — чтение или запись.
Предусмотрено четыре режима работы модуля, перекрывающие широкий диапазон применений.
1. Режим набора спектра. В этом режиме на вход модуля подаются обычно коды от аналого-цифрового преобразователя и такая система из двух модулей работает в качестве анализатора импульсов (амплитудного или временного). Входным сигналом для модуля памяти в этом случае является параллельный цифровой код, задающий адрес ячейки ЗУ, в которую затем автоматически добавляется единица. Сигнал L-запроса появляется в случае переполнения одной из ячеек, т. е. после накопления 224 событий в одном из каналов.
2. Буферный режим. В этом режиме ЗУ модуля используется для записи кодов в порядке их поступления, без всякой сортировки. Обычно накопление данных начинается с нулевой ячейки памяти. Сигнал L-запроса вырабатывается после переполнения регистра адреса, т. е. после регистрации 1024 кодов.
3. Мультисчетный режим (режим многоканального счета). В этом режиме входной информацией являются не цифровые коды, а электрические импульсы. Модуль определяет число импульсов, пришедших от начала измерений до некоторых моментов времени, задаваемых, например, таймером. Получаемые отсчеты запоминаются в последовательных ячейках ЗУ. Такой режим используется для исследования зависимости средней частоты поступления импульсов от времени, например, при изучении распадных кривых.
Входные импульсы поступают на счетный вход специального счетчика, входящего в состав модуля. Импульсом, приходящим на вход отметки времени, информация из счетчика записывается в очередную ячейку ЗУ. Последующие входные импульсы добавляются к содержимому счетчика. Сигнал L-запроса вырабатывается при переполнении счетчика.
4. Режим усреднения. Аналогичен режиму многоканального счета с той разницей, что возможно многократное повторение измерений с суммированием данных, накопленных в каждой ячейке памяти. В этом режиме используется еще один внешний импульс, определяющий начало нового цикла измерений. С приходом этого импульса сбрасывается содержимое регистра адреса, накопленные ранее данные из нулевой ячейки ЗУ передаются в счетчик и вновь поступающие импульсы добавляются к содержимому счетчика. После прихода импульса отметки времени число из счетчика передается в ту же ячейку ЗУ. Затем та же операция повторяется с 1-й ячейкой ЗУ и т. д. Сигнал L-запроса появляется в случае переполнения счетчика.
Модуль может находиться в двух состояниях: управления от ЭВМ и автономной работы. Переход из одного состояния в другое осуществляется программно. По команде NA (0) F (24) модуль переводится в состояние управления от ЭВМ, в котором входные данные не воспринимаются, запрещается выдача L-запроса и выполняются любые команды модуля. По команде NA (0) F (26) модуль переходит в режим приема внешних данных, в котором регистрируются входные импульсы, разрешается выработка L-запроса, но не воспринимаются команды, связанные с обменом данными с ЭВМ. В случае поступления от ЭВМ таких команд модуль не вырабатывает сигнал Q, что можно использовать для диагностики ошибок.
Для того чтобы считать в ЭВМ содержимое некоторой ячейки ЗУ, необходимо перевести модуль в состояние управления от ЭВМ, затем по команде NA (0) F (16) записать адрес ячейки в РА и по команде NA (0) F(0) считать ее содержимое в ЭВМ. Обычно требуется считать в ЭВМ содержимое не одной ячейки, а всего ЗУ. Для этого необходимо последовательно выполнить команды чтения для каждой из ячеек ЗУ.
Из двух особенностей модуля следует отметить выполнение команды NA (0) F (25) и безадресной команды Начальная установка. Обе эти команды выполняются одинаково, результатом их выполнения является сброс всех ячеек ЗУ, всех регистров модуля и L-запроса. Для выполнения всех операций сброса модулю требуется значительное время (около 1 мс), в течение которого он не выполняет адресуемые ему команды. Для того чтобы определить момент, когда кончается выполнение команды начальной установки, используется специальная команда А (0) F (27). В том случае, если сброс закончен, в ответ на эту команду модуль вырабатывает ответ Q. В противном случае ответ Q не вырабатывается.
Пусть модуль используется совместно с АЦП для накопления спектра. После окончания измерений содержимое ЗУ модуля следует переписать в оперативную память ЭВМ. Программа, выполняющая указанную операцию, выглядит следующим образом:
CSR= 164000
А0= 164040
SPECTR: .BLKW 1024. ; область для спектра
MOV #24.,@#СSR ; F (24) в РУС
TST @#А0 ; перевод модуля в режим управления от ЭВМ
MOV #16.,@#СSR ; F (16) в РУС
CLR @#А0 ; сброс регистра адреса ЗУ
MOV #1024., R0 ; начальная установка счетчика цикла
MOV #SРЕСТR, R1 ; адрес области для спектра в R1
MOV #2,@#CSR ; F (2) в РУС
XX: MOV @#А0, (Rl)+ ; перенос данных в память ЭВМ
SOB R0, XX ; цикл из 1024 шагов
Простейшая измерительная система
Для иллюстрации особенностей программного управления системой модулей рассмотрим простейший измерительный комплекс, содержащий два модуля КАМАК — аналого-цифровой преобразователь АЦП и интерфейс графического дисплея ИГД (рис. 9.3).
Рис. 9.3. Структурная схема измерительного комплекса
Оба модуля имеют выход на магистраль КАМАК, и нуждаются в программном управлении со стороны ЭВМ, алгоритм которого зависит от методики измерений. Обычно программа обслуживания установки содержит интерактивные средства управления как ходом измерений (пуск измерений, остановка, уничтожение накопленной информации и т. д.), так и процессом вывода регистрируемой информации на те или иные внешние устройства. В этом случае программный комплекс состоит из набора программных модулей, последовательность запуска которых определяется оператором с помощью команд, подаваемых с клавиатуры терминала. Взаимодействие программы и оператора реализуется с помощью системных средств программирования: директив ввода — вывода, блокировки задачи, обращения к системному таймеру и т. д. Ниже рассмотрена простейшая программа управления, не использующая системные средства.
Пусть с целью повышения скорости накопления событий информация из АЦП принимается в режиме программирования по готовности, и регистрируемые коды накапливаются в виде спектра, содержащего 256 каналов. Для визуального наблюдения за ходом измерений спектр постоянно выводится на графический дисплей, при этом каждое зарегистрированное событие модифицирует спектр. Предполагается, что число отсчетов в любом канале не превышает 255.
Программа, реализующая прием кодов из АЦП, накопление спектра и вывод его на экран графического дисплея, может выглядеть следующим образом:
CSR = 164000
N2А0 = CSR + < 2*40> ; АЦП на станции 2
N2A1 = CSR + <2 * 40> + 2
N5A1 5 = CSR + <5 * 40> + < 15. * 2>
; ИГД на станции 5
MOV #1000, @#CSR ; сигнал Z, очистка экрана
MOV #26., @#CSR
TST @#N2A0 ; разблокировка L-сигнала
TST @#N2A1 ; разблокировка входа АЦП
MOV #2, @#CSR ; подготовка к последующему
; считыванию кода из АЦП
W: TSTB @#CSR ; проверка разряда 7 РУС
BPL W ; разряд 7 сброшен, снова проверить
MOV @#N2A0,R0 ; в RO — код из АЦП
MOV R0,R2 ; то же в R2
ASL R0 ; умножение кода на два
INC SPECTR (R0) ; + 1 в соответствующий коду канал спектра
SWAB R2 ; код из АЦП в старшем байте R2
MOVB SPECTR (R0), R2 ; отсчет в канале в младшем байте R2
MOV R2,@#N5A15 ; вывод в графический файл новой точки
BR W ; переход на ожидание следующего срабатывания АЦП
Реальная программа может оказаться сложнее. Например, в приведенном варианте обойдены вопросы масштабирования спектра.
§ 9.3. СИСТЕМНЫЕ СРЕДСТВА ПРОГРАММИРОВАНИЯ АППАРАТУРЫ КАМАК
Как уже отмечалось, современные измерительно-вычислительные комплексы могут эффективно функционировать только под управлением операционных систем. При этом, с одной стороны, ОС предоставляют пользователю широкий набор средств по организации и управлению вычислительным процессом, а с другой — накладывают определенные ограничения на методы программирования задач реального времени. Организация аппаратно-программных комплексов реального времени, работающих в условиях случайных потоков входных событий, требует хорошего понимания и использования таких средств и алгоритмов ОС, как приоритеты и уровни выполнения программ; очереди ввода — вывода и подпрограмм завершения (асинхронных системных прерываний); средства управления памятью и др. Все это необходимо учитывать при составлении программ управления аппаратурой КАМАК.
Как уже отмечалось, съем экспериментальной информации с регистров КАМАК в большинстве случаев осуществляется в режиме прерываний. Этот режим дает возможность обрабатывать случайные события от многих источников информации, что отвечает условиям типичного физического эксперимента. Режим прерываний характеризуется относительно низкой скоростью обращения к внешним устройствам — процедура прерываний занимает от десятков до сотен микросекунд. В условиях случайных потоков входных событий конечное время их обработки может приводить к потерям и искажениям поступающей в ЭВМ информации. Распространенным методом борьбы с потерями является использование буферных запоминающих устройств, служащих для накопления небольших массивов данных, поступающих от измерительных элементов экспериментальной установки, например от детекторов излучений. В таких системах прерывание происходит не на каждое срабатывание детектора, а гораздо реже, лишь после заполнения промежуточной памяти, что позволяет заметно снизить частоту прерываний и уменьшить потери информации. Обработка каждого прерывания заключается в этом случае в передаче в память ЭВМ всего накопленного массива данных.
Другим способом уменьшения потерь и искажений является рациональное построение программы обработки прерываний.
Структура любой программы, реализующей режим прерываний, стандартна. В начале программы инициализируются прерывания — заполняются векторы прерываний обслуживаемых модулей и устанавливаются разряды разрешения прерываний в управляющих регистрах модулей и контроллера. После этого программа обычно блокируется с помощью соответствующих средств операционной системы в ожидании прерываний. Каждое прерывание автоматически приводит к передаче управления на соответствующую данному модулю подпрограмму обработки прерываний, которая чаще всего организует передачу информации из регистра (или регистров) КАМАК в память ЭВМ. Часто в ПОП осуществляется также и первичная обработка принятых данных, например их сортировка или форматирование, а также передача на внешние запоминающие устройства — НМД или НМЛ. После окончания ПОП управление передается назад в основную программу. Если программа по-прежнему заблокирована, то ЭВМ ожидает следующего прерывания.
Подпрограмма обработки прерывания может быть достаточно длинной. В этом случае, как уже отмечалось выше, возникает вероятность задержки или даже потери очередной порции информации, если следующее прерывание возникнет до того, как обработается предыдущее. В операционных системах мини-ЭВМ предусматриваются специальные средства, позволяющие в какой-то мере снизить задержки в регистрации поступающей информации.
Рассмотрим сначала особенности программирования аппаратуры КАМАК в системе ОС РВ.
Обработка прерываний в ОС РВ возможна на любом из четырех уровней:
уровень прерываний;
уровень отложенных прерываний;
уровень асинхронных системных прерываний;
уровень задачи.
Уровень прерываний, который автоматически устанавливается после каждого прерывания, характеризуется прежде всего тем, что процессор работает в системном режиме. При этом физический уровень приоритета процессора, определяемый содержимым разрядов 5—7 слова состояния процессора, обычно совпадает с уровнем линии запроса прерывания, к которой подключено ВУ. Таким образом, часть ПОП, выполняемая на уровне прерываний, может быть прервана только в том случае, если придет запрос на прерывание от внешнего устройства, находящегося на более высоком уровне. Длительность такого состояния не должна превышать 500 мкс.
Уровень отложенных прерываний, переход на который может быть организован в любом месте ПОП, характеризуется снижением физического уровня приоритета процессора до нуля. Эта часть ПОП может быть прервана запросом на прерывание от любого ВУ. Если ПОП предусматривает длительную (>500 мкс) обработку данных, это обработка должна вестись на уровне отложенных прерываний.
Серьезным ограничением обоих рассмотренных уровней обработки прерываний является запрет на выдачу программных запросов к монитору. Поэтому на уровнях прерываний и отложенных прерываний следует выполнять только самую срочную и относительно простую обработку информации.
При необходимости вызова каких-либо системных средств (службы времени, ввода — вывода, запуска или приостановки задач и т. д.) следует с уровня отложенных прерываний перейти на уровень асинхронных системных прерываний (АСП). На уровне АСП физический приоритет процессора равен нулю и разрешены любые прерывания и программные запросы. Операционная система поддерживает очереди программ обработки АСП, каждая из которых выполняется без помех до конца. Если по завершении программы обработки АСП выясняется, что очередь АСП не пуста, запускается следующая из очереди программа обработки АСП. После выполнения всех программ обработки АСП управление передается в программу пользователя.
Таким образом, уровень АСП имеет повышенных приоритет по отношению к задаче, однако для управляющих программ системы уровень АСП — это уже не уровень прерываний, а уровень задачи, на котором отсутствуют какие-либо ограничения на используемые программные средства. Находясь на уровне АСП, можно, в частности, разблокировать задачу и продолжить обработку поступившей информации уже на обычном уровне задачи. На уровень задачи следует относить трудоемкую, но несрочную обработку принятой с помощью ПОП информации.
Переход с уровня на уровень требует определенного времени. В то же время выход из прерывания в задачу можно осуществить и непосредственно, минуя уровни отложенных прерываний и АСП. С целью уменьшения непроизводительных затрат времени на переходы с уровня на уровень целесообразно организовать иерархическую обработку поступающей информации. На уровне прерываний можно выполнять минимально необходимую обработку, например прием данных из регистров КАМАК, в выделенный для этого буфер оперативной памяти и сосчитывание количества поступивших кодов. Немедленный выход после этого в задачу обеспечивает минимальное «мертвое время» ЭВМ. После обработки некоторого количества прерываний и накопления в буфере заданного объема данных можно перейти на уровень отложенных прерываний и обработать всю принятую группу данных, например рассортировать их по каналам, освободив буфер для приема следующей группы входных данных. Переход на следующий уровень — уровень АСП осуществляется еще реже, после сортировки заданного количества групп данных. Поскольку на уровне АСП разрешены программные запросы, его целесообразно использовать для «сброса» на НМД всей накопленной информации. Наконец, после завершения измерений можно перейти на уровень задачи для окончательной обработки полученных данных.
Как известно, операционная система запрещает непосредственную обработку прерываний на физическом уровне. Для организации режима прерываний в составе операционной системы предусмотрены специальные системные директивы. В системе ОС РВ это директива CINT $ .
Рассмотрим в качестве примера программирование работы амплитудно-цифрового преобразователя. Пусть АЦП занимает станцию 7 и имеет вектор прерывания по адресу 150. Запрос от АЦП маскируется разрядом 2 младшего байта РЗМ. Текст программы приема данных из АЦП в простейшем случае выглядит следующим образом:
.MCALL CINT $ C, SPND $ S, EXIT $ S, RSUM $ C, ASTX $ S
CSR= 164000
A0=16400+<7*40>
Al=A0+2
START: MOV #1000, @#CSR ; генерация сигнала Z
MOV #4,@#CSR+2 ; размаскирование L- запроса в контроллере
CINT $ C 150, 120000, IT, INTEN.PR4, AST
SPND $ S ; блокировка задачи в ожидании прерываний
....... ; обработка накопленного спектра
EXIT $ S ; завершение задачи
INTEN: MOV #26., @# CSR ; F(26) в РУС
TST @# А0 ; разблокировка входа АЦП
TST @# А1 ; разблокировка L-запроса в модуле
MOV #100, @# CSR ; разрешение прерываний в контроллере
RTS PC ; возврат в задачу
IT: MOV #2, @#CSR ; F (2) в РУС
MOV @#А0, R4 ; код из АЦП в R4
ASL R4 ; умножение на два
INC SPECTR (R4) ; инкремент канала
INC COUNT ; инкремент счетчика
; кодов
CMP СОUNT,#65000. ; спектр набран?
BEQ FIN ; да. Продолжение ПОП
MOV #100,@#СSR ; нет. Разрешение прерываний
RTS PC ; возврат из прерывания в задачу
FIN: MOV # 24.,@# CSR ; F(24) в РУС
TST @# А0 ; блокировка АЦП
TST @# А1 ; блокировка L-запроса в модуле
CALL @#$FORK2 ; переход на уровень отложенных прерываний
CLR @R3 ; служебная строка
CALL @#3QASTC ; переход на уровень АСП
RTS PC ; возврат в задачу
AST: RSUM $ C TASK2R ; снятие блокировки задачи
TST (SP)+ ; восстановление стека
ASTX $S ; выход из АСП в задачу
SPECTR: .BLKW 256. ; область под спектр
COUNT: .WORD 0 ; счетчик зарегистрированных кодов
.END START
В подготовительной части программы генерируется сигнал Z, устанавливается маска запросов (разблокируется запрос от данного модуля) и с помощью системной директивы СINТ$ происходит подсоединение к соответствующему вектору прерывания. После этого директива SPND $ блокирует задачу в ожидании прерываний.
В приведенном примере используется вектор прерываний по адресу 150. Метка IT характеризует начало ПОП, а метка INTEN — подпрограмму инициализации прерываний, в которой разблокируется АЦП и устанавливается разряд разрешения прерываний РУС.
В предлагаемом примере практически вся обработка прерываний от АЦП выполняется на уровне прерываний. Приходящие коды распределяются по каналам, под которые отведено 256 слов памяти, начиная с метки SPECTR. Кроме того, в ячейке COUNT фиксируется число пришедших кодов. Пока это число меньше заданного, ПОП завершается строкой разрешения прерывания в РУС и командой RTS PC выходит в задачу на ожидание следующего прерывания. После того как в спектре накопится заданное количество отсчетов, происходит переход на метку FIN, блокировка АЦП и переход на уровень отложенных прерываний командами CALL @#$FORK2 и CLR@R3. Уровень отложенных прерываний нужен в данном примере только для того, чтобы перейти на уровень асинхронных системных прерываний, что осуществляется строкой
CALL@#$QASTC,
по которой управление передается на метку AST, указанную в директиве CINT $.
На уровне АСП осуществляется единственное действие — разблокировка задачи программным запросом RSUM$ , в поле которой указано имя задачи TASK2R.
После выхода из АСП директивой ASTX $ управление передается в задачу, где и обрабатывается накопленный спектр.
Рассмотрим теперь программирование того же модуля в системе РАФОС. Структура программы, полностью эквивалентной рассмотренной выше, выглядит следующим образом:
.MCALL .PROTECT, .SPND, .INTEN, .SYNCH, .RSUM, .EXIT
CSR= 164000
А0 = 164000 + <7 * 40>
Al = A0 + 2
START: MOV #1000,@#CSR ; генерация сигнала Z
MOV #4,@#CSR+2 ; размаскирование L-запроса
.PROTECT #AREA,# 150 ; защита вектора прерываний
MOV #IТ,@#150 ; адрес ПОП в векторе прерываний
MOV #340,@#152 ; приоритет 7 в векторе прерываний
MOV #26.,@#CSR ; F(26) в РУС
TST @#А0 ; разблокировка входа АЦП
TST @#А1 ; разблокировка L- запроса в модуле
MOV #100,@#CSR ; разрешение прерываний в РУС
.SPND ; блокировка задачи в ожидании прерываний
....... ; обработка спектра
.EXIT ; завершение задачи
IT: .INTEN 4 ; переход в режим системы
MOV #2,@#CSR ; F(2) в РУС
MOV @#A0,R4 ; код из АЦП в R4
.......... ; строки инкремента канала и счетчика кодов
MOV #100,@#CSR ; разрешение прерываний в РУС
RTS PC ; выход из прерывания
FIN: MOV #24.,@#CSR ; F(24) в РУС
TST @#А0 ; блокировка АЦП
TST @#А1 ; блокировка L-запроса в модуле
.SYNCH #SBL ; переход на уровень подпрограмм завершения
NOP ; пустая команда
.RSUM ; разблокировка задачи
RTS PC ; возврат в задачу
AREA: .BLKW 5 ; область для аргументов макрокоманд
SBL: .WORD 0,1,0,0,0,2—1,0 ; область для элемента очереди подпрограмм завершения
Программный запрос .РРОТЕСТ защищает и закрепляет за данной задачей используемый вектор прерывания. Вектор прерывания, в отличие от предыдущего примера, загружается непосредственно в программе командами MOV. Строки подготовки аппаратуры КАМАК не отличаются от рассмотренных выше, кроме того, что они не оформлены в виде подпрограммы, а включены в основную программу. После завершения инициализации задача блокируется программным запросом .SPND в ожидании прерываний.
Как и в предыдущем случае, вся обработка происходит на уровне прерываний в режиме системы, переход на который осуществляется программным запросом .INTEN после того, как в результате прерывания от АЦП управление передается на метку IT.
После накопления заданного числа отсчетов управление передается на метку FIN и происходит блокировка входа преобразователя и L-запроса в модуле. Эти действия осуществляются по-прежнему на уровне прерываний. После этого с помощью программного запроса .SYNCH происходит переход на уровень подпрограмм завершения (аналог уровню АСП в ОС РВ); задача разблокируется и управление передается на строки обработки спектра.
7>5>2>