Exemplo n.º 1
1
        private void ConnectionAgent()
        {
            while (!_connectionEnd.WaitOne(0) && !Connected)
                try
                {
                    URL url = new URL(_OpcSection.Server.Name);
                    _Server = new Opc.Da.Server(new OpcCom.Factory(), null);
                    _Server.Connect(url, new ConnectData(new NetworkCredential()));

                    _groupRead = (Subscription)_Server.CreateSubscription(_GroupReadState);
                    _groupWrite = (Subscription)_Server.CreateSubscription(_GroupWriteState);

                    for (int i = 0; i < _OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags.Count; i++)
                    {
                        _Items[i] = new Opc.Da.Item();
                        //_Items[i].ItemName = String.Format("{0}{1}", _OpcSection.Server.Channel, _OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags[i].Name);
                        _Items[i].ItemName = _OpcSection.Server.Channel + "." + _OpcSection.Server.Device + "." + _OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags[i].Name;
                        //string itmNam = String.Format("{0}]{1}", _OpcSection.Server.Channel, _OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags[i].Name);
                        _logger.LogInfo(/*Mtd*/ ": recognized element " + _Items[i].ItemName);
                    }
                    _Items = _groupRead.AddItems(_Items);
                    _groupRead.DataChanged += new DataChangedEventHandler(Group_DataChanged);
                }
                catch (Exception ex) { _logger.LogError(ex); }
        }
Exemplo n.º 2
0
        private void ConnectionAgent()
        {
            while (!_connectionEnd.WaitOne(0) && !Connected)
            {
                try
                {
                    URL url = new URL(_OpcSection.Server.Name);
                    _Server = new Opc.Da.Server(new OpcCom.Factory(), null);
                    _Server.Connect(url, new ConnectData(new NetworkCredential()));

                    _groupRead  = (Subscription)_Server.CreateSubscription(_GroupReadState);
                    _groupWrite = (Subscription)_Server.CreateSubscription(_GroupWriteState);

                    for (int i = 0; i < _OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags.Count; i++)
                    {
                        _Items[i] = new Opc.Da.Item();
                        //_Items[i].ItemName = String.Format("{0}{1}", _OpcSection.Server.Channel, _OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags[i].Name);
                        _Items[i].ItemName = _OpcSection.Server.Channel + "." + _OpcSection.Server.Device + "." + _OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags[i].Name;
                        //string itmNam = String.Format("{0}]{1}", _OpcSection.Server.Channel, _OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags[i].Name);
                        _logger.LogInfo(/*Mtd*/ ": recognized element " + _Items[i].ItemName);
                    }
                    _Items = _groupRead.AddItems(_Items);
                    _groupRead.DataChanged += new DataChangedEventHandler(Group_DataChanged);
                }
                catch (Exception ex) { _logger.LogError(ex); }
            }
        }
        /*********************************************************************************************************************
        *
        * Buttons End
        *
        *********************************************************************************************************************/

        /*********************************************************************************************************************
        *
        *  Methods
        *
        *  Show Components():
        *  Search For Components():
        *  Search For Job():
        *
        *
        *********************************************************************************************************************/

        private void JobData_ConnectToOPCServer(object sender, EventArgs e)
        {
            try
            {
                OPCServer     = new Opc.Da.Server(OPCFactory, null);
                OPCServer.Url = new Opc.URL("opcda://OHN66OPC/Kepware.KEPServerEX.V6");
                OPCServer.Connect();

                Component_StateRead            = new Opc.Da.SubscriptionState();
                Component_StateRead.Name       = "Component_Reading";
                Component_StateRead.UpdateRate = 1000;
                Component_StateRead.Active     = true;
                Component_Read              = (Opc.Da.Subscription)OPCServer.CreateSubscription(Component_StateRead);
                Component_Read.DataChanged += new Opc.Da.DataChangedEventHandler(Component_Read_DataChanged);

                ScanNewPart_StateWrite        = new Opc.Da.SubscriptionState();
                ScanNewPart_StateWrite.Name   = "ScanNewPart_WriteGroup";
                ScanNewPart_StateWrite.Active = true;
                ScanNewPart_Write             = (Opc.Da.Subscription)OPCServer.CreateSubscription(ScanNewPart_StateWrite);

                Hardware_StateWrite        = new Opc.Da.SubscriptionState();
                Hardware_StateWrite.Name   = "Hardware_WriteGroup";
                Hardware_StateWrite.Active = true;
                Hardware_Write             = (Opc.Da.Subscription)OPCServer.CreateSubscription(Hardware_StateWrite);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemplo n.º 4
0
        public void ConnectToServer()
        {
            try
            {
                url = new Opc.URL("opcda://IAPENG1/RSLinx OPC Server");
                //server = new Opc.Da.Server(fact, null);
                server = new Opc.Da.Server(fact, url);
                System.Net.NetworkCredential networkCredential = new System.Net.NetworkCredential();
                Opc.ConnectData connecteddata = new Opc.ConnectData(networkCredential);
                server.Connect(url, connecteddata);
                groupState             = new Opc.Da.SubscriptionState();
                groupState.Name        = "Group";
                groupState.UpdateRate  = 1000;                                              // this isthe time between every reads from OPC server
                groupState.Active      = true;                                              //this must be true if you the group has to read value
                groupRead              = (Opc.Da.Subscription)server.CreateSubscription(groupState);
                groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(UpdateTagData); //callback when the data are readed

                if (items[0] == null)
                {
                    items[0] = new Opc.Da.Item();
                    items[1] = new Opc.Da.Item();
                    items[2] = new Opc.Da.Item();
                    items[3] = new Opc.Da.Item();
                    items[4] = new Opc.Da.Item();
                    items[5] = new Opc.Da.Item();
                    items[6] = new Opc.Da.Item();
                    items[7] = new Opc.Da.Item();
                }

                items[0].ItemName = "[PLC2]LocalDateTime[0]";
                items[1].ItemName = "[PLC2]LocalDateTime[1]";
                items[2].ItemName = "[PLC2]LocalDateTime[2]";
                items[3].ItemName = "[PLC2]LocalDateTime[3]";
                items[4].ItemName = "[PLC2]LocalDateTime[4]";
                items[5].ItemName = "[PLC2]LocalDateTime[5]";
                items[6].ItemName = "[PLC2]LocalDateTime[6]";
                items[7].ItemName = "[PLC2]LocalDateTime";

                items = groupRead.AddItems(items);

                // Create a write group
                groupStateWrite        = new Opc.Da.SubscriptionState();
                groupStateWrite.Name   = "Group Write";
                groupStateWrite.Active = false;//not needed to read if you want to write only
                groupWrite             = (Opc.Da.Subscription)server.CreateSubscription(groupStateWrite);
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }
        }
        private void btConnect_Click(object sender, EventArgs e)
        {
            try
            {
                //=== Create a new server
                _server = new Server(_factory, null)
                {
                    Url = new URL(txtConnectionString.Text)
                };

                //=== Server Connection
                _server.Connect();

                //=== Create SubscriptionState from Subscription
                _subscriptionState = new SubscriptionState
                {
                    Name       = "ReadGroup",
                    UpdateRate = 100,
                    Active     = true
                };

                //=== Create a SubscriptionState to Subscription
                _subscriptionStateWrite = new SubscriptionState
                {
                    Name   = "WriteGroup",
                    Active = false
                };


                //=== Subscription creation
                _subscription      = (Subscription)_server.CreateSubscription(_subscriptionState);
                _subscriptionWrite = (Subscription)_server.CreateSubscription(_subscriptionStateWrite);


                //=== Associate the DataChangedEventHandler
                _subscription.DataChanged += new DataChangedEventHandler(SubscriptionRead_DataChanged);


                btReadWrite_Click(null, null);

                txtVariableRead_TextChanged(null, null);
                toolStripStatus.ToolTipText = string.Empty;
                toolStripStatus.Text        = @"Connected";
            }
            catch (Exception ex)
            {
                toolStripStatus.ToolTipText = ex.Message;
                toolStripStatus.Text        = @"Disconnected";
            }
        }
Exemplo n.º 6
0
        private void User_Program_Teach_Senson_Load(object sender, EventArgs e)
        {
            SpotWeldID(); // Get Computer ID and Set Tag Name

            // Connect to OPC Server
            OPCServer     = new Opc.Da.Server(OPCFactory, null);
            OPCServer.Url = new Opc.URL("opcda://OHN66OPC/Kepware.KEPServerEX.V6");
            OPCServer.Connect();

            Sensor_StateRead            = new Opc.Da.SubscriptionState();
            Sensor_StateRead.Name       = "Teach_Sensor_OPC";
            Sensor_StateRead.UpdateRate = 1000;
            Sensor_StateRead.Active     = true;
            Sensor_Read              = (Opc.Da.Subscription)OPCServer.CreateSubscription(Sensor_StateRead);
            Sensor_Read.DataChanged += new Opc.Da.DataChangedEventHandler(Sensor_Read_DataChanged);

            TeachSensor_StateWrite        = new Opc.Da.SubscriptionState();
            TeachSensor_StateWrite.Name   = "OPCWriteGroup";
            TeachSensor_StateWrite.Active = false;
            TeachSensor_Write             = (Opc.Da.Subscription)OPCServer.CreateSubscription(TeachSensor_StateWrite);

            GroupStateWriteCompOne        = new Opc.Da.SubscriptionState();
            GroupStateWriteCompOne.Name   = "OPCWriteOneGroup";
            GroupStateWriteCompOne.Active = false;
            GroupWriteCompOne             = (Opc.Da.Subscription)OPCServer.CreateSubscription(GroupStateWriteCompOne);

            GroupStateWriteCompTwo        = new Opc.Da.SubscriptionState();
            GroupStateWriteCompTwo.Name   = "OPCWriteTwoGroup";
            GroupStateWriteCompTwo.Active = false;
            GroupWriteCompTwo             = (Opc.Da.Subscription)OPCServer.CreateSubscription(GroupStateWriteCompTwo);

            GroupStateWriteCompThree        = new Opc.Da.SubscriptionState();
            GroupStateWriteCompThree.Name   = "OPCWriteThreeGroup";
            GroupStateWriteCompThree.Active = false;
            GroupWriteCompThree             = (Opc.Da.Subscription)OPCServer.CreateSubscription(GroupStateWriteCompThree);

            // Get The Component ID From the User Program
            Component_1_TextBox.Text = owner.Comp1_TextBox.Text;
            Component_2_TextBox.Text = owner.Comp2_TextBox.Text;
            Component_3_TextBox.Text = owner.Comp3_TextBox.Text;

            CheckComponentValue(); // Find the Number of Components
            //TargetValueSet_TextBox.Clear();
            OPC_TeachSensorValue = 1;
            TeachSensor_OPC();
            SensorRead_OPC();
            WriteComponentOne_OPC();
        }
Exemplo n.º 7
0
        public Boolean Connect()
        {
            // Create a server object and connect to the TwinCATOpcServer
            Opc.URL url = new Opc.URL(opcServerEndpoint);

            OpcCom.Factory fact = new OpcCom.Factory();
            server = new Opc.Da.Server(fact, null);
            server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

            // Create a group
            Opc.Da.Subscription group;

            foreach (BrowsableGroup BrowsableGroup in browsableGroups)
            {
                Opc.Da.SubscriptionState groupState = new SubscriptionState();
                groupState.Name = BrowsableGroup.GroupName;

                groupState.Active = true;
                group             = (Opc.Da.Subscription)server.CreateSubscription(groupState);
                Opc.Da.Item[] items = BrowsableGroup.produceItemsFromNodes();

                items = group.AddItems(items);
                EnableDataChangedCallback(group);
                //todo:
                //EnableDataReadCallback(group);
                //todo:
                //EnableDataWriteCallback(group, BrowsableGroup.produceValueToWrite(items[0],34.0) );
            }


            return(false);
        }
Exemplo n.º 8
0
        public void ConnectToServer()
        {
            try
            {
                //LOCAL OPC CONNECTION kepware
                //url = new Opc.URL("opcda://PCNAME/Kepware.KEPServerEX.V6");
                //LOCAL OPC CONNECTION RSLinx
                //url = new Opc.URL("opcda://PCNAME/RSLinx OPC Server");

                //REMOTE OPC CONNECTION WHEN USING opcexpert tunneling
                url = new Opc.URL("opcda://PCNAME/RSLinx Remote OPC Server.REMOTEPCNAME");

                //REMOTE RSLinx OPC
                //this requires DCOM setup
                //url = new Opc.URL("opcda://PCNAME/RSLinx Remote OPC Server");

                server = new Opc.Da.Server(fact, url);
                System.Net.NetworkCredential networkCredential = new System.Net.NetworkCredential();
                Opc.ConnectData connecteddata = new Opc.ConnectData(networkCredential);
                server.Connect(url, connecteddata);
                groupState             = new Opc.Da.SubscriptionState();
                groupState.Name        = "Group";
                groupState.UpdateRate  = 1;                                                 // this isthe time between every reads from OPC server
                groupState.Active      = true;                                              //this must be true if you the group has to read value
                groupRead              = (Opc.Da.Subscription)server.CreateSubscription(groupState);
                groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(UpdateTagData); //callback when the data are readed

                Opc.Da.Item[] items_read = groupRead.AddItems(createSomeTags());
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }
        }
Exemplo n.º 9
0
        public OpcGroup AddGroup(string groupName)
        {
            OpcGroup _group = new OpcGroup {
                IsActive = true, Name = groupName, UpdateRate = new TimeSpan(0, 0, 0, 0, _options.DefaultMonitorInterval)
            };
            var subItem = new OpcDa.SubscriptionState
            {
                Name       = (++_sub).ToString(CultureInfo.InvariantCulture),
                Active     = true,
                UpdateRate = DefaultMonitorInterval
            };

            var    sub         = _server.CreateSubscription(subItem);
            Action unsubscribe = () => new Thread(o =>
                                                  _server.CancelSubscription(sub)).Start();

            dic.Add(groupName, sub);
            sub.DataChanged += (subscriptionHandle, requestHandle, values) =>
            {
                List <OpcItemValue> items = new List <OpcItemValue>();
                foreach (OpcDa.ItemValueResult value in values)
                {
                    OpcItemValue item = new OpcItemValue {
                        GroupName = groupName, Value = value.Value, ItemId = value.ItemName, Quality = value.Quality.ToString(), Timestamp = value.Timestamp
                    };
                    items.Add(item);
                }
                _group.SendValue(items);
            };
            return(_group);
        }
Exemplo n.º 10
0
        public RFID ReadTagsRFID(bool identify_card)
        {
            try
            {
                Opc.Da.Server  server = null;
                OpcCom.Factory fact   = new OpcCom.Factory();
                server = new Opc.Da.Server(fact, null);

                server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                //
                Opc.Da.Subscription      group;
                Opc.Da.SubscriptionState groupState = new Opc.Da.SubscriptionState();
                groupState.Name   = "RFID";
                groupState.Active = true;
                group             = (Opc.Da.Subscription)server.CreateSubscription(groupState);

                //добавление айтемов в группу
                Opc.Da.Item[] items = new Opc.Da.Item[2];
                items[0]          = new Opc.Da.Item();
                items[0].ItemName = "ZREADER.RFID_reader.part1";
                items[1]          = new Opc.Da.Item();
                items[1].ItemName = "ZREADER.RFID_reader.part2";
                items             = group.AddItems(items);
                //List<oldRFID> result_list = new List<oldRFID>();
                ItemValueResult[] res = group.Read(items);
                RFID       rfid       = new RFID();
                EFazsCards ef_card    = new EFazsCards();
                if (res != null)
                {
                    //UInt16? part1 = res[0].Value != null ? res[0].Value as UInt16? : 37;
                    //UInt16? part2 = res[1].Value != null ? res[1].Value as UInt16? : 50907;
                    UInt16?part1 = res[0].Value != null ? res[0].Value as UInt16? : null;
                    UInt16?part2 = res[1].Value != null ? res[1].Value as UInt16? : null;
                    if (part1 != null && part2 != null)
                    {
                        rfid.part1 = part1;
                        rfid.part2 = part2;
                        if (identify_card)
                        {
                            int code1 = int.Parse(part1.ToString());
                            int code2 = int.Parse(part2.ToString());
                            String.Format("Определим ID=карты code1={0}, code2={1}", code1, code2).SaveInformation();
                            azsCards card = ef_card.Get().Where(c => c.Number == (code1).ToString("00") + "," + (code2).ToString("00000")).FirstOrDefault();
                            if (card == null)
                            {
                                card = ef_card.Get().Where(c => c.Number == (code1).ToString("000") + "," + (code2).ToString("00000")).FirstOrDefault();
                            }
                            rfid.card = card;
                        }
                    }
                }
                return(rfid);
            }
            catch (Exception e)
            {
                String.Format("Ошибка выполнения метода ReadTagsRFID(identify_card={0})", identify_card).SaveError(e);
                return(null);
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// Monitor the specified tag for changes
        /// </summary>
        /// <typeparam name="T">the type of tag to monitor</typeparam>
        /// <param name="tag">The fully-qualified identifier of the tag. You can specify a subfolder by using a comma delimited name.
        /// E.g: the tag `foo.bar` monitors the tag `bar` on the folder `foo`</param>
        /// <param name="callback">the callback to execute when the value is changed.
        /// The first parameter is the new value of the node, the second is an `unsubscribe` function to unsubscribe the callback</param>
        public void Monitor <T>(string tag, Action <T, Action> callback)
        {
            var subItem = new OpcDa.SubscriptionState
            {
                Name       = (++_sub).ToString(CultureInfo.InvariantCulture),
                Active     = true,
                UpdateRate = DefaultMonitorInterval
            };
            var sub = _server.CreateSubscription(subItem);

            // I have to start a new thread here because unsubscribing
            // the subscription during a datachanged event causes a deadlock
            Action unsubscribe = () => new Thread(o =>
                                                  _server.CancelSubscription(sub)).Start();

            sub.DataChanged += (handle, requestHandle, values) =>
            {
                T casted;
                TryCastResult(values[0].Value, out casted);
                callback(casted, unsubscribe);
            };
            sub.AddItems(new[] { new OpcDa.Item {
                                     ItemName = tag
                                 } });
            sub.SetEnabled(true);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Подписка на изменение значения на сервере
        /// </summary>
        public void SubscribeAll()
        {
            var subscriptionState = new SubscriptionState
            {
                Name   = "All",
                Active = true
            };

            subscription = (Opc.Da.Subscription)serverHandle.CreateSubscription(subscriptionState);

            Opc.Da.Item[] items = tagList.ToArray();

            items = subscription.AddItems(items);

            subscription.DataChanged += new Opc.Da.DataChangedEventHandler(DataChange);
        }
Exemplo n.º 13
0
        public void WithGroupOfItems(Opc.Da.Server server, string groupName, IEnumerable <OpisenseOpcItem> opcItems, Action <OpcDaClientConnector, Subscription> action, Action <Exception> onError = null)
        {
            if (opcItems is null)
            {
                return;
            }

            var opcItemsList = opcItems.ToList();

            if (!opcItemsList.Any())
            {
                return;
            }

            var groupState = new SubscriptionState
            {
                Name   = groupName,
                Active = false
            };

            using (var opcGroup = server.CreateSubscription(groupState))
            {
                //There is a bug in the library, ClientHandle is not propagated with item results
                var subscriptionItems = opcItemsList.Select(i => new Item {
                    ItemName = i.OpcItemName, ClientHandle = i.VariableId
                });
                opcGroup.AddItems(subscriptionItems.ToArray());
                action(this, opcGroup as Subscription);
            }
        }
Exemplo n.º 14
0
        public static ItemValueResult[] RsLinx_OPC_Client_Read_Array(string ItemName, int Length)
        {
            try
            {
                //Creo un istanza di OPC.server
                Opc.Da.Server server;
                //Parametro necessario alla connect
                OpcCom.Factory fact = new OpcCom.Factory();
                //Creo un istanza di Sottoscrizione
                Opc.Da.Subscription groupRead;
                //Creo un istanza di SubscriptionState, utile per controllare lo stato della sottoscrizione
                Opc.Da.SubscriptionState groupState;
                //Creo un array di OPC.Da.Item
                Opc.Da.Item[] items = new Opc.Da.Item[1];
                //Setto factory e url del server, come url utilizzo quello del RSLinx OPC Server
                server     = new Opc.Da.Server(fact, null);
                server.Url = new Opc.URL(Url);

                //Connetto il server
                server.Connect();

                //Istanzio la sottoscrizione
                groupState            = new Opc.Da.SubscriptionState();
                groupState.Name       = "Group";
                groupState.UpdateRate = UpdateRate; //Setto il tempo di Refresh del gruppo
                groupState.Active     = true;       //Questo valore deve essere true se voglio aver la possibilità di leggere
                //Creo il gruppo sul server
                groupRead = (Opc.Da.Subscription)server.CreateSubscription(groupState);
                //Istanzio l'Item
                items[0] = new Opc.Da.Item();
                //Gli do il nome (Rockwell utilizza questa formzattazione dei nomi per gli array
                //[NomeTopicOPC]NomeTag,LDimensioneArray es. [MyOPCTopic]Posizione,L50)
                items[0].ItemName = $"{ItemName},L{Length}";

                //Aggiungo l'oggetto al gruppo
                items = groupRead.AddItems(items);
                //Leggo il valore dell'item aggiunto
                ItemValueResult[] Ritorno = groupRead.Read(items);

                //Controllo che la lettura dell'array sia andata a buon fine, se non è così lancio un'eccezione
                if (!Ritorno[0].ResultID.Name.Name.Equals("S_OK"))
                {
                    throw new System.Exception("Errore lettura OPC Tag");
                }
                return(groupRead.Read(items));
            }
            catch (Exception ex)
            {
                //Se viene lanciata un'eccezione ritorno un array di ItemValueResult con il primo che ha valore -1 e mostro un Messagebox con l'errore
                MessageBox.Show(ex.Message);
                ItemValueResult[] Errore = new ItemValueResult[1];
                Errore[0] = new ItemValueResult();
                float[] Err = { (float)-1, (float)-1 };
                Errore[0].Value = Err;
                return(Errore);
            }
        }
Exemplo n.º 15
0
 /// <summary>
 /// 创建组
 /// </summary>
 /// <param name="_subscriptionname"></param>
 public void CreateMySubscription(string _subscriptionname)
 {
     Opc.Da.SubscriptionState subScriptionState = new Opc.Da.SubscriptionState();
     subScriptionState.Active       = true; // activate cyclic communication
     subScriptionState.ClientHandle = System.Guid.NewGuid().ToString();
     subScriptionState.Deadband     = 0.0F;
     subScriptionState.Name         = _subscriptionname;
     subScriptionState.UpdateRate   = 1000;
     opcServer.CreateSubscription(subScriptionState);
 }
Exemplo n.º 16
0
        private void User_Program_Select_Operation_Load(object sender, EventArgs e)
        {
            BrakePressID();
            OPCServer = new Opc.Da.Server(OPCFactory, null);
            //.Url = new Opc.URL("opcda://OHN66OPC/Matrikon.OPC.AllenBradleyPLCs.1");
            OPCServer.Url = new Opc.URL("opcda://OHN66OPC/Kepware.KEPServerEX.V6");
            //OPCServer.Url = new Opc.URL("opcda://OHN7009/Matrikon.OPC.AllenBradleyPLCs.1");
            OPCServer.Connect();

            OperationSelection_StateRead            = new Opc.Da.SubscriptionState();
            OperationSelection_StateRead.Name       = "153R_Spotweld";
            OperationSelection_StateRead.UpdateRate = 200;
            OperationSelection_StateRead.Active     = true;

            OperationSelection_Read = (Opc.Da.Subscription)OPCServer.CreateSubscription(OperationSelection_StateRead);

            OperationSelection_StateWrite        = new Opc.Da.SubscriptionState();
            OperationSelection_StateWrite.Name   = "PB_OperationSelect_WriteGroup";
            OperationSelection_StateWrite.Active = false;
            OperationSelection_Write             = (Opc.Da.Subscription)OPCServer.CreateSubscription(OperationSelection_StateWrite);
        }
Exemplo n.º 17
0
        /// <summary>
        /// Добавление тегов к подписке
        /// </summary>
        public override void AddTags(List <TagId> taglist)
        {
            TagListBackup = taglist;
            var subList = new List <Opc.Da.Item>();

            foreach (var tag in taglist)
            {
                if (_tags.Exists(d => d.ItemName == tag.TagName))
                {   // TagListBackup.Add(tag);
                    subList.Add(new Opc.Da.Item {
                        ItemName = tag.TagName
                    });
                    logger.Logged("Info", "#" + PollerId + ": добавляем тег '" + tag.TagName + "' в подписку", "OpcDaPoller", "AddTags");
                }
                else
                {
                    logger.Logged("Error", "#" + PollerId + ": тег '" + tag.TagName + "' не обнаружен на сервере", "OpcUaPoller", "AddTags");
                }
            }
            if (!Activated)
            {
                return;
            }
            try
            {
                var groupState = new Opc.Da.SubscriptionState {
                    Name = "Group", Active = true
                };
                var @group = (Opc.Da.Subscription)server.CreateSubscription(groupState);



                /*
                 * int tagCounter = 0;
                 * var items = new Opc.Da.Item[taglist.Count()];
                 * foreach (TagId tag in taglist)
                 * {
                 *  var item = new Opc.Da.Item {ItemName = tag.TagName};
                 *  items[tagCounter] = item;
                 *  tagCounter++;
                 * }*/


                @group.AddItems(subList.ToArray());
                @group.DataChanged += new Opc.Da.DataChangedEventHandler(OnNotification);
                logger.Logged("Info", "Добавлено {" + subList.Count() + "}  тегов для контроля с OPC DA сервера #{" + PollerId + "}", "", "");
            }
            catch (Exception ex)
            {
                logger.Logged("Error", "Не удалось добавить теги для контроля OPC DA сервером #" + PollerId + ": " + ex.Message, "", "");
            }
        }
Exemplo n.º 18
0
        public void Open()
        {
            _server.Connect(_url, new ConnectData(new System.Net.NetworkCredential()));
            var groupState = new SubscriptionState
            {
                Name       = "Groups",
                UpdateRate = 50,
                Active     = true
            };

            _group              = (Subscription)_server.CreateSubscription(groupState);
            _group.DataChanged += _group_DataChanged;
        }
        // Form Loads.
        // Checks Spot Weld Computer.
        // Connects to OPC Server
        private void User_Program_Reset_Weld_Count_Dialog_Load(object sender, EventArgs e)
        {
            SpotWeldID();
            OPCServer     = new Opc.Da.Server(OPCFactory, null);
            OPCServer.Url = new Opc.URL("opcda://OHN66OPC/Kepware.KEPServerEX.V6");
            OPCServer.Connect();

            ResetWeldCount_StateRead            = new Opc.Da.SubscriptionState();
            ResetWeldCount_StateRead.Name       = "Reset_Weld_Count_Spotweld";
            ResetWeldCount_StateRead.UpdateRate = 1000;
            ResetWeldCount_StateRead.Active     = true;

            ResetWeldCount_Read = (Opc.Da.Subscription)OPCServer.CreateSubscription(ResetWeldCount_StateRead);

            ResetWeldCount_StateWrite        = new Opc.Da.SubscriptionState();
            ResetWeldCount_StateWrite.Name   = "PB_Reset_Part_Weld_Count_On";
            ResetWeldCount_StateWrite.Active = true;
            ResetWeldCount_Write             = (Opc.Da.Subscription)OPCServer.CreateSubscription(ResetWeldCount_StateWrite);

            ResetWeldCount_Off_StateWrite        = new Opc.Da.SubscriptionState();
            ResetWeldCount_Off_StateWrite.Name   = "PB_Reset_Part_Weld_Count_Off";
            ResetWeldCount_Off_StateWrite.Active = true;
            ResetWeldCount_Off_Write             = (Opc.Da.Subscription)OPCServer.CreateSubscription(ResetWeldCount_Off_StateWrite);
        }
Exemplo n.º 20
0
        public void AddSubscription(string groupName, List <string> tagList, DataChangedEventHandler onDataChange)
        {
            if (!_server.IsConnected)
            {
                Console.WriteLine("Connection to OPC server is not established");
                return;
            }

            // Create group
            Opc.Da.Subscription      group;
            Opc.Da.SubscriptionState groupState = new Opc.Da.SubscriptionState();
            groupState.Name       = groupName;
            groupState.Active     = true;
            groupState.UpdateRate = 200;

            // Short circuit if group already exists
            SubscriptionCollection existingCollection = _server.Subscriptions;

            if (existingCollection.Count > 0)
            {
                for (int i = 0; i < existingCollection.Count; i++)
                {
                    if (existingCollection[i].Name == groupName)
                    {
                        Console.WriteLine(String.Format("Subscription group {0} already exists", groupName));
                        return;
                    }
                }
            }
            group = (Opc.Da.Subscription)_server.CreateSubscription(groupState);

            // Create list of items to monitor
            Item[] opcItems = new Item[1];
            int    j        = 0;

            foreach (string tag in tagList)
            {
                opcItems[j]          = new Item();
                opcItems[j].ItemName = tag;
                j++;
            }

            // Attach items and event to group
            group.AddItems(opcItems);
            //group.DataChanged += new Opc.Da.DataChangedEventHandler(OPCSubscription_DataChanged);
            group.DataChanged += new Opc.Da.DataChangedEventHandler(onDataChange);
        }
Exemplo n.º 21
0
        private void subscribeToNodes(string root)
        {
            // Create a group
            Subscription group;

            //AI, DI ...
            BrowseElement[] directories = repository[root];

            foreach (BrowseElement dir in directories)
            {
                string directoryName = dir.Name;

                SubscriptionState groupState = new SubscriptionState();
                groupState.Name = directoryName;

                groupState.Active = true;
                group             = (Subscription)server.CreateSubscription(groupState);

                List <Item> itemsPerDirectory = new List <Item>();

                //FIX.AI.BLACK, FIX.AI.RED, FIX.DI.GREEN ...
                BrowseElement[] dirContent = repository[dir.ItemName];

                foreach (BrowseElement dirNode in dirContent)
                {
                    //FIX.BLACK>F_CV <-this is real signal!

                    BrowseElement[] signals = repository[dirNode.ItemName];
                    foreach (BrowseElement signal in signals)
                    {
                        //disable this nodes, because they are noisy
                        string itemName = signal.ItemName;
                        if (!itemName.Contains("A_OPCTIME") && !itemName.Contains("A_SCAN"))
                        {
                            itemsPerDirectory.Add(new Item()
                            {
                                ItemName = signal.ItemName
                            });
                        }
                    }
                }
                Item[] items = itemsPerDirectory.ToArray();
                items = group.AddItems(items);
                EnableDataChangedCallback(group);
            }
        }
Exemplo n.º 22
0
        private void Subscript()
        {
            //设定组状态
            state              = new Opc.Da.SubscriptionState(); //组(订阅者)状态,相当于OPC规范中组的参数
            state.Name         = "Welding";                      //组名
            state.ServerHandle = null;                           //服务器给该组分配的句柄。
            //state.ClientHandle = Guid.NewGuid().ToString();//客户端给该组分配的句柄。
            state.ClientHandle = Guid.NewGuid().GetHashCode();   //使用int类型, 效率可能有提高
            state.Active       = true;                           //激活该组。
            state.UpdateRate   = 1000;                           //刷新频率为1秒。
            state.Deadband     = 0;                              // 死区值,设为0时,服务器端该组内任何数据变化都通知组。
            state.Locale       = null;                           //不设置地区值。

            //添加组
            subscription = (Opc.Da.Subscription)m_server.CreateSubscription(state);//创建组
            subscription.AddItems(AccessAdapter.GetOPCItemList().ToArray());
            ////注册回调事件
            //subscription.DataChanged += new Opc.Da.DataChangedEventHandler(this.OnDataChange);
        }
Exemplo n.º 23
0
        /// <summary>
        /// 设定组(订阅者)状态
        /// </summary>
        public void SetGroup()
        {
            state = new Opc.Da.SubscriptionState();
            //组名
            state.Name = "IOTPLC";
            //服务器给该组分配的句柄。
            state.ServerHandle = null;
            //客户端给该组分配的句柄。
            state.ClientHandle = Guid.NewGuid().ToString();
            //激活该组。
            state.Active = true;
            //刷新频率为1秒。
            state.UpdateRate = 100;
            // 死区值,设为0时,服务器端该组内任何数据变化都通知组。
            state.Deadband = 0;
            //不设置地区值。
            state.Locale = null;

            //添加组
            subscription = (Opc.Da.Subscription)m_server.CreateSubscription(state);
        }
Exemplo n.º 24
0
 void StartMonitoring()
 {
     foreach (var item in MonitoredMeasurements)
     {
         var subItem = new OpcDa.SubscriptionState
         {
             Name       = item.Name,
             Active     = true,
             UpdateRate = item.MonitorResolution
         };
         var sub = l_server.CreateSubscription(subItem);
         sub.DataChanged += (handle, requestHandle, values) =>
         {
             var p = values[0];
             MonitorData(item, p);
         };
         sub.AddItems(new[] { new OpcDa.Item {
                                  ItemName = item.Path
                              } });
         sub.SetEnabled(true);
     }
 }
Exemplo n.º 25
0
        /// <summary>
        /// 建立订阅
        /// </summary>
        public void CreateSubscription()
        {
            try
            {
                subsState              = new SubscriptionState();
                subsState.Name         = "OPCNJ";                   //组名
                subsState.ServerHandle = null;                      //服务器给该组分配的句柄。
                subsState.ClientHandle = Guid.NewGuid().ToString(); //客户端给该组分配的句柄
                subsState.Active       = true;
                subsState.UpdateRate   = 100;                       //刷新频率为1秒。
                subsState.Deadband     = 0;                         // 死区值,设为0时,服务器端该组内任何数据变化都通知组。
                subsState.Locale       = null;                      //不设置地区值。

                subscription = (Opc.Da.Subscription)m_Server.CreateSubscription(subsState);
                Item[] items = new Item[10];
                for (int i = 0; i < items.Length; i++)
                {
                    items[i] = new Item();
                    items[i].ClientHandle = Guid.NewGuid().ToString(); //客户端给该数据项分配的句柄。
                    items[i].ItemPath     = null;                      //该数据项在服务器中的路径
                }
                items[0].ItemName = IEGInterface.Properties.Settings.Default.strSendBuffer;
                items[1].ItemName = IEGInterface.Properties.Settings.Default.strSendFlag;
                items[2].ItemName = IEGInterface.Properties.Settings.Default.strReceiveBuffer;
                items[3].ItemName = IEGInterface.Properties.Settings.Default.strReceiveFlag;
                items[4].ItemName = IEGInterface.Properties.Settings.Default.strEtv1Alarms;
                items[5].ItemName = IEGInterface.Properties.Settings.Default.strEtv2Alarms;
                items[6].ItemName = IEGInterface.Properties.Settings.Default.strHall1Alarms;
                items[7].ItemName = IEGInterface.Properties.Settings.Default.strHall2Alarms;
                items[8].ItemName = IEGInterface.Properties.Settings.Default.strHall3Alarms;
                items[9].ItemName = IEGInterface.Properties.Settings.Default.strHall4Alarms;

                subscription.AddItems(items);
            }
            catch (Exception ex)
            {
                throw new Exception("OPC建立订阅(CreateSubscription)异常:" + ex.ToString());
            }
        }
Exemplo n.º 26
0
        private Object getOPCValue(String ItemName, BrowseElement[] be)
        {
            // Create a group
            Opc.Da.Subscription      group;
            Opc.Da.SubscriptionState groupState = new Opc.Da.SubscriptionState();
            groupState.Name   = ItemName;
            groupState.Active = true;
            group             = (Opc.Da.Subscription)server.CreateSubscription(groupState);
            //Console.WriteLine(group.);


            // add items to the group.
            Opc.Da.Item[] items = new Opc.Da.Item[1];

            items[0]          = new Opc.Da.Item();
            items[0].ItemName = ItemName;

            items = group.AddItems(items);

            ItemValueResult[] ir = group.Read(items);
            return(ir[0].Value);
        }
Exemplo n.º 27
0
        /// <summary>
        /// Monitor the specified tag for changes
        /// </summary>
        /// <typeparam name="T">the type of tag to monitor</typeparam>
        /// <param name="tag">The fully-qualified identifier of the tag. You can specify a subfolder by using a comma delimited name.
        /// E.g: the tag `foo.bar` monitors the tag `bar` on the folder `foo`</param>
        /// <param name="callback">the callback to execute when the value is changed.
        /// The first parameter is a MonitorEvent object which represents the data point, the second is an `unsubscribe` function to unsubscribe the callback</param>
        public void Monitor <T>(string tag, Action <ReadEvent <T>, Action> callback)
        {
            var subItem = new OpcDa.SubscriptionState
            {
                Name       = (++_sub).ToString(CultureInfo.InvariantCulture),
                Active     = true,
                UpdateRate = DefaultMonitorInterval
            };
            var sub = _server.CreateSubscription(subItem);

            // I have to start a new thread here because unsubscribing
            // the subscription during a datachanged event causes a deadlock
            Action unsubscribe = () => new Thread(o =>
                                                  _server.CancelSubscription(sub)).Start();

            sub.DataChanged += (handle, requestHandle, values) =>
            {
                T casted;
                TryCastResult(values[0].Value, out casted);
                var monitorEvent = new ReadEvent <T>();
                monitorEvent.Value           = casted;
                monitorEvent.SourceTimestamp = values[0].Timestamp;
                monitorEvent.ServerTimestamp = values[0].Timestamp;
                if (values[0].Quality == OpcDa.Quality.Good)
                {
                    monitorEvent.Quality = Quality.Good;
                }
                if (values[0].Quality == OpcDa.Quality.Bad)
                {
                    monitorEvent.Quality = Quality.Bad;
                }
                callback(monitorEvent, unsubscribe);
            };
            sub.AddItems(new[] { new OpcDa.Item {
                                     ItemName = tag
                                 } });
            sub.SetEnabled(true);
        }
Exemplo n.º 28
0
        public override bool Initialize(string connectionString, int newPollerId)
        {
            bool result = false;

            ConnString = connectionString;

            try
            {
                PollerId = newPollerId;
                url      = new Opc.URL(connectionString);
                server   = null;
                var fact = new OpcCom.Factory();
                server = new Opc.Da.Server(fact, null);
                server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));
                server.ServerShutdown += Shutdown;
                _tags = new List <Opc.Da.Item>();
                Browse();

                _groupWriteState        = new Opc.Da.SubscriptionState();
                _groupWriteState.Name   = "GroupWrite";
                _groupWriteState.Active = false;

                groupWrite = (Opc.Da.Subscription)server.CreateSubscription(_groupWriteState);
                Activated  = true;
                logger.Logged("Info", "Состояние сервера: " + server.GetStatus().StatusInfo, "", "");
                result = true;
            }
            catch (Exception ex)
            {
                logger.Logged("Error", "Не удалось подключиться к OPC DA серверу " + connectionString + ": " + ex.Message, "", "");
                // logger.Logged("Warn", "Повторная попытка через 5 секунд...", "", "");
                //Thread.Sleep(5000);
            }

            return(result);
        }
Exemplo n.º 29
0
        public void ConnectToServer()
        {
            try
            {
                //url = new Opc.URL("opcda://MUHUMTHA/Kepware.KEPServerEX.V6");
                //url = new Opc.URL("opcda://IAPENG1/RSLinx OPC Server");
                //REMOTE OPC CONNECTION
                url    = new Opc.URL("opcda://MUHUMTHA/RSLinx OPC Server.MUHUNTHANPC");
                server = new Opc.Da.Server(fact, url);
                System.Net.NetworkCredential networkCredential = new System.Net.NetworkCredential();
                Opc.ConnectData connecteddata = new Opc.ConnectData(networkCredential);
                server.Connect(url, connecteddata);
                groupState             = new Opc.Da.SubscriptionState();
                groupState.Name        = "Group";
                groupState.UpdateRate  = 1;                                                 // this isthe time between every reads from OPC server
                groupState.Active      = true;                                              //this must be true if you the group has to read value
                groupRead              = (Opc.Da.Subscription)server.CreateSubscription(groupState);
                groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(UpdateTagData); //callback when the data are readed
                //Opc.Da.Item[] items_read = groupRead.AddItems(createSomeTags());
                Opc.Da.Item[] items_read = groupRead.AddItems(createSomeTags());

                // Create a write group
                //groupStateWrite = new Opc.Da.SubscriptionState();
                //groupStateWrite.Name = "Group_Write";
                //groupStateWrite.UpdateRate = 1000;
                //groupStateWrite.Active = false;//not needed to read if you want to write only
                //groupWrite = (Opc.Da.Subscription)server.CreateSubscription(groupStateWrite);
                //groupWrite.DataChanged += new Opc.Da.DataChangedEventHandler(ReadCompleted);

                Global.flag1 = true;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }
        }
Exemplo n.º 30
0
        public void Work()
        {
            int i = 5;

            if (i == 1)
            {
                url    = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1");
                server = new Opc.Da.Server(fact, null);
                server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                Opc.Da.Item[] itemCollection = new Opc.Da.Item[1];
                itemCollection[0] = new Opc.Da.Item {
                    ItemName = "RTOS.TEST.PV", MaxAge = -1
                };
                Opc.Da.ItemValueResult[] result = server.Read(itemCollection);

                Console.WriteLine(result[0].Value);
                server.Disconnect();
            }
            else if (i == 2)
            {
                url    = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1");
                server = new Opc.Da.Server(fact, null);
                server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                groupState              = new Opc.Da.SubscriptionState();
                groupState.Name         = "Group";
                groupState.ServerHandle = null;
                groupState.ClientHandle = Guid.NewGuid().ToString();
                groupState.Active       = true;
                groupState.UpdateRate   = 1000;
                groupState.Deadband     = 0;
                groupState.Locale       = null;

                groupRead = (Opc.Da.Subscription)server.CreateSubscription(groupState);


                string[] itemName = { "RTOS.TEST.PV", "RTOR.TI1237.DACA.PV" };

                Opc.Da.Item[] items = new Opc.Da.Item[2];

                for (int j = 0; j < items.Length; j++)
                {
                    items[j] = new Opc.Da.Item();
                    items[j].ClientHandle = Guid.NewGuid().ToString();
                    items[j].ItemPath     = null;
                    items[j].ItemName     = itemName[j];
                }

                groupRead.AddItems(items);
                //groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(group_DataChanged);

                Opc.Da.ItemValueResult[] results = groupRead.Read(groupRead.Items);
                foreach (ItemValueResult result in results)
                {
                    Console.WriteLine("{0},{1},{2},{3}", result.ItemName, result.Value, result.Quality, result.Timestamp);
                }
                //groupRead.DataChanged -= new Opc.Da.DataChangedEventHandler(group_DataChanged);

                groupRead.RemoveItems(groupRead.Items);
                server.CancelSubscription(groupRead);
                groupRead.Dispose();
                server.Disconnect();
            }
            else if (i == 3)
            {
                url    = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1");
                server = new Opc.Da.Server(fact, null);
                server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                groupState              = new Opc.Da.SubscriptionState();
                groupState.Name         = "Group";
                groupState.ServerHandle = null;
                groupState.ClientHandle = Guid.NewGuid().ToString();
                groupState.Active       = true;
                groupState.UpdateRate   = 1000;
                groupState.Deadband     = 0;
                groupState.Locale       = null;

                groupWrite = (Opc.Da.Subscription)server.CreateSubscription(groupState);

                string[] itemName = { "RTOS.TEST.PV", "RTOS.TEST2.PV" };

                Opc.Da.Item[] items = new Opc.Da.Item[2];

                for (int j = 0; j < items.Length; j++)
                {
                    items[j] = new Opc.Da.Item();
                    items[j].ClientHandle = Guid.NewGuid().ToString();
                    items[j].ItemPath     = null;
                    items[j].ItemName     = itemName[j];
                }

                groupWrite.AddItems(items);

                //groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(group_DataChanged);

                Opc.Da.ItemValue[] writeValues = new Opc.Da.ItemValue[groupWrite.Items.Length];
                for (int k = 0; k < groupWrite.Items.Length; k++)
                {
                    writeValues[k] = new Opc.Da.ItemValue((ItemIdentifier)groupWrite.Items[k]);
                }

                writeValues[0].Value = 5;
                writeValues[1].Value = 6;

                groupWrite.Write(writeValues);

                Console.WriteLine("Press any key to close...");
                Console.ReadLine();

                //groupRead.DataChanged -= new Opc.Da.DataChangedEventHandler(group_DataChanged);

                groupWrite.RemoveItems(groupWrite.Items);
                server.CancelSubscription(groupWrite);
                groupWrite.Dispose();
                server.Disconnect();
            }
            else if (i == 4)
            {
                url       = new Opc.URL("opchda://192.168.0.4/OPC.PHDServerHDA.1");
                serverHda = new Opc.Hda.Server(fact, null);
                serverHda.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                try
                {
                }
                catch (Opc.ConnectFailedException opcConnEx)
                {
                    Console.WriteLine(string.Format("Could not connect to server {0}", "OPC.PHDServerHDA.1"));
                    Console.WriteLine(opcConnEx.ToString());
                }

                Console.WriteLine("Are we connected? " + serverHda.IsConnected);

                string[] itemName = { "RTOS.TEST.PV", "RTOS.TEST2.PV" };

                Opc.Hda.Trend groupHda = new Trend(serverHda);

                groupHda.Name        = "HDA";
                groupHda.AggregateID = AggregateID.NOAGGREGATE;
                DateTime startTime = DateTime.Now.AddHours(-1);
                DateTime endTime   = DateTime.Now;
                groupHda.StartTime     = new Opc.Hda.Time(startTime);
                groupHda.EndTime       = new Opc.Hda.Time(endTime);
                groupHda.MaxValues     = 0;
                groupHda.IncludeBounds = false;

                serverHda.Trends.Add(groupHda);

                Opc.Hda.Item[] items = new Opc.Hda.Item[2];
                for (int m = 0; m < 2; m++)
                {
                    items[m]              = new Opc.Hda.Item();
                    items[m].ItemName     = itemName[m];
                    items[m].ItemPath     = null;
                    items[m].ClientHandle = Guid.NewGuid().ToString();
                }

                IdentifiedResult[] identifiedResult = serverHda.CreateItems(items);

                if (identifiedResult != null)
                {
                    foreach (IdentifiedResult item in identifiedResult)
                    {
                        if (item.ResultID.Succeeded())
                        {
                            groupHda.Items.Add(new Opc.Hda.Item(item));
                        }
                    }
                }

                Opc.Hda.ItemValueCollection[] results = groupHda.ReadRaw();

                Opc.Hda.ItemValueCollection result1 = results[0];

                foreach (Opc.Hda.ItemValue result in result1)
                {
                    Console.WriteLine("{0},{1},{2}", result.Value, result.Quality, result.Timestamp);
                }

                serverHda.Disconnect();
            }
            else if (i == 5)
            {
                url       = new Opc.URL("opchda://192.168.0.4/OPC.PHDServerHDA.1");
                serverHda = new Opc.Hda.Server(fact, null);
                serverHda.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                try
                {
                }
                catch (Opc.ConnectFailedException opcConnEx)
                {
                    Console.WriteLine(string.Format("Could not connect to server {0}", "OPC.PHDServerHDA.1"));
                    Console.WriteLine(opcConnEx.ToString());
                }

                Console.WriteLine("Are we connected? " + serverHda.IsConnected);

                string[] itemName = { "RTOR.TI1237.DACA.PV", "RTOS.TEST2.PV" };

                Opc.Hda.Trend groupHda = new Trend(serverHda);

                groupHda.Name        = "HDA";
                groupHda.AggregateID = AggregateID.AVERAGE;

                DateTime startTime = DateTime.Now.AddHours(-1);
                DateTime endTime   = DateTime.Now;
                //TimeSpan span = endTime.Subtract(startTime);
                //int calcInterval = ((int)span.TotalSeconds);
                //groupHda.ResampleInterval = (decimal)calcInterval;

                //DateTime startTime = new DateTime(2020, 6, 12, 9, 0, 0, 0);
                //DateTime endTime = new DateTime(2020, 6, 12, 10, 0, 0, 0);
                int calcInterval = 300;
                groupHda.ResampleInterval = (decimal)calcInterval;


                groupHda.StartTime     = new Opc.Hda.Time(startTime);
                groupHda.EndTime       = new Opc.Hda.Time(endTime);
                groupHda.MaxValues     = 0;
                groupHda.IncludeBounds = false;

                serverHda.Trends.Add(groupHda);

                Opc.Hda.Item[] items = new Opc.Hda.Item[2];
                for (int m = 0; m < 2; m++)
                {
                    items[m]              = new Opc.Hda.Item();
                    items[m].ItemName     = itemName[m];
                    items[m].ItemPath     = null;
                    items[m].ClientHandle = Guid.NewGuid().ToString();
                }

                IdentifiedResult[] identifiedResult = serverHda.CreateItems(items);

                if (identifiedResult != null)
                {
                    foreach (IdentifiedResult item in identifiedResult)
                    {
                        if (item.ResultID.Succeeded())
                        {
                            groupHda.Items.Add(new Opc.Hda.Item(item));
                        }
                    }
                }

                Opc.Hda.ItemValueCollection[] results = groupHda.ReadProcessed();

                Opc.Hda.ItemValueCollection result1 = results[0];

                foreach (Opc.Hda.ItemValue result in result1)
                {
                    Console.WriteLine("{0},{1},{2}", result.Value, result.Quality, result.Timestamp);
                }

                serverHda.Disconnect();
            }
        }
Exemplo n.º 31
0
        public override void Add(string itemName)
        {
            lock (_thisLock)
            {
                try
                {
                    OpcAddress addr = Find(itemName);

                    if (addr == null)
                    {
                        string[] itemIdSplited = itemName.Split(']');
                        string[] addressSplited;
                        string   topic = "";

                        //Encontra o nome do topico
                        if (itemName.Contains(']'))
                        {
                            topic = itemName.Split(']')[0].Substring(1);
                        }

                        if (itemIdSplited.Length > 1)
                        {
                            addressSplited = itemIdSplited[1].Split(':');
                        }
                        else
                        {
                            itemIdSplited  = itemName.Split('.');
                            addressSplited = itemIdSplited[2].Split(':');
                        }

                        Opc.Da.Subscription opcDaGroup = null;
                        foreach (Opc.Da.Subscription opcDaGrp in _opcDaServer.Subscriptions)
                        {
                            if (opcDaGrp.Name == topic + addressSplited[0])
                            {
                                opcDaGroup = opcDaGrp;
                            }
                        }

                        if (opcDaGroup == null)
                        {
                            Opc.Da.SubscriptionState groupState = new Opc.Da.SubscriptionState();
                            groupState.ClientHandle = Guid.NewGuid().ToString();
                            groupState.Name         = topic + addressSplited[0];
//							groupState.UpdateRate = 250;

                            opcDaGroup = (Opc.Da.Subscription)_opcDaServer.CreateSubscription(groupState);
                            //opcDaGroup.DataChanged += new Opc.Da.DataChangedEventHandler(OpcDataChanged);
                            opcDaGroup.DataChanged += delegate(object subscriptionHandle, object requestHandle, ItemValueResult[] values)
                            {
//								BackgroundWorker back = new BackgroundWorker();
//								back.DoWork += delegate(object sender, DoWorkEventArgs e)
//								{
//									foreach (Opc.Da.ItemValueResult ivr in values)
//									{
//										OpcAddress adr = Find(ivr.ItemName);
//										adr.SetValue(ivr.Value.ToString());
//										OnDataChanged(new DataChangedEventArgs(ivr.ItemName, ivr.Value));
//									}
//								};
//								back.RunWorkerAsync();
                                foreach (Opc.Da.ItemValueResult ivr in values)
                                {
                                    OpcAddress adr = Find(ivr.ItemName);
                                    adr.SetValue(ivr.Value.ToString());
                                    OnDataChanged(new DataChangedEventArgs(ivr.ItemName, ivr.Value));
                                }
                            };
                        }

                        Opc.Da.Item opcDaItem = new Opc.Da.Item();
                        opcDaItem.ClientHandle          = Guid.NewGuid().ToString();
                        opcDaItem.ItemName              = itemName;
                        opcDaItem.MaxAgeSpecified       = true;
                        opcDaItem.MaxAge                = 100;
                        opcDaItem.SamplingRateSpecified = true;
                        opcDaItem.SamplingRate          = 10;

                        opcDaGroup.AddItems(new Opc.Da.Item[] { opcDaItem });

                        addr = new OpcAddress(opcDaItem, opcDaGroup);
                        _addrList.Add(addr);
                    }

                    return;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
        }