ГНЦ ИФВЭ
ОУ У-70
Система Управления комплекса У-70  

Программирование на Верхнем Уровне СУ

Библиотеки алгоритмов СУ

Эти процедуры должны быть вызваны в начале работы ПП для определения начальных параметров.
PrgIni_Start - инициализация глобальных переменных
PrgIni_End - завершение работы ПП
PrgIni_SigIgnSet - определение процедур для аварийного завершения работы ПП
PrgConnectRegime_Get - инициализация глобальных переменных для управляющей ПП

PrgApp_Define - получить параметры определения задачи в СУ


void PrgIni_Start (int fl_open, int narg, char *sarg[]);

Процедура вызывается в качестве первого оператора в ПП

файла-протокола для записи  информации при отладке ПП:
 
fl_open=0 - не открывать файл,
 
fl_open=1 - открыть файл, если указан параметр при вызове программы (см.ниже),
 
fl_open=2 - открыть файл без условий;
narg, sarg - параметры функции main.

Определяются следующие параметры из списка sarg:

"PL=" - номер плоскости в таблице описания задач "U70_APPLICATIONS";
"regime=" - указывает номер режима (для управляющей программы);
 
"regime/" - указывает номер строки в таблицах для определения списка связанных режимов процедурой PrgConnectRegime_Get (для управляющей программы);
"task=" - указывает номер задачи;
"sys=" - указывает номер подсистемы;
"direct=" - указывает плоскость координат: 1/2/3 (горизонтальная/ вертикальная/ горизонтальная и вертикальная);
"model" - означает работу ПП в режиме моделирования (без обращения к таблицам БД в контроллере оборудования);
"cmt" - означает вывод в файл-протокол;
"regime=" - указывает номер режима (для управляющей программы);
"bmp=" - имя bitmap-файла.

Название программы и один из первых 5 (key) перечисленных параметров будут идентифицировать каждую запись, сделанную программой в файл-протокол:

PrgDB_ini (sarg[0], key ? sarg[key] : NULL);

Процедура делает запись в файл-протокол:

if (PrgDB_cmt())
  PrgFile_WriteAlarm(
    "PrgIni_Start: sys=%d direct=%d regime=%d task=%d debug=%d\n",
    prg_n_system, prg_n_direct, prg_n_regime, prg_n_task, prg_debug);
void PrgIni_End (void);

Процедура вызывается в качестве последнего оператора в ПП и производит запись в файл-протокол:

if (PrgDB_cmt())
  PrgFile_WriteAlarm("**** End of process: pid=%d ****\n", getpid());
void PrgIni_SigIgnSet (int (*App_Result)(unsigned short int), void  (*App_End)(void));

Процедура служит для фиксирования процедур-функций программы, которые будут вызваны специальной процедурой при получении сигнала SIGFPE Alpha-процессора. Эта процедура аварийно завершает работу программы и производит запись в файл-протокол:

if (PrgDB_cmt()) PrgFile_WriteAlarm("signal %d->exit", signum);

Поэтому обычное предназначение фиксируемых процедур-функций следующее:

App_Result - записывает семафор "конец работы ПП"  с кодом ошибки RC_ERPROCESSOR в паспорт физических параметров;
App_End - производит все необходимые действия при завершении работы программы.
int PrgConnectRegime_Get (int narg, char *sarg[]);

Определяет номер базового режима и список связанных режимов, которые записаны пользователем с помощью Диалоговой Программы в таблицы "U70_PD_CONNECT_BASE", "U70_PD_CONNECT_W", "U70_PD_CONNECT_A".

Номер строки для чтения одинаков для этих таблиц и определяется в процедуре PrgIni_Start:

char prg_treg_list[PRG_NUM_REGIME2] - список связанных режимов в рабочих и наладочных циклах работы ЛУ-30 и У-1.5;
char prg_treg_base - номер базового режима;
int prg_treg_flag - семафор работы со связанными режимами:
  =0 нет связанных режимов;
  =1 связанные режимы есть только в рабочих циклах;
  =2 связанные режимы есть в рабочих и наладочных циклах.

Если связанных режимов нет, то

prg_treg_flag=0,
prg_treg_base равен номеру заданного режима, определенного в процедуре PrgIni_Start,
prg_treg_list[prg_treg_base-1]=1.

Результат записывается  в файл-протокол.

Замечание. В настоящее время наладочные циклы не рассматриваются отдельно от рабочих - каждому рабочему циклу соответствует один наладочный. Поэтому число режимов, анализируемых во вновь создаваемых ПП, определяется константой PRG_NUM_REGIME1 вместо константы PRG_NUM_REGIME2, равной 2*PRG_NUM_REGIME1, а формируемая данной процедурой избыточная информация в них не используется.

int PrgApp_Define (int narg, char *sarg[], struct prg_app_struct *app, unsigned short int *type, short int *arc, char *file_bmp);

Определяет из параметров командной строки вызова программы адрес описания данной задачи, т.е. номер плоскости таблицы "U70_APPLICATIONS", и записывает в структуру app. Затем из описания задачи определяет следующие параметры:

type - тип ПП;
arc - адрес в каталоге архива ("холодные" копии), т.е. номер строки в таблице "U70_REGIMES_NAMES";
file_bmp - название файла графического формата.

Результат записывается  в файл-протокол.

Автор © Клименков Е.В.