Example #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); }
        }
Example #2
0
        /// <summary>
        /// Read a tag
        /// </summary>
        /// <typeparam name="T">The type of tag to read</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` reads the tag `bar` on the folder `foo`</param>
        /// <returns>The value retrieved from the OPC</returns>
        public ReadEvent <T> Read <T>(string tag)
        {
            var item = new OpcDa.Item {
                ItemName = tag
            };

            if (Status == OpcStatus.NotConnected)
            {
                throw new OpcException("Server not connected. Cannot read tag.");
            }
            var result = _server.Read(new[] { item })[0];
            T   casted;

            TryCastResult(result.Value, out casted);

            var readEvent = new ReadEvent <T>();

            readEvent.Value           = casted;
            readEvent.SourceTimestamp = result.Timestamp;
            readEvent.ServerTimestamp = result.Timestamp;
            if (result.Quality == OpcDa.Quality.Good)
            {
                readEvent.Quality = Quality.Good;
            }
            if (result.Quality == OpcDa.Quality.Bad)
            {
                readEvent.Quality = Quality.Bad;
            }

            return(readEvent);
        }
Example #3
0
        /// <summary>
        /// Finds a node on the Opc Server
        /// </summary>
        /// <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` finds the tag `bar` on the folder `foo`</param>
        /// <returns>If there is a tag, it returns it, otherwise it throws an </returns>
        public DaNode FindNode(string tag)
        {
            // if the tag already exists in cache, return it
            if (_nodesCache.ContainsKey(tag))
            {
                return(_nodesCache[tag]);
            }

            // try to find the tag otherwise
            var item = new OpcDa.Item {
                ItemName = tag
            };

            OpcDa.ItemValueResult result;
            try
            {
                result = _server.Read(new[] { item })[0];
            }
            catch (NullReferenceException)
            {
                throw new OpcException("Could not find node because server not connected.");
            }
            CheckResult(result, tag);
            var node = new DaNode(item.ItemName, item.ItemName, RootNode);

            AddNodeToCache(node);
            return(node);
        }
Example #4
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); }
            }
        }
Example #5
0
        /// <summary>
        /// Чтение одного конкретного значения.
        /// В случае успешного чтения возвращает значение в формате string.
        /// Если чтение не удалось, возвращает пустую строку
        /// </summary>
        /// <param name="itemName"> название значения на OPC сервере </param>
        public string ReadAndSave(string itemName)
        {
            var result = new ItemValueResult[1];

            var items = new Item[1];

            items[0] = new Opc.Da.Item
            {
                ItemName = itemName
            };
            try
            {
                result = serverHandle.Read(items);

                SendItemValueRequest(result[0]);

                return(result[0].Value.ToString());
            }
            catch (Exception exception)
            {
                Console.WriteLine("Reading value failed - status: {0}", exception);
            }

            return("");
        }
Example #6
0
        /// <summary>
        /// Подписка на изменение конкретного значения на сервере
        /// </summary>
        public void Subscribe(string itemName)
        {
            var subscriptionState = new SubscriptionState
            {
                Name   = itemName,
                Active = true
            };

            try
            {
                subscription = (Opc.Da.Subscription)serverHandle.CreateSubscription(subscriptionState);
            }
            catch (Exception exception)
            {
                Console.WriteLine("Error {0}", exception.Message);
                return;
            }


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

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

            items = subscription.AddItems(items);

            subscription.DataChanged += new Opc.Da.DataChangedEventHandler(DataChange);
        }
