Итак, в дереве объектов у нас будет находится объект первого уровня Цех, в нем расположены 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;
}
}
}
}
|
Теперь каждый выход динамизации нужно перетащить на вход динамизации цвета кнопки и настроить динамизацию. Мы будем использовать при выбранном аппарате коричневый цвет.


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