public Task<OpcDaItemValue[]> Start(IList<OpcDaItem> items, CancellationToken token) { try { var serverHandles = ArrayHelpers.GetServerHandles(items); HRESULT[] ppErrors; int cancelId = _asyncIO2.Read(serverHandles, TransactionId, out ppErrors); if (ppErrors.All(e => e.Failed)) // if all errors no callback will take place { _requestManager.CompleteRequest(TransactionId); var result = new OpcDaItemValue[ppErrors.Length]; for (var i = 0; i < result.Length; i++) { result[i] = new OpcDaItemValue {Error = ppErrors[i], Item = items[i]}; } _tcs.SetResult(result); } else { CancellationId = cancelId; RequestHelpers.SetCancellationHandler(token, Cancel); } return Task; } catch (Exception ex) { _requestManager.CompleteRequest(TransactionId); _tcs.SetException(ex); return Task; } }
public Task <OpcDaItemValue[]> Start(IList <OpcDaItem> items, IList <TimeSpan> maxAge, CancellationToken token) { try { var serverHandles = ArrayHelpers.GetServerHandles(items); HRESULT[] ppErrors; int cancelId = _asyncIO3.ReadMaxAge(serverHandles, maxAge, TransactionId, out ppErrors); if (ppErrors.All(e => e.Failed)) // if all errors no callback will take place { _requestManager.CompleteRequest(TransactionId); var result = new OpcDaItemValue[ppErrors.Length]; for (var i = 0; i < result.Length; i++) { result[i] = new OpcDaItemValue { Error = ppErrors[i], Item = items[i] }; } _tcs.SetResult(result); } else { CancellationId = cancelId; RequestHelpers.SetCancellationHandler(token, Cancel); } return(Task); } catch (Exception ex) { _requestManager.CompleteRequest(TransactionId); _tcs.SetException(ex); return(Task); } }
public void Test_WriteVQT() { string[] itemIds = new[] { "Write Only.Int1", "Write Only.Int2" }; OpcDaItemValue[] values = new OpcDaItemValue[] { new OpcDaItemValue() { Value = 0, Quality = (short)OPC_QUALITY_STATUS.BAD }, new OpcDaItemValue() { Value = 0, Timestamp = DateTimeOffset.Now - TimeSpan.FromHours(1) }, }; HRESULT[] errors = _server.WriteVQT(itemIds, values); errors.Should().OnlyContain(hres => hres.Succeeded); }
private void OnDataChange(int dwTransid, int hGroup, HRESULT hrMasterquality, HRESULT hrMastererror, int dwCount, int[] phClientItems, object[] pvValues, short[] pwQualities, FILETIME[] pftTimeStamps, HRESULT[] pErrors) { try { Log.TraceFormat( "On data change. Transaction id: {0}. Client group handle: {1}. Master quality: {2}. Error: {3}.", dwTransid, hGroup, hrMasterquality, hrMastererror); if (hGroup != _opcDaGroup.ClientHandle) { throw new ArgumentException("Wrong group handle", "hGroup"); } OpcDaItemValue[] values = OpcDaItemValue.Create(_opcDaGroup, dwCount, phClientItems, pvValues, pwQualities, pftTimeStamps, pErrors); if (dwTransid == 0) // Data from subscription { OnNewItemValues(values); return; } IAsyncRequest request = CompleteRequest(dwTransid); if (request == null) { return; } if (request.TransactionId != dwTransid) { throw new ArgumentException("Wrong transaction id.", "dwTransid"); } request.OnDataChange(dwTransid, hGroup, hrMasterquality, hrMastererror, values); OnNewItemValues(values); } catch (Exception ex) { Log.Error("Error on data change.", ex); } }
public async Task WriteValiesToAnItemOfAnOpcServerAsynchronously() { Uri url = UrlBuilder.Build("Matrikon.OPC.Simulation.1"); using (var server = new OpcDaServer(url)) { // Connect to the server first. server.Connect(); // Create a group with items. OpcDaGroup group = CreateGroupWithItems(server); // Write value to the item. OpcDaItem item = group.Items.FirstOrDefault(i => i.ItemId == "Bucket Brigade.Int4"); OpcDaItem[] items = { item }; object[] values = { 123 }; HRESULT[] results = await group.WriteAsync(items, values); // Handle write result. if (results[0].Failed) { Console.WriteLine("Error writing value"); } // Read and output value. OpcDaItemValue value = group.Read(items, OpcDaDataSource.Device)[0]; Console.WriteLine("ItemId: {0}; Value: {1}; Quality: {2}; Timestamp: {3}", value.Item.ItemId, value.Value, value.Quality, value.Timestamp); // The output should be like the following: // ItemId: Bucket Brigade.Int4; Value: 123; Quality: Good+Good+NotLimited; Timestamp: 04/18/2016 14:04:11 +03:00 value.Value.Should().Be(123); value.Quality.Master.Should().Be(OpcDaQualityMaster.Good); } }
protected virtual void OnNewItemValues(OpcDaItemValue[] values) { Action<OpcDaItemValue[]> handler = NewItemValues; if (handler != null) handler(values); }
public void OnDataChange(int dwTransid, int hGroup, int hrMasterquality, int hrMastererror, OpcDaItemValue[] values) { _tcs.TrySetResult(values); }
public void OnReadComplete(int dwTransid, int hGroup, int hrMasterquality, int hrMastererror, OpcDaItemValue[] values) { throw new NotSupportedException(); }