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

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

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

БД ССУДА обеспечивает базовые услуги управления данными – открытие и закрытие таблиц, чтение и запись таблиц, определение структуры таблиц, передача данных между компьютерами.
Однако, специфика вычислительных средств СУ, используемые сетевые протоколы потребовали надстройки над системой управления данными для приложений, выполняющихся на Рабочих Станциях - автоматическое деление буфера данных на максимально допустимые порции, автоматические повторные чтение и запись данных, автоматическое переоткрытие таблиц в БД и другой необходимый сервис.
Адаптация БД ССУДА к СУ реализована в виде библиотеки процедур-функций на языке программирования "С". Файл-заголовок prglib.h библиотеки и файл-библиотека prglib.a расположены в каталоге /prg. Библиотека содержит следующие процедуры-функции:
PrgDB_DBnumber - установить номер локальной БД
PrgDB_DBopen - открыть локальную БД
PrgDB_DBclose - закрыть локальную БД
PrgDBa_open - открытие глобальной таблицы
 
PrgDB_open (устаревший вариант)
PrgDBa_openLocal - открыть таблицу локальной БД
 
PrgDB_openLocal (устаревший вариант)
PrgDBa_close - закрыть таблицу
 
PrgDB_close (устаревший вариант)
PrgDBa_closeAll - закрыть всех таблицы
PrgDBa_getID - получить идентификатор открытой таблицы
PrgDBa_getName - получить имя открытой таблицы
PrgDBa_rw - чтение данных из таблицы или запись данных в таблицу
 
PrgDB_rw (устаревший вариант)
Пример - компиляция и сборки ПП

void PrgDB_DBnumber (short int n);

Установить Локальную БД с номером n. Глобальная БД имеет номер 0 и его устанавливать не надо.

unsigned short int PrgDB_DBopen (void);

Открыть Локальную БД с заранее установленным номером. Глобальную БД открывать не надо (она открыта всегда). 

В случае успеха возвращает значение 0. В случае ошибки возвращает код ошибки ССУДА и делает запись в файл-протокол, если он определен.

void PrgDB_DBclose (void);

Закрыть Локальную БД с установленным номером.

unsigned short int PrgDBa_openLocal (short int *idn, char *name);

Открыть таблицу в Локальной БД с заранее установленным номером (PrgDB_DBnumber, PrgDB_DBopen).

name - заданное имя таблицы;
idn - номер структуры для заданной таблицы, который определила данная функция в списке структур (см.здесь).

Если таблица с заданным именем открывается повторно, то номером будет номер структуры, которая содержит указанное имя таблицы. Иначе номером будет первая свободная структура в списке.

Структура имеет вид:

struct dba_tbl_detect
{
  char name[TBL_LEN_TABLE]; // имя таблицы
  short int id;             // идентификатор таблицы
  int ndb;            // номер БД: Глобальная (=0), Локальная (>0)
  int count;          // число открытых таблиц с этим именем для этой БД
};

Содержимое полей структуры можно получить посредством процедур-функций PrgDBa_getID, PrgDBa_getName.

В случае успеха возвращает значение RC_OK. В случае ошибки возвращает код ошибки ССУДА и делает запись в файл-протокол, если он определен.

Устаревший вариант:

unsigned short int PrgDB_openLocal (int fl_cmt, short int *id, char *name);

Открыть таблицу в Локальной БД:

fl_cmt - семафор для отладки ПП:
 
fl_cmt=0 - нет вывода результата,
 
fl_cmt=1 - вывод результата в файл-протокол;
name - заданное имя таблицы;
id - идентификатор таблицы в БД, определенный данной процедурой-функцией.

В случае успеха возвращает значение RC_OK и делает запись в файл-протокол, если он определен и fl_cmt=1.

В случае ошибки  возвращает код ошибки ССУДА и делает запись в файл-протокол, если он определен.

unsigned short int PrgDBa_open (short int *idn, char *name);

Открыть таблицу в Глобальной БД аналогично PrgDBa_openLocal

Устаревший вариант:

unsigned short int PrgDB_open (int fl_cmt, short int *id, char *name);

