Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АФЭ_уч_пособие_3Б.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
20.94 Mб
Скачать

Сложные распределенные системы удаленного сбора данных и управления на базе интерфейса camac.

Интерфейс САМАС (Computer Application for Measurement And Control) используются при создании сложных (до 1200 приборов измерения и управления) и/или значительно территориально распределенных (до 30 км) систем измерения и управления. Интерфейс САМАС был разработан для автоматизации наиболее сложных экспериментов в ядерной физике.

Основной стандартизованой частью системы САМАС является унифицированный блочный каркас (крейт) в который устанавливается до 23 функциональных модулей (ФМ) и контроллер крейта (КК). Функциональный модуль САМАС представляет собой законченный прибор, имеющий определенное функциональное назначение.

Основные группы ФМ:

  • Модули ввода/вывода аналоговых сигналов (усилители с программируемым коэффициентом усиления, аналоговые мультиплексоры, АЦП, ЦАП).

  • Модули ввода/вывода цифровых сигналов (цифровые регистры ввода/вывода, счетчики импульсов).

  • Модули временной синхронизации (генераторы импульсов, таймеры, модули времени, цифровые часы).

  • Модули-контроллеры исполнительных устройств (электродвигателей, шаговых двигателей, реле).

Количество крейтов в комплексе САМАС может быть от 1 до 62. Максимальная территориальная удаленность крейта от ЭВМ составляет 500м * N, где N - количество крейтов в комплексе.

Основные стандартизованные структуры САМАС-комплексов представлены на рис. 76 и 77.

Рис. 76

Рис. 77

Принцип программного управления ФМ САМАС

ФМ в крейте полностью подчинены командам КК и, как правило, не имеют ручного управления.

КК управляет ФМ с помощью адресуемых команд, имеющих структуру NAF[W], где

N - номер станции в крейте, в которую установлен ФМ. (N=1..23).

A - субадрес, адрес устройства внутри ФМ, (А = 0..15).

F - функция, (F=0..31).

W - слово данных (W1..W24)

и безадресных команд

Z - общий сброс,

C - селективный сброс.

ФМ является источником сигналов:

R - слово данных (R1..R24).

X - команда принята. Вырабатывается функциональным модулем как подтверждение расшифровки модулем адресованной ему команды. Х=0 может означать, что:

  • адресуемый модуль в крейте отсутствует;

  • адресуемый модуль неисправен;

  • адресованная модулю команда не может быть выполнена, так как она отсутствует в списке команд.

Q - сигнал готовности. Вырабатывается в ответ на команду "Проверка Q" как признак окончания операции в ФМ или готовности модуля к циклу обмена данными с контроллером крейта.

L - запрос на обслуживание. Инициативный сигнал ФМ. Используется при организации обмена по прерыванию.

Каждый ФМ САМАС имеет определенный набор команд управления.

Пример команд управления модулем 2ЦАП-10 (двухканальным 10-разрядным цифроаналоговым преобразователем):

  • F(16)A(0) - передача кода в первый ЦАП с линий W1-W10;

  • F(16)A(1) - передача кода во второй ЦАП с линий W1-W10;

  • F(17)A(0) - передача кода в оба ЦАП одновременно с линий W1-W10;

  • F(18)A(0) - передача кода в первый ЦАП и +1 - во второй.

  • C - сброс регистров данных ЦАП.

Программные средства управления аппаратурой САМАС.

Программное управление аппаратурой САМАС от ЭВМ реализуется с помощью библиотеки программных модулей (процедур, функций, макрокоманд). Основные группы программных модулей:

  • Процедуры (функции, макрокоманды) системного действия: Z, C.

  • Процедуры (функции, макрокоманды) одиночного действия действия:

  • Управления без передачи данных;

  • Записи;

  • Чтения

  • Процедуры (функции, макрокоманды) для работы с X, Q, L - сигналами (чтение, установка, проверка, сброс)

Минимальный функционально полный набор таких процедур, с помощью которого можно реализовать все возможные виды взаимодействия ЭВМ с аппаратурой САМАС включает 5 процедур, входящих в 1 и 2 группы.

Пример функционально полного набора процедур:

  • Zero - генерация сигнала Z;

  • Clear - генерация сигнала С;

  • Act(N,A,F) - выполнение одиночной адресуемой САМАС-операции без передачи данных;

  • ActW2B(N,A,F,DATA_OUT) - выполнение САМАС-операции записи с передачей слова данных из ЭВМ модулю САМАС;

  • ActR2B(N,A,F,*DATA_IN) - выполнение САМАС-операции чтения с передачей слова данных из модуля САМАС в ЭВМ.

