public Task<HRESULT[]> Start(IList<OpcDaItem> items, OPCITEMVQT[] vqt, CancellationToken token) { try { var serverHandles = ArrayHelpers.GetServerHandles(items); HRESULT[] ppErrors; int cancelId = _asyncIO3.WriteVQT(serverHandles, vqt, TransactionId, out ppErrors); if (ppErrors.All(e => e.Failed)) // if all errors no callback will take place { _requestManager.CompleteRequest(TransactionId); _tcs.SetResult(ppErrors); } else { CancellationId = cancelId; RequestHelpers.SetCancellationHandler(token, Cancel); } return Task; } catch (Exception ex) { _requestManager.CompleteRequest(TransactionId); _tcs.SetException(ex); return Task; } }
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; }
public HRESULT[] WriteVQT(int[] serverHandles, OPCITEMVQT[] vqts) { return DoComCall(ComObject, "IOpcSyncIO2::WriteVQT", () => { HRESULT[] ppErrors; ComObject.WriteVQT(serverHandles.Length, serverHandles, vqts, out ppErrors); return ppErrors; }, serverHandles.Length, serverHandles, vqts); }
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; }
public int WriteVQT(int[] serverHandles, OPCITEMVQT[] vqts, int transactionId, out HRESULT[] errors) { var _errors = new HRESULT[serverHandles.Length]; int result = DoComCall(ComObject, "IOpcAsyncIO3::WriteVQT", () => { int dwCancelId; ComObject.WriteVQT(serverHandles.Length, serverHandles, vqts, transactionId, out dwCancelId, out _errors); return dwCancelId; }, serverHandles, vqts, transactionId); errors = _errors; return result; }