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

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

Библиотеки программных объектов СУ

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[])
Процедура содержит алгоритм работы измерительной ПП СУ. Алгоритм в упрощенном виде с пояснениями приведен ниже:
  1. Инициализация:
    int fl=0;
  2. Измерение, обработка данных:
    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
  3. Завершение работы:
    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)
 

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