Ejemplo n.º 1
0
        public void ReadItems()
        {
            m_ItemAccessMutex.WaitOne();

            try
            {
                int            l_Index = 0;
                OPCItemState[] l_ItemStateArray;
                List <int>     l_ServerHandleList = m_ServerModel.GetServerHandleList();

                m_Group.Read(OPCDataSource.OPC_DS_DEVICE, l_ServerHandleList.ToArray(), out l_ItemStateArray);

                foreach (int l_ServerHandle in l_ServerHandleList)
                {
                    if (l_ItemStateArray[l_Index].Error == HResults.S_OK)
                    {
                        int l_ClientHandle = m_ServerModel.GetClientHandleFromServerHandle(l_ServerHandle);
                        Dictionary <string, string> l_ItemProps = new Dictionary <string, string>();
                        IOPCItem l_Item = m_ServerModel.GetItemFromClientHandle(l_ClientHandle);

                        l_ItemProps.Add(ServerModel.ITEM_PROP_VALUE_KEY, OPCUtility.ValueToString(l_Item.Type, l_ItemStateArray[l_Index].DataValue));
                        l_ItemProps.Add(ServerModel.ITEM_PROP_QUALITY_KEY, OPCUtility.QualityToString(l_ItemStateArray[l_Index].Quality));
                        l_ItemProps.Add(ServerModel.ITEM_PROP_TIMESTAMP_KEY, OPCUtility.TimeStampToString(l_ItemStateArray[l_Index].Timestamp));

                        m_ServerModel.UpdateItem(l_ClientHandle, l_ItemProps);

                        if (this.VeriteqOPCServer)
                        {
                            WriteToDatabase(l_Item);
                        }
                    }

                    l_Index++;
                }
            }
            catch (Exception l_Ex)
            {
                Disconnect();

                throw l_Ex;
            }
            finally
            {
                m_ItemAccessMutex.ReleaseMutex();
            }
        }