Opc.Ua.Com.Client.ComDaGroup.ApplyChanges C# (CSharp) Method

ApplyChanges() public method

Applys any changes to the group.
public ApplyChanges ( ) : bool
return bool
        public bool ApplyChanges()
        {
            // create the group if it does not already exist.
            if (Unknown == null)
            {
                Create();
            }

            if (m_updateRequired)
            {
                ModifyGroup();
                m_updateRequired = false;
            }

            RemoveItems();
            AddItems();
            ActivateItems(true);
            ActivateItems(false);

            // check if at least one valid item.
            lock (Lock)
            {
                List<int> clientHandles = new List<int>();
                List<DaValue> values = new List<DaValue>();

                bool result = false;

                for (int ii = 0; ii < m_items.Count; ii++)
                {
                    if (m_items[ii].Created)
                    {
                        result = true;
                    }

                    if (m_items[ii].ErrorId < 0)
                    {
                        if (clientHandles == null)
                        {
                            clientHandles = new List<int>();
                            values = new List<DaValue>();
                        }

                        clientHandles.Add(m_items[ii].ClientHandle);
                        values.Add(new DaValue() { Error = m_items[ii].ErrorId, Timestamp = DateTime.UtcNow });
                    }

                    if (clientHandles != null)
                    {
                        OnDataChange(clientHandles.ToArray(), values.ToArray());
                    }
                }

                return result;
            }
        }
        #endregion

Usage Example

Ejemplo n.º 1
0
        /// <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();
                }
            }
        }
All Usage Examples Of Opc.Ua.Com.Client.ComDaGroup::ApplyChanges