Пример простейшей программы на языке C++ передачи кода 1000 в первый ЦАП модуля 2ЦАП-10:

#include “camlib1.h”/* подключение библиотеки процедур управления САМАС-аппаратурой */

int i;

int DAC = 12; /* присвоение символического имени станции крейта, в которую установлен модуль 2ЦАП-10*/

void main ()

{

Numb(0);Zero;Clear; /*Начальная инициализация аппаратуры САМАС*/

/* передача кода 1000 в первый ЦАП модуля 2ЦАП-10*/

ActW2B(DAC,0,17,1000); }

Более полный набор процедур функций на языке С, предоставляющий больше возможностей программисту для написания наглядных и эффективных программ управления САМАС - аппаратурой может включать более 50 функций.

Библиотечные функции для работы с аппаратурой САМАС.

Программное управление аппаратурой САМАС от ЭВМ через контроллер крейта. Контроллер крейта САМАС типа ККМ содержит 10 программно адресуемых регистров и рассчитан на управление от интерфейсной карты ISA. Обращение к регистрам контроллера ККМ производится через так называемые порты ввода вывода. Адреса регистров контроллера и формат данных в регистрах приведены в таблице 33.

Табл. 33

Номер регистра

Адрес ПВВ

Формат данных

Функция

0

3А0

W24…..W17

Старший байт записываемых данных

1

3А1

W16…W9

Cредний байт

2

3А2

W8…W1

Младший байт

3

3А3

х х х х А8 А4 А2 А1

Субадрес ФМ

4

3А4

х х х F16 F8 F4 F2 F1

Номер функции F

5

3A5

х х х N16 N8 N4 N2 N1

Номер станции N

6

3A6

х х х х х х C Z

Функции C, Z

7

3A7

х х х х х х х х

Запуск генератора цикла САМАС

8

3А8

L L16 L8 L4 L2 L1 X Q

LAM, X, Q

9

3A9

R24…R17

Старший байт считываемых данных

A

3AA

R16…R9

Средний байт

B

3AB

R8…R1

Младший байт

F

3AF

х х NC NC х х х х

Номер крейта

Обращение к портам ввода/вывода в прикладной программе, работающей в ОС Windows 2000/XP

Обращение к портам ввода/вывода в прикладной программе, работающей в ОС Windows 2000/XP, возможно только при использовании специального драйвера, например, GiveIO.sys. При этом синтаксис операторов ввода и вывода: _inp(<адрес ПВВ>) и_outp(<адрес ПВВ>,<данные>). Возможно использование и других драйверов: totalio.sys или inpout32, при этом синтаксис операторов ввода и вывода будет другой. В среде LabWindows/CVI 8.0 синтаксис операторов ввода и вывода: inp(<адрес ПВВ>) и outp(<адрес ПВВ>,<данные>).

Пример программирования операции NA(0)F(25) при использовании драйвера GiveIO.sys:

на языке С++:

_outp(0x3A5,N); /* Пересылка в КК номера станции N */

_outp(0x3A3,0); /* Пересылка в КК кода субадреса A */

_outp(0x3A4,25); /* Пересылка в КК кода функции F */

_outp(0x3A7,0); /* Запуск генератора САМАС-цикла. Пересылаемое число может быть любое */

на Ассемблере:

mov DX,3A5h; mov AL,N; out DX,AL

mov DX,3A3h; mov AL,0; out DX,AL

mov DX,3A4h; mov AL,25; out DX,AL

mov DX,3A7h; mov AL,0; out DX,AL

Программирование операций управления аппаратурой и передачи данных на ассемблере целесообразно использовать в следующих случаях:

  • при написании процедур (функций) библиотеки (аналогичной camlib);

  • для достижения большей скорости выполнения САМАС - операций в критических с точки зрения быстродействия участках программы, написанной на языке высокого уровня. Для этого фрагмент критической части программы выполняется в виде ассемблерной вставки.

Базовый адрес платы сопряжения с контроллером крейта ККМ устанавливается равным 3A0h по умолчанию, но может быть изменен пользователем.

Библиотечные функции определяются устройством контроллера крейта и интерфейса, через который контроллер крейта управляется от компьютера.

Наименование и назначение библиотечных функций могут быть одними и теми же для любого языка программирования. Ниже приведено описание основных библиотечных функций на языке С++.

Примеры программного кода библиотечных функций

(библиотека camlib.cpp)9

void Numb(int Num) /* Функция устанавливает номер активного контроллера крейта */

{ _outp(0x3AF,Num);

_outp(0x3A7,1); }

void Zero(void) /* Функция инициализирует операцию Z (общий сброс) в активном крейте. Используется после функции Numb */

