static void HistoryReadAttributes(Session session)
{
List<string> VariableBrowsePaths = new List<string>();
VariableBrowsePaths.Add("/7:MatrikonOpc Sim Server/7:Simulation Items/7:Bucket Brigade/7:Int1/7:Description");
VariableBrowsePaths.Add("/7:MatrikonOpc Sim Server/7:Simulation Items/7:Bucket Brigade/7:Int1/7:DataType");
VariableBrowsePaths.Add("/7:MatrikonOpc Sim Server/7:Simulation Items/7:Bucket Brigade/7:Int1/7:ITEMID");
// translate browse paths.
IList<NodeOfInterest> nodeIds = GetNodeIds(session, Opc.Ua.Objects.ObjectsFolder,
VariableBrowsePaths.ToArray());
DiagnosticInfoCollection diagnosticInfos;
ReadRawModifiedDetails readDetails = new ReadRawModifiedDetails();
readDetails.StartTime = DateTime.MinValue;
readDetails.EndTime = DateTime.Now;
readDetails.IsReadModified = false;
readDetails.NumValuesPerNode = 100;
readDetails.ReturnBounds = false;
ExtensionObject eo = new ExtensionObject(readDetails.TypeId, readDetails);
HistoryReadValueIdCollection idCollection = new HistoryReadValueIdCollection();
for (int ii = 0; ii < nodeIds.Count; ii++)
{
HistoryReadValueId readValueId = new HistoryReadValueId();
readValueId.NodeId = nodeIds[ii].NodeId;
readValueId.Processed = false;
idCollection.Add(readValueId);
}
HistoryReadResultCollection historyReadResults;
ResponseHeader responseHeader =
session.HistoryRead(null, eo, TimestampsToReturn.Both, true,
idCollection, out historyReadResults, out diagnosticInfos);
// process results.
for (int ii = 0; ii < historyReadResults.Count; ii++)
{
HistoryReadResult historyReadResult = historyReadResults[ii];
HistoryData historyData = null;
DataValueCollection dataValues = null;
if (historyReadResult.HistoryData != null)
{
historyData = ExtensionObject.ToEncodeable(historyReadResult.HistoryData) as HistoryData;
dataValues = historyData.DataValues;
}
ServiceResult result = Session.GetResult(historyReadResult.StatusCode, ii, diagnosticInfos, responseHeader);
Console.WriteLine("\nHistoryRead result code for {0}: {1}", VariableBrowsePaths[ii], result.StatusCode.ToString());
if (StatusCode.IsBad(historyReadResult.StatusCode))
{
continue;
}
if (dataValues == null)
{
Console.WriteLine("dataValues == null");
continue;
}
for (int jj = 0; jj < dataValues.Count; jj++)
{
DataValue dataValue = dataValues[jj];
// write value.
Console.WriteLine("\t{0}: V={1}",jj, dataValue.Value == null ? "null" : dataValue.Value.ToString());
Console.WriteLine("\t Q={0}, SrvT={1}, SrcT={2}\n",
dataValue.StatusCode.ToString(), dataValue.ServerTimestamp, dataValue.SourceTimestamp);
}
}
}