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

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

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

Пример 1 управляющей ПП

Текст управляющей ПП, которая выполняет следующие функции:

редактирует физические параметры типа "статус";
поддерживает работу с архивами физических управляющих параметров;
поддерживает режимы работы ускорительного комплекса;
преобразует значения физических параметров в технологические;
записывает значения технологических параметров в Контроллер Оборудования (КО).

ПП использует следующие таблицы БД ССУДА:

Имя таблицы Тип таблицы Тип параметров Для каких режимов Кол. плоскостей Кол. строк Кол. столбцов Номер копии
B_PP_EXA  PASSPORT Физические все 8 5 стандарт 1
B_PP_EXA_T PASSPORT Физические связанные 1 5 стандарт 1
B_PD_EXA_1 DATA Физические 1 33 20 5 1
B_PD_EXA_2 DATA Физические 2 33 20 5 1
B_PD_EXA_3 DATA Физические 3 33 20 5 1
B_PD_EXA_4 DATA Физические 4 33 20 5 1
B_PD_EXA_5 DATA Физические 5 33 20 5 1
B_PD_EXA_6 DATA Физические 6 33 20 5 1
B_PD_EXA_7 DATA Физические 7 33 20 5 1
B_PD_EXA_8 DATA Физические 8 33 20 5 1
B_PD_EXA_T DATA Физические связанные 33 20 5 1
B_TP_EXA PASSPORT Технологи- ческие все 8 5 стандарт 1
B_TD_EXA DATA Технологи- ческие все 8 20 5 1, 3
B_TD_READY DATA Технологи- ческие все 8 5 1 1, 3
#include <stdio.h>
#include <stdlib.h>
#include "/prg/prg.h"
#include "/prg/prgclass.h"

/*******************************************************************
*/
class AppCntr : public ApplicationControl
{
  class classPPcontrol *PP_tbl; // описания физ. управл. параметров
  class classPDcontrol *PD_tbl; // значения физ. управл. параметров
  class classTPcontrol *TP_tbl; // описания техн. управл. параметров
  class classTDcontrol *TD_tbl; // значения техн. управл. параметров
  class classTDcontrol *TD_ready; // семафоры готовности для КО
 
  int FunIni( int narg, char *sarg[] );
  int FunEditOnly( short int narchive );
  int FunDataConvert( void );
};
/*******************************************************************
преобразовать значения физических параметров в технологические
*/
int AppCntr::FunDataConvert( void )
{
  int i, j;
  int natt=PD_tbl->GetNatt();  // кол. параметров
  int ntup=PD_tbl->GetNtup();  // кол. значений каждого параметра
  unsigned char *pd;
  unsigned short int *td;
                                      // преобразование
  for (i=0; i<natt; i++)
  {
    pd=(unsigned char*)PD_tbl->GetAdrParam( i+1 );
    td=(unsigned short int*)TD_tbl->GetAdrParam( i+1 );
    for (j=0; j<ntup; j++)
      td[j]=(unsigned short int)(pd[j] & ~PRG_COLOR_VAR);
  }
                                      // готовность данных для КО
  td=(unsigned short int*)TD_ready->GetAdrData();
  for (j=0; j<ntup; j++) td[j]=1;
  return 0;
}
/*******************************************************************
выделить цветом значения физических параметров, не равные 0
*/
int AppCntr::FunEditOnly( short int narchive )
{
  int i, j;
  int natt=PD_tbl->GetNatt();  // кол. параметров
  int ntup=PD_tbl->GetNtup();  // кол. значений каждого параметра
  unsigned char *pd;
  
  for (i=0; i<natt; i++)
  {
    pd=(unsigned char*)PD_tbl->GetAdrParam( i+1 );
    for (j=0; j<ntup; j++)
      if ((pd[j] & ~PRG_COLOR_VAR)) pd[j] |= PRG_COLOR_VAR;
  }
  return 0;
}
/*******************************************************************
создание и инициализация объектов
*/
int AppCntr::FunIni( int narg, char *sarg[] )
{
  //===== физические управляющие параметры =====
  //..... создать объекты
  if (!(PP_tbl=NewPPcontrol())) return 1;
  if (!(PD_tbl=NewPDcontrol())) return 1;
  if (AdrPar.SetPar( PP_tbl, PD_tbl ) == -1) return 1; // парный
  //..... инициализировать объекты
  if (PP_tbl->Ini( "B_PP_EXA",   // имя для своего режима
                   "B_PP_EXA_T", // имя для связанных режимов
                   1, 5 )        // номера начальной, конечной строк
	         ) return 1;
  if (PD_tbl->Ini( "B_PD_EXA_",   // базовая часть для всех режимов
	           1, 5,          // номера начального, конечного столбцов
	           20,            // число значений
	           1 )) return 1; // горизонтальное расположение

  //===== технологические управляющие параметры =====
  //..... создать объекты
  if (!(TP_tbl=NewTPcontrol())) return 1;
  if (!(TD_tbl=NewTDcontrol())) return 1;
  if (AdrPar.SetPar( TP_tbl, TD_tbl ) == -1) return 1; // парный
  //..... инициализировать объекты
  if (TP_tbl->Ini( "B_TP_EXA",   // имя таблицы для всех режимов
                   1, 5 )) return 1; // номера начальной, конечной строк
  if (TD_tbl->Ini( "B_TD_EXA", // имя таблицы для всех режимов
	           1, 5,           // номера начального, конечного столбцов
	           1, 20,          // номера начальной, конечной строк
	           1 )) return 1;  // горизонтальное расположение

  //===== параметры готовности данных для КО =====
  //..... создать объект
  if (!(TD_ready=NewTDcontrol())) return 1;
  //..... инициализировать объект
  if (TD_ready->Ini( "B_TD_READY", // имя таблицы для всех режимов
	           1, 1,           // номера начального, конечного столбцов
	           1, 5,           // номера начальной, конечной строк
	           0 )) return 1;  // вертикальное расположение
  return 0;
}
/*******************************************************************
*/
int main( int narg, char *sarg[] )
{
  AppCntr Ap;
  return Ap.MakeRun( narg, sarg );
}
/*******************************************************************
*/
Компиляция и сборка управляющей ПП (файл name.c)
Ldb=/usr/usera/voevodin/rt-data/ccydalib/ccydalib.a
Llib=/prg/prgclass.a /prg/prg.a /prg/bmplib.a
Lobj=name.o
name: $(Lobj)
g++ -o name $(Lobj) $(Llib) $(Ldb) -lm
strip -s name
ls -l name
name.o: /prg/prg.h /prg/prgclass.h name.cc
g++ -c name.cc

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