public static OPCITEMVQT[] CreateOpcItemVQT(IList <OpcDaVQT> values) { var vqts = new OPCITEMVQT[values.Count]; for (int i = 0; i < values.Count; i++) { OpcDaVQT value = values[i]; vqts[i].bQualitySpecified = false; if (value.Quality != short.MinValue) { vqts[i].bQualitySpecified = true; vqts[i].wQuality = value.Quality; } vqts[i].bTimeStampSpecified = false; if (value.Timestamp != DateTimeOffset.MinValue) { vqts[i].bTimeStampSpecified = true; vqts[i].ftTimeStamp = FileTimeConverter.ToFileTime(value.Timestamp); } vqts[i].vDataValue = value.Value; } return(vqts); }
internal static OpcDaItemValue[] Create(OpcDaGroup opcDaGroup, int dwCount, int[] phClientItems, object[] pvValues, short[] pwQualities, FILETIME[] pftTimeStamps, HRESULT[] pErrors) { try { var values = new OpcDaItemValue[dwCount]; for (var i = 0; i < values.Length; i++) { values[i] = new OpcDaItemValue { Value = pvValues[i], Item = opcDaGroup.GetItem(phClientItems[i]), Quality = pwQualities[i], Timestamp = FileTimeConverter.FromFileTime(pftTimeStamps[i]), Error = pErrors[i] }; } return(values); } catch (Exception ex) { Log.Error("Cannot create OpcDaItemValue object.", ex); return(new OpcDaItemValue[0]); } }
internal static OpcDaItemValue[] Create(OpcDaGroup opcDaGroup, OPCITEMSTATE[] ppItemValues, HRESULT[] ppErrors) { try { var result = new OpcDaItemValue[ppItemValues.Length]; for (var i = 0; i < result.Length; i++) { result[i] = new OpcDaItemValue { Timestamp = FileTimeConverter.FromFileTime(ppItemValues[i].ftTimeStamp), Value = ppItemValues[i].vDataValue, Quality = ppItemValues[i].wQuality, Error = ppErrors[i], Item = opcDaGroup.GetItem(ppItemValues[i].hClient) }; } return(result); } catch (Exception ex) { Log.Error("Cannot create OpcDaItemValue object.", ex); return(new OpcDaItemValue[0]); } }
internal OpcDaServerStatus(OPCSERVERSTATUS opcserverstatus) { StartTime = FileTimeConverter.FromFileTime(opcserverstatus.ftStartTime); CurrentTime = FileTimeConverter.FromFileTime(opcserverstatus.ftCurrentTime); LastUpdateTime = FileTimeConverter.FromFileTime(opcserverstatus.ftLastUpdateTime); ServerState = (OpcDaServerState)opcserverstatus.dwServerState; GroupCount = opcserverstatus.dwGroupCount; Bandwidth = opcserverstatus.dwBandWidth; Version = new Version(opcserverstatus.wMajorVersion, opcserverstatus.wMinorVersion, opcserverstatus.wBuildNumber); Reserved = opcserverstatus.wReserved; VendorInfo = opcserverstatus.szVendorInfo; }
public OpcDaVQTE[] Read(IList <string> itemIds, IList <TimeSpan> maxAge) { if (maxAge == null) { maxAge = new TimeSpan[itemIds.Count]; } if (itemIds.Count != maxAge.Count) { throw new ArgumentException("Invalid size of maxAge", "maxAge"); } int[] intMaxAge = ArrayHelpers.CreateMaxAgeArray(maxAge, itemIds.Count); string[] pszItemIDs = itemIds.ToArray(); var ppvValues = new object[pszItemIDs.Length]; var ppwQualities = new short[pszItemIDs.Length]; var ppftTimeStamps = new FILETIME[pszItemIDs.Length]; var ppErrors = new HRESULT[pszItemIDs.Length]; DoComCall(ComObject, "IOPCItemIO::Read", () => ComObject.Read(pszItemIDs.Length, pszItemIDs, intMaxAge, out ppvValues, out ppwQualities, out ppftTimeStamps, out ppErrors), pszItemIDs.Length, pszItemIDs, maxAge); var result = new OpcDaVQTE[itemIds.Count]; for (int i = 0; i < ppvValues.Length; i++) { var vqte = new OpcDaVQTE { Value = ppvValues[i], Quality = ppwQualities[i], Timestamp = FileTimeConverter.FromFileTime(ppftTimeStamps[i]), Error = ppErrors[i] }; result[i] = vqte; } return(result); }
public object[] ReadMaxAge(int[] serverHandles, IList <TimeSpan> maxAge, out OpcDaQuality[] qualities, out DateTimeOffset[] timestamps, out HRESULT[] errors) { int[] intMaxAge = ArrayHelpers.CreateMaxAgeArray(maxAge, maxAge.Count); object[] ppvValues = {}; short[] ppwQualities = {}; FILETIME[] ppftTimeStamps = {}; HRESULT[] _errors = {}; DoComCall(ComObject, "IOpcSyncIO2::ReadMaxAge", () => ComObject.ReadMaxAge(serverHandles.Length, serverHandles, intMaxAge, out ppvValues, out ppwQualities, out ppftTimeStamps, out _errors), serverHandles.Length, serverHandles, intMaxAge); timestamps = new DateTimeOffset[ppftTimeStamps.Length]; qualities = new OpcDaQuality[ppwQualities.Length]; for (int i = 0; i < timestamps.Length; i++) { timestamps[i] = FileTimeConverter.FromFileTime(ppftTimeStamps[i]); qualities[i] = new OpcDaQuality(ppwQualities[i]); } errors = _errors; return(ppvValues); }
public HRESULT[] WriteVQT(IList <string> itemIds, IList <OpcDaVQT> values) { if (itemIds.Count != values.Count) { throw new ArgumentException("Invalid size of values", "values"); } var vqts = new OPCITEMVQT[values.Count]; for (int i = 0; i < values.Count; i++) { OpcDaVQT opcItemValue = values[i]; vqts[i].bQualitySpecified = false; if (opcItemValue.Quality != short.MinValue) { vqts[i].bQualitySpecified = true; vqts[i].wQuality = opcItemValue.Quality; } vqts[i].bTimeStampSpecified = false; if (opcItemValue.Timestamp != DateTimeOffset.MinValue) { vqts[i].bTimeStampSpecified = true; vqts[i].ftTimeStamp = FileTimeConverter.ToFileTime(opcItemValue.Timestamp); } vqts[i].vDataValue = opcItemValue.Value; } string[] pszItemIDs = itemIds.ToArray(); var ppErrors = new HRESULT[pszItemIDs.Length]; DoComCall(ComObject, "IOPCItemIO::WriteVQT", () => ComObject.WriteVQT(pszItemIDs.Length, pszItemIDs, vqts, out ppErrors), pszItemIDs.Length, pszItemIDs); return(ppErrors); }