Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kurs_lektsy_TS_AiU.doc
Скачиваний:
70
Добавлен:
31.03.2015
Размер:
2.39 Mб
Скачать

10.5 Методика построения программного обеспечения в ас на основе унифицированных магистрально-модульных интерфейсных систем.

Программное обеспечение (ПО) разделяется на категории:

1. ПО для управления объектом, сбора данных в реальном времени.

2. Средства обработки, преставления, документирования информации, уровни:

  • Аппаратно-ориентированное ПОдолжно содержать набор управления контроллером или адаптером.

Должно обеспечить прием и передачу данных по магистрали интерфейса в соответствии с протоколом обмена данными интерфейсной системы, также должно обеспечить установку в “1” или сброс в “0” данных линий управления интерфейсом, чтение статусных линий магистрали интерфейса.

Адаптеры:

  • С преимущественно программной реализацией функции управления;

  • С преимущественно аппаратной реализацией функции управления.

  • Интерфейсно-ориентированное ПОдолжно содержать набор процедур, обеспечивающих управление любым элементом системы. Основным вопросом является определение состава процедур, обеспечивающих все возможности интерфейса.

От разработчика требуется знание интерфейса системы. Международная электротехническая компания IECвыработала рекомендации для интерфейса КАМАКIEC-713.

  • Приборно-ориентированное ПОдолжно содержать набор процедур для управления определенными типами интерфейсных приборов.

  • Интегрированная среда разработчика.

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

Пример: LabVIEW, LabWindows CVI, LookOut, BridgeVIEW.

Лекция №11 Разработка интерфейсно-ориентированной библиотеки процедур для управления крейтом камак.

Библиотека разрабатывается в соответствии со стандартом IEC-713.

UnitKKP3;

Interface

{Инициализация КК}

ProcedureCCInit(c:integer); {c– номер крейта в диапазоне 1-4}

{Безадресные операции в крейте}

ProcedureCCCZ(c:integer); {ОперацияZ}

Procedure CCCC (c: integer); {Операция C}

Procedure CCCI (c: integer, I: boolean); {Установка (true) / Сброс (false) сигнала запрет I на магистрали}

{Адресные операции на магистрали}

Function CFSA (F, c, N, A: integer, var D: longint, var Q:integer): Boolean; {F(k), k=0÷31 – можно выполнить любую адресную операцию; c(i), i=1÷4; N(j), j=1÷23; A(m), m=0÷15; Q – 0/1, статусный сигнал; D – 24-разрядные данные; CFSA=true, если модуль возвратил X, иначе false}

Function CSSA (F, c, N, A: integer, var D:word, var Q:integer): Boolean; {Такая же функция, как и CFSA, но для 16-разрядных операций}

ProcedureCTGL(c:integer,varL:integer); {Чтение регистра состояния, возвращение вL}

FunctionHex(Date:longint); {Возвращает значениеDateв шестнадцатеричный формат}

Implementation

Const BA=$240; {Базовый адрес КК}

ConstK=? {Здесь нужно указать задержку на время выполнения операции на магистрали крейта}

{Аппаратно-ориентированное ПО}

ProcedureCAMACcikl; {Запрещает КАМАК-цикл в выбранном крейте и организует задержку ≈1 мкс}

Var i: integer;

Begin

Port[BA+7]:=$FF;

For i=0 to K do; End;

Procedure crate(i: integer); {Выбор крейта}

Begin

Dec(c);

Port[BA+$F]:=(c and 3) shl 4; End;

{Вспомогательные процедуры}

Function Hex (Date: longint): string;

Const H: array [0..15] of char = ‘0 1 2 3 4 5 6 7 8 9 A B C D E F

var D:longint;

Begin

D:=Date;

Hex:=’$’ + H[(D shr 20) and $F] + H[(D shr 16) and $F] + H[(D shr 12) and $F] + H[(D shr 8) and $F] + H[(D shr 4) and $F] + H[D and $F]; {Переменную D сдвигаем на 20 разрядов, оставляем 4 старших}

Function CFSA(F, c, N, A: integer; var D:longint; var Q:integer): boolean;

Var WP: array [0..3] of byte absolute D;

{Переменные расположатся

D

Wp[3]

Wp[2]

Wp[1]

Wp[0]

0

1

2

9

Ah

Bh

}

Begin

Crate(c);

Port[BA+3]:=A;Port[BA+7]:=F;Port[BA+5]:=N; {Можно выполнять в произвольном порядке}

If F in [16..23] then

Begin

Port[BA+2]:=Wp[2]; Port[BA+1]:=Wp[1]; Port[BA]:=Wp[0];

End;

{Запускаем КАМАК-цикл}

CAMACcikl;

Q:=Port[BA+$8] and 1;

CFSA:=(Port[BA+8] and 2)<>0;

If F in [0..7] then

Begin

Wp[0]:=port[BA+$B]; Wp[1]:=port[BA+$A]; Wp[2]:=port[BA+9]; Wp[3]:=0;

End;

Function CSSA(F, c, N, A: integer; var D:word; var Q:integer): boolean;

Var WP: array [0..3] of byte absolute D;

Begin

Crate(c);

Port[BA+3]:=A; Port[BA+7]:=F; Port[BA+5]:=N;

If F in [16..23] then

Begin

Port[BA+2]:=Wp[2]; Port[BA+1]:=Wp[1]; Port[BA]:=Wp[0];

End;

CAMACcikl;

Q:=Port[BA+$8] and 1;

CFSA:=(Port[BA+8] and 2)<>0;

If F in [0..7] then

Begin

Wp[0]:=port[BA+$B]; Wp[1]:=port[BA+$A]; Wp[2]:=port[BA+9]; Wp[3]:=0;

End;

Procedure CTGL(c: integer, var L: integer);

Begin

Crate(c);

L:=port[BA+8];

If (L and $80)=0 then L:=2 shr 2 else L:=0;

End;

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]