using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OPCPLC;
using System.Configuration;
using OPCAutomation;
namespace EQUIPINTERFACETEST
{
public class LoadOpcLeafTest
{
OPCServer KepServer;
///
/// OPCGroups Object
///
OPCGroups KepGroups;
///
/// OPCGroup Object
///
OPCGroup KepGroup;
///
/// OPCItems Object
///
OPCItems KepItems;
///
/// OPCItem Object
///
OPCItem KepItem;
public void LoadLeafTest()
{
KepServer = new OPCServer();
//opcServer服务器IP
string opcServerIP = ConfigurationManager.AppSettings.Get("OPCServerIP");
//opcServer服务名称
string opcServerName = ConfigurationManager.AppSettings.Get("OPCServerName");
KepServer.Connect(opcServerName, opcServerIP);
WriteLog.Write("Connect Server");
OPCBrowser oPCBrowse = KepServer.CreateBrowser();
oPCBrowse.ShowBranches();
//展开叶子
oPCBrowse.ShowLeafs(true);
WriteLog.Write("ShowLeafs");
KepGroups = KepServer.OPCGroups;
KepGroup = KepGroups.Add("OPCDOTNETGROUP");
KepServer.OPCGroups.DefaultGroupIsActive = true;
KepServer.OPCGroups.DefaultGroupDeadband = 0;
//当没有配置配置文件时,我们设置默认更新频率为1秒
KepGroup.UpdateRate = 1000;
KepGroup.IsActive = true;
KepGroup.IsSubscribed = true;
// KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
KepItems = KepGroup.OPCItems;
string channel = ConfigurationManager.AppSettings.Get("Channel.Machine");
WriteLog.Write("Finish Set");
foreach (object turn in oPCBrowse)
{
string strturn = turn.ToString();
List list=strturn.Split('.').ToList();
if (list.Count(o => o.IndexOf('_') == 0) > 0)
{
continue;
}
if (strturn.Contains(channel) == false)
{
continue;
}
WriteLog.Write(strturn);
Console.WriteLine(strturn);
KepItem = KepItems.AddItem(strturn, 1234);
int i = KepItem.ServerHandle;
object a = ReadtagValue(i);
Console.WriteLine(a.ToString());
}
}
private object ReadtagValue(int p_itmHandleServer)
{
int sumValue = 0;
try
{
OPCItem bItem = KepGroup.OPCItems.GetOPCItem(p_itmHandleServer);//KepItems.GetOPCItem( itmHandleServer1 );
int[] temp = new int[2] { 0, bItem.ServerHandle };
Array serverHandles = (Array)temp;
object[] valueTemp = new object[2] { "", "0" };
Array values = (Array)valueTemp;
Array Errors;
object quer;
object tiems;
KepGroup.SyncRead(1, 1, ref serverHandles, out values, out Errors, out quer, out tiems);
GC.Collect();
sumValue = values.Length;
return values.GetValue(1);
}
catch (Exception ex)
{
throw ex;
}
finally
{
}
}
}
}