Итак, в дереве объектов у нас будет находится объект первого уровня Цех, в нем расположены 4 объекта Аппарат1-Аппарат4. Переменных в них нет – они для нас в данном случае не важны.

Теперь создадим объект, который будет выполнять функцию тулбара. Сделаем его отдельным объектом. В него положим скрипт и две дискретных команды для выхода и завершения сеанса пользователя. Также сделаем у объекта окно управления с кнопками перехода и кнопками-командами.


Выключим отображение системного тулбара – это делается в свойствах системы или конкретного компьютера. Сбросим флаги Основная панель и Панель вызова документов.


Запустим режим исполнения и проверим работу – переходы выполняются.

Все замечательно, но неплохо бы индицировать – на какой именно мнемосхеме мы находимся или какие окна открыты в данный момент. Для этой цели мы и будем использовать скрипт.
Мы будет управлять с помощью скрипта входом динамизации кнопки «Цвет фона». Для управления добавим в скрипт 4 логических выхода – с названиями как у наших объектов «Аппарат1» - «Аппарат4».

HostFB.TreeItemHlp.Project.Documents
Полученную коллекцию можно перебрать, и проверить является ли открытой мнемосхема того иного объекта с помощью свойства Opened.
Однако поскольку в MasterSCADA есть режим, при котором при старте происходит загрузка всех окон, то проверки на открытость недостаточно, так как даже закрытые в данный момент окна будут находится в памяти. Для того чтобы точно знать что окно открыто, нужно проверить уникальный идентификатор окна (Handle) – если он больше нуля, значит окно открыто. Также можно дополнительно проверить тип окна – является ли оно окном, новым окном или документом (мы будем проверять только документы).
Определить короткое имя объекта можно с помощью свойства document.Attribute. TreeItem.Name
Полное имя объекта - document.Attribute.TreeItem.FullName
Мы будем использовать короткое имя. Итоговый код будет выглядеть следующим образом.
public override void Execute() { Аппарат1=Аппарат2=Аппарат3=Аппарат4=false; //сбрасываем все выходы foreach (IDocumentHlp document in HostFB.TreeItemHlp.Project.Documents) //перебираем документы { IAttributeHlp attribute = document.Attribute; if (attribute.Opened) //проверяем загружено ли окно { var mnemoInfo = attribute.CurrentCallInfo; var callType = mnemoInfo.CurrentCallType; //проверяем что окно открыто и оно имеет тип "документ" if (attribute.DocumentInfo.Handle != 0 && callType == MasterSCADA.Interfaces.ECallType.ctDocument ) { //взводим определенный выход в зависимости от имени объекта у которого открыто окно if (attribute.TreeItem.Name=="Аппарат1") Аппарат1=true; if (attribute.TreeItem.Name=="Аппарат2") Аппарат2=true; if (attribute.TreeItem.Name=="Аппарат3") Аппарат3=true; if (attribute.TreeItem.Name=="Аппарат4") Аппарат4=true; } } } } |
Теперь каждый выход динамизации нужно перетащить на вход динамизации цвета кнопки и настроить динамизацию. Мы будем использовать при выбранном аппарате коричневый цвет.


Проект с примером данного скрипта можно скачать по данной ссылке.