Пример #1
0
        public void TestOPCGroupASyncRead()
        {
            string    progID     = "Insat";
            int       errorCount = 0;
            OPCServer server     = OPCServer.FindServerByProgID(progID, "localhost");

            server.Connect();
            List <OPCItem> items       = server.GetItems();
            var            opcBranches = from item in items
                                         where item.ItemType == OPCItemType.BRANCH
                                         let leaves = from elem in items
                                                      where elem.ItemType == OPCItemType.LEAF
                                                      where elem.Parent != null && elem.Parent.ItemName == item.ItemName
                                                      select elem
                                                      where leaves.Count() > 0
                                                      where !item.ItemName.Contains("МВ110")
                                                      select item;

            foreach (OPCItem branch in opcBranches)
            {
                string groupName = branch.ItemID;
                var    opcItems  = from item in items
                                   where item.ItemType == OPCItemType.LEAF
                                   where item.Parent != null
                                   where item.Parent.ItemName == branch.ItemName
                                   select item;
                List <OPCItem> list      = new List <OPCItem>(opcItems);
                uint           udateRate = 100;
                OPCGroup       group     = new OPCGroup(name: groupName, items: list)
                {
                    UpdateRate = udateRate
                };
                Assert.AreEqual(groupName, group.Name);
                Assert.AreSame(list, group.Items);
                Assert.AreEqual(udateRate, group.UpdateRate);
                group.RegInServer(server);
                group.AdviseOnServer(server, group.Items.ToArray()[1]);

                try
                {
                    group.ASyncRead();
                }
                catch (ServerException ex)
                {
                    string msg;
                    //Запрашиваем у сервера текст ошибки, соответствующий текущему HRESULT
                    server.Server.GetErrorString(ex.HResult, 2, out msg);
                    //Показываем сообщение ошибки
                    Console.Out.WriteLine(msg, "Ошибка");
                }
                List <string> results1 = new List <string>(group.Items.Select(i => i.TimeStamp ?? "1"));
                System.Threading.Thread.Sleep(1000);

/*                try
 *              {
 *                  group.SyncRead();
 *              }
 *              catch (ServerException ex)
 *              {
 *                  string msg;
 *                  //Запрашиваем у сервера текст ошибки, соответствующий текущему HRESULT
 *                  server.Server.GetErrorString(ex.HResult, 2, out msg);
 *                  //Показываем сообщение ошибки
 *                  Console.Out.WriteLine(msg, "Ошибка");
 *              }
 */             List <string> results2 = new List <string>(group.Items.Select(i => i.TimeStamp ?? "2"));
                Assert.AreEqual(results1.Count, results2.Count);
                Assert.AreNotEqual(results1[1], results2[1]);
                group.RemoveFromServer();

/*                try
 *              {
 *                  group.SyncRead();
 *              }
 *              catch (ServerException ex)
 *              {
 *                  errorCount++;
 *                  string msg;
 *                  //Запрашиваем у сервера текст ошибки, соответствующий текущему HRESULT
 *                  server.Server.GetErrorString(ex.HResult, 2, out msg);
 *                  //Показываем сообщение ошибки
 *                  Console.Out.WriteLine(msg, "Ошибка");
 *              }*/
            }
            //Assert.AreEqual(errorCount, opcBranches.Count());
            server.Disconnect();
        }