Example #7
0
        /// <summary>
        /// Вспомогательный метод для инициализации списка тегов с сервера.
        /// Вызывается при соединении с сервером
        /// </summary>
        /// <param name="itemName"></param>
        void InitTagList(string itemName = "")
        {
            var itemIdentifier = new Opc.ItemIdentifier();

            itemIdentifier.ItemName = itemName;

            var browseFilters = new Opc.Da.BrowseFilters();

            browseFilters.BrowseFilter = browseFilter.all;

            var browsePosition = new Opc.Da.BrowsePosition(itemIdentifier, browseFilters);

            BrowseElement[] browseElements = serverHandle.Browse(itemIdentifier, browseFilters, out browsePosition);

            if (browseElements != null)
            {
                foreach (BrowseElement element in browseElements)
                {
                    if (element.IsItem)
                    {
                        var item = new Opc.Da.Item
                        {
                            ItemName = element.ItemName
                        };
                        tagList.Add(item);
                    }
                    else
                    {
                        InitTagList(element.ItemName);
                    }
                }
            }
        }
Example #8
0
        private void WriteComponentThree_OPC()
        {
            Opc.Da.Item[] OPC_CompThreeWrite = new Opc.Da.Item[4];
            OPC_CompThreeWrite[0]          = new Opc.Da.Item();
            OPC_CompThreeWrite[0].ItemName = SpotWeld_Tag_Name + "HMI_Operation_One_PB";
            OPC_CompThreeWrite[1]          = new Opc.Da.Item();
            OPC_CompThreeWrite[1].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Two_PB";
            OPC_CompThreeWrite[2]          = new Opc.Da.Item();
            OPC_CompThreeWrite[2].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Three_PB";
            OPC_CompThreeWrite[3]          = new Opc.Da.Item();
            OPC_CompThreeWrite[3].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Four_PB";
            OPC_CompThreeWrite             = GroupWriteCompThree.AddItems(OPC_CompThreeWrite);

            Opc.Da.ItemValue[] WriteCompThreeValue = new Opc.Da.ItemValue[4];
            WriteCompThreeValue[0] = new Opc.Da.ItemValue();
            WriteCompThreeValue[0].ServerHandle = GroupWriteCompThree.Items[0].ServerHandle;
            WriteCompThreeValue[0].Value        = 0;
            WriteCompThreeValue[1] = new Opc.Da.ItemValue();
            WriteCompThreeValue[1].ServerHandle = GroupWriteCompThree.Items[1].ServerHandle;
            WriteCompThreeValue[1].Value        = 0;
            WriteCompThreeValue[2] = new Opc.Da.ItemValue();
            WriteCompThreeValue[2].ServerHandle = GroupWriteCompThree.Items[2].ServerHandle;
            WriteCompThreeValue[2].Value        = 1;
            WriteCompThreeValue[3] = new Opc.Da.ItemValue();
            WriteCompThreeValue[3].ServerHandle = GroupWriteCompThree.Items[3].ServerHandle;
            WriteCompThreeValue[3].Value        = 0;

            Opc.IRequest req;
            GroupWriteCompThree.Write(WriteCompThreeValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out req);
        }
