public static OpcDaGroup Subscribe(String groupname, OpcDaServer server, String[] tags) { var group = server.AddGroup(groupname); group.IsActive = true; group.UpdateRate = TimeSpan.FromMilliseconds(cfg.Period); group.ValuesChanged += Group_ValuesChanged; List <OpcDaItemDefinition> defs = new List <OpcDaItemDefinition>(); foreach (String tag in tags) { var tagdef = new OpcDaItemDefinition { ItemId = tag, IsActive = true }; defs.Add(tagdef); } var results = group.AddItems(defs.ToArray()); int idx = 0; foreach (OpcDaItemResult res in results) { if (res.Error.Failed) { Console.WriteLine("Error adding item {0}: {1}", defs[idx].ItemId, res.Error); } idx++; } return(group); }
private static OpcDaGroup CreateGroupWithItems(OpcDaServer server) { // Create a group with items. OpcDaGroup group = server.AddGroup("MyGroup"); group.IsActive = true; var definition1 = new OpcDaItemDefinition { ItemId = "Bucket Brigade.Int4", IsActive = true }; var definition2 = new OpcDaItemDefinition { ItemId = "Random.Int2", IsActive = true }; OpcDaItemDefinition[] definitions = { definition1, definition2 }; OpcDaItemResult[] results = group.AddItems(definitions); // Handle adding results. foreach (OpcDaItemResult result in results) { if (result.Error.Failed) { Console.WriteLine("Error adding items: {0}", result.Error); } } return(group); }
static void Main() { Bootstrap.Initialize(); Uri url = UrlBuilder.Build("Matrikon.OPC.Simulation.1"); using (var server = new OpcDaServer(url)) { // Connect to the server first. server.Connect(); // Create a group with items. OpcDaGroup group = server.AddGroup("MyGroup"); group.IsActive = true; var definition1 = new OpcDaItemDefinition { ItemId = "Random.Boolean", IsActive = true }; var definition2 = new OpcDaItemDefinition { ItemId = "Random.Int1", IsActive = true }; var definition3 = new OpcDaItemDefinition { ItemId = "Random.Int2", IsActive = true }; OpcDaItemDefinition[] definitions = { definition1, definition2, definition3 }; OpcDaItemResult[] results = group.AddItems(definitions); // Handle adding results. foreach (OpcDaItemResult result in results) { if (result.Error.Failed) { Console.WriteLine("Error adding items: {0}", result.Error); } } while (true) { OpcDaItemValue[] values = group.Read(group.Items, OpcDaDataSource.Device); Console.WriteLine("Random.Boolean: {0} \n Random.Int1: {1} \n Random.Int2: {2}", values[0].Value, values[1].Value, values[2].Value); Thread.Sleep(1000); Console.Clear(); } /*int count = server.Groups.Count; * Console.WriteLine(count);*/ } }
public void AddGroup(OpcDaService server, string groupKey, TreeNode groupNode, int interval, int count) { if (server.Service == null) { return; } foreach (TreeNode tmpNode in groupNode.Nodes) { if (tmpNode.Checked) { string md5Str = groupKey + tmpNode.Text; OpcDaGroup group = null; if (server.OpcDaGroupS.ContainsKey(md5Str) == false) { group = server.Service.AddGroup(md5Str); // maybe cost lot of time server.OpcDaGroupS.Add(md5Str, group); group.IsActive = true; group.UserData = groupNode; List <OpcDaItemDefinition> itemDefList = new List <OpcDaItemDefinition>(); var def = new OpcDaItemDefinition { ItemId = tmpNode.Text, UserData = groupKey, IsActive = true }; itemDefList.Add(def); group.AddItems(itemDefList); GroupEntity groupEntity = new GroupEntity() { Host = server.Host, ProgId = server.ServiceId }; groupCollection.Add(md5Str, groupEntity); group.UpdateRate = TimeSpan.FromMilliseconds(interval); // 1000毫秒触发一次 } else { group = server.OpcDaGroupS[md5Str]; } groupKeys.Add(md5Str); group.ValuesChanged += MonitorValuesChanged; SetGroupFlag(groupKey, count); // LogHelper.Log("GroupFlag " + GetGroupFlag(groupKey).ToString(), (int)LogHelper.Level.INFO); } // GetUnits(group); // LogHelper.Log("aaa: " + GetUnits(group), (int)LogHelper.Level.INFO); } }
//Создание группы для OPC -для одного тега. Нахера??? :) protected virtual void InitSingleItemDataGroup(string groupName, string valueName, out OpcDaGroup dataGroup) { var definition = new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + valueName, IsActive = true }; dataGroup = opcClient.OpcServer.AddGroup(groupName); //Группа переменных для чтения (записи) из OPC-сервера dataGroup.IsActive = true; OpcDaItemResult[] results = dataGroup.AddItems(new OpcDaItemDefinition[] { definition }); //Добавление переменных в группу }
public void StartMonitor(string groupKey, List <string> items, string serverID, string host = "127.0.0.1") { JsonArray properties = new JsonArray(); OpcDaService server = GetOpcDaService(host, serverID); if (server == null) { return; } foreach (string item in items) { string md5Str = groupKey + item; if (server.OpcDaGroupS.ContainsKey(md5Str) == false) { OpcDaGroup group = server.Service.AddGroup(md5Str); // maybe cost lot of time group.IsActive = true; server.OpcDaGroupS.Add(md5Str, group); List <OpcDaItemDefinition> itemDefList = new List <OpcDaItemDefinition>(); var def = new OpcDaItemDefinition { ItemId = item, UserData = groupKey, IsActive = true }; itemDefList.Add(def); group.AddItems(itemDefList); groupKeys.Add(md5Str); SetGroupFlag(groupKey, 0); LogHelper.Log("StartMonitoring is groupId " + md5Str + " interval " + "1000 ms", (int)LogHelper.Level.INFO); setItemsCount(groupKey, group); group.UpdateRate = TimeSpan.FromMilliseconds(1000); // 1000毫秒触发一次 group.ValuesChanged += MonitorValuesChanged; if (!groupCollection.ContainsKey(md5Str)) { GroupEntity groupEntity = new GroupEntity() { Host = server.Host, ProgId = server.ServiceId }; groupCollection.Add(md5Str, groupEntity); } LogHelper.Log("groupKeygroupKeygroupKey: " + groupKey); // LogHelper.Log("aaaa: " + GetUnits(group), (int)LogHelper.Level.INFO); } } }
private static OpcNode[] GetNodesRecursive(OpcDaBrowserAuto browser, OpcDaGroup group, OpcNode parentNode) { OpcDaBrowseElement[] elements = browser.GetElements(parentNode?.FullPath); // fetches from root if null OpcNode[] results = elements.Select(x => new OpcNode { Name = x.Name, FullPath = x.ItemId, ItemId = x.IsItem ? x.ItemId : null }).ToArray(); foreach (OpcNode node in results) { GetNodesRecursive(browser, group, node); } if (parentNode != null) { parentNode.Children = results; if (!string.IsNullOrEmpty(parentNode.ItemId)) // fetch data types for tags { var def = new OpcDaItemDefinition { ItemId = parentNode.ItemId }; OpcDaItemResult[] groupAddResults = group.AddItems(new OpcDaItemDefinition[] { def }); foreach (OpcDaItemResult addResult in groupAddResults) { if (addResult.Error.Failed) { throw new Exception($"Could not fetch type data for {parentNode.ItemId}"); } } OpcDaItem item = group.Items.FirstOrDefault(x => x.ItemId == parentNode.ItemId); if (item != null) { parentNode.TypeName = item.CanonicalDataType.FullName; } } } return(results); }
public void writeTag(string _tagName, string _tagValue, bool _sync = false) { // Create a group with items. if (writingGroup == null) { writingGroup = this.server.AddGroup("writingGroup"); } writingGroup.IsActive = true; OpcDaItemDefinition def = new OpcDaItemDefinition { ItemId = _tagName, IsActive = true }; OpcDaItemDefinition[] definitions = { def }; OpcDaItemResult[] results = writingGroup.AddItems(definitions); // Handle adding results. foreach (OpcDaItemResult result in results) { } OpcDaItem[] items = { writingGroup.Items[0] }; object[] values = { _tagValue }; if (_sync) { // Write values to the items synchronously. HRESULT[] hresults = writingGroup.Write(items, values); }/* * else * { * // Write values to the items asynchronously. * HRESULT[] results = await group.WriteAsync(items, values); * }*/ }
public void read_group(string opcserver, string group_name, List <string> items) { Uri url = UrlBuilder.Build(opcserver); using (var server = new OpcDaServer(url)) { // Connect to the server first. server.Connect(); // Create a group with items. OpcDaGroup group = server.AddGroup(group_name); IList <OpcDaItemDefinition> definitions = new List <OpcDaItemDefinition>(); int i = 0; foreach (string id in items) { LogHelper.Log("id: " + id); var definition = new OpcDaItemDefinition { ItemId = id, IsActive = true }; definitions.Insert(i++, definition); } group.IsActive = true; OpcDaItemResult[] results = group.AddItems(definitions); OpcDaItemValue[] itemValues = group.Read(group.Items, OpcDaDataSource.Device); // Handle adding results. JsonObject data = new JsonObject(); foreach (OpcDaItemValue item in itemValues) { if (item.Item != null && item.Value != null) { data.Add(item.Item.ItemId, item.Value); } } server.Disconnect(); } }
protected OpcDaGroup Subscribe(String groupname, OpcDaServer server, String[] tags) { var group = server.AddGroup(groupname); group.IsActive = true; group.UpdateRate = TimeSpan.FromMilliseconds(cfg.Period); group.ValuesChanged += Group_ValuesChanged; List <OpcDaItemDefinition> defs = new List <OpcDaItemDefinition>(); foreach (String tag in tags) { var tagdef = new OpcDaItemDefinition { ItemId = tag, IsActive = true }; defs.Add(tagdef); } var results = group.AddItems(defs.ToArray()); int idx = 0; foreach (OpcDaItemResult res in results) { if (res.Error.Failed) { if (!res.Error.ToString().Contains("The item ID is not defined in the server address space")) { string err = String.Format("Error adding item {0}: {1}", defs[idx].ItemId, res.Error); Log.Write(err, LogType.WARNING); } } idx++; } return(group); }
private void OpcConnect() { try { Uri url = UrlBuilder.Build("CoDeSys.OPC.DA"); using (var server = new OpcDaServer(url)) { server.Connect(); OpcDaGroup group = server.AddGroup("MyGroup"); group.IsActive = true; var definition1 = new OpcDaItemDefinition { ItemId = "PLC_GW3.Application.GVL.ROLL_X", IsActive = true }; var definition2 = new OpcDaItemDefinition { ItemId = "PLC_GW3.Application.GVL.PITCH_Y", IsActive = true }; var definition3 = new OpcDaItemDefinition { ItemId = "PLC_GW3.Application.GVL.YAW_Z", IsActive = true }; OpcDaItemDefinition[] definitions = { definition1, definition2, definition3 }; OpcDaItemResult[] results = group.AddItems(definitions); foreach (OpcDaItemResult result in results) { if (result.Error.Failed) { throw new Exception("Definicje nie weszły"); } } while (_continue) { try { OpcDaItemValue[] values = group.Read(group.Items, OpcDaDataSource.Device); Dispatcher.Invoke((Action)(() => { dataCont.x = Convert.ToInt32(values[0].Value) / 10; dataCont.y = Convert.ToInt32(values[1].Value) / 10; dataCont.z = Convert.ToInt32(values[2].Value) / 10; ChartUpdate((double)dataCont.x, (double)dataCont.y, (double)dataCont.z); })); Thread.Sleep(80); } catch (NotSupportedException en) { _continue = false; MessageBox.Show(en.Message + "\n" + en.StackTrace + "\n" + en.Source); } } server.Disconnect(); } } catch (Exception en) { MessageBox.Show(en.Message); } }
public ClientDaOPC() { Uri url = UrlBuilder.Build("Kepware.KEPServerEX.V6", "10.177.3.61"); server = new OpcDaServer(url); server.Connect(); Console.WriteLine(DateTime.Now + " :OPC is connect"); groupLeap130 = server.AddGroup("LEAP130"); groupLeap130.IsActive = true; var tagsLeap130 = new OpcDaItemDefinition[] { new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP130.OpMode", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP130.OpModeCode", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP130.Egy", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP130.Hv", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP130.CounterNewFill", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP130.SideA", IsActive = true }, }; groupLeap130.AddItems(tagsLeap130); Console.WriteLine(DateTime.Now + " Group LEAP130 is Add"); groupLeap300 = server.AddGroup("LEAP300"); groupLeap300.IsActive = true; var tagsLeap300 = new OpcDaItemDefinition[] { new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP300.OpMode", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP300.OpModeCode", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP300.Egy", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP300.Hv", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP300.CounterNewFill", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.PLD_LEP300.SideA", IsActive = true }, }; groupLeap300.AddItems(tagsLeap300); Console.WriteLine(DateTime.Now + " Group LEAP300 is Add"); groupPldA = server.AddGroup("PldA"); groupPldA.IsActive = true; var tagsPldA = new OpcDaItemDefinition[] { new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.Alarm.AlarmReel", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.Alarm.AlarmVacuum", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.Speed_m_h", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.pos", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.Main_Length_m", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.Name", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.RunTimes", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.RunTimeSet", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.LengthSetting", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_A_PLC_01.PROCES_START", IsActive = true }, }; groupPldA.AddItems(tagsPldA); Console.WriteLine(DateTime.Now + " Group PldA is Add"); groupPldB = server.AddGroup("PldB"); groupPldB.IsActive = true; var tagsPldB = new OpcDaItemDefinition[] { new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.Alarm.AlarmReel", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.Alarm.AlarmVacuum", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.Speed_m_h", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.pos", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.Main_Length_m", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.Name", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.RunTimes", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.RunTimeSet", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.LengthSetting", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.PLD_Set_B_PLC_01.PROCES_START", IsActive = true }, }; groupPldB.AddItems(tagsPldB); Console.WriteLine(DateTime.Now + " Group PldB is Add"); groupSilver = server.AddGroup("Silver"); groupSilver.IsActive = true; var tagsSilver = new OpcDaItemDefinition[] { new OpcDaItemDefinition() { ItemId = "FinsTCP.SPAD_SILVER_PLC_01.Alarm.AlarmReel", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.SPAD_SILVER_PLC_01.Alarm.AlarmVacuum", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.SPAD_SILVER_PLC_01.HMI_Length_Monitor", //*1000 IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.SPAD_SILVER_PLC_01.HMI_Lenth_Setting", //*1000 IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.SPAD_SILVER_PLC_01.HMI_Tape_Speed_Monitor",//*10 IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.SPAD_SILVER_PLC_03.Pos", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.SPAD_SILVER_PLC_03.Name", IsActive = true }, new OpcDaItemDefinition() { ItemId = "FinsTCP.SPAD_SILVER_PLC_03.PROCES_START", IsActive = true }, }; groupSilver.AddItems(tagsSilver); Console.WriteLine(DateTime.Now + " Group Silver is Add"); var time = new Timer(1000); time.AutoReset = true; time.Enabled = true; time.Elapsed += Time_Elapsed;; }
protected internal void CreateOPCWriteGroup(bool isPrimaryServer) { OpcDaItemResult[] results; //Создаем группу для записи из OPC-сервера //---Группа 1 (синхронная запись)---------------------// dataGroupForSynchroWriting = opcClient.OpcServer.AddGroup("SingleTagSynchroGroupWrite"); //Группа переменных для одновременной записи в OPC dataGroupForSynchroWriting.IsActive = true; var syncWriteItems = new OpcDaItemDefinition[] { new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + (isPrimaryServer ? "[0]" : "[1]"), IsActive = true } }; results = dataGroupForSynchroWriting.AddItems(syncWriteItems); syncValuesForWriting = new object[results.Count()]; //Массив значений для записи в OPC_сервер //---Группа 2 (Асинхронная запись)---------------------// dataGroupWrite = opcClient.OpcServer.AddGroup("SingleTagAsynchroGroupWrite"); //Группа переменных для разразненной записи в OPC dataGroupWrite.IsActive = true; var aSyncWriteItems = new OpcDaItemDefinition[] { //[0] Переменая "Масса пропилена" для задания расхода пропилена на T02 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[20]", IsActive = true }, //[1] Расчетный перепад давления в 1.E06 после теплообменника 1.E23 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[21]", IsActive = true }, //[2] Расчетная дельта к заданию давления реакции (см. AdditionalCalculator класс) new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[22]", IsActive = true }, //[3] Расчетная крепость ACN в колонне 1.Т01 для поддержания точки азиотропы new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[23]", IsActive = true }, //[4] Расчетная крепость ACN в колоне 1.Т01 по расходу 100% перекиси, вычисленной по заданному расходу перекиси на реакторы new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[24]", IsActive = true }, //[5] Расчетная крепость PO от колонны 1.Т03 к 1.Т06 (итеративный расчет) при 87% ACN в паре ACN-Water new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[25]", IsActive = true }, //[6] Расчетные проценты массового содержания компонентов в смеси от колонны 1.Т03 в 1.Т06 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_T03_AP03_DENS.PERC", IsActive = true }, //[7] Расчетная крепость PO к сборнику со склада в колонну 1.Т01 (итеративный расчет) при 87% ACN в паре ACN-Water new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[26]", IsActive = true }, //[8] Расчетные проценты массового содержания компонентов в смеси S13_P03_FT01 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S13_P03_QC01_DENS.PERC", IsActive = true }, //[9] Расчетная крепость PO от колонны 1.Т03 к 1.Т06 (итеративный расчет) при 0% ACN в паре ACN-Water new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[27]", IsActive = true }, //[10] Расчетная крепость PO к сборнику со склада в колонну 1.Т01 (итеративный расчет) при 0% ACN в паре ACN-Water new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[28]", IsActive = true }, //[11] Расчетная крепость PO от колонны 1.Т06 к сборнику 1.D08 (итеративный расчет) при 87% ACN в паре ACN-Water new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[29]", IsActive = true }, //[12] Расчетная крепость PO от колонны 1.Т06 к сборнику 1.D08 (итеративный расчет) при 0% ACN в паре ACN-Water new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0] + "[30]", IsActive = true }, //[13] Расчетные проценты массового содержания компонентов в смеси от колонны 1.Т06 к сборнику 1.D08 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_D08_AP01_DENS.PERC", IsActive = true } }; results = dataGroupWrite.AddItems(aSyncWriteItems); valuesForWriting = new object[results.Count()]; }
protected internal override void CreateOPCReadGroup() { //Создаем группу для чтения из OPC-сервера var simpleTagsItemDefinitions = new OpcDaItemDefinition[] { //[0] Чтение массива переменных Exchange из PLC (элемент 0 массива - статус записи Primary Sever, элемент 1 - для Secondary Server'a) new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[0], IsActive = true }, //[1] Атмосферное давление new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + SingleTagNames[1], IsActive = true }, //[2] Расход реакционной смеси от А01 для расчета расхода пропилена на А02 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_P05_FC08_AVER_HMI", IsActive = true }, //[3] РАсход массовый ACN с водой из D02 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_A01_FC02_AVER_HMI", IsActive = true }, //[4] Задание температуры в реакторе 1.R01 для расчета дельты к заданию давления реакции (см. AdditionalCalculator класс) new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_R01_TT01_SP", IsActive = true }, //[5] Массовый расход реакционной смеси S11_P05_FC01_HMI new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_P05_FC01.HMI", IsActive = true }, //[6] Плотность перекиси со склада (лабораторные показатели) new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S12_P02_AP01.HMI", IsActive = true }, //[7] Расход массовый ACN из сборника 1.D02 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_A01_FC02_AVER_HMI", IsActive = true }, //[8] Содержание ACN в сборнике 1.D02 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_A01_FC02_DENS.PERC[1]", IsActive = true }, //[9] Заданный массовый расход перекиси к реакторам new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S12_P02_FT01_SP", IsActive = true }, //[10] Крепость ACN в колонне 1.Т01 в точке азеотропы new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_T01_PT05_AZEO_HMI", IsActive = true }, //[11] Температура от массового расходомера PO в сборник 1.D08 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_P13_FT01_Mass.TEMPERATURE", IsActive = true }, //[12] Плотность от массового расходомера PO в сборник 1.D08 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_P13_FT01_Mass.DENSITY", IsActive = true }, //[13] Плотность от массового расходомера PO S13_P03_FC01 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S13_P03_FT01_Mass.DENSITY", IsActive = true }, //[14] Температура от массового расходомера PO со склада new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S13_P03_FT01_Mass.TEMPERATURE", IsActive = true }, //[15] Плотность от массового расходомера PO в колонну 1.T06 S11_T06_FT02 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_T06_FT02_Mass.DENSITY", IsActive = true }, //[16] Температура от массового расходомера PO в колонну 1.T06 S11_T06_FT02 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_T06_FT02_Mass.TEMPERATURE", IsActive = true }, //[17] % воды в смеси от колонны 1.Т06 к сборнику 1.D08 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_T06_AP01_START_WATER", IsActive = true }, //[18] % альдегидов в смеси от колонны 1.Т06 к сборнику 1.D08 new OpcDaItemDefinition { ItemId = opcClient.ParentNodeDescriptor + "S11_T06_AP01_START_ALD", IsActive = true } }; dataGroupRead = opcClient.OpcServer.AddGroup("SingleTagGroupRead"); //Группа переменных для чтения (записи) из OPC-сервера dataGroupRead.IsActive = true; OpcDaItemResult[] results = dataGroupRead.AddItems(simpleTagsItemDefinitions); //Добавление переменных в группу }
public ClientDaOPC() { Uri url = UrlBuilder.Build("Kepware.KEPServerEX.V6", "10.177.3.61"); server = new OpcDaServer(url); server.Connect(); Console.WriteLine("OPC is connect"); var tagsIBAD = new OpcDaItemDefinition[] { //ibad //error //int new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.Al2O3_CH1_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.DC_01", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.DC_02", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.Homo_Epl_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.HomoEpl_Heat_1", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.HomoEpl_Heat_2", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.HomoEpl_Heat_3", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.HomoEpl_Heat_4", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.HomoEpl_Heat_5", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.LMO_Heat_1", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.LMO_Heat_2", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.LMO_Heat_3", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.LMO_Heat_4", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.LMO_Heat_5", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.LMO_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.IBAD_TMP_A", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.IBAD_TMP_B", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.IBAD_TMP_C", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.IBAD_TMP_D", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.NECK_2_3_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.NECK_3_4_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.NECK_5_6_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.RF_01", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.RF_02", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.RHEED_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.Unwind_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.Wind_TMP", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.Y2O3_TMP", IsActive = true }, //bool //status //float new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.System.Length", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.System.Linear_Speed", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.System.Set_Length", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_PLC_01.ALARM.Al2O3_CH1_TMP", IsActive = true }, }; var tagsMOIKA = new OpcDaItemDefinition[] { new OpcDaItemDefinition() { ItemId = "BackhoffADS.MOIKA_PLC01.CHAMBER_ALL_PROCESS_STEP", IsActive = true }, new OpcDaItemDefinition() //bool { ItemId = "BackhoffADS.MOIKA_PLC01.CHAMBER_ALL_PROCESS_RUN", IsActive = true }, new OpcDaItemDefinition() { ItemId = "BackhoffADS.MOIKA_PLC01.CHAMBER_ALL_PROCESS_COMPLETE", IsActive = true }, }; var tagsSCADA = new OpcDaItemDefinition[] { new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_SCADA.ALARM.EGUN_01", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_SCADA.ALARM.EGUN_01", IsActive = true }, new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_SCADA.System.Start_Procces", IsActive = true }, }; var tagsTerm = new OpcDaItemDefinition[] { //string new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_TERM.Unwind_Load_cell.CurrentTape_01", IsActive = true }, //float new OpcDaItemDefinition() { ItemId = "ModbusTCP.IBAD_TERM.Unwind_Load_cell.Position_01", IsActive = true } }; groupIBAD = server.AddGroup("IBAD"); groupIBAD.IsActive = true; groupMOIKA = server.AddGroup("MOIKA"); groupMOIKA.IsActive = true; groupSCADA = server.AddGroup("SCADA"); groupSCADA.IsActive = true; groupTERM = server.AddGroup("TERM"); groupTERM.IsActive = true; OpcDaItemDefinition[] definitions1 = tagsIBAD; OpcDaItemDefinition[] definitions2 = tagsMOIKA; OpcDaItemDefinition[] definitions3 = tagsSCADA; OpcDaItemDefinition[] definitions4 = tagsTerm; OpcDaItemResult[] results = groupIBAD.AddItems(definitions1); OpcDaItemResult[] results2 = groupMOIKA.AddItems(definitions2); OpcDaItemResult[] results3 = groupSCADA.AddItems(definitions3); OpcDaItemResult[] results4 = groupTERM.AddItems(definitions4); Console.WriteLine("Group IBAD is Add"); var time = new Timer(1000); time.AutoReset = true; time.Enabled = true; time.Elapsed += Time_Elapsed; }