{ _outp(0x3A6,1);

_outp(0x3A7,1); }

void Clear(void) /*Функция инициализирует операцию C (селективный сброс) в активном крейте. Используется после функции Numb */

{ _outp(0x3A6,2);

_outp(0x3A7,1); }

}

void Act(int N, int A, int F) /* Функция инициализирует операцию управления без передачи данных в адресуемом функциональном модуле в активном крейте */

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A7,1);

}

void ActW1B(int N, int A, int F, int dat1) /* Функция инициализирует операцию передачи (записи) однобайтового слова данных из компьютера в адресуемый функциональный модуль в активном крейте */

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A2,dat1);

_outp(0x3A7,1);

}

void ActR1B(int N, int A, int F, int *dat1) /* Функция инициализирует операцию передачи (чтения) однобайтового слова данных из адресуемого функционального модуля в активном крейте в компьютер */

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A7,1);

*dat1=_inp(0x3AB);

}

/****************************************************************************/

/*Программа формирует пилообразное напряжение. Используется */

/*модуль 2ЦАП-10. Язык программирования – C++ */

/***************************************************************************/

#include <utility.h>

#include “camlib.h”

#include <windows.h>

int i,DAC = 12;

void main ()

{

Numb(48);Zero;Clear; /*Начальная инициализация аппаратуры САМАС*/

for(;;)

{

for (i=0; i<1024;i++)

{

/*Передача нарастающего кода i модулю 2ЦАП-10*/

ActW2B(DAC,0,17,i);

Sleep(1);

}

}

}

/*******************************************************/

/* Программа тестирования аппаратуры САМАС. */

/* Проверяется работа модулей 2ЦАП-10 и АЦП-14 */

/* Выход модуля 2ЦАП-10 соединен со входом АЦП-14 */

/*******************************************************/

#include <utility.h>

#include <camlib.h>

int ADC = 9, DAC = 12;

unsigned int data;

double y[1024];

int datain, dataout, i;

void main ()

{

Numb(48);Zero;Clear; /*Начальная инициализация аппаратуры САМАС*/

for (i=0;i<100;i++)

{

datain=i;

ActW2B(DAC,0,17,datain);

Act(ADC,0,25);

Delay(0.1);

ActR2B(ADC,0,0,&dataout);

y[i]=dataout/1.0;

}

}

/*****************************************************************/

/* Программа иллюстрирует использование функций библиотеки */

/* управления САМАС-аппаратурой в программах автоматизации: */

/* эксперимента. Программа формирует, используя модуль 2ЦАП-10, */

/* входное воздействие на объект управления */

/* Для управления аппаратурой САМАС в проект включен файл camlib.c, */

/* содержащий библиотеку функций управления аппаратурой САМАС */

/*****************************************************************/

#include <utility.h>

#include <userint.h>

#include <analysis.h>

#include <ansi_c.h>

#include "sample2.h"

#include "camlib1.h"

int handle;

double datapoints[1000];

double data_adc[1000];

main()

{

handle = LoadPanel (0, "sample2.uir", PANEL);

DisplayPanel (handle);

RunUserInterface ();

}

