2. Общая структура системы. Модульность (TSubSYS, TModule)
Корнем, от которого строится вся система, является объект TSYS. Корень содержит подсистемы (TSubSYS). Подсистемы могут быть: обычными и модульными. Отличие модульных подсистем четко прослеживается на рис. 1. Так, модульные подсистемы обязательно содержат список модульных объектов (TModule), например подсистема архивы TArchiveS содержит модульные объекты TTypeArchivator. В тоже время обычная подсистема таких объектов не содержит. Например, подсистема безопасности TSeсurity (рис.2).
Рис. 2. Иерархическая структура системы OpenSCADA.
В процессе инициализации корня (TSYS) определяется глобальная переменная SYS. Переменная SYS может использоваться для прямого обращения к корню системы из любого её узла. Инициализация корня выполняется единожды из главной вызывающей функции. После запуска управление захватывается объектом системы до остановки. Корневой объект концентрирует все общесистемные функции системы OpenSCADA.
Продолжением корневого объекта (TSYS), выполняющего функции обслуживания потока системных сообщений, выступает объект TMess. Объект доступен посредством глобальной переменной Mess, которая инициализируется корнем системы. Объект содержит функции кодирования, декодирования и локализации сообщений.
В подсистемах (TSubSYS) реализуются функции характерные для каждой подсистемы индивидуально, с общим для всех подсистем доступом, через объект TSubSYS. Модульная подсистема имеет возможность расширять функциональность посредством модулей. Для этой цели модульная подсистема предоставляет доступ к модулям своего типа в виде модульных объектов.
Модуль — составная часть модульной подсистемы. В общем, для всех модулей и их подсистем, модуль предоставляет информацию о себе, своём происхождении и экспортируемых функциях. Отдельно взятый модуль реализует функциональность в соответствии со своими потребностями.
2.1. Корневой объект системы (TSYS)
Данные:
Информационные переменные программы:
- PACKAGE_LICENSE — Лицензия распространения программы
- PACKAGE_DESCR — Краткое описание программы
- PACKAGE_AUTHOR — Автор программы
- PACKAGE_SITE — Web сайт поддержки программы
Способы кодирования символьных последовательностей (enum — TSYS::Code):
- PathEl — элемент пути (символы: '/' и '%' к виду '%2f');
- HttpURL — адрес браузера (http url);
- Html — специальных символов для использования в html;
- JavaSc — символов конца строки для JavaScript;
- SQL — значения SQL-запросов;
- Custom — выборочное кодирование указанных символов;
- base64 — Mime кодирование в стандарте Base64;
- FormatPrint — Кодирование/экранирование элементов форматирования для функций вроде "printf";
- oscdID — Кодирование идентификаторов узлов.
- Bin — Кодирование бинарных данных в текст и обратно.
- Reverse — Инверсия порядка символов в строке.
- ShieldSimb — Кодирование экранированных символов вроде "\n" в реальные коды.
- ToLower — Преобразование в нижний регистр.
Виды представления целого в функциях TSYS::int2str() и TSYS::ll2str() (enum — TSYS::IntView):
- Dec — десятичное;
- Oct — восьмеричное;
- Hex — шестнадцатеричное.
Структура задачи OpenSCADA (class — TSYS::STask):
- STask( pthread_t ithr, char ipolicy, char iprior ); — конструктор описателя задачи для потока ithr, его политики планирования ipolicy и приоритета iprior.
- float consumpt( ) const; — последнее использование времени процессора, в секундах.
- float period( ); — мгновенная периодичность вызова задачи, в секундах.
- string path; — путь.
- pthread_t thr; — указатель потока.
- uint8_t policy, prior; — политика и приоритет планирования.
- pid_t tid; — идентификатор потока как идентификатор процесса Linux.
- ResString cpuSet; — перечень использованных процессоров/ядер.
- void *(*task) (void *); — указатель на задачу.
- void *taskArg; — аргументы задачи.
- unsigned flgs; — флаги, "enum Flgs { Detached = 0x01, FinishTask = 0x02; }"
- int64_t tm_beg, tm_end, tm_per, tm_pnt, cycleLost, lagMax, consMax; — переменные статистики исполнения задачи.
Структура резервной станции (class — TSYS::SStat):
- int8_t lev; — уровень станции;
- bool isLive; — признак "Станиця Жива";
- float cnt; — счётчик запросов к резервной станции или таймер повторной попытки подключения;
- SStat( int8_t ilev, bool iisLive = false, float icnt = 0 ) — конструктор объекта станции с уровнем ilev, инициированная как "живая" iisLive и счётчиком icnt;
- SStat( ) — конструктор по умолчанию, инициируется как отсутствующая и неактивная станция;
- bool isActive( ) — станция активна.
Шаблоны/определения:
- USER_FILE_LIMIT — Лимит на размер файлов для пользовательской загрузки (1 МБ).
- STR_BUF_LEN — Стандартная длина строковых буферов (10000).
- NSTR_BUF_LEN — Стандартная длина строковых буферов, для чисел (100).
- STD_WAIT_DELAY — Стандартный квант времени циклов ожидания (100 мс).
- STD_CACHE_LIM — Стандартное ограничение кеша (100).
- STD_WAIT_TM — Стандартный интервал ожидания события (10 мс).
- STD_INTERF_TM — Таймаут, максимальное время, ожидания реакции интерфейса (5 с).
- BUF_ARCH_NM — Имя буфера архива ("<buffer>").
- ALRM_ARCH_NM — Имя таблицы нарушений ("<alarms>").
- __func__ — Полное имя вызывающей функции.
- vmin(a, b) — Определение минимального значения.
- vmax(a, b) — Определение максимального значения.
Публичные методы:
- TSYS( int argi, char **argb, char **env ); — Инициализирующий конструктор.
- void unload( ); — Выгрузка подсистем.
- int start( ); — Запуск системы. Функция завершается только с завершением работы системы. Возвращается код возврата.
- void stop( int sig = SIGUSR1 ); — Останов программы сигналом sig, по умолчанию SIGUSR1 и SIGUSR2 зарезервирован для менеджера проектов.
- int stopSignal( ); — Код возврата в случае останова системы. Может использоваться как признак "Останов системы" различными подсистемами.
- string id( ); — Идентификатор станции.
- string name( ); — Локализованное имя станции.
- string user( ); — Системный пользователь от имени которого запущена система.
- string host( ); — Имя хоста на котором исполняется станция.
- void list( vector<string> &list ) const; — Список подсистем зарегистрированных в системе.
- bool present( const string &name ) const; — Проверка на наличие указанной подсистемы.
- void add( TSubSYS *sub ); — Добавление/регистрация подсистемы.
- void del( const string &name ); — Удаление подсистемы.
- AutoHD<TSubSYS> at( const string &name ) const; — Подключение к указанной подсистеме.
- AutoHD<TUIS> ui( ); — Прямой доступ к подсистеме "Пользовательские интерфейсы".
- AutoHD<TArchiveS> archive( ); — Прямой доступ к подсистеме "Архивы".
- AutoHD<TBDS> db( ); — Прямой доступ к подсистеме "Базы данных".
- AutoHD<TControllerS> daq( ); — Прямой доступ к подсистеме "Сбор данных".
- AutoHD<TProtocolS> protocol( ); — Прямой доступ к подсистеме "Протоколы".
- AutoHD<TTransportS> transport( ); — Прямой доступ к подсистеме "Транспорты".
- AutoHD<TSpecialS> special( ); — Прямой доступ к подсистеме "Специальные".
- AutoHD<TModSchedul> modSchedul( ); — Прямой доступ к подсистеме "Управление модулями".
- AutoHD<TSeсurity> seсurity( ); — Прямой доступ к подсистеме "Безопасность".
- string workDir( ); — Рабочая директория станции.
- string modDir( ); — Директории с модулями OpenSCADA, разделённые ';', которые могут включать шаблоны файлов, в конце (/my/modules/path/lib*.so).
- string icoDir( ); — Директория иконок OpenSCADA.
- string docDir( ); — Директория документов OpenSCADA.
- void setWorkDir( const string &wdir, bool init = false ); — Установка рабочей директории станции.
- void setModDir( const string &mdir, bool init = false ); — Установка директорий модулей OpenSCADA.
- void setIcoDir( const string &idir, bool init = false ); — Установка директории иконок OpenSCADA.
- void setDocDir( const string &idir, bool init = false ); — Установка директории документов OpenSCADA.
- string cfgFile( ); — Имя конфигурационного файла системы.
- XMLNode &cfgRoot( ); — Разобранная структура конфигурационного файла.
- XMLNode *cfgNode( const string &path, bool create = false ); — Получение узла конфигурации по его пути path. Создавать элементы пути в случае их отсутствии create.
- void modifCfg( bool chkPossibleWR = false ); — Отметка модификации конфигурации или проверка на возможность записи chkPossibleWR, для последующего сохранения в файл.
- string workDB( ); — Полное имя рабочей БД.
- string selDB( ); — Выбранная БД. Используется для избирательной загрузки из указанной БД, в подсистеме "БД".
- string mainCPUs( ); — Список используемых процессоров.
- bool clockRT( ); — Выбор часов реального времени для планирования задач, иначе используются монотонные (по умолчанию).
- bool saveAtExit( ); — Признак - "Сохранять конфигурацию системы при выходе".
- int savePeriod( ); — Периодичность автоматического сохранения станции в БД (секунд).
- void setWorkDB( const string &wdb ); — Установка полного имени рабочей БД.
- void setSelDB( const string &vl ); — Установка выбранной БД для избирательной загрузки.
- void setMainCPUs( const string &vl ); — Установка списока используемых процессоров.
- void setClockRT( bool vl ); — Установка выбора часов реального времени для планирования задач.
- void setSaveAtExit( bool vl ); — Установка признака - "Сохранять конфигурацию системы при выходе".
- void setSavePeriod( int vl ); — Установка периодичности автоматического сохранения станции в БД (секунд).
- bool chkSelDB( const string& wDB ); — Функция проверки на соответствие указанной БД wDB выбранной в "selDB()".
- string optDescr( ); — Локализованная помощь по опциям командной строки и параметрам конфигурационного файла.
- static void sighandler( int signal ); — Функция стандартного обработчика сигналов системы в целом.
- unsigned long long sysClk( ); — Расчётная частота процессора на котором функционирует система (Гц).
- void clkCalc( ); — Расчёт частоты процессора на котором работает система. Вызывается периодически для систем с переменной частотой процессора.
- unsigned long long shrtCnt( ); — Функция замера малых интервалов времени по счетчику тактов процессора. Возвращает значение счетчика тактов процессора.
- static long HZ( ); — Время системного тика процессора.
- void taskCreate( const string &path, int priority, void *(*start_routine)(void *), void *arg, int wtm = 5, pthread_attr_t *pAttr = NULL, bool *startSt = NULL ); — Создание задачи (потока) с идентификатором path, приоритетом priority (-1...99), функцией задачи start_routine и её аргументов arg, а так-же ожиданием запуска пользовательской процедуры по признаку startSt.
- void taskDestroy( const string &path, bool *endrunCntr = NULL, int wtm = 5, bool noSignal = false ); — Удаление задачи с идентификатором path и командой останова endrunCntr. Используйте noSignal для предотвращения отправки задаче сигнала SIGALRM.
- double taskUtilizTm( const string &path, bool max = false ); — Время, в секундах, утилизации ресурсов процессора задачей path, или его максимальное значение max.
- static bool taskEndRun( ); — Проверка на команду окончания задачи, посредством сигнала SIGUSR1.
- static const STask& taskDescr( ); — Получение ссылки на описатель текущей задачи.
- static int sysSleep( float tm ); — Функция системного засыпания потока на время в секундах, вплоть до наносекунд (1e-9).
- time_t sysTm( ); — Системное время быстрого доступа, из обновляемой ячейки.
- static int64_t curTime(); — Текущее время в микросекундах с начала эпохи (01.01.1970).
- string prjUserDir( ); — Директория проектов пользователя.
- bool prjCustMode( ); — Специальный режим проектов.
- void setPrjCustMode( bool vl ); — Установка специального режима проектов.
- string prjNm( ); — Имя проекта конфигурации.
- void setPrjNm( const string &vl ); — Установка имени проекта конфигурации.
- bool prjSwitch( const string &prj, bool toCreate = false ); — Переключение на проект prj.
- int prjLockUpdPer( ); — Получение периода обновления замка проекта, нуль для отключения замка.
- bool prjLock( const char *cmd ); — Обработка замка проекта для команды cmd ("hold", "free", "update").
- static void taskSleep( int64_t per, const string &cron = "", int64_t *lag = NULL ); — Функция засыпания потока по сетке абсолютного времени с периодом per в наносекундах или до запланированного времени cron. Если указано запаздывание lag то в него будет возвращена разница между реальным и запланированным пробуждением (потеря циклов).
- static time_t cron( const string &vl, time_t base = 0 ); — Планирование времени исполнения по формату стандарта Cron vl, начиная от базового времени base или от текущего времени, если база не указана.
- static bool eventWait( bool &m_mess_r_stat, bool exempl, const string &loc, time_t time = 0 ); — Функция ожидания события exempl для переменной m_mess_r_stat в течение указанного интервала времени time для источника loc.
- bool cntrEmpty( ); — Проверка на отсутствие счётчиков отладки.
- double cntrGet( const string &id ); — Получение счётчика отладки id.
- void cntrSet( const string &id, double vl ); — Установка счетчика отладки id в значение vl.
- void cntrIter( const string &id, double vl ); — Итерация счётчика отладки id на значение vl.
- bool rdEnable( ); — Резервирование включено, присутствует хотя-бы одна резервная станция.
- bool rdActive( ); — Резервирование активно, присутствует хотя-бы одна активная резервная станция.
- void rdStList( vector<string> &ls ); — Список ls станций в резерве.
- SStat rdSt( const string &id ); — Получение копии структуры состояния резервной станции id.
- map<string, SStat> rdSts( ); — Получение копии списка структур состояний резервных станций.
- int rdStLevel( ); — Уровень текущей станции в системе резервирования.
- void setRdStLevel( int vl ); — Установка уровня текущей станции в системе резервирования.
- float rdTaskPer( ); — Периодичность исполнения задачи резервирования.
- void setRdTaskPer( float vl ); — Установка периодичности исполнения задачи резервирования.
- int rdRestConnTm( ); — Время повторения попытки восстановления связи с резервными станциями после её потери, в секундах.
- void setRdRestConnTm( int vl ); — Установка времени повторения попытки восстановления связи с резервными станциями.
- string rdStRequest( XMLNode &req, const string &st = "" ); — Общий запрос req к указанной резервной станции st.
- static string int2str( int val, IntView view = Dec ); — Преобразование целого знакового в строку вида view.
- static string uint2str( unsigned val, IntView view = Dec ); — Преобразования целого беззнакового в строку вида view.
- static string ll2str( long long val, IntView view = Dec ); — Преобразования длинного целого (64бит) в строку вида view.
- static string real2str( double val, int prec = 15, char tp = 'g' ); — Преобразования вещественного с точностью prec знаков и типом tp в строку.
- static double realRound( double val, int dig = 0, bool toint = false ); — Округление вещественного числа до указанного знака dig после запятой с возможностью преобразования к целому после округления toint.
- static string atime2str( time_t tm, const string &format = "" ); — Преобразование астрономичного UNIX времени tm в строку, в соответствии с форматом format POSIX-функции "strftime()".
- static string time2str( double tm ); — Преобразование интервала времени, в секундах, в строку вида "1час 23мин 10сек".
- static string cpct2str( double cnt ); — Преобразование счётчика трафика cnt (байт) в строки вида "12.5КиБ".
- static double str2real( const string &val ); — Преобразование строки в вещественное.
- static string addr2str( void *addr ); — Преобразование адреса в строку.
- static void *str2addr( const string &str ); — Преобразование строки в адрес.
- static string strTrim( const string &val, const string &cfg = " \n\t\r" ); — Удаляет из исходной строки val указанные cfg (в основном пустые) символы в начале и в конце.
- static string strSepParse( const string &path, int level, char sep, int *off = NULL ); — Разбор строки path на составляющие, отделённые разделительным символом sep, начиная со смещения off и контролируя смещение конца элемента в нём же.
- static string strParse( const string &str, int level, const string &sep, int *off = NULL, bool mergeSepSymb = false ); — Расширенная версия функции разбора строки "strSepParse()" позволяющая использовать многосимвольные разделители и объединять односимвольные.
- static string strLine( const string &str, int level, int *off = NULL ); — Разбор текста по строкам для разных способов окончания строки (CR, LF и CR/LF).
- static string pathLev( const string &path, int level, bool decode = true, int *off = NULL ); — Выделение элементов пути path с возможностью их декодирования, начиная со смещения off и контролируя смещение конца элемента в нём же.
- static string path2sepstr( const string &path, char sep = '.' ); — Преобразование пути в строку с разделителем sep элементов.
- static string sepstr2path( const string &str, char sep = '.' ); — Преобразование строки с разделителем sep элементов в путь.
- static string strEncode( const string &in, Code tp, const string &opt1 = "" ); — Кодирование строки по указанному правилу tp и опцией opt1 (символы для "Custom").
- static string strDecode( const string &in, Code tp = Custom, const string &opt1 = "" ); — Декодирование строки in по указанному правилу tp и опцией opt1 (разделитель или "<text>" для "Bin").
- static string strMess( const char *fmt, ... ); static string strMess( unsigned len, const char *fmt, ... ); — Формирование стоки по шаблону fmt и аргументам. Реализован на основе "printf". Для варианта ограничения длины превышение отмечается добавлением "...".
- static string strLabEnum( const string &base ); — Формирование индивидуальных строковых меток от базы base путём инкрементации в конце. Поддерживается нумерация в десятичном, шестнадцатеричном (префикс "0x") и восьмеричном (префикс "0") представлении.
- string strCompr( const string &in, int lev = -1 ); — Компрессия строки in с уровнем компрессии lev.
- string strUncompr( const string &in ); — Декомпрессия строки in.
- static inline uint16_t getUnalign16( const void *p ); static inline uint32_t getUnalign32( const void *p ); static inline uint64_t getUnalign64( const void *p ); — Невыравненное чтение беззнакового целого из буфера по смещению.
- static inline int getUnalignInt( const void *p ); — Невыравненное чтение знакового целого из буфера по смещению.
- static inline float getUnalignFloat( const void *p ); — Невыравненное чтение вещественного "float" из буфера по смещению.
- static inline double getUnalignDbl( const void *p ); — Невыравненное чтение вещественного "double" из буфера по смещению.
- static uint16_t i16_LE( uint16_t in ); static uint32_t i32_LE( uint32_t in ); static uint64_t i64_LE( uint64_t in ); — Преобразование порядка целого числа in из формата Little-Endian (LE) во внутреннее представление.
- static uint16_t i16_BE( uint16_t in ); static uint32_t i32_BE( uint32_t in ); static uint64_t i64_BE( uint64_t in ); — Преобразование порядка целого числа in из формата Big-Endian (BE) во внутреннее представление.
- static float floatLE( float in ); static double doubleLE( double in ); — Преобразование вещественного числа in из внутреннего представления в формат IEEE754 Little-Endian (LE).
- static float floatLErev( float in ); static double doubleLErev( double in ); — Преобразование вещественного числа in из формата IEEE754 Little-Endian (LE) во внутреннее представление.
- static float floatBE( float in ); static double doubleBE( double in ); — Преобразование вещественного числа in из внутреннего представления в формат IEEE754 Big-Endian (BE).
- static float floatBErev( float in ); static double doubleBErev( double in ); — Преобразование вещественного числа in из формата IEEE754 Big-Endian (BE) во внутреннее представление.
- string getCmdOpt( int &curPos, string *argVal = NULL ); static string getCmdOpt_( int &curPos, string *argVal, int argc, char **argv ); — Разбор параметров командной строки с перебором по курсору curPos. Возвращает имя аргумента и его возможное значение в argVal. Реализует форматы коротких ключей: "-v", "-v val", "-abcv", "-abcv val"; и длинных ключей: "--var", "--var=val", "--var val".
- bool cmdOptPresent( const string &opt ); — Проверить параметр командной строки opt на присутствие.
- string cmdOpt( const string &opt, const string &setVl = "" ); — Получения параметра opt командной строки. Установка в setVl, если указан.
- static void ctrListFS( XMLNode *nd, const string &fsBase, const string &fileExt = "" ); — Список обзора элементов файловой системы относительно базы fsBase, для файлов c расширениями fileExt в виде списка "png;jpeg;gif;".
- ResRW &cfgRes( ); — Локатор ресурса дерева конфигурационного файла.
Публичные атрибуты:
- static bool finalKill — Признак "Финальное разрушение объектов". Используется для принудительного отключения заблокированных объектов на финальной стадии выключения.
Короткие вызовы глобальных функций в области имён "OSCADA":
- template <class fVal> fVal fmin( fVal a, fVal b ); template <class fVal> fVal fmax( fVal a, fVal b ); — функциональные шаблоны определения минимума и максимума двух значений.
- inline string i2s( int val, TSYS::IntView view = TSYS::Dec ) —> TSYS::int2str(val, view);
- inline string u2s( unsigned val, TSYS::IntView view = TSYS::Dec ) —> TSYS::uint2str(val, view);
- inline string ll2s( long long val, TSYS::IntView view = TSYS::Dec ) —> TSYS::ll2str(val, view);
- inline string r2s( double val, int prec = 15, char tp = 'g' ) —> TSYS::real2str(val, prec, tp);
- inline double rRnd( double val, int dig = 0, bool toint = false ) —> TSYS::realRound(val, dig, toint);
- inline string atm2s( time_t tm, const string &format = "" ) —> TSYS::atime2str(tm, format);
- inline string tm2s( double tm ) —> TSYS::time2str(tm);
- inline int s2i( const string &val ) —> atoi(val.c_str());
- inline long long s2ll( const string &val ) —> atoll(val.c_str());
- inline double s2r( const string &val ) — TSYS::str2real(val);
- inline string sTrm( const string &val, const string &cfg = " \n\t\r") —> TSYS::strTrim(val, cfg);
2.2. Объект сообщений системы (TMess)
Данные:
Типы (уровни) сообщений (enum — TMess::Type):
- Debug (0) — отладка;
- Info (1) — информация;
- Notice (2) — замечание;
- Warning (3) — предупреждение;
- Error (4) — ошибка;
- Crit (5) — критическая ситуация;
- Alert (6) — тревога;
- Emerg (7) — авария.
Направления сообщений (enum — TMess::Direct):
- DIR_SYSLOG (0x1) — в SYSLOG;
- DIR_STDOUT (0x2) — на стандартный выход;
- DIR_STDERR (0x4) — на выход стандартных ошибок;
- DIR_ARCHIVE (0x8) — в архив сообщений.
Структура сообщения (class — TMess::SRec):
- time_t time; — время сообщения;
- int utime; — микросекунды времени сообщения;
- string categ; — категория сообщения (обычно путь внутри системы);
- int8_t level; — уровень сообщения;
- string mess; — сообщение.
Шаблоны:
- _(mess) — Обёртка над функцией трансляции сообщений для предоставления принятого во многих программах вызова перевода сообщений.
- trL(base,lng); trU(base,usr); trLU(base,lng,usr) — Обёртки над функциями динамической трансляции текстовых переменных по языку и пользователю.
- trSetL(base,lng,mess); trSetU(base,usr,mess); trSetLU(base,lng,usr,mess) — Обёртки над функциями установки динамической трансляции текстовых переменных по языку и пользователю.
- FTM(rec); FTM2(tm, utm) — Получения полного времени сообщения в микросекундах, используя два поля времени структуры сообщения.
- mess_lev() — Уровень сообщений системы. Часто используется для для проверки режима отладки (=Debug).
- message(cat,lev,fmt,args...) — Формирование полного сообщения.
- mess_debug(cat,fmt,args...) — Формирование отладочного сообщения.
- mess_info(cat,fmt,args...) — Формирование информационного сообщения.
- mess_note(cat,fmt,args...) — Формирования сообщения - замечания.
- mess_warning(cat,fmt,args...) — Формирование предупредительного сообщения.
- mess_err(cat,fmt,args...) — Формирование сообщения ошибки.
- mess_crit(cat,fmt,args...) — Формирование сообщения критического состояния.
- mess_alert(cat,fmt,args...) — Формирование сообщения тревоги.
- mess_emerg(cat,fmt,args...) — Формирование сообщения аварии.
- message_(cat,lev,fmt,args...) — Формирование полного сообщения (игнорируется выбранный уровень и категории отладки).
- mess_debug_(cat,fmt,args...) — Формирование отладочного сообщения (игнорируется выбранный уровень и категории отладки).
- mess_info_(cat,fmt,args...) — Формирование информационного сообщения (игнорируется выбранный уровень).
- mess_note_(cat,fmt,args...) — Формирования сообщения - замечания (игнорируется выбранный уровень).
- mess_warning_(cat,fmt,args...) — Формирование предупредительного сообщения (игнорируется выбранный уровень).
- mess_err_(cat,fmt,args...) — Формирование сообщения ошибки (игнорируется выбранный уровень).
- mess_crit_(cat,fmt,args...) — Формирование сообщения критического состояния (игнорируется выбранный уровень).
- mess_alert_(cat,fmt,args...) — Формирование сообщения тревоги (игнорируется выбранный уровень).
- mess_emerg_(cat,fmt,args...) — Формирование сообщения аварии (игнорируется выбранный уровень).
Публичные методы:
2.3. Объект подсистемы (TSubSYS)
Наследует: | TCntrNode. |
Наследуется: | TArchiveS, TProtocolS, TBDS, TFunctionS, TSeсurity, TModShedul, TTransportS, TUIS, TSpecialS, TControllerS. |
Публичные методы:
- TSubSYS( const char *id, const char *name, bool mod = false ); — Инициализирующий конструктор. Признак mod указывает, что подсистема модульная.
- string subId( ); — Идентификатор подсистемы.
- string subName( ); — Локализованное имя подсистемы.
- bool subStartStat( ) const; — Признак исполнения подсистемы.
- bool subModule( ) const; — Признак модульности подсистемы.
- virtual int subVer( ); — Версия подсистемы.
- virtual void subStart( ); — Запуск подсистемы.
- virtual void subStop( ); — Останов подсистемы.
- void modList( vector<string> &list ); — Список list модулей модульной подсистемы.
- bool modPresent( const string &name ); — Проверка на наличие указанного модуля name.
- void modAdd( TModule *modul ); — Добавление/регистрация модуля modul.
- void modDel( const string &name ); — Удаление модуля name.
- AutoHD<TModule> modAt( const string &name ) const; — Подключение к модулю name.
- virtual void perSYSCall( unsigned int cnt ); — Периодичный вызов из системного потока, с периодичностью 10 секунд и секундным счётчиком cnt.
- virtual bool rdProcess( XMLNode *reqSt = NULL ); — Обработка резервирования подсистемы, вызывается из системной задачи резервирования. В reqSt передаётся результат запроса состояния резервной станции по данной подсистеме.
- TSYS &owner( ) const; — Система - владелец подсистемы.
2.4. Объект модуля (TModule)
Наследует: | TCntrNode. |
Наследуется: | TProtocol, TTypeBD, TTypeArchive, TTypeTransport, TUI, Tspecial, TTypeDAQ. |
Данные:
Структура данных идентифицирующая модуль (class — TModule::SAt):
- SAt( const string &iid, const string &itype = "", int itver = 0 ); — инициализирующий конструктор;
- bool operator==( const TModule::SAt &amst ) const; — функция сравнения идентификаторов модулей;
- string id; — идентификатор модуля;
- string type; — тип модуля (подсистема);
- int tVer; — версия типа модуля (подсистемы) для которой модуль разработан.
Структура экспортируемых функций (class — TModule::ExpFunc):
- string prot; — прототип функции;
- string dscr; — локализованное описание функции;
- void (TModule::*ptr)(); — относительный адрес функции (относительно объекта модуля).
Публичные методы:
- TModule( const string &id ); — Инициализирующий конструктор модуля id.
- string modId( ); — Идентификатор модуля.
- string modName( ); — Локализованное имя модуля.
- virtual void modStart( ); — Запуск модуля.
- virtual void modStop( ); — Останов модуля.
- virtual void modInfo( vector<string> &list ); — Список list информационных элементов модуля.
- virtual string modInfo( const string &name ); — Получение содержимого указанного информационного элемента name. Для получения элемента на другом языке, при динамическом переводе сообщений, Вы можете установить имя в виде "{Имя}:{язык}".
- virtual void perSYSCall( unsigned int cnt ); — Периодичный вызов из системного потока, с периодичностью 10 секунд и секундным счётчиком cnt.
- void modFuncList( vector<string> &list ); — Список list экспортируемых функций модуля.
- bool modFuncPresent( const string &prot ); — Проверка на наличие указанной функции по её прототипу prot.
- ExpFunc &modFunc( const string &prot ); — Получить информацию об экспортируемой функции модуля prot.
- bool modFunc( const string &prot, void (TModule::**offptr)(), bool noex = false ); — Получение относительного адреса offptr экспортируемой функции prot. Возвращает "true" в случае успеха и режима без исключений noex.
- const char *I18N( const char *mess ); — Локализация модульного сообщения mess в соответствии с текущей локалью.
- TSubSYS &owner( ) const; — Подсистема - владелец модуля.
Защищённые атрибуты:
- string mModName; — Имя модуля.
- string mModDescr; — Описание модуля.
- string mModType; — Тип модуля.
- string mModVers; — Версия модуля.
- string mModAutor; — Автор модуля.
- string mModLicense; — Лицензия модуля.
- string mModSource; — Источник/происхождение модуля.
Защищённые методы:
- void modInfoMainSet( const string &name, const string &type, const string &vers, const string &author, const string &descr, const string &license, const string &source ); — Установка общей информации модуля.
- void modFuncReg( ExpFunc *func ); — Регистрация экспортируемых модулем функций.