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); } }
/// <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); }
/// <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); }
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); } } }
/// <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(""); }
/// <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); }
/// <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); } } } }
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); }
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); }
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)); }
// 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()); }
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); } }
/// <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(); }
public Opc.Da.Item[] createTagItems() { Opc.Da.Item[] tag_items = new Opc.Da.Item[2]; return(tag_items); }
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); }
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); } }
/// <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()); } }
/// <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); }
/// <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); ///第三组为读取反馈组 }
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); }
/********************************************************************************************************************* * * 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()); } }
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); }
/// <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); }
/// <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); }
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; } } }