int AcquireData(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{

int trace_color, shape, i, j, dat;

double phase=90;

int DAC=10, RUR=15, ADC=12, COM=9, C=48;

int dat_adc, dadc;

if (event == EVENT_COMMIT) {

/*Выбор вида и формирование входного воздействия на объект*/

GetCtrlVal (handle, PANEL_WFM, &shape);

switch (shape) {

case 0 :

SineWave (128, 1.0, 50e-3, &phase, datapoints);

for (i=0;i<100;i++) datapoints[i]=datapoints[i]*50+50;

break;

case 1 :

SquareWave (128, 1.0, 50e-3, &phase, 50.0, datapoints);

for (i=0;i<100;i++) datapoints[i]=datapoints[i]*50+50;

break;

case 2 :

TriangleWave (128, 1.0, 50e-3, &phase, datapoints);

for (i=0;i<100;i++) datapoints[i]=datapoints[i]*50+50;

break;

case 3 :

for (i=0;i<100;i++) datapoints[i] = rand()/32767.0 * 100.0;

break;

}

DeleteGraphPlot (handle, PANEL_GRAPH, -1, 1);

PlotY (handle, PANEL_GRAPH, datapoints, 100, VAL_DOUBLE,

VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_BLACK);

Numb(C);Zero;Clear; /*Начальная инициализация аппаратуры САМАС*/

for(j=0;j<4000;j++) /*Внешний цикл введен для удобства*/

/*наблюдения сигнала на осциллографе*/

{

for (i=0;i<100;i++)

{

ActW2B(DAC,0,17,datapoints[i]*5);/*Задание входного воздействия на объект*/

}

}

}

return(0);

}

int Shutdown(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{

if (event == EVENT_COMMIT)

QuitUserInterface(0);

return(0);

}

В ид интерфейса пользователя прведен на рис 78.

Рис. 78

Контрольные вопросы и задачи

  1. Для каких целей используется магистраль крейта САМАС?

  2. Какую роль выполняет интерфейсная часть модуля?

  3. Каково назначение адресуемых регистров в контроллере крейта?

  4. Какую функцию выполняет L-запрос модуля?

  5. Какую функцию выполняет сигнал Q;

  6. Составить программу формирования с помощью модуля 2ЦАП-10 сигнала

  7. С оставить программу ввода в ЭВМ значений непрерывного сигнала с периодичностью 0,1сек. Количество измерений - 50. Использовать модули МК-1 и АЦП-14. Канал МК-1 - третий.

Лабораторная работа. Распределенные системы удаленного сбора данных и управления с интерфейсом CAMAC

Целью лабораторной работы является изучение методики проектирования на языке С библиотек функций для работы с модульной аппаратурой CAMAC, предназначенной для создания распределенных систем удаленного сбора данных и управления промышленными объектами, создания программ реального времени автоматизации измерения и управления, сеpвисной части пpогpамм, включающей сpедства гpафического пользовательского интеpфейса.

Схема лабораторной установки

Рис. 79

Программа работы

1. Программирование элементарных функций управления и ввода/вывода.

Составить и отладить программы выполнения элементарных операций управления аппаратурой САМАС:

  1. Z;

  2. Передача кода 1000 в оба ЦАП, модуль 2ЦАП-10;

  3. Запуск АЦП, модуль АЦП-14;

  4. Чтение результата преобразования АЦП, модуль АЦП-14;

  5. Запись кода включенного канала, модуль РУР-1Р.

2. Составить с учетом имеющейся таблицы соединений аппаратуры САМАС с объектом и отладить программы выполнения элементарных операций управления объектом (МН-10М).

  1. Включение реле пуска и реле останова;

  2. Передача аналогового сигнала на вход объекта;

  3. Ввод в ЭВМ аналогового сигнала с выхода объекта

3. Измерить с помощью системного таймера время выполнения основных САМАС-операций. Таблицу результатов измерения времени выполнения САМАС-операций составить в форме табл. 34 :

Табл. 34

Операция

Система программирования

Ассемблер

ANSI C

LabWindows/CVI

Visual С++

Запись в порт

Чтение из порта

Zero, Clear

Act

ActW2B

ActR2B

4. Составить программу генерации тестовых сигналов с помощью модуля 2ЦАП-10:

  1. пилообразного;

  2. гармонического;

  3. импульсного.

Контролировать тестовые сигналы с помощью осциллографа.

5. Изучить основные способы привязки процессов управления аппаратурой и обработки данных в программах автоматизации эксперимента к реальному времени.

Освоить технику измерений точности временной привязки процессов управления аппаратурой и обработки данных в программах автоматизации эксперимента к реальному времени.

Освоить приемы оптимизации программ реального времени по критерию максимально возможной точности временной привязки .

Указания к выполнению п.5

При выполнении п.5 задания изучить приведенные примеры временной синхронизации процессов управления аппаратурой и обработки данных в программах автоматизации эксперимента и составить программы по одному из вариантов задания:

В программе реализовать:

1) регистрацию с помощью модуля АЦП-14 значений аналогового сигнала с шагом дискретности по времени - 10 мсек;

2) формирование и вывод управляющего воздействия Y=1+Sin(t) с шагом дискретности по времени 100 мксек.

1.2. Использовать один из способов привязки к реальному времени:

  1. с программируемыми временными задержками;

  2. с ожиданием готовности источника синхронизации ;

  3. с прерыванием от источника синхронизации;

  4. с управлением от источника синхронизации.

1.3. В качестве источника синхронизации использовать;

  1. Таймер цифровой;

  2. Генератор импульсов "Clock Generator";

  3. Модуль времени МВ-1.

Примечание: выход генератора импульсов или модуля времени МВ-1 соединить с входом L модуля 2ЦАП-10, модуль 2ЦАП-10 использовать как источник сигнала готовности и запроса на прерывание.

Использовать ФМ САМАС: АЦП-14, Таймер цифровой, Clock Generator, МВ-1, 2ЦАП-10.

Изучить приведенные примеры измерения шага временной синхронизации с помощью системного таймера; используя системный таймер IBM PC, измерить фактически полученный шаг дискретности измерений во времени в программе по п.1 и вычислить погрешность измерения временной привязки.