Открыть таблицу в Глобальной БД. Аналогично фпроцедуре PrgDB_openLocal.

unsigned short int PrgDBa_close (short int *idn);

Закрыть таблицу в Глобальной или Локальной БД. 

idn - номер структуры, определенный процедурами PrgDBa_open или PrgDBa_openLocal.

В случае успеха возвращает значение RC_OK. В случае ошибки  возвращает код ошибки ССУДА или значение RC_ERTBLTYPE, которое означает, что таблица не была открыта, и делает запись в файл-протокол, если он определен.

Устаревший вариант:

unsigned short int PrgDB_close (int fl_cmt, short int *id, char *name);

Закрыть таблицу в Глобальной или Локальной БД.

fl_cmt - семафор для отладки ПП:
 
fl_cmt=0 - нет вывода результата,
 
fl_cmt=1 - вывод результата в файл-протокол;
name - заданное имя таблицы;
id - идентификатор таблицы в БД, определенный процедурой PrgDB_open или PrgDB_openLocal.

В случае успеха возвращает значение RC_OK и делает запись в файл-протокол, если он определен и fl_cmt=1.

В случае ошибки возвращает код ошибки ССУДА и делает запись в файл-протокол, если он определен.

void PrgDBa_closeAll (void);

Закрыть все таблицы, открытые посредством процедур PrgDBa_open и PrgDBa_openLocal

short int PrgDBa_getID (short int idn);

Получить идентификатор таблицы в БД, определенный в структуре с номером idn

char* PrgDBa_getName (short int idn);

Получить имя таблицы, определенное в структуре с номером idn.

unsigned short int PrgDBa_rw (int fl_op, void *buf, long int buflen, short int *coord, short int *idn);

Читать данные из таблицы БД или писать данные в таблицу БД.

fl_op - семафор операции:
 
fl_op=0 - чтение,
 
fl_op=1 - запись;
buf - адрес буфера для  данных;
buflen - размер буфера в байтах;
coord - координаты таблицы;
idn - номер структуры, в которой определена таблица посредством процедуры PrgDBa_open или PrgDBa_openLocal.

Дополнительные свойства:

делит буфер на части, не превышающие размер 8500 и 900 байт для копии 1 и копии 3 таблицы соответственно; при этом процедура-функция может возвратить значение RC_ERDATA (неправильно указаны номера столбцов таблицы);
если БД ССУДА возвращает значение: 0x8102 или 0x8104, то делается 2 попытки выполнить указанную операцию (чтение или запись);
если БД ССУДА возвращает значение 0x8000, 0x8100 или 0x8103, то делается 3 попытки переоткрыть таблицу;
если БД ССУДА возвращает значение 0x80F0, то процедура-функция возвращает код RC_ECOFF (выключен Контроллер Оборудования);
если БД ССУДА возвращает значение 0x8101, то процедура-функция возвращает код RC_ECNOTDB (нет базы данных в Контроллере Оборудования, в котором должна располагаться указанная таблица).

В случае успеха возвращает значение RC_OK. В случае ошибки делает запись в файл-протокол, если он определен.

Устаревший вариант:

unsigned short int PrgDB_rw (int fl_cmt, int fl_op, void *buf, long int buflen, short int *coord, short int *id, char *name);

Читать данные из таблицы БД или писать данные в таблицу БД. Отличие от PrgDBa_rw:

fl_cmt - семафор для отладки ПП:
 
fl_cmt=0 - нет вывода результата,
 
fl_cmt=1 - вывод результата в файл-протокол,;
name - заданное имя таблицы;
id - идентификатор таблицы в БД, определенный процедурой PrgDB_open или PrgDB_openLocal.

В случае успеха возвращает значение RC_OK и делает запись в файл-протокол, если он определен и fl_cmt=1.

В случае ошибки  возвращает код ошибки ССУДА и делает запись в файл-протокол, если он определен.

Устаревший вариант:

Компиляция и сборка программы (файл name.c), использующей процедуры Надстройки над БД ССУДА:

cc name.c /prg/prglib.a /usr/usera/voevodin/rt-data/ccydalib/ccydalib.a

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