|
|
Программирование на Верхнем Уровне СУ
Библиотеки программных объектов СУ
class ApplicationMeasure
|
|
Открытые (public ) методы
|
|
|
ApplicationMeasure ()
|
|
|
~ApplicationMeasure ()
|
|
|
classPPmeasure* NewPPmeasure (void)
|
|
|
classPDmeasure* NewPDmeasure (void)
|
|
|
classTPmeasure* NewTPmeasure (void)
|
|
|
classTDmeasure* NewTDmeasure (void)
|
|
|
int MakeRun (int narg, char *sarg[])
|
|
|
void MakeEnd (int fl)
|
|
|
virtual int FunIni (int narg, char *sarg[])
|
|
|
virtual int FunSetup (void)
|
|
|
virtual int FunModel (void)
|
|
|
virtual int FunMake (int
fl_cntr_active, int fl_cntr_ready, int fl_cntr_error,
int fl_meas_active, int fl_meas_ready, int fl_meas_error)
|
|
|
virtual void FunEnd (void)
|
|
|
int MakeTopRun (int narg, char *sarg[])
|
|
|
void MakeTopEnd (void)
|
|
|
virtual int FunTopMake
(int i, int n_counter, int n_regime, int fl_model, int fl_cntr, int fl_meas)
|
|
Закрытые (protected ) Данные
|
|
|
class classAdrParWork AdrPar -
объект для работы с параметром СУ;
|
|
|
class classPPmeasure *PPmeasure -
переменная для определения объектов,
работающих с таблицами типа PASSPORT
для физических измеряемых параметров;
|
|
|
class classPDmeasure *PDmeasure -
переменная для определения объектов,
работающих с таблицами типа DATA
для физических измеряемых параметров;
|
|
|
class classTPmeasure *TPmeasure -
переменная для определения объектов,
работающих с таблицами типа PASSPORT
для технологических измеряемых
параметров;
|
|
|
class classTDmeasure *TDmeasure -
переменная для определения объектов,
работающих с таблицами типа DATA
для технологических измеряемых
параметров;
|
public
|
ApplicationMeasure ()
|
Инициализация процедуры PrgIni_SigIgnSet(NULL,NULL)
аварийного завершения работы программы
|
public
|
~ApplicationMeasure ()
|
Деструктор пустой.
|
public
|
classPPtable* NewPPmeasure (void)
|
Инициализация объекта,
работающего с таблицей типа PASSPORT
для физических измеряемых параметров.
Вызов процедуры AdrPar.Ini( (void*)(new classPPmeasure), N_PPmeasure )
Результат: NULL - обнаружена ошибка, код которой записан в переменную
prg_err,
иначе - адрес объекта в динамической памяти.
|
public
|
classPDtable* NewPDmeasure (void)
|
Инициализация объекта,
работающего с таблицей типа DATA
для физических измеряемых параметров.
Вызов процедуры AdrPar.Ini( (void*)(new classPDmeasure), N_PDmeasure )
Результат: NULL - обнаружена ошибка, код которой записан в переменную
prg_err,
иначе - адрес объекта в динамической памяти.
|
public
|
classTPtable* NewTPmeasure (void)
|
Инициализация объекта,
работающего с таблицей типа PASSPORT
для технологических измеряемых
параметров.
Вызов процедуры AdrPar.Ini( (void*)(new classTPmeasure), N_TPmeasure )
Результат: NULL - обнаружена ошибка, код которой записан в переменную
prg_err,
иначе - адрес объекта в
динамической памяти.
|
public
|
classTPtable* NewTDmeasure (void)
|
Инициализация объекта,
работающего с таблицей типа DATA
для технологических измеряемых параметров.
Вызов процедуры AdrPar.Ini( (void*)(new classTDmeasure), N_TDmeasure )
Результат: NULL - обнаружена ошибка, код которой записан в переменную
prg_err,
иначе - адрес объекта в динамической памяти.
|
public
|
int MakeRun (int narg, char *sarg[])
|
Процедура содержит алгоритм работы измерительной ПП СУ. Алгоритм в упрощенном виде с пояснениями приведен ниже:
- Инициализация:
int fl=0;
- Измерение, обработка данных:
unsigned short int cmd, rc, res;
while (!fl)
{
- чтение команды пользователя:
sleep( SV_WAIT_SEC );
if (SvFun_GetCmd( &cmd )) goto Mend; cmd &= ~CMD_MASTER;
- выполнение команды пользователя:
if (cmd == CMD_ENDWORK) break; // завершить работу программы
if (cmd == CMD_PRGLOAD) // изменить состояние записи в файл-протокол
{
if (PrgDB_cmt()) PrgDB_cmtSet( 0 );
else PrgDB_cmtSet( 1 );
}
if (cmd == CMD_NEWDATA) // перезагрузить программу с диска
{ fl=2; break; }
if (cmd == CMD_PUTDATA) // обнулить параметры интерфейса WS-EC
{ SvFun_ECclear(); goto Mend; }
- чтение значений параметров из других задач СУ:
if (FunSetup()) goto Mend;
- опрос Контроллера Оборудования (КО) -
rc=SvFun_ECready(); SvFun_PutResult();
- обработка результата опроса КО:
switch( rc )
{
case 0x0000: break; // результат не готов
case 0x0100: // программа в КО не работает
SvFun_Send( RC_EREC ); // запись ошибки для Супервизора Установки
break;
case 0x0001: // результат готов, ошибок нет
/* формирование семафоров
int fl_cntr_active; // активность процесса управления в КО
int fl_cntr_ready; // готовность процесса управления в КО
int fl_cntr_error; // ошибка процесса управления в КО
int fl_meas_active; // активность процесса измерения в КО
int fl_meas_ready; // готовность процесса измерения в КО
int fl_meas_error; // ошибка процесса измерения в КО
*/
if (fl_meas_active && // если процесс измерения в КО активен
fl_meas_ready && // если процесс измерения в КО готов
!fl_meas_error) // если нет ошибки процесса измерения в КО
{
if (FunModel()) break; // моделирование данных измерений
if (AdrPar.MeasureRead()) break; // чтение измеренных значений из КО
}
if (FunMake( fl_cntr_active, fl_cntr_ready, fl_cntr_error,
fl_meas_active, fl_meas_ready, fl_meas_error )) break;
res=prg_err;
if (fl_meas_active && // если процесс измерения в КО активен
fl_meas_ready && // если процесс измерения в КО готов
!fl_meas_error) // если нет ошибки процесса измерения в КО
{
if (AdrPar.MeasureSave()) break; // запись измерений в статистику
PrgIni_StatPlane(); // увеличить счетчик статистики
}
SvFun_Send( res ); // запись результата для Супервизора Установки
break;
case 0x0101: // процесс в КО завершился, есть ошибка
SvFun_Send( RC_ERHARDWARE ); // запись ошибки для Супервизора Установки
break;
case 0x1000: // программа разрушилась
fl=2; break; // выполнить перезагрузку программы с диска
default: break; // ошибка БД на Рабочей Станции
} // конец switch
- анализ результата работы алгоритма:
Mend:
if (prg_err) // если есть ошибка
switch (SvFun_ReRun( prg_err )) // анализ ошибки
{
case 1: fl=2; break; // перезагрузить программу с диска
case 2: fl=1; break; // завершить работу программы
default: SvFun_Send( prg_err ); // запись ошибки для Супервизора Установки
break;
}
} // конец while
- Завершение работы:
PrgDB_cmtSet( 1 ); // разрешить запись в файл-протокол
|
public
|
int MakeEnd (int fl)
|
Процедура вызывается при завершении работы программы:
- fl=1 - нормальное завершение;
- fl=0 - аварийное завершение.
PrgDBa_closeAll();
SvFun_Free(fl);
|
public
|
virtual int FunIni (int narg, char *sarg[])
|
Пустая процедура, которую можно переопределить.
Вызывается в начале работы программы для инициализации данных.
|
public
|
virtual int FunSetup (void)
|
Пустая процедура, которую можно переопределить.
Вызывается перед
проверкой готовности данных в Контроллере Оборудования для чтения значений параметров из
других задач СУ.
|
public
|
virtual int FunModel (void)
|
Пустая процедура, которую можно переопределить.
Вызывается при готовности результата
моделируемого процесса измерения в Контроллере Оборудования.
Выполняет моделирование значений измеряемых технологических параметров.
|
public
|
virtual int FunMake (int fl_cntr_active, int
fl_cntr_ready, int fl_cntr_error, int fl_meas_active, int fl_meas_ready, int fl_meas_error)
|
Пустая процедура, которую можно переопределить.
Вызывается при
готовности результата процесса измерения в Контроллере Оборудования для выполнения
обработки измеренных данных.
- fl_cntr_active -
семафор, означающий активность процесса управления в Контроллере Оборудования;
- fl_cntr_ready -
семафор, означающий готовность процесса управления в Контроллере Оборудования;
- fl_cntr_error -
семафор, означающий наличие ошибки процесса управления в Контроллере Оборудования;
- fl_meas_active -
семафор, означающий активность процесса измерения в Контроллере Оборудования;
- fl_meas_ready -
семафор, означающий готовность процесса измерения в Контроллере Оборудования;
- fl_meas_error -
семафор, означающий наличие ошибки процесса измерения в Контроллере Оборудования.
|
public
|
virtual void FunEnd (void)
|
Пустая процедура, которую можно переопределить.
Вызывается перед
завершением работы программы, например, для освобождения
динамической памяти, занятой в процессе работы.
|
public
|
int MakeTopRun (int narg, char *sarg[])
|
|
public
|
void MakeTopEnd (void)
|
|
public
|
virtual int FunTopMake(int i, int n_counter, int
n_regime, int fl_model, int fl_cntr, int fl_meas)
|
|
Автор © Клименков Е.В.
|
|
|
|