Оптимизировать программы по п.5, используя в необходимых случаях программирование операций управления аппаратурой САМАС на физическом уровне на языке С++ и Ассемблер, с целью уменьшения погрешности временной привязки. Измерить фактически полученный шаг дискретности измерений во времени после оптимизации программы и измерить достигнутую погрешность временной привязки.

Содержание отчета

  1. Схема лабораторной установки.

  2. Задание к работе.

  3. Тексты разработанных программ с комментариями.

  4. Таблицы результатов измерений временных характеристик.

  5. Текст программы автоматизации эксперимента.

  6. Вид панели пользовательского интерфейса.

  7. Результаты измерений и обработки данных эксперимента (в графической форме).

  8. Выводы.

ПРИЛОЖЕНИЕ 1

Система команд управления модулями САМАС.

АЦП-14

(Диапазон входных сигналов +/- 7В, 13 разрядов, 14-й разряд - знаковый, масштаб преобразования - 1 ед. кода/мВ, время преобразования - 2 мс)

F(25)A(0) - пуск АЦП. L=1 после окончания преобразования.

F(0)A(0) - чтение результатов преобразования АЦП с линий R1-R14,

R14 - знаковый разряд, 1- минус.

F(8)A(0) - проверка L.

F(10)A(0) - сброс L.

F(26)A(0) - разрешение L.

F(24)A(0) - запрет L.

2ЦАП-10

(Двухканальный 10-разрядный ЦАП, масштаб преобразования - 5 мВ/ед.кода, время преобразования - 10 мкс; одноразрядный регистр запросов)

F(16)A(0) - передача кода в первый ЦАП с линий W1-W10.

F(16)A(1) - передача кода во второй ЦАП с линий W1-W10.

F(17)A(0) - передача кода в оба ЦАП одновременно с линий W1-W10.

F(18)A(0) - передача кода в первый ЦАП и +1 - во второй.

F(8)A(0) - проверка L.

F(10)A(0) - сброс L.

F(26)A(0) - разрешение L.

F(24)A(0) - запрет L.

С - сброс регистров данных ЦАП.

Z - сброс LAM - статуса, запрет L.

Модуль - коммутатор МК-1

(Релейный 16-канальный коммутатор, время коммутации - 10 мс)

F(16)A(0) - запись кода номера канала с линий W1-W4, L=1

через 10 мс после приема команды.

F(25)A(0) - включение следующего по номеру канала, L=1 через 10 мс

после приема команды.

F(0)A(0) - чтение кода включенного канала.

F(8)A(0) - проверка L.

F(10)A(0) - сброс L.

F(26)A(0) - разрешение L.

F(24)A(0) - запрет L.

F(27)A(0) - опрос L.

Z - сброс LAM - статуса, запрет L, включение первого канала.

Регистр управления реле РУР-1Р

F(16)A(0) - запись номеров включаемых каналов с линий W1-W16, каждый

бит соответствует одному каналу.

F(26)A(0) - разрешение выдачи выходного сигнала.

F(0)A(0) - чтение номеров включенных каналов с линий R1-R16.

F(9)A(0) - сброс входного регистра.

F(24)A(0) - сброс статусного регистра и запрет выдачи выходного сигнала.

F(27)A(0) - опрос статусного регистра. Ответ - по Q. Q=1, если выдача

разрешена.

Z, C - сброс входного и статусного регистров.

Таймер цифровой

(Тик таймера = 1 мкс)

F(16)A(0) - запись кода интервала времени, разряды 1-24.

F(16)A(1) - запись кода интервала времени, разряды 25-40.

F(16)A(2) - запись кода диапазона интервала времени.

F(26)A(1) - пуск таймера.

F(8)A(15) - проверка L.

F(10)A(0) - сброс L.

F(26)A(0) - разрешение L.

F(24)A(0) - запрет L.

ПРИЛОЖЕНИЕ 2

/***************************************************************/

/* ПАКЕТ ПРИКЛАДНЫХ ПРОГРАММ ДЛЯ */

/* УПРАВЛЕНИЯ САМАС -АППАРАТУРОЙ (Visual C++ ) */

/* Start СТАРТ САМАС-ЦИКЛА */

/* Zero ГЕНЕРАЦИЯ СИГНАЛА ZERO */

/* Clear ГЕНЕРАЦИЯ СИГНАЛА CLEAR */

/* Inhibit ГЕНЕРАЦИЯ СИГНАЛА INHIBIT */

/* Numb УСТАНОВКА НОМЕРА АКТИВНОГО КК */

/* Enable РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ОТ IRQ2 */

/* Disable ЗАПРЕТ ПРЕРЫВАНИЯ ОТ IRQ2 */

