/// <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); }
public object[] Read(ReadParameter[] readParameters) { lock (_itemValues) { if (_canSubscribe) { SubscribeToRead(readParameters); } var result = new object[readParameters.Length]; if (_canSubscribe) { for (var i = 0; i < readParameters.Length; i++) { result[i] = _itemValues[readParameters[i].Address]; } } else { var items = readParameters.Select(p => new Item { ItemName = p.Address }).ToArray(); var itemValues = _server.Read(items); for (var i = 0; i < readParameters.Length; i++) { result[i] = itemValues[i].Value; } } return(result); } }
/// <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); }
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> /// 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); }
public static ItemValueResult[] ReadValue(string nodeName) { Opc.ItemIdentifier itemId = new Opc.ItemIdentifier(nodeName); Item it = new Item(itemId); ItemValueResult[] results = server.Read(new Item[] { it }); return(results); }
/// <summary> /// Чтение одного конкретного значения. /// В случае успешного чтения возвращает значение в формате string. /// Если чтение не удалось, возвращает пустую строку /// </summary> /// <param name="itemName"> название значения на OPC сервере </param> public string Read(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); return(result[0].Value.ToString()); } catch (Exception exception) { Console.WriteLine("Reading value failed - status: {0}", exception); } return(""); }
/// <summary> /// Read values from OPC tags specified in 'itemCollection' array. /// </summary> /// <returns>Array containing the current values of the OPC tags</returns> public ItemValueResult[] Read(Item[] itemCollection) { if (itemCollection == null) { return(null); } if (!_server.IsConnected) { throw new Exception("Not connected to OPC server"); } return(_server.Read(itemCollection)); }
private string Read(string tag) { var items = new Item[1]; items[0] = new Item(new ItemIdentifier(tag)); try { ItemValueResult[] values = _server.Read(items); string value = values[0].Value.ToString(); return(value); } catch (Exception) { //MessageBox.Show(ex.Message); MessageBox.Show(@"Ошибка построения таблицы: Проверте правельность парметров конфигуратора."); throw; } }
public object[] Read(ReadParameter[] readParameters) { var items = new Item[readParameters.Length]; for (var i = 0; i < readParameters.Length; i++) { items[i] = new Item { ItemName = readParameters[i].Address }; } var itemValues = _server.Read(items); var result = new Object[itemValues.Length]; for (var i = 0; i < itemValues.Length; i++) { result[i] = itemValues[i].Value; } return(result); }
/// <summary> /// Сигнал со словарем свойств сигнала (propID массив идентификаторов сигнала) /// </summary> public static string GetPropertyValue(Opc.Da.Server server_da, string tagName, int PropID) { string tempString = ""; try //Соединяемся с сервером и считываем свойство сигнала PropID { EventLog.WriteEntry("test", tagName); Opc.Da.Item[] temp = new Opc.Da.Item[1]; temp[0] = new Opc.Da.Item(new Opc.ItemIdentifier(tagName)); Opc.Da.ItemValueResult[] values = server_da.Read(temp); PropertyID[] propId = new PropertyID[1]; ItemIdentifier[] itemProp = new ItemIdentifier[] { new ItemIdentifier(tagName) }; ItemPropertyCollection[] propCollection; //EventLog.WriteEntry("test", "GetProperties - " + itemProp[0].ItemName + "; name - " + propId[0].Name); propCollection = server_da.GetProperties(itemProp, null, true); //EventLog.WriteEntry("test", "GetProperties - ok"); if (propCollection.Count() > 0) { foreach (Opc.Da.ItemProperty prop in propCollection[0]) { if (prop.ID.Code == PropID) { tempString = System.Convert.ToString(prop.Value); } } } } catch //В случае неудачного чтения, возвращаем null { tempString = null; } return(tempString); }
void ReadMeasurement(PolledMeasurement measurement) { var item = new OpcDa.Item { ItemName = measurement.Path }; if (l_server == null || l_server.GetStatus().ServerState != OpcDa.serverState.running) { l_logger.ErrorFormat(string.Format("Server not connected. Cannot read path {0}.", measurement.Name)); throw new Exception(string.Format("Server not connected. Cannot read path {0}.", measurement.Name)); } var result = l_server.Read(new[] { item })[0]; if (result == null) { l_logger.Error("the server replied with an empty response!!!"); throw new Exception("the server replied with an empty response");//if any item cannot read, throw exeption } if (result.ResultID.ToString() != "S_OK") { l_logger.ErrorFormat(string.Format("Invalid response from the server. (Response Status: {0}, Opc Tag: {1})", result.ResultID, measurement.Path)); throw new Exception(string.Format("Invalid response from the server. (Response Status: {0}, Opc Tag: {1})", result.ResultID, measurement.Path)); } OpcMetric metric = new OpcMetric() { Measurement = measurement, Opcstatus = result.ResultID.ToString(), OpcValue = result.Value, Timestamp = result.Timestamp }; if (OpcHelper.QualifyMetric(ref metric, l_cache)) { l_cache[metric.Measurement.Name] = metric.OpcValue; l_metricCollection.Add(metric); } }
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(); } }
public string[] GetDataType(List <OPCChannelInfo> Subscribed) { string serverName = txtOPCServer.Text; string hostName = txtOPCServerPath.Text; _server = new Server(fact, null) { Url = new URL(hostName + "/" + serverName) }; _server.Connect(); SubscribedCollection = new List <string>(); for (int i = 0; i < Subscribed.Count; i++) { SubscribedCollection.Add(Subscribed[i].channel); } if (SubscriptionOPC == null) { SubscriptionState.Name = "SubscribedGroup"; SubscriptionOPC = (Subscription)_server.CreateSubscription(SubscriptionState); } SubscribedItems = new Item[SubscribedCollection.Count]; for (int i = 0; i < SubscribedCollection.Count; i++) { SubscribedItems[i] = new Item { ItemName = SubscribedCollection[i], SamplingRate = 200, Active = true, ClientHandle = i }; } ItemResult = SubscriptionOPC.AddItems(SubscribedItems); ItemValue[] values = _server.Read(SubscribedItems); int ArraySize = values.Length; if (values[0].Value is Array) { ArraySize = ((Array)values[0].Value).Length - 1; } string[] ReturnValues = new string[ArraySize]; for (int i = 0; i < values.Length; i++) { if (values[i].Value is string) { ReturnValues[i] = "String"; } if (values[i].Value is bool) { ReturnValues[i] = "Bit"; } else if (values[i].Value is byte) { ReturnValues[i] = "Byte"; } else if (values[i].Value is float) { ReturnValues[i] = "Float"; } else if (values[i].Value is char) { ReturnValues[i] = "char"; } else if (values[i].Value is short) { ReturnValues[i] = "Short"; } else if (values[i].Value is int) { ReturnValues[i] = "Int"; } else if (values[i].Value is double) { ReturnValues[i] = "Double"; } else if (values[i].Value is Array) { ReturnValues[i] = "Array"; } else if (values[i].Value is uint) { ReturnValues[i] = "UInt"; } else if (values[i].Value is ushort) { ReturnValues[i] = "UShort"; } //else //{ // ReturnValues[i] = "null"; //} } if (_server != null) { if (_server.IsConnected) { try { _server.Disconnect(); } catch { } } _server.Dispose(); } return(ReturnValues); }
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 }