Example #1
0
        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);
        }
Example #3
0
        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);*/
            }
        }
Example #4
0
        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);
            }
        }
Example #5
0
        //Создание группы для 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 });    //Добавление переменных в группу
        }
Example #6
0
        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);
                }
            }
        }
Example #7
0
        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);
              * }*/
        }
Example #9
0
        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();
            }
        }
Example #10
0
        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);
        }
Example #11
0
        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);
            }
        }
Example #12
0
        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;;
        }
Example #13
0
        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()];
        }
Example #14
0
        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);                   //Добавление переменных в группу
        }
Example #15
0
        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;
        }