В программе «КАСКАД Цифра» представлен класс «Manager», который уже содержит в себе все базовые функции, необходимые для менеджера. Для каждого нового менеджера необходимо, на основе этого класса создать класс-наследник, в котором будут реализованы его специфические функции. Производный класс содержит ряд виртуальных функций, которые новый менеджер может, а в некоторых случаях и обязан реализовывать.
ПРИМЕЧАНИЕ
- Если вы используете менеджер API или драйвер, в котором применяются библиотеки DLL вместе с новой версией «КАСКАД Цифра», его необходимо перекомпоновать.
- При запуске такого менеджера, библиотеки DLL должны находиться в каталоге, указанном в пути поиска библиотек DLL.
ВНИМАНИЕ
Длина имени менеджера в консоли «КАСКАД Цифра» ограничена 19 символами.
ПРИМЕЧАНИЕ
Начиная с версии 3.9 программы «КАСКАД Цифра», функция dpQueryDisconnect()
имеет только два параметра вместо обычных трех, параметр «del» был удален. Для обеспечения совместимости, значение третьего параметра (например, PVSS_FALSE
) необходимо стереть из исходных данных.
Примечание для пути поиска библиотек DLL
Программа производит поиск библиотек DLL в следующих каталогах в таком порядке:
- каталог, в котором находится исполняемый файл
- системные каталоги Windows
- все каталоги в переменной среды PATH (ПУТЬ)
Для примера см. DemoManager.
Инициализация, managerState, dispatch()
При создании собственного класса менеджера убедитесь, что конструктор правильно инициализирует базовый класс, иначе не удастся установить соединение.
Состояние переменной managerState необходимо принимать во внимание во всех случаях. Например, соединение с менеджером событий должно быть установлено только тогда, когда managerState имеет значение STATE_ADJUST. Дальнейшая обработка может происходить только при значении STATE_RUNNING. Эти состояния регулируются автоматически, и, при любых обстоятельствах, должны только считываться.
Сообщения принимаются и отправляются только тогда, когда вызывается dispatch(). (Однако сообщения всегда отправляются только в том случае, когда внутренний буфер сообщений полон (текущий размер: 4096 байт)). Если функция dispatch() вызывается неправильно, то связь с менеджером будет заблокирована и будет невозможно, например, получить какие-либо сообщения по прямой ссылке.
Использование псевдонимов в менеджере API
Если вы хотите использовать псевдонимы для точек данных(далее ТД) в менеджере API, то вы можете получить идентификаторы ТД или имена ТД для псевдонимов и наоборот, используя для этого следующие функции:
Alias —> Name:
Manager::getDpIdentificationPtr()->getName(const char> *alias, char *&name) |
Alias —> DpIdentifier:
Manager::getId(const char *alias, DpIdentifier //получает идентификатор точки данных (в таком случае псевдонимы должны начинаться с "@") |
Name —> Alias:
Manager::getDpIdentificationPtr()->getDpAlias(const char *dp, CharString &alias) |
DpIdentifier —> Alias:
Manager::getDpIdentificationPtr()->getDpAlias( |
Обработка ошибок
В программе «КАСКАД Цифра». существует общий класс обработчиков ошибок. В этом классе представлены обработчики ошибок, используемые в каждом менеджере. В зависимости от флажков -log, заданных при запуске менеджера, сообщения об ошибках записываются в файле PVSS_II.log и/или в stderr. Также ошибки могут записываться в базу данных, с помощью ExternErrHdl-Plug-in можно реализовать расширение, которое производит запись.
Если ErrHdl найдет совместно используемую библиотеку /dll с именем «ExternErrHdl» и одним из расширений «.so», «.shlib», «.dll» или «libExternErrHdl» (.dll — только для Windows, .so или .shlib — для других операционных систем) в каталоге bin текущего проекта, то она загрузит ее при запуске, вызовет extern «C» { ExternErrHdl *createExternErrHdl(); } для создания экземпляра класса ExternErrHdl, и вызовет его метод handleError(const ErrClass &errorClass) перед тем, как сделать запись в целевых объектах (лог-файл или stderr), указанных посредством опции -log.
Если вы захотите, например, записать ошибки в базу данных (в дополнение к лог-файлу PVSS_II), то можете использовать ExternErrHdl. Для этого нужно вывести класс из ExternErrHdl, скомпилировать его как shared libb/ и сохранить в каталоге bin как ExternErrHdl shared lib.
Примере получения класса из ExternErrHdl.
/* Пример внешнего обработчика ошибок, загруженного в качестве совместно используемой библиотеки/библиотеки dll посредством стандартного обработчика ошибок программы "КАСКАД Цифра" /* |