/* NumLAM ОПРЕДЕЛЕНИЕ НОМЕРА СТАНЦИИ МОДУЛЯ */

/* ИСТОЧНИКА ЗАПРОСА НА ПРЕРЫВАНИЕ */

/* TSTL ПРОВЕРКА СИГНАЛА L */

/* TSTQ ПРОВЕРКА СИГНАЛА Q */

/* TSTX ПРОВЕРКА СИГНАЛА X */

/* Act ВЫПОЛНЕНИЕ ОДИНОЧНОЙ САМАС-ОПЕРАЦИИ */

/* БЕЗ ПЕРЕДАЧИ ДАННЫХ */

/* ActW1B ВЫПОЛНЕНИЕ ОДИНОЧНОЙ САМАС-ОПЕРАЦИИ */

/* C ПЕРЕДАЧЕЙ 8-ми РАЗРЯДНОГО СЛОВА ДАННЫХ */

/* ЭВМ - САМАС */

/* ActW2B ВЫПОЛНЕНИЕ ОДИНОЧНОЙ САМАС-ОПЕРАЦИИ */

/* C ПЕРЕДАЧЕЙ 16-ти РАЗРЯДНОГО СЛОВА */

/* ДАННЫХ ЭВМ - САМАС */

/* ActW3B ВЫПОЛНЕНИЕ ОДИНОЧНОЙ САМАС-ОПЕРАЦИИ */

/* C ПЕРЕДАЧЕЙ 24-х РАЗРЯДНОГО СЛОВА */

/* ДАННЫХ ЭВМ - САМАС */

/* ActR1B ВЫПОЛНЕНИЕ ОДИНОЧНОЙ САМАС-ОПЕРАЦИИ */

/* C ПЕРЕДАЧЕЙ 8-ми РАЗРЯДНОГО СЛОВА */

/* ДАННЫХ САМАС - ЭВМ */

/* ActR2B ВЫПОЛНЕНИЕ ОДИНОЧНОЙ САМАС-ОПЕРАЦИИ */

/* C ПЕРЕДАЧЕЙ 16-ти РАЗРЯДНОГО СЛОВА */

/* ДАННЫХ САМАС - ЭВМ */

/* ActR3B ВЫПОЛНЕНИЕ ОДИНОЧНОЙ САМАС-ОПЕРАЦИИ */

/* C ПЕРЕДАЧЕЙ 24-х РАЗРЯДНОГО СЛОВА ДАННЫХ */

/* САМАС - ЭВМ */

/* -Q ВЫПОЛНЕНИЕ САМАС-ОПЕРАЦИИ */

/* МЕТОДОМ ПОВТОРЕНИЯ С ПРОВЕРКОЙ СИГНАЛА Q */

/* -L ВЫПОЛНЕНИЕ САМАС-ОПЕРАЦИИ */

/* МЕТОДОМ ПОВТОРЕНИЯ С ПРОВЕРКОЙ СИГНАЛА L */

/* ПАРАМЕТРЫ: N - НОМЕР СТАНЦИИ */

/* A - СУБАДРЕС */

/* F - НОМЕР ФУНКЦИИ */

/* dat1 - МЛАДШИЙ БАЙТ */

/* dat2 - СРЕДНИЙ БАЙТ */

/* dat3 - СТАРШИЙ БАЙТ */

/* Num - НОМЕР АКТИВНОГО КОНТРОЛЛЕРА КРЕЙТА */

/***************************************************************/

void Start(void);

void Zero(void);

void Clear(void);

void Inhibit(void);

void Numb(int);

void Enable(void);

void Disable(void);

int NumLam(void);

int TSTL(void);

int TSTQ(void);

int TSTX(void);

void Act(int N, int A, int F);

void ActW1B(int N, int A, int F, int W);

void ActW2B(int N, int A, int F, int W);

void ActW3B(int N, int A, int F, int W);

void ActR1B(int N, int A, int F, int *data);

void ActR2B(int N, int A, int F, int *data);

void ActR3B(int N, int A, int F, int *data);

void Act_Q(int N, int A, int F);

void ActW1B_Q(int N, int A, int F, int W);

void ActW2B_Q(int N, int A, int F, int W);

void ActW3B_Q(int N, int A, int F, int W);

void ActR1B_Q(int N, int A, int F, int *data);

void ActR2B_Q(int N, int A, int F, int *data);

void ActR3B_Q(int N, int A, int F, int *data);

void Act_L(int N, int A, int F);

void ActW1B_L(int N, int A, int F, int W);

void ActW2B_L(int N, int A, int F, int W);

void ActW3B_L(int N, int A, int F, int W);

