public override Task <WriteDataItemsResult> WriteDataItems(string group, IList <DataItemValue> writeValues, Duration?timeout) { var failed = new List <FailedDataItemWrite>(); for (int i = 0; i < writeValues.Count; ++i) { DataItemValue write = writeValues[i]; string id = write.ID; if (values.ContainsKey(id)) { values[id].Put(write.Value); } else { failed.Add(new FailedDataItemWrite(id, $"No data item with id '{id}' found.")); } } if (failed.Count == 0) { return(Task.FromResult(WriteDataItemsResult.OK)); } else { return(Task.FromResult(WriteDataItemsResult.Failure(failed.ToArray()))); } }
public DataItemValue Copy() { lock (_lock) { var result = new DataItemValue(); result.Id = Id; result.Type = Type; result.SubType = SubType; result.Value = Value; result.ChangedSequence = ChangedSequence; return(result); } }
public override Task <WriteDataItemsResult> WriteDataItems(string group, IList <DataItemValue> values, Duration?timeout) { int N = values.Count; var failed = new FailedDataItemWrite[N]; for (int i = 0; i < N; ++i) { DataItemValue request = values[i]; string id = request.ID; failed[i] = new FailedDataItemWrite(id, "Write not supported."); } return(Task.FromResult(WriteDataItemsResult.Failure(failed))); }
public override async Task <WriteDataItemsResult> WriteDataItems(string group, IList <DataItemValue> values, Duration?timeout) { int N = values.Count; bool connected = await TryConnect(); if (!connected || connection == null) { var failed = new FailedDataItemWrite[N]; for (int i = 0; i < N; ++i) { DataItemValue request = values[i]; failed[i] = new FailedDataItemWrite(request.ID, "No connection to OPC UA server"); } return(WriteDataItemsResult.Failure(failed)); } List <FailedDataItemWrite>?listFailed = null; var dataItemsToWrite = new List <WriteValue>(N); for (int i = 0; i < N; ++i) { DataItemValue request = values[i]; string id = request.ID; if (mapId2Info.ContainsKey(id)) { ItemInfo info = mapId2Info[request.ID]; NodeId di = info.Node ?? NodeId.Null; try { //if (!di.IsWriteable) throw new Exception($"OPC item '{di.Name}' is not writeable"); dataItemsToWrite.Add(MakeWriteValue(di, request.Value.V, info.Type, info.Dimension)); } catch (Exception exp) { if (listFailed == null) { listFailed = new List <FailedDataItemWrite>(); } listFailed.Add(new FailedDataItemWrite(id, exp.Message)); } } else { if (listFailed == null) { listFailed = new List <FailedDataItemWrite>(); } listFailed.Add(new FailedDataItemWrite(id, $"No writeable data item with id '{id}' found.")); } } if (dataItemsToWrite.Count > 0) { WriteRequest req = new WriteRequest() { NodesToWrite = dataItemsToWrite.ToArray() }; WriteResponse resp = await connection.WriteAsync(req); // TODO: Check result! } if (listFailed == null) { return(WriteDataItemsResult.OK); } else { return(WriteDataItemsResult.Failure(listFailed.ToArray())); } }
public DataItemValue Copy() { lock (_lock) { var result = new DataItemValue(); result.Id = Id; result.Type = Type; result.SubType = SubType; result.Value = Value; result.ChangedSequence = ChangedSequence; return result; } }