В MasterSCADA в дереве Системы у OPC-сервера можно структурировать данные - создавать группы OPC-переменных.
При этом выполняются только добавление и удаление OPC-переменных,
а наименование переменных совпадает с наименованием OPC-переменных в программе OPC-сервера.
В MasterSCADA в дереве Системы для OPC-серверов нет возможности:
- изменить наименование группы,
- копировать/дублировать созданные группы,
- присвоить наименования переменным в группе,
- изменить привязку OPC-переменной в группе к другой переменной в программе OPC-сервера.
В результате, когда в процессе разработки системы надо изменить структуру OPC-переменных или
дублировать объект (у которого может быть несколько сотен OPC-переменных),
приходится в дереве Системы проекта MasterSCADA заново поэлементно создавать всю структуру OPC-переменных.
Это трудоемко и чревато ошибками.
При этом совместная работа над проектом дерева Системы в части OPC-переменных может быть организована только последовательно,
неудобно изменение работающих проектов под меняющиеся требования, ограничиваются возможности развития проектов и вообще типизации проектов.
Вопрос:
Есть какие-нибудь инструменты для копирования и редактирования
групп OPC-переменных MasterSCADA? Или инструменты экспорта-импорта ветки
дерева Системы с OPC-сервером в общепринятый формат для редактирования?
Интересует инстументарий именно для MasterSCADA, а не предложения по изменению структуры переменных в программе OPC-сервера и
использованию "Вставить-Все переменные и группы".
02.09.2015, 14:04
SCADAMaster
Править ОРС группы и теги нельзя. Поэтому нужно искать способы работы в дереве объектов.
Например если вы меняете структуру дерева системы, то можно вырезать дерево объектов в буфер, а после правки дерева - вставить из буфера. Появится окно восстановления внешних связей, где можно будет исправить не найденные связи.
Также можно рассмотреть использование сервиса внешних связей.
02.09.2015, 15:53
Alexander S
Возможности редактирования дерева Объектов и использования сервиса внешних связей понятны, но вопрос не про них, а о дереве Системы.
Цитата:
Сообщение от SCADAMaster
Править ОРС группы и теги нельзя.
Печаль :(
Ставить крест на больших проектах в MasterSCADA?
02.09.2015, 16:18
SCADAMaster
Пока что это никому не мешало.
Мы для этого и делали экспорт-импорт во внешних связях - чтобы можно было быстро исправлять связи с деревом системы. Поэтому почему вам хочется лезть в дерево системы нам непонятно - меняя пути и порождая несоответствия со структурой ОРС вы его просто запутаете так, что потом сами не разберетесь.
02.09.2015, 17:07
Alexander S
Цитата:
Сообщение от SCADAMaster
Пока что это никому не мешало.
Сомневаюсь.
Рад за тех, кому не мешает.
Цитата:
Сообщение от SCADAMaster
... почему вам хочется лезть в дерево системы нам непонятно ...
Потому-что
Цитата:
В результате, когда в процессе разработки системы надо изменить структуру OPC-переменных или
дублировать объект (у которого может быть несколько сотен OPC-переменных),
приходится в дереве Системы проекта MasterSCADA заново поэлементно создавать всю структуру OPC-переменных.
Это трудоемко и чревато ошибками.
При этом совместная работа над проектом дерева Системы в части OPC-переменных может быть организована только последовательно,
неудобно изменение работающих проектов под меняющиеся требования, ограничиваются возможности развития проектов и вообще типизации проектов.
Цитата:
Сообщение от SCADAMaster
...меняя пути и порождая несоответствия со структурой ОРС вы его просто запутаете так, что потом сами не разберетесь.
Не выстраивая структуру OPC-переменных, действительно просто запутаться.
Отсюда и возник исходный вопрос.
02.09.2015, 20:55
SCADAMaster
Цитата:
Сообщение от Alexander S
В результате, когда в процессе разработки системы надо изменить структуру OPC-переменных или дублировать объект (у которого может быть несколько сотен OPC-переменных), приходится в дереве Системы проекта MasterSCADA заново поэлементно создавать всю структуру OPC-переменных.
Это трудоемко и чревато ошибками.
Цитата:
Сообщение от Alexander S
Есть какие-нибудь инструменты для копирования и редактирования групп OPC-переменных MasterSCADA? Или инструменты экспорта-импорта ветки дерева Системы с OPC-сервером в общепринятый формат для редактирования?
Допустим будет инструмент который позволил бы выполнить экспорт-импорт группы ОРС переменных. А что дальше?
Все равно их нужно будет создавать в ОРС сервере, и при импорте указывать какая переменная какой реальной ОРС переменной будет соотносится. При этом может получится так что структура будет полностью отличаться от ОРС что приведет к путанице. И опять таки - в чем отличие от простой вставки переменных и групп? И если изменится структура дерева системы, то как расставлять связи?
Может вы лучше опишите пошагово конкретный сценарий который вы хотите сделать, проблемы которые сейчас при этом возникают, и как вы видите решение этих проблем?
03.09.2015, 13:08
Alexander S
Цитата:
Сообщение от SCADAMaster
...может получится так что структура будет полностью отличаться от ОРС что приведет к путанице...
К путанице не приведет, когда исходная структура параметров "плоская" (одноуровневая), т.е. ее фактически нет, а параметров много (несколько сотен, представьте как они выглядят в MasterSCADA в дереве Системы). В этом случае введение структуры облегчает понимание и упрощает работу с параметрами.
Цитата:
Сообщение от SCADAMaster
...опишите пошагово конкретный сценарий который вы хотите сделать...
Есть проект в котором есть Объект1. Отлажен. Работает.
Необходимо в в проект внести изменение - добавить точно такой-же, но уже Объект2.
Прежде чем делать в проекте MasterSCADA копирование объекта (в дереве Объектов) и использовать сервис внешних связей, необходимо, чтобы в
дереве Системы уже были созданы OPC-переменные нового Объекта2.
Сначала в перечне тегов программы OPC-сервера создается копия параметров исходного объекта, они отличаются полем адреса.
Например, имена тегов Объекта1 вида:
K03:PLC_LINK
K03:diVT_TIME_PUSK
а для Объекта2:
K04:PLC_LINK
K04:diVT_TIME_PUSK
В MasterSCADA в дереве Системы OPC-параметры Объекта1 имеют полные имена вида:
OP1.OPC.PLC1.Контроль.K03:PLC_LINK
OP1.OPC.PLC1.Управление.Параметры.ПриПуске.K03:diV T_TIME_PUSK
а для Объекта2 они будут иметь (должны получить) имя вида:
OP1.OPC.PLC2.Контроль.K04:PLC_LINK
OP1.OPC.PLC2.Управление.Параметры.ПриПуске.K04:diV T_TIME_PUSK
где
OP1.OPC - компьютер и подключенный OPC-сервер,
PLC1 и PLC2 - созданная в дереве Системы иерархия групп OPC-параметров Объекта1 и Объекта2,
а сами группы:
PLC1.Контроль
PLC1.Управление.Параметры.ПриПуске
PLC2.Контроль
PLC2.Управление.Параметры.ПриПуске
Для начала хотелось бы в MasterSCADA иметь возможность сделать копию структуры OPC-параметров исходного объекта (PLC1 в PLC2) и
изменить адресную часть в имени тега (K03 на K04).
Сейчас такое копирование и редактирование невозможно.
04.09.2015, 09:01
Maxim_
Кстати,да.Alexander S прав. вовсяких западных скадах такое возможно. PcVue например французкая
29.09.2015, 12:42
Alexander S
Вложений: 1
"Спасение утопающих - дело рук самих утопающих." (с) Ильф и Петров
На их основе написаны 2 скрипта для MasterSCADA - экспорт в файл и импорт из файла групп OPC-переменных проекта (включая подгруппы).
При копировании структуры OPC-переменных файл импорта делается из файла экспорта изменением полей "наименование" и "ID" OPC-переменных.
Для редактирования файлов можно использовать Excel.
Скрипты работают в MasterSCADA текущей версии 3.6.
Код скрипта экспорта:
PHP код:
/*
Копирование группы OPC-переменных с вложенными подгруппами
из проекта MasterSCADA в файл
OPC-сервер указывается в
var OPCitem = ...
Группа указывается в
var group = ...
Путь сохранения файла указывается в
const string filename = ...
Работает в DT: для выполнения нажмите на кнопку DoAction
*/
using System;
using System.IO;
using System.Text;
//using System.Linq;
//using System.Collections.Generic;
//using System.Windows.Forms;
//using FB;
using MasterSCADA.Hlp;
using MasterSCADALib;
using MasterSCADA.Script.FB;
//using MasterSCADA.Documents;
public partial class ФБ : ScriptBase
{
//указываем файл
const string filename = @"C:\test1.csv";
public override void DoAction()
{
StreamWriter writeFile = new StreamWriter(filename, false,
Encoding.GetEncoding("windows-1251"));
//указываем OPC-сервер
var OPCitem = HostFB.TreeItemHlp.Project.SystemTreeRootItem.
Childs[0].TreeItemHlp. //компьютер
Childs[0].TreeItemHlp; //OPC-сервер
var OPC = (IOPCControl)OPCitem.FBObject;
Message("OPC: " + OPCitem.FullName);
int idxOPCnameEnd = OPCitem.FullName.Length + 1;
//указываем группу для копирования
var group = OPCitem.Childs[2].TreeItemHlp //група уровня 1
// .Childs[1].TreeItemHlp //подгрупа уровня 2
// .Childs[0].TreeItemHlp //подгрупа уровня 3 ...
;
Message("Group: " + group.DisplayName);
//собственно копирование
group.NavigateChilds(delegate(ITreeObjectHlp item)
{
var item2 = item as ITreePinHlp;
//полное наименование OPC-переменной
string itemName = item2.FullName.Substring(idxOPCnameEnd);
Message(itemName);
if (itemName.EndsWith("$")) return true;
//ID переменной в OPC-сервере
string itemID = OPC.GetItemID(itemName);
//вставка OPC-переменной в группу
OPC.AddItemToGroupEx(
subs[subs.Length-1], // Item
path.Remove(path.Length-1,1), // Group
"", // AccessPath
parts[1], // ItemID
false // checkExistence
);
//полное наименование OPC-переменной
var itemName = path + subs[subs.Length-1];
//тип OPC-переменной
OPC.SetItemValueType(itemName, itemType);
//режим доступа к OPC-переменной
OPC.SetItemMode(itemName, itemMode);
}
OPC.LockRefresh(false);
OPCitem.ApplyChange();
readFile.Close();
}
}
Во вложении тест-проект со скриптами и примеры файлов экспорта-импорта.
Что скрипты не делают или делают неправильно:
- не сохраняется относительное положение в группе переменных и входящих подгрупп (подгруппы становятся выше переменных),
решение - исправить вручную в MasterSCADA или сразу придерживаться соответствующего взаимного расположения подгрупп и переменных;
- неправильно формируются группы для массивов OPC-переменных,
решение - пересоздать массивы вручную в MasterSCADA.
Совет. Делайте резервное копирование проекта MasterSCADA при использовании скриптов и copy/paste больших объектов.
Пользоваться тому, кто понимает, что делает и зачем.