Example #9
0
        private void OperationWriteOPC()
        {
            /*
             * Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[3];
             * OPC_ItemID[0] = new Opc.Da.Item();
             * OPC_ItemID[0].ItemName = BrakePressTag_OPC + "HMI_Operation_One_PB.VALUE";
             * OPC_ItemID[1] = new Opc.Da.Item();
             * OPC_ItemID[1].ItemName = BrakePressTag_OPC + "HMI_Operation_Two_PB.VALUE";
             * OPC_ItemID[2] = new Opc.Da.Item();
             * OPC_ItemID[2].ItemName = BrakePressTag_OPC + "HMI_Operation_Three_PB.VALUE";
             * OPC_ItemID = OperationSelection_Write.AddItems(OPC_ItemID);
             */

            Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[3];
            OPC_ItemID[0]          = new Opc.Da.Item();
            OPC_ItemID[0].ItemName = BrakePressTag_OPC + "HMI_Operation_One_PB";
            OPC_ItemID[1]          = new Opc.Da.Item();
            OPC_ItemID[1].ItemName = BrakePressTag_OPC + "HMI_Operation_Two_PB";
            OPC_ItemID[2]          = new Opc.Da.Item();
            OPC_ItemID[2].ItemName = BrakePressTag_OPC + "HMI_Operation_Three_PB";
            OPC_ItemID             = OperationSelection_Write.AddItems(OPC_ItemID);

            Opc.Da.ItemValue[] ItemID_OPCValue = new Opc.Da.ItemValue[3];
            ItemID_OPCValue[0] = new Opc.Da.ItemValue();
            ItemID_OPCValue[1] = new Opc.Da.ItemValue();
            ItemID_OPCValue[2] = new Opc.Da.ItemValue();

            switch (SelectedOperation)
            {
            case 1:     // Operation #1
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 1;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 0;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 0;
                break;

            case 2:     // Operation #2
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 0;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 1;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 0;
                break;

            case 3:     // Operation #3
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 0;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 0;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 1;
                break;
            }

            Opc.IRequest OPCRequest;
            OperationSelection_Write.Write(ItemID_OPCValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
Example #10
0
        public Opc.Da.Item[] createSomeTags()
        {
            string     VALVE_NAME = "SDV_1600";
            List <SDV> sdvlist    = Global.Global.sdvlist;

            string[] valve_names = new string[] { "SDV_1600", "SDV_1601", "SDV_1602", "SDV_1603", "SDV_1604" };
            foreach (string str in valve_names)
            {
                sdvlist.Add(new SDV(str));
            }

            SDV SDV_1600 = sdvlist[0];

            Opc.Da.Item[,] SDV_1600_Items = new Opc.Da.Item[valve_names.Length, SDV_1600.ReturnNoOfProperty()];
            for (int y = 0; y < sdvlist.Count; y++)
            {
                for (int x = 0; x < SDV_1600.ReturnNoOfProperty(); x++)
                {
                    SDV_1600_Items[y, x]          = new Opc.Da.Item();
                    SDV_1600_Items[y, x].ItemName = "[WebOPC]" + VALVE_NAME + "." + SDV_1600.propertyInfo[x].Name.ToString();
                }
            }



            return(MultiToSingle(SDV_1600_Items));
        }
Example #11
0
        // Add Items To Group Read
        private void SensorRead_OPC()
        {
            List <Item> OPC_ItemsList = new List <Item>();

            Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[9];
            OPC_ItemID[0]          = new Opc.Da.Item();
            OPC_ItemID[0].ItemName = SpotWeld_Tag_Name + "HMI_PROBE_VALUE";
            OPC_ItemsList.Add(OPC_ItemID[0]);
            OPC_ItemID[1]          = new Opc.Da.Item();
            OPC_ItemID[1].ItemName = SpotWeld_Tag_Name + "TARGET_TRAVEL_VALUE";
            OPC_ItemsList.Add(OPC_ItemID[1]);
            OPC_ItemID[2]          = new Opc.Da.Item();
            OPC_ItemID[2].ItemName = SpotWeld_Tag_Name + "MULTI_COMPONENT_TARGET2";
            OPC_ItemsList.Add(OPC_ItemID[2]);
            OPC_ItemID[3]          = new Opc.Da.Item();
            OPC_ItemID[3].ItemName = SpotWeld_Tag_Name + "MULTI_COMPONENT_TARGET3";
            OPC_ItemsList.Add(OPC_ItemID[3]);
            OPC_ItemID[4]          = new Opc.Da.Item();
            OPC_ItemID[4].ItemName = SpotWeld_Tag_Name + "MULTI_COMPONENT_TARGET4";
            OPC_ItemsList.Add(OPC_ItemID[4]);
            OPC_ItemID[5]          = new Opc.Da.Item();
            OPC_ItemID[5].ItemName = SpotWeld_Tag_Name + "TARGET_TRAVEL_VALUE_SET";
            OPC_ItemsList.Add(OPC_ItemID[5]);
            OPC_ItemID[6]          = new Opc.Da.Item();
            OPC_ItemID[6].ItemName = SpotWeld_Tag_Name + "SEQUENCE_ONE_SET";
            OPC_ItemsList.Add(OPC_ItemID[6]);
            OPC_ItemID[7]          = new Opc.Da.Item();
            OPC_ItemID[7].ItemName = SpotWeld_Tag_Name + "SEQUENCE_TWO_SET";
            OPC_ItemsList.Add(OPC_ItemID[7]);
            OPC_ItemID[8]          = new Opc.Da.Item();
            OPC_ItemID[8].ItemName = SpotWeld_Tag_Name + "SEQUENCE_THREE_SET";
            OPC_ItemsList.Add(OPC_ItemID[8]);
            Sensor_Read.AddItems(OPC_ItemsList.ToArray());
        }
Example #12
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);
            }
        }
