public void Attach(string serverAddress, NativeOpcGroup group) { _clientHandleIndex++; var address = serverAddress + "." + group.Name + "." + Address; try { ClientHandle = _clientHandleIndex; _item = group.OPCItems.AddItem(address, _clientHandleIndex); } catch (Exception ex) { this.Fatal(new InvalidOperationException("创建OpcItem失败,错误原因" + ex)); } }
public void Initialize(OpcConfiguration config) { Config = config; try { _OpcServer = new OPCAutomation.OPCServer(); _OpcServer.Connect(ServerName, ""); _OpcServer.OPCGroups.DefaultGroupIsActive = true; _OpcServer.OPCGroups.DefaultGroupDeadband = 0; _OpcGroup = _OpcServer.OPCGroups.Add("Group0"); _OpcGroup.UpdateRate = 250; _OpcGroup.IsSubscribed = true; _OpcGroup.OPCItems.DefaultIsActive = true; _OpcGroup.OPCItems.AddItems(Config.TagCount, Config.ClientTags.Select(x => x.Name).ToArray(), Config.ClientTags.Select(x => x.Handle).ToArray(), out var serverHandles, out var serverErrors); Config.ServerHandles = serverHandles; Config.ServerErrors = serverErrors; bool itemgood = false; for (int i = 1; i <= config.TagCount; i++) { int ab = (Int32)Config.ServerErrors.GetValue(i); itemgood = ab == 0; if (!itemgood) { break; } } if (itemgood) { _OpcGroup.DataChange += OPCGroup_DataChanged; } } catch (Exception ex) { _OpcServer = null; } }
//################ Sub procedure to initialize OPC Server ###### private void StopOPCClient() { // == // Description : 断开连接OPCServer,返回值False为断开失败,True为断开成功 // Created : 2009/01/19 // Author : zgh // Update : // Updater : // == //bool value = false; try { ObjOPCGroup.IsActive = false; //ObjOPCGroup.Remove(ObjOPCGroup.ServerHandle) ObjOPCGroups.RemoveAll(); ObjOPCItems = null; ObjOPCGroups = null; ObjOPCGroup = null; //ObjOPCGroup.AsyncReadComplete += ObjOPCGroup_AsyncReadComplete; ObjOPCServer.Disconnect(); ObjOPCServer = null; //colTagName = Nothing //value = true; //MessageLog("clsDeviceOPC.StopOPCClient(): Disconnected from OPC device \'" + DeviceName + "\'"); LOG.Info("断开OPC连接 \'" + SourceName + "\'"); } catch (Exception ex) { //value = false; //WarnLog(ex.StackTrace + "\r\n" + ex.Message); // MsgBox(ex.Message) LOG.Error(string.Format("OPCDataSource断开连接出错行:{0},", ex.Message)); } finally { System.GC.Collect(); //强制垃圾回收 } }
public bool Start() { if (!bInit) { this.lastErrInfo = "初始化未完成,先执行Init操作"; return(false); } //try { string opcGroupString = groupHash["OPCGroupString"].ToString(); string s1 = opcHash["OPCConnectString"].ToString(); string s2 = opcHash["OPCNode"].ToString(); object o = OPCServer.GetOPCServers(); OPCServer.Connect(opcHash["OPCConnectString"].ToString(), opcHash["OPCNode"]); ////Group的默认死区,变化量超过死区后将会触发DataChange事件,合理的设置该值可以提高程序性能 //OPCServer.OPCGroups.DefaultGroupDeadband = int.Parse(groupHash["GroupDeadband"].ToString()); ////组(Group)的默认通信区域编号,如1024 //OPCServer.OPCGroups.DefaultGroupLocaleID = int.Parse(groupHash["GroupLocaleID"].ToString()); ////组(Group)的默认刷新率 //OPCServer.OPCGroups.DefaultGroupUpdateRate = int.Parse(groupHash["GroupUpdateRate"].ToString()); //组(Group)的默认时间偏差 OPCBrowser opcBrowser = OPCServer.CreateBrowser(); //展开分支 opcBrowser.ShowBranches(); //展开叶子 opcBrowser.ShowLeafs(true); // OPCServer.OPCGroups.DefaultGroupTimeBias = int.Parse(groupHash["GroupTimeBias"].ToString()); opcGroup = OPCServer.OPCGroups.Add("AXC3050"); opcGroup.IsActive = false; opcGroup.IsSubscribed = false; int clientHandle = 1; OPCAutomation.OPCItems opcItems = opcGroup.OPCItems; IDictionaryEnumerator ide = readHash.GetEnumerator(); while (ide.MoveNext()) { Item item = ide.Value as Item; if (item.IsActive) { opcItems.AddItem(opcGroupString + item.OPCItemString, clientHandle); clientHandle++; } } ide = writeHash.GetEnumerator(); while (ide.MoveNext()) { Item item = ide.Value as Item; if (item.IsActive) { opcItems.AddItem(opcGroupString + item.OPCItemString, clientHandle); clientHandle++; } } opcGroup.DataChange += new OPCAutomation.DIOPCGroupEvent_DataChangeEventHandler(Automation_DataChange); opcGroup.IsActive = true; opcGroup.IsSubscribed = true; //} //catch (SystemException ex) { // this.lastErrInfo = ex.Message; // return false; //} bConnect = true; return(true); }
//################ Sub procedure to initialize OPC Server ###### private bool StartOPCClient() { int liCounter = 0; Array gpServerHandlers = null; Array gsErrors = null; string GroupName = SourceName; try { ObjOPCServer = new OPCServer(); //##### Initialize OPC Server ################################ ObjOPCServer.Connect(OPCServerName, ""); ObjOPCGroups = ObjOPCServer.OPCGroups; ObjOPCGroup = ObjOPCGroups.Add(GroupName); ObjOPCGroup.AsyncReadComplete += ObjOPCGroup_AsyncReadComplete; //Add OPCGroup ObjOPCGroup.UpdateRate = UpdateInterval; ObjOPCGroup.IsActive = false; ObjOPCGroup.IsSubscribed = ObjOPCGroup.IsActive; ObjOPCItems = ObjOPCGroup.OPCItems; //Create opc items Array_Address = Array.CreateInstance(typeof(string), NoOfItems + 1); Array_ClientHanlers = Array.CreateInstance(typeof(int), NoOfItems + 1); Array_ServerHandlers = Array.CreateInstance(typeof(int), NoOfItems + 1); //Build OPCItems Array for (liCounter = 1; liCounter <= NoOfItems; liCounter++) { Array_Address.SetValue(List_Address[liCounter - 1], liCounter); Array_ClientHanlers.SetValue(liCounter, liCounter); } ObjOPCItems.AddItems(NoOfItems, ref Array_Address, ref Array_ClientHanlers, out gpServerHandlers, out gsErrors); //Get the server handlers bool HasError = false; for (liCounter = 1; liCounter <= NoOfItems; liCounter++) { if ((int)gsErrors.GetValue(liCounter) == 0) { Array_ServerHandlers.SetValue((int)gpServerHandlers.GetValue(liCounter), liCounter); } else { LOG.Error("Tag \'" + List_Address[liCounter - 1] + "\' has problem连接失败错误"); HasError = true; } } if (!HasError) { LOG.Info(" 启动OPC组 \'" + SourceName + "\'"); } return(!HasError); } catch (Exception ex) { LOG.Error(string.Format("连接OPC出错:读取资源{0}{1}", GroupName, ex.Message)); return(false); } }