void ActR1B_L(int N, int A, int F, int *data);

void ActR2B_L(int N, int A, int F, int *data);

void ActR3B_L(int N, int A, int F, int *data);

int dat1, dat2, dat3;

void Start(void)

{ _outp(0x3A7,1);}

void Zero(void)

{ _outp(0x3A6,1);

_outp(0x3A7,1); }

void Clear(void)

{ _outp(0x3A6,2);

_outp(0x3A7,1); }

void Numb(int Num)

{ _outp(0x3AF,Num);

_outp(0x3A7,1); }

int TSTQ(void)

{ return(_inp(0x3A8) & 1); }

void Act(int N, int A, int F)

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A7,1);

}

void ActW1B(int N, int A, int F, int dat1)

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A2,dat1);

_outp(0x3A7,1);

}

void ActR1B(int N, int A, int F, int *dat1)

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A7,1);

*dat1=_inp(0x3AB);

}

}

ПРИЛОЖЕНИЕ 3

/*************************************************/

/* ПРОГРАММА ИЗМЕРЯЕТ ВРЕМЯ ВЫПОЛНЕНИЯ */

/* ФРАГМЕНТА ПРОГРАММЫ */

/************************************************/

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#include <time.h>

#include "camaclib.c"

int i;

void main (void)

{

clock_t start, end;

start = clock();

for (i=0;i<1000000;i++)

/* Здесь нужно записать текст фрагмента */

/* программы */

end = clock();

printf("The time, mksec: %f\n", (end - start) / CLK_TCK);

}

Пример программы на Visual C++ измерения времени выполнения отдельных фрагментов программного кода приведен в разделе «Высокоскоростные системы сбора данных и управления с интерфейсом ISA»

ПРОГРАММИРОВАНИЕ ОПЕРАЦИЙ УПРАВЛЕНИЯ АППАРАТУРОЙ И ОБРАБОТКИ ДАННЫХ В РЕАЛЬНОМ ВРЕМЕНИ

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

Система называется системой реального времени (СРВ), если правильность ее функционирования зависит не только от логической корректнности вычислений, но и от времени, за которое эти вычисления производятся. То есть для событий, происходящих в такой системе, то, КОГДА эти события происходят, так же важно, как и логическая корректность самих событий.

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

Системы реального времени должны обладать также еще одним свойством – оперативно реагировать на сигналы временной синхронизации или внешние события (например, срабатывание датчика аварийной защиты).

Системы реального времени – это системы, которые предсказуемо (в смысле времени реакции) реагируют на непредсказуемые (по времени появления) события. (Martin Timmerman)

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

Другими словами, СРВ призваны решать задачи, в которых важна не только правильность решения, но и сроки, в которые эти решения принимаются.

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

В большинстве случаев о задачах жесткого реального времени говорят тогда, когда нарушение сроков критического обслуживания может нанести значительный материальный или физический ущерб.

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

СРВ может быть представлена как совокупность трех компонент: прикладного программного обеспечения, опереционной системы реального времени и аппаратного обеспечения.

Алгоритмы временной синхронизации

Для привязки к реальному времени процессов управления с аппаратурой, передачи и обработки данных с использованием таймера могут быть использованы четыре основных алгоритма:

  • С использованием временных задержек;

  • С ожиданием готовности таймера;

  • С прерыванием от таймера;

  • С управлением от таймера.

С использованием временных задержек

Начальная инициализация аппаратуры.

I:=1,N.

Запуск АЦП

Программируемая задержка DT (DT - интервал дискретности измерений).

Чтение результата преобразования АЦП, обработка.

Переход к п. 2, если I<N. N - количество регистрируемых значений аналогового сигнала.

Конец.

Рис. 80

С ожиданием готовности таймера

Начальная инициализация аппаратуры.

I:=1,N;

Запуск таймера на DT.

Запуск АЦП.

Программируемая задержка на время преобразования АЦП.

Чтение результата преобразования АЦП, обработка.

Опрос готовности таймера.

Проверка готовности таймера, переход к п.7, если готовности нет.

Сброс готовности таймера, переход к п. 2, если I<N.

Конец.

Рис. 81

С управлением от таймера

Начальная инициализация аппаратуры.

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

I:=1,N.

Опрос готовности АЦП.

Если готовности нет, переход к п.4.

Чтение результата преобразования АЦП, обработка.

Переход к п.2, если I<N.

Конец.

Рис. 82

С прерыванием от таймера

А Программа обработки прерывания.

Сброс готовности таймера.

Запуск АЦП.

Программируемая задержка на время преобразования АЦП.

Чтение результата преобразования АЦП, сохранение результата в массиве Х(i).

Инкремент I.

Перезапуск таймера на DT.

Передача кода команды возврата из прерывания в ЭВМ.

Б. Фоновая программа. Раздел инициализации.

Начальная инициализация аппаратуры;

Установка вектора прерывания в таблицу векторов прерывания (Загрузка стартового адреса программы обработки прерывания по адресу $A).

Разрешение прерывания программы ЭВМ от IRQ2.

Разрешение формирования запроса на прерывание в таймере.

Запуск таймера на DT.

В. Фоновая программа. Основная часть.

1.Отображение и обработка Х(I). Переход к п. 2, если I>=N.

2. Запрет прерывания программы ЭВМ от IRQ2.

3. Конец.

Программирование основных видов обмена данными.

Основными видами взаимодействия ЭВМ с аппаратурой являются передача команд управления от ЭВМ к ФМ и обмен данными. Команды и данные могут передаваться в режимах синхронного, асинхронного обмена, обмена по КПДП и по прерыванию. Возможность реализации всех этих видов обмена обеспечивается аппаратными средствами.

  • Формирователями сигналов готовности в интерфейсной части ФМ.

  • Формирователем запроса на прерывание .

  • Контроллерами прерываний и обмена по КПДП в ЭВМ.

Самые главные управляющие сигналы — это стробы обмена, то есть сигналы, формируемые процессором и определяющие моменты времени, в которые производится пересылка данных по шине данных, обмен данными.

При синхронном обмене процессор заканчивает обмен данными самостоятельно, через раз и навсегда установленный временной интервал выдержки (tвыд), то есть без учета интересов устройства-исполнителя;

При асинхронном обмене процессор заканчивает обмен только тогда, когда устройство-исполнитель подтверждает выполнение операции специальным сигналом (так называемый режим handshake — рукопожатие).

Рис. 83.Синхронный обмен и асинхронный обмен.

Достоинства синхронного обмена — более простой протокол обмена, меньшее количество управляющих сигналов. Недостатки — отсутствие гарантии, что исполнитель выполнил требуемую операцию, а также высокие требования к быстродействию исполнителя.

Достоинства асинхронного обмена — более надежная пересылка данных, возможность работы с самыми разными по быстродействию исполнителями. Недостаток — необходимость формирования сигнала подтверждения всеми исполнителями, то есть дополнительные аппаратурные затраты.

Синхронный обмен.

Синхронным называют обмен, производимый по инициативе ЭВМ, в темпе, определяемом ЭВМ.

Синхронный обмен целесообразно использовать при работе с "быстрыми" устройствами. Синхронный обмен можно использовать при работе и с "медленными" устройствами, но в этом случае в программе нужно предусматривать в необходимых случаях программируемые временные задержки.

Асинхронный обмен.

Асинхронным называется обмен, производимый по инициативе ЭВМ в темпе, определяемом внешним устройством..

В качестве сигнала синхронизации обмена выступает т.н. сигнал готовности ФМ, который вырабатывается в ФМ в момент окончания им операции и фиксируется в триггерном регистре состояния. Сигналами готовности в ФМ САМАС являются сигналы Q и L.

Обмен по прерыванию

Обменом по прерыванию называют обмен, производимый по инициативе внешнего устройств. Организация обмена по прерыванию необходима в тех случаях, когда программирование процессов управления аппаратурой и/или обработки данных должно быть организовано "в реальном времени". Понятие "в реальном времени" означает, что процессы управления аппаратурой и обработки данных должны быть синхронизированы с внешними по отношению к ЭВМ событиями. Простейшим примером для системы измерения и управления является выполнение тех или иных действий (например, опроса датчиков) с синхронизацией от таймера.

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

Программа обмена по прерыванию содержит три раздела:

  • Инициализации;

  • Фоновой программы;

  • Программы обработки прерывания.

Рис. 84

В разделе фоновой программы обязательным элементом является запрет прерываний от IRQx перед окончанием программы.

В разделе программы обработки прерывания должны программироваться:

  1. Запоминание содержимого основных регистров ЭВМ в момент возникновения прерывания;

  2. Сброс запроса на прерывание в источнике запроса;

  3. Обслуживание прерывания;

  4. Восстановление содержимого основных регистров ЭВМ;

  5. Передача команды возврата из прерывания контроллеру прерываний ЭВМ.

Примечание: выполнение п.п. А, Г необходимо только в программах на ассемблере.

Контрольные примеры и задачи

1. Составить программу ввода данных по 8 каналам. Интервал дискретности измерений - 10 мс задавать с помощью таймера, количество отсчетов - 10000. Способ синхронизации: а) с временными задержками; б) с ожиданием готовности таймера; в) с управлением от таймера.