/// <summary> /// Write a value on the specified opc tag /// </summary> /// <typeparam name="T">The type of tag to write on</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` writes on the tag `bar` on the folder `foo`</param> /// <param name="item"></param> public void Write <T>(string tag, T item) { var itmVal = new OpcDa.ItemValue { ItemName = tag, Value = item }; var result = _server.Write(new[] { itmVal })[0]; CheckResult(result, tag); }
public void Write(WriteParameter[] writeParameters) { lock (_itemValues) { var itemValues = new ItemValue[writeParameters.Length]; var items = new Item[writeParameters.Length]; for (var i = 0; i < writeParameters.Length; i++) { var writeParameter = writeParameters[i]; var item = new Item { ItemName = writeParameter.Address }; items[i] = item; itemValues[i] = new ItemValue(item) { Value = writeParameter.Value }; } _server.Write(itemValues); var readResult = _server.Read(items); foreach (var itemValueResult in readResult) { if (_itemValues.ContainsKey(itemValueResult.ItemName)) { _itemValues[itemValueResult.ItemName] = itemValueResult.Value; } } } }
public void UpdateDataFilter(Opc.Da.Server server, string filterValue) { if (this.m_unfilteredItemID == null) { throw new ApplicationException("Cannot update the data filter for this item."); } ItemValue value2 = new ItemValue(this) { Value = filterValue, Quality = Quality.Bad, QualitySpecified = false, Timestamp = DateTime.MinValue, TimestampSpecified = false }; IdentifiedResult[] resultArray = server.Write(new ItemValue[] { value2 }); if ((resultArray == null) || (resultArray.Length == 0)) { throw new ApplicationException("Unexpected result from server."); } if (resultArray[0].ResultID.Failed()) { throw new ApplicationException("Could not update data filter."); } this.m_filterValue = filterValue; }
/// <summary> /// Updates a data filter. /// </summary> public void UpdateDataFilter(Opc.Da.Server server, string filterValue) { // not a valid operation for non data filter items. if (m_unfilteredItemID == null) { throw new ApplicationException("Cannot update the data filter for this item."); } ItemValue item = new ItemValue(this); // create the value to write. item.Value = filterValue; item.Quality = Quality.Bad; item.QualitySpecified = false; item.Timestamp = DateTime.MinValue; item.TimestampSpecified = false; // write the value. IdentifiedResult[] result = server.Write(new ItemValue[] { item }); if (result == null || result.Length == 0) { throw new ApplicationException("Unexpected result from server."); } if (result[0].ResultID.Failed()) { throw new ApplicationException("Could not update data filter."); } // update locale copy of the filter value. m_filterValue = filterValue; }
static void Main(string[] args) { Opc.Da.Server server = new Opc.Da.Server(new OpcCom.Factory(), new URL { Path = @"Matrikon.OPC.Simulation.1", Scheme = Opc.UrlScheme.DA }); server.Connect(); //Write Values int counter = 1; ItemValue item = new ItemValue("Bucket Brigade.TestWrite"); var itemList = new List <ItemValue>(); itemList.Add(item); Item item_read = new Item(); item_read.ItemName = "Bucket Brigade.TestWrite"; item_read.Active = true; List <Item> readItems = new List <Item>(); readItems.Add(item_read); while (true) { item.Value = "Testing" + counter; server.Write(itemList.ToArray()); counter++; var result = server.Read(readItems.ToArray()); foreach (var value in result) { System.Console.WriteLine(value.ItemName + " : " + value.Value.ToString()); } } }
/// <summary> /// 向指定单个变量写入值 /// </summary> /// <param name="index"></param> /// <param name="itemName"></param> /// <param name="value"></param> public void writeOpc(int index, string itemName, string value) { Opc.Da.ItemValue[] opcItemValues = new Opc.Da.ItemValue[1]; foreach (Opc.Da.Item opcItem in opcServer.Subscriptions[index].Items) { if (opcItem.ItemName.Equals(itemName)) { opcItemValues[0] = new Opc.Da.ItemValue(opcItem); break; } } if (opcItemValues == null) { return; } opcItemValues[0].Value = value; opcServer.Write(opcItemValues); }
/// <summary> /// Запись одного конкретного значения /// </summary> public void Write(string itemName, string value) { var values = new ItemValue[1]; values[0] = new ItemValue { ItemName = itemName, Value = value }; serverHandle.Write(values); }
public static string WriteValue(string nodeName, double value) { Opc.ItemIdentifier itemId = new Opc.ItemIdentifier(nodeName); ItemValueResult it = new ItemValueResult(itemId); it.Value = value; server.Write(new ItemValueResult[] { it }); return("Masz ty RiGCz? wpisałeś " + value + " do węzła " + nodeName); }
public void Write(WriteParameter[] writeParameters) { var itemValues = new ItemValue[writeParameters.Length]; for (var i = 0; i < writeParameters.Length; i++) { var writeParameter = writeParameters[i]; var item = new Item { ItemName = writeParameter.Address }; itemValues[i] = new ItemValue(item) { Value = writeParameter.Value }; } _server.Write(itemValues); }
public ComplexItem CreateDataFilter(Opc.Da.Server server, string filterName, string filterValue) { ComplexItem item2; if (this.m_unfilteredItemID != null) { return(null); } if (this.m_filterItem == null) { return(null); } BrowsePosition position = null; try { ItemValue value2 = new ItemValue(this.m_filterItem); StringWriter w = new StringWriter(); XmlTextWriter writer2 = new XmlTextWriter(w); writer2.WriteStartElement("DataFilters"); writer2.WriteAttributeString("Name", filterName); writer2.WriteString(filterValue); writer2.WriteEndElement(); writer2.Close(); value2.Value = w.ToString(); value2.Quality = Quality.Bad; value2.QualitySpecified = false; value2.Timestamp = DateTime.MinValue; value2.TimestampSpecified = false; IdentifiedResult[] resultArray = server.Write(new ItemValue[] { value2 }); if ((resultArray == null) || (resultArray.Length == 0)) { throw new ApplicationException("Unexpected result from server."); } if (resultArray[0].ResultID.Failed()) { throw new ApplicationException("Could not create new data filter."); } BrowseFilters filters = new BrowseFilters { ElementNameFilter = filterName, BrowseFilter = browseFilter.item, ReturnAllProperties = false, PropertyIDs = CPX_PROPERTIES, ReturnPropertyValues = true }; BrowseElement[] elementArray = server.Browse(this.m_filterItem, filters, out position); if ((elementArray == null) || (elementArray.Length == 0)) { throw new ApplicationException("Could not browse to new data filter."); } ComplexItem item = new ComplexItem(); if (!item.Init(elementArray[0])) { throw new ApplicationException("Could not initialize to new data filter."); } item2 = item; } finally { if (position != null) { position.Dispose(); position = null; } } return(item2); }
void ThreadJob() { try { srv = new Opc.Da.Server(new OpcCom.Factory(), new Opc.URL(fullServerName)); srv.Connect(); if (!srv.IsConnected) { throw new Exception("не удалось подключиться к серверу OPC"); } } catch { if (refMainWindow != null) { refMainWindow.Dispatcher.Invoke(refMainWindow.ofsFail); } return; } bool isFirstCycle = true; while (true) { //-------------- OPC ---------------- opcitems.Clear(); foreach (DIStruct di in DIStruct.items) { if ((di.OPCtag != "" && di.IsChanged && di.En) || (isFirstCycle)) { itm = new Opc.Da.ItemValue(Properties.Settings.Default.OPCDevice + '!' + di.OPCtag) { Value = di.ValDI ^ di.InvertDI }; opcitems.Add(itm); di.IsChanged = false; } } foreach (AIStruct ai in AIStruct.items) { if ((ai.OPCtag != "" && ai.IsChanged && ai.En) || (isFirstCycle)) { itm = new Opc.Da.ItemValue(Properties.Settings.Default.OPCDevice + '!' + ai.OPCtag); if (ai.PLCDestType == EPLCDestType.Float) { itm.Value = ai.fValAI; } else { itm.Value = ai.ValACD; } opcitems.Add(itm); ai.IsChanged = false; } } try { // Записываем сигналы DI AI srv.Write(opcitems.ToArray()); //читаем сигналы DO для которых задан тег if (opcDOItemsForRead.Length > 0) { readResult = srv.Read(opcDOItemsForRead); for (int i = 0; i < readResult.Length; i++) { try { arrayDO[i].ValDO = (bool)readResult[i].Value; } catch { } } } //читаем сигналы AO для которых задан тег if (opcAOItemsForRead.Length > 0) { readResult = srv.Read(opcAOItemsForRead); for (int i = 0; i < readResult.Length; i++) { try { if (arrayAO[i].PLCDestType == EPLCDestType.ADC) { object val = readResult[i].Value; if (val is short) { arrayAO[i].ValACD = (ushort)((Int16)readResult[i].Value); } if (val is ushort) { arrayAO[i].ValACD = (UInt16)readResult[i].Value; } } else { arrayAO[i].fVal = (float)readResult[i].Value; } } catch { } } Debug.WriteLine(opcAOItemsForRead.Length.ToString() + " AO tags read"); } } catch { //System.Windows.Forms.MessageBox.Show("OPC Thread exception:\n\r" + ex.Message); // LogWriter.AppendLog("Чтение по OPC прервано"+Environment.NewLine); if (refMainWindow != null) { refMainWindow.Dispatcher.Invoke(refMainWindow.ofsFail); } } isFirstCycle = false; Thread.Sleep(period); if (isAbortRequested) { return; } }//loop }
/// <summary> /// Creates a new data filter. /// </summary> public ComplexItem CreateDataFilter(Opc.Da.Server server, string filterName, string filterValue) { // not a valid operation for data filter items. if (m_unfilteredItemID != null) { return(null); } // data filters not supported by the item. if (m_filterItem == null) { return(null); } BrowsePosition position = null; try { // write the desired filter to the server. ItemValue item = new ItemValue(m_filterItem); // create the filter parameters document. StringWriter ostrm = new StringWriter(); XmlTextWriter writer = new XmlTextWriter(ostrm); writer.WriteStartElement("DataFilters"); writer.WriteAttributeString("Name", filterName); writer.WriteString(filterValue); writer.WriteEndElement(); writer.Close(); // create the value to write. item.Value = ostrm.ToString(); item.Quality = Quality.Bad; item.QualitySpecified = false; item.Timestamp = DateTime.MinValue; item.TimestampSpecified = false; // write the value. IdentifiedResult[] result = server.Write(new ItemValue[] { item }); if (result == null || result.Length == 0) { throw new ApplicationException("Unexpected result from server."); } if (result[0].ResultID.Failed()) { throw new ApplicationException("Could not create new data filter."); } // browse for new data filter item. BrowseFilters filters = new BrowseFilters(); filters.ElementNameFilter = filterName; filters.BrowseFilter = browseFilter.item; filters.ReturnAllProperties = false; filters.PropertyIDs = CPX_PROPERTIES; filters.ReturnPropertyValues = true; BrowseElement[] elements = server.Browse(m_filterItem, filters, out position); // nothing found. if (elements == null || elements.Length == 0) { throw new ApplicationException("Could not browse to new data filter."); } ComplexItem filterItem = new ComplexItem(); if (!filterItem.Init(elements[0])) { throw new ApplicationException("Could not initialize to new data filter."); } // return the new data filter. return(filterItem); } finally { if (position != null) { position.Dispose(); position = null; } } }