PHP код:
/*
Вставка групп OPC-переменных с вложенными подгруппами
из файла в проект MasterSCADA
Путь к файлу указывается в
const string filename = ...
OPC-сервер указывается в
var OPCitem = ...
Работает в 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 char sep = '.'; //символ разделителя наименований групп и переменных
//указываем файл
const string filename = @"C:\test2.csv";
public override void DoAction()
{
StreamReader readFile = new StreamReader(filename, Encoding.GetEncoding("windows-1251"));
//указываем OPC-сервер
var OPCitem = HostFB.TreeItemHlp.Project.SystemTreeRootItem.
Childs[0].TreeItemHlp. //компьютер
Childs[0].TreeItemHlp; //OPC-сервер
var OPC = (IOPCControl)OPCitem.FBObject;
Message(OPCitem.FullName);
OPC.LockRefresh(true);
//добавляются новые группы и переменные
while(!readFile.EndOfStream)
{
string str = readFile.ReadLine();
Message(str);
string[] parts = str.Split(';');
if (parts.Length != 4)
{
Message("Ошибка 01: Неправильный формат строки");
continue; //не разбирать
}
int itemType = Int32.Parse(parts[2]);
int itemMode = Int32.Parse(parts[3]);
string[] subs = parts[0].Split(sep);
string path = string.Empty;
//добавление несуществующих групп
for (int j=0; j<subs.Length-1; j++)
{
// Message(subs[j] + " path=" + path);
if (OPCitem.HasChild(path + subs[j])==false)
{
if (path==string.Empty)
{
OPC.AddGroup(path, subs[j]);
}
else
{ // используется path без заключительного sep
OPC.AddGroup(path.Remove(path.Length-1,1), subs[j]);
}
OPC.LockRefresh(false);
OPC.LockRefresh(true);
}
path = path + subs[j] + sep;
}
//вставка 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();
}
}