Example #13
0
 /// <summary>
 /// Edits this instance.
 /// </summary>
 internal void Edit()
 {
     try
     {
         // save existing item id.
         OpcDa::Item[] modifiedItems;
         OpcDa.Item    itemID = Tag.GetItem;
         using (ItemListEditDlg dial = new ItemListEditDlg())
         {
             modifiedItems = dial.ShowDialog(new OpcDa.Item[] { itemID }, false, false);
             if (dial.DialogResult != DialogResult.OK || modifiedItems == null)
             {
                 return;
             }
         }
         // modify an existing item.
         OpcDa::ItemResult[] resItems;
         if (itemID.Key == modifiedItems[0].Key)
         {
             resItems = Parent.ModifyItems(OpcDa::StateMask.All, modifiedItems);
         }
         else // add/remove item because the item id changed.
         {
             Parent.RemoveItem(itemID);
             resItems = Parent.AddItems(modifiedItems);
         }
         Text = resItems[0].ItemName;
         Tag.SetItemResult = resItems[0];
     }
     catch (Exception exc)
     {
         MessageBox.Show(exc.Message);
     }
     AssignImageIndex();
 }
Example #14
0
        public Opc.Da.Item[] createTagItems()
        {
            Opc.Da.Item[] tag_items = new Opc.Da.Item[2];



            return(tag_items);
        }
Example #15
0
 public Opc.Da.Item[] createSomeTags()
 {
     Opc.Da.Item[] tag_items = new Opc.Da.Item[2];
     tag_items[0]          = new Opc.Da.Item();
     tag_items[0].ItemName = "SDV_1600";
     tag_items[1]          = new Opc.Da.Item();
     tag_items[1].ItemName = "SDV_1601";
     return(tag_items);
 }
Example #16
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);
            }
        }
Example #17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TagTreeNode"/> class with the specified label text.
 /// </summary>
 /// <param name="item">The item.</param>
 /// <param name="parentNode">The parent node.</param>
 internal TagTreeNode(OpcDa.Item item, SubscriptionTreeNodeSession parentNode)
     : base(item.ItemName, null, parentNode)
 {
     Tag = new MyItem(new OpcDa.ItemResult(item)
     {
         ResultID = Opc.ResultID.S_OK
     }, this);
     InitializeObject();
 }
        /// <summary>
        /// 자기 자신에게 쓰이는 데이터 교환
        /// </summary>
        public void SelfDataExchange()
        {
            OPCSubscription selfRead = null;

            for (int subi = 0; subi < this.ReadSubscriptions.Count; subi++)
            {
                if (this.ReadSubscriptions[subi].Type == 2)
                {
                    selfRead = this.ReadSubscriptions[subi];
                    break;
                }
            }

            OPCSubscription selfWrite = null;

            for (int subi = 0; subi < this.WriteSubscriptions.Count; subi++)
            {
                if (this.WriteSubscriptions[subi].Type == 2)
                {
                    selfWrite = this.WriteSubscriptions[subi];
                    break;
                }
            }

            //올바른 데이터 그룹이라면.
            if (selfRead != null && selfWrite != null)
            {
                //읽기
                selfRead.ItemValues = selfRead.Subscription.Read(selfRead.Subscription.Items);

                List <Opc.Da.ItemValue> values = new List <ItemValue>();

                for (int i = 0; i < selfRead.ItemValues.Length; i++)
                {
                    Opc.Da.Item            item = selfWrite.Subscription.Items[i];
                    Opc.Da.ItemValueResult ivr  = selfRead.ItemValues[i];

                    System.Type wt = selfWrite.ItemTypes[i];
                    System.Type rt = selfRead.ItemTypes[i];

                    object value = ivr.Value;
                    if (wt != rt)
                    {
                        value = Activator.CreateInstance(wt);
                    }

                    values.Add(new ItemValue(item)
                    {
                        Value = value
                    });
                }
                selfWrite.ItemValues = selfRead.ItemValues;
                selfWrite.Subscription.Write(values.ToArray());
            }
        }
Example #19
0
        /// <summary>
        /// Read a tag
        /// </summary>
        /// <typeparam name="T">The type of tag to read</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` reads the tag `bar` on the folder `foo`</param>
        /// <returns>The value retrieved from the OPC</returns>
        public T Read <T>(string tag)
        {
            var item = new OpcDa.Item {
                ItemName = tag
            };
            var result = _server.Read(new[] { item })[0];

            CheckResult(result, tag);

            return((T)result.Value);
        }
 /// <summary>
 /// OPC Item 생성
 /// </summary>
 /// <param name="name">Item name</param>
 /// <returns>Item</returns>
 public static Opc.Da.Item CreateOPCItem(string name)
 {
     Opc.Da.Item item = new Opc.Da.Item()
     {
         ItemName        = name,
         Active          = true,
         ActiveSpecified = true,
         ItemPath        = "",
         ClientHandle    = Guid.NewGuid().ToString()
     };
     return(item);
 }
Example #21
0
        /// <summary>
        /// 增加变量
        /// </summary>
        public void addItems()
        {
            Opc.Da.Item[] opcItem = new Opc.Da.Item[1];
            opcItem[0] = new Opc.Da.Item();
            opcItem[0].ClientHandle    = 0;
            opcItem[0].Active          = true;
            opcItem[0].ActiveSpecified = true;
            opcItem[0].ItemName        = writeOpcItem[0];
            opcItem[0].ItemPath        = "";
            opcItem[0].MaxAge          = -1;

            opcServer.Subscriptions[0].AddItems(opcItem);//第一组为是否运行写

            Opc.Da.Item[] opcItems = new Opc.Da.Item[15];
            for (Int32 index = 0; index < 15; index++)
            {
                // Step: 9.1
                //
                // creating new item
                opcItems[index] = new Opc.Da.Item();
                // set item properties
                opcItems[index].ClientHandle    = index;
                opcItems[index].Active          = true;
                opcItems[index].ActiveSpecified = true;
                opcItems[index].ItemName        = writeOpcItem[index];
                opcItems[index].ItemPath        = "";
                opcItems[index].MaxAge          = -1;
                //opcItems[index].MaxAgeSpecified = false;	// read from device
                opcItems[index].MaxAgeSpecified = true;    // read from cache
            }
            opcServer.Subscriptions[1].AddItems(opcItems); //第二组为写入组

            opcItems = new Opc.Da.Item[15];
            for (Int32 index = 0; index < 15; index++)
            {
                // Step: 9.1
                //
                // creating new item
                opcItems[index] = new Opc.Da.Item();
                // set item properties
                opcItems[index].ClientHandle    = index;
                opcItems[index].Active          = true;
                opcItems[index].ActiveSpecified = true;
                opcItems[index].ItemName        = readOpcItem[index];
                opcItems[index].ItemPath        = "";
                opcItems[index].MaxAge          = -1;
                //opcItems[index].MaxAgeSpecified = false;	// read from device
                opcItems[index].MaxAgeSpecified = true;     // read from cache
            }

            opcServer.Subscriptions[2].AddItems(opcItems); ///第三组为读取反馈组
        }
Example #22
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);
            }
        }
        // Write The Component Value From Barcode Scanner
        private void ScanComponents_OPC()
        {
            Opc.Da.Item[] OPC_ScanComponent = new Opc.Da.Item[1];
            OPC_ScanComponent[0]          = new Opc.Da.Item();
            OPC_ScanComponent[0].ItemName = Spotweld_Tag_Name + "DM8050_READ_RESULTS.DATA";
            OPC_ScanComponent             = ScanNewPart_Write.AddItems(OPC_ScanComponent);

            Opc.Da.ItemValue[] OPC_ScanComponent_Value = new Opc.Da.ItemValue[1];
            OPC_ScanComponent_Value[0] = new Opc.Da.ItemValue();
            OPC_ScanComponent_Value[0].ServerHandle = ScanNewPart_Write.Items[0].ServerHandle;
            OPC_ScanComponent_Value[0].Value        = ScannerString;
            Opc.IRequest OPCRequest;
            ScanNewPart_Write.Write(OPC_ScanComponent_Value, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
        // Turn on Reset Input
        private void ConfirmWeldReset_On_OPC(object sender, EventArgs e)
        {
            Opc.Da.Item[] OPC_Reset_On = new Opc.Da.Item[1];
            OPC_Reset_On[0]          = new Opc.Da.Item();
            OPC_Reset_On[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_Reset_Part_Weld_Count";
            OPC_Reset_On             = ResetWeldCount_Write.AddItems(OPC_Reset_On);

            Opc.Da.ItemValue[] OPC_ResetValue_On = new Opc.Da.ItemValue[1];
            OPC_ResetValue_On[0] = new Opc.Da.ItemValue();
            OPC_ResetValue_On[0].ServerHandle = ResetWeldCount_Write.Items[0].ServerHandle;
            OPC_ResetValue_On[0].Value        = 1;
            Opc.IRequest OPCRequest;
            ResetWeldCount_Write.Write(OPC_ResetValue_On, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
            //ResetOff_Timer.Start(); // Start a Timer to turn off Input
        }
        // Turn off Reset Input
        private void ConfirmWeldReset_Off_OPC()
        {
            Opc.Da.Item[] OPC_Reset_Off = new Opc.Da.Item[1];
            OPC_Reset_Off[0]          = new Opc.Da.Item();
            OPC_Reset_Off[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_Reset_Part_Weld_Count";
            OPC_Reset_Off             = ResetWeldCount_Off_Write.AddItems(OPC_Reset_Off);

            Opc.Da.ItemValue[] OPC_ResetValue_Off = new Opc.Da.ItemValue[1];
            OPC_ResetValue_Off[0] = new Opc.Da.ItemValue();
            OPC_ResetValue_Off[0].ServerHandle = ResetWeldCount_Write.Items[0].ServerHandle;
            OPC_ResetValue_Off[0].Value        = 0;

            Opc.IRequest OPCRequest;
            ResetWeldCount_Off_Write.Write(OPC_ResetValue_Off, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
Example #26
0
        /*********************************************************************************************************************
        *
        * Buttons Region End
        *
        *********************************************************************************************************************/
        #endregion

        /********************************************************************************************************************
        *
        *  OPC Region Start
        *  -- Total:
        *
        ********************************************************************************************************************/
        #region

        // Write Both On and Off Using OPC_TeachSensorValue
        private void TeachSensor_OPC()
        {
            Opc.Da.Item[] OPC_SensorWrite = new Opc.Da.Item[1];
            OPC_SensorWrite[0]          = new Opc.Da.Item();
            OPC_SensorWrite[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_TEACH_SENSOR";
            OPC_WriteSensor.Add(OPC_SensorWrite[0]);
            TeachSensor_Write.AddItems(OPC_WriteSensor.ToArray());

            Opc.Da.ItemValue[] WriteValue = new Opc.Da.ItemValue[1];
            WriteValue[0] = new Opc.Da.ItemValue();
            WriteValue[0].ServerHandle = TeachSensor_Write.Items[0].ServerHandle;
            WriteValue[0].Value        = OPC_TeachSensorValue;

            Opc.IRequest req;
            TeachSensor_Write.Write(WriteValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out req);
        }
 // Initialize the Correct Components Bit From the PLC
 private void ComponentCheck_OPC()
 {
     try
     {
         List <Item>   OPC_ReadList      = new List <Item>();
         Opc.Da.Item[] OPC_ReadComponent = new Opc.Da.Item[1];
         OPC_ReadComponent[0]          = new Opc.Da.Item();
         OPC_ReadComponent[0].ItemName = Spotweld_Tag_Name + "CORRECT_COMPONENTS_BIT";
         OPC_ReadList.Add(OPC_ReadComponent[0]);
         Component_Read.AddItems(OPC_ReadList.ToArray());
     }
     catch (Exception er)
     {
         MessageBox.Show(er.ToString());
     }
 }
Example #28
0
        static Opc.Da.Item[] MultiToSingle(Opc.Da.Item[,] array)
        {
            int index  = 0;
            int width  = array.GetLength(0);
            int height = array.GetLength(1);

            Opc.Da.Item[] single = new Opc.Da.Item[width * height];
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    single[index] = array[x, y];
                    index++;
                }
            }
            return(single);
        }
Example #29
0
        /// <summary>
        /// Read a tag
        /// </summary>
        /// <typeparam name="T">The type of tag to read</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` reads the tag `bar` on the folder `foo`</param>
        /// <returns>The value retrieved from the OPC</returns>
        public T Read <T>(string tag)
        {
            var item = new OpcDa.Item {
                ItemName = tag
            };

            if (Status == OpcStatus.NotConnected)
            {
                throw new OpcException("Server not connected. Cannot read tag.");
            }
            var result = _server.Read(new[] { item })[0];

            CheckResult(result, tag);
            T casted;

            TryCastResult(result.Value, out casted);
            return(casted);
        }
Example #30
0
        /// <summary>
        /// Gets the datatype of an OPC tag
        /// </summary>
        /// <param name="tag">Tag to get datatype of</param>
        /// <returns>System Type</returns>
        public System.Type GetDataType(string tag)
        {
            var item = new OpcDa.Item {
                ItemName = tag
            };

            OpcDa.ItemProperty result;
            try
            {
                var propertyCollection = _server.GetProperties(new[] { item }, new[] { new OpcDa.PropertyID(1) }, false)[0];
                result = propertyCollection[0];
            }
            catch (NullReferenceException)
            {
                throw new OpcException("Could not find node because server not connected.");
            }
            return(result.DataType);
        }
        // Turn off Scan New Part Input
        // Toggle Scan Hardware Input
        private void SetHardware_OPC()
        {
            Opc.Da.Item[] OPC_SetHardware = new Opc.Da.Item[2];
            OPC_SetHardware[0]          = new Opc.Da.Item();
            OPC_SetHardware[0].ItemName = Spotweld_Tag_Name + "HMI_PB_SCAN_NEW_PART";
            OPC_SetHardware[1]          = new Opc.Da.Item();
            OPC_SetHardware[1].ItemName = Spotweld_Tag_Name + "HMI_PB_SCAN_HARDWARE";
            OPC_SetHardware             = Hardware_Write.AddItems(OPC_SetHardware);

            Opc.Da.ItemValue[] OPC_SetHardware_Value = new Opc.Da.ItemValue[2];
            OPC_SetHardware_Value[0] = new Opc.Da.ItemValue();
            OPC_SetHardware_Value[0].ServerHandle = Hardware_Write.Items[0].ServerHandle;
            OPC_SetHardware_Value[0].Value        = 0;
            OPC_SetHardware_Value[1] = new Opc.Da.ItemValue();
            OPC_SetHardware_Value[1].ServerHandle = Hardware_Write.Items[1].ServerHandle;
            OPC_SetHardware_Value[1].Value        = HMI_PB_SCAN_HARDWARE_VALUE;
            Opc.IRequest OPCRequest;
            Hardware_Write.Write(OPC_SetHardware_Value, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
Example #32
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;
				}
			}
		}