/// <summary> /// Reads the item values and stores the results in the request object. /// </summary> /// <param name="requests">The requests.</param> private void Da20ReadItemValues(List<ReadRequest> requests) { // lock (m_groupLock) { // if (m_group == null) //{ ComDaGroup m_group = new ComDaGroup(this, false); //} try { int count1 = 0; GroupItem[] items = new GroupItem[requests.Count]; ReadRequest[] addItemRequests = new ReadRequest[requests.Count]; // create the items in the temporary group. for (int ii = 0; ii < requests.Count; ii++) { ReadRequest request = requests[ii]; if (request == null) { continue; } if (!request.ValueRequired) { continue; } // add the item. items[count1] = m_group.CreateItem(request.ItemId, 0, 0, true); addItemRequests[count1] = request; count1++; } // create the items on the server. m_group.ApplyChanges(); // build the list of values to write. int count2 = 0; int[] serverHandles = new int[count1]; ReadRequest[] readRequests = new ReadRequest[count1]; for (int ii = 0; ii < count1; ii++) { // check for error on create. GroupItem item = items[ii]; ReadRequest request = addItemRequests[ii]; if (item.ErrorId < 0) { request.Value = new DaValue(); request.Value.Error = item.ErrorId; continue; } serverHandles[count2] = item.ServerHandle; readRequests[count2] = request; count2++; } if (count2 > 0) { // write values to the server. DaValue[] values = m_group.SyncRead(serverHandles, count2); // read the values. for (int ii = 0; ii < count2; ii++) { if (values != null && values.Length > ii) { readRequests[ii].Value = values[ii]; } else { readRequests[ii].Value = new DaValue() { Error = ResultIds.E_FAIL, Timestamp = DateTime.UtcNow }; } } // delete the items. for (int ii = 0; ii < count1; ii++) { GroupItem item = items[ii]; if (item.ErrorId >= 0) { m_group.RemoveItem(item); } } m_group.ApplyChanges(); } } finally { // delete the group and items. m_group.Delete(); } } }