public bool Connect(params string[] ServerProgID) { try { if (TheSrv == null) { TheSrv = new OpcServer(); if (ServerProgID.Length == 0) { var s = ServerList; if (s.Count > 0) { TheSrv.Connect(s[0]); } else { return(false); } } else { TheSrv.Connect(ServerProgID[0]); } } else { var a = new SERVERSTATUS(); TheSrv.GetStatus(out a); if (a.eServerState != OPCSERVERSTATE.OPC_STATUS_RUNNING) { if (ServerProgID.Length == 0) { var s = ServerList; if (s.Count > 0) { TheSrv.Connect(s[0]); } } else { TheSrv.Connect(ServerProgID[0]); } } } return(true); } catch (Exception) { TheSrv.Disconnect(); throw; } }
public bool Start() { try { bool bRet = InitOPCService(); if (!bRet) { return(false); } if (null == opcSerNodes || null == allOPCItemNodes) { NLogHelper.DefalutError("OPCBUSService.Start error,未配置opc服务"); return(false); } opcSer.Connect(host, guid); syncIOGroup = new SyncIOGroup(opcSer); refreshEventHandler = new RefreshEventHandler(RefreshEvent); refreshGroup = new RefreshGroup(opcSer, 10, refreshEventHandler); foreach (DriveNodeEntity item in allOPCItemNodes) { int iRet = refreshGroup.Add(item.nodeName); if (HRESULTS.Succeeded(iRet)) { Console.WriteLine(" true " + iRet); } } return(true); } catch (Exception ex) { NLogHelper.ExceptionInfo(ex, "Start StartOPCService exception: {0}", ex.Message); return(false); } }
// connect to OPC server via ProgID public bool DoConnect(string progid) { try { theSrv.Connect(progid); Thread.Sleep(100); theSrv.SetClientName("DirectOPC " + thisprocess.Id); // set my client name (exe+process no) SERVERSTATUS sts; theSrv.GetStatus(out sts); // get infos about OPC server StringBuilder sb = new StringBuilder(sts.szVendorInfo, 200); sb.AppendFormat(" ver:{0}.{1}.{2}", sts.wMajorVersion, sts.wMinorVersion, sts.wBuildNumber); txtServerInfo.Text = sb.ToString(); // set status bar text to show server state sbpTimeStart.Text = DateTime.FromFileTime(sts.ftStartTime).ToString(); sbpStatus.Text = sts.eServerState.ToString(); } catch (COMException) { MessageBox.Show(this, "connect error!", "Exception", MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } return(true); }
/// <summary> /// Connects to the server and browses for top level nodes. /// </summary> private void Connect(TreeNode node) { try { if (!IsServerNode(node)) { return; } // get the server for the current node. OpcServer server = (OpcServer)node.Tag; // connect to server if not already connected. if (!server.IsConnected) { server.Connect(FindConnectData(node)); } // browse for top level elements. Browse(node); } catch (Exception e) { MessageBox.Show(e.Message); } }
static void Main(string[] args) { string progID = args.Length > 0 ? args[0] : "Kepware.KEPServerEX.V5"; string itemID = args.Length > 1 ? args[1] : "Simulation Examples.Functions.Ramp1"; OpcServer opcServer = new OpcServer(); opcServer.Connect(progID); System.Threading.Thread.Sleep(500); // we are faster than some servers! OpcProperty[] props = opcServer.QueryAvailableProperties(itemID); int[] propIDs = new int[props.Length]; for (int i = 0; i < props.Length; i++) { propIDs[i] = props[i].PropertyID; } OpcPropertyData[] data = opcServer.GetItemProperties(itemID, propIDs); for (int i = 0; i < props.Length; i++) { Console.Write(" {0}: '{1}' ({2}) = ", props[i].PropertyID, props[i].Description, Extensions.VarEnumToString(props[i].DataType)); if (data[i].Error == HRESULTS.S_OK) { Console.WriteLine(data[i].Data); } else { Console.WriteLine("!ERROR:{0}", data[i].Error); } } opcServer.Disconnect(); }
private OpcServerConnectResult DoConnect(string progid) { OpcServerConnectResult result = new OpcServerConnectResult { IsSuccess = false }; try { _theSrv.Connect(progid); Thread.Sleep(100); _theSrv.SetClientName("DirectOPC " + Process.GetCurrentProcess().Id); // set my client name (exe+process no) SERVERSTATUS sts; _theSrv.GetStatus(out sts); // get infos about OPC server StringBuilder sb = new StringBuilder(sts.szVendorInfo, 200); sb.AppendFormat(" ver:{0}.{1}.{2}", sts.wMajorVersion, sts.wMinorVersion, sts.wBuildNumber); result.ServerInfo = sb.ToString(); // set status to show server state result.SbpTimeStart = DateTime.FromFileTime(sts.ftStartTime); result.SbpStatus = sts.eServerState.ToString(); result.IsSuccess = true; return(result); } catch (COMException ex) { result.ErrorText = ex.Message; return(result); } }
static void Main(string[] args) { string progID = args.Length > 0 ? args[0] : "Kepware.KEPServerEX.V5"; OpcServer opcServer = new OpcServer(); opcServer.Connect(progID); System.Threading.Thread.Sleep(500); // we are faster than some servers! SERVERSTATUS serverStatus = opcServer.GetStatus(); Console.WriteLine("'{0}' vendor '{1}' version {2}.{3}.{4}", progID, serverStatus.szVendorInfo, serverStatus.wMajorVersion, serverStatus.wMinorVersion, serverStatus.wBuildNumber); Console.WriteLine("State : {0}", serverStatus.eServerState); Console.WriteLine("Start time : {0}", DateTime.FromFileTime(serverStatus.ftStartTime)); Console.WriteLine("Last update : {0}", DateTime.FromFileTime(serverStatus.ftLastUpdateTime)); Console.WriteLine("Current time: {0}", DateTime.FromFileTime(serverStatus.ftCurrentTime)); // Bandwith and group count valid only for this connection Console.WriteLine("Bandwidth : {0}", serverStatus.dwBandWidth); Console.WriteLine("Group count : {0}", serverStatus.dwGroupCount); opcServer.GetLocaleID(out int lcid); Console.WriteLine("Locale ID: {0}", lcid); opcServer.Disconnect(); }
public static int GetOpcServerAllItem(string opcSerHostIp, Guid opcSerGuid, out List <DriveNodeEntity> driveNotes) { int rtc = -1; driveNotes = null; try { OpcServer opcSer = new OpcServer(); rtc = opcSer.Connect(new Host(opcSerHostIp), opcSerGuid); if (!HRESULTS.Succeeded(rtc)) { return(rtc); } //获取组 if (GetOPCServerStatus(opcSer, out rtc)) { return(GetOpcServerAllItem(opcSer, out driveNotes)); } } catch (Exception err) { NLogHelper.ExceptionInfo(err, "GetDriveNodes error :{0}", err.Message); } return(rtc); }
static void Main(string[] args) { string progID = args.Length > 0 ? args[0] : "HWHsc.OPCServer"; string itemID = args.Length > 1 ? args[1] : "/ASSETS.Guid"; string propID = args.Length > 2 ? args[2] : "2"; OpcServer opcServer = new OpcServer(); opcServer.Connect(progID); System.Threading.Thread.Sleep(1000); // we are faster than some servers! OpcProperty[] props = opcServer.QueryAvailableProperties(itemID); for (int i = 0; i < props.Length; i++) { Console.WriteLine($"{props[i].PropertyID} - {props[i].Description}"); } OpcPropertyData[] data = opcServer.GetItemProperties(itemID, new int[] { int.Parse(propID) }); for (int i = 0; i < data.Length; i++) { if (data[i].Error == HRESULTS.S_OK) { Console.WriteLine(data[i].Data); } else { Console.WriteLine("!ERROR:{0}", data[i].Error); } } opcServer.Disconnect(); }
public CamOpcServer() { camOPCServer = new OpcServer(); if (camOPCServer.isConnectedDA == false) { rtc = camOPCServer.Connect("localhost", "CameraOPCSvr"); } }
public void TestConnect03() { //testing -- valid flow OpcServer opcServer = new OpcServer(); Accessor opcServerAccessor = ReflectionAccessor.Wrap(opcServer); //Test Procedure Call opcServer.Connect("TransactiveDataSource"); //Post Condition Check }
/*******************************************************************/ /// <summary> /// 合流机械手 /// </summary> /// <param name="MachineNo"></param> /// <returns></returns> public string GetUnionMachine(int MachineNo) { try { OpcServer.Connect(); } catch (Exception ex) { return("与电控连接失败,请检查网络"); } decimal[] sortnumAndXYnum = new decimal[4]; sortnumAndXYnum[0] = OpcServer.listUnionTaskGroup[5].ReadD(((MachineNo * 2) - 2)).CastTo <int>(-1); //当前任务号 sortnumAndXYnum[1] = OpcServer.listUnionTaskGroup[4].ReadD(((MachineNo * 2) - 1)).CastTo <int>(-1); //累计总数数量 sortnumAndXYnum[2] = OpcServer.listUnionTaskGroup[5].ReadD(((MachineNo * 2) - 1)).CastTo <int>(-1); //当前吸烟数量 sortnumAndXYnum[3] = OpcServer.listUnionTaskGroup[6].ReadD(MachineNo + 31).CastTo <int>(-1); //当前机械手累计放烟数量 writeLog.Write("\r查询合流:" + MachineNo + "号机械手\r当前任务号:" + sortnumAndXYnum[0] + "\r累计抓烟数量:" + sortnumAndXYnum[1] + "\r当前吸烟数量:" + sortnumAndXYnum[2] + "\r当前累计放烟数量:" + sortnumAndXYnum[3]); if (sortnumAndXYnum.Sum() >= 0) { if (sortnumAndXYnum[3] == sortnumAndXYnum[1]) { return("当前机械手无抓烟数据"); } else { //List<FollowTaskDeail> list = FolloTaskService.GetUnionMachineInfo(123903, 3, 5, 10); List <FollowTaskDeail> list = FolloTaskService.GetUnionMachineInfo(sortnumAndXYnum[0], GetMainBeltNo(MachineNo), GetGroupNo(MachineNo), sortnumAndXYnum[1], sortnumAndXYnum[2]); if (list != null && list.Count > 0) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List <FollowTaskDeail>)); using (MemoryStream ms = new MemoryStream()) { ser.WriteObject(ms, list.Take(10)); string s = Encoding.UTF8.GetString(ms.ToArray()); s = s.Replace("\\", ""); writeLog.Write("\r查询合流:" + MachineNo + "号机械手\r"); return(s); } } else { writeLog.Write("GetUnionMachine(" + MachineNo + ")查询结果集为空"); return("当前机械手无抓烟数据,请重新查询!"); } } } else { writeLog.Write("GetUnionMachine(" + MachineNo + ")读取DB块数据异常"); return("从电控获取数据失败,请重新查询!"); } }
public string GetMainBeltInfo(int mainBelt) { try { OpcServer.Connect(); } catch (Exception ex) { return("远程连接失败,请检查网络"); } List <MainBeltInfo> ListmbInfo = new List <MainBeltInfo>(); int ReadIndex = 0; double[] nowplace = new double[40]; List <decimal> SortNumList = new List <decimal>(); List <decimal> QuantityList = new List <decimal>(); for (int i = (mainBelt - 1) * 8; i < mainBelt * 8; i++) { SortNumList.Add(OpcServer.MachineGroup.ReadD(i).CastTo <decimal>(0)); //任务号 QuantityList.Add(OpcServer.MachineGroup.ReadD(32 + i).CastTo <decimal>(0)); //任务号 } for (int i = 0; i < 40; i++) //从电控读取数据 填充 listmbinfo { decimal Sortnum = OpcServer.listUnionTaskGroup[mainBelt - 1].ReadD(ReadIndex).CastTo <decimal>(0); //任务号 if (Sortnum > 0)//任务号不为0 { MainBeltInfo info = new MainBeltInfo(); //info.Place = (listMainBelt[mainbelt - 1].ReadD((ReadIndex + 1)).CastTo<int>(-1) / 1000);//位置(米) info.SortNum = Sortnum; //任务号 info.Place = Convert.ToDecimal((OpcServer.listUnionTaskGroup[mainBelt - 1].ReadD((ReadIndex + 1)).CastTo <double>(-1) / 1000)); //(listMainBelt[mainbelt - 1].ReadD((ReadIndex + 1)).CastTo<int>(-1) / 1000000);//位置(米) info.Quantity = Convert.ToDecimal(OpcServer.listUnionTaskGroup[mainBelt - 1].ReadD((ReadIndex + 2)).CastTo <int>(-1)); //数量 info.mainbelt = mainBelt.ToString(); //主皮带 info.SortNumList = SortNumList; info.QuantityList = QuantityList; ListmbInfo.Add(info); } ReadIndex = ReadIndex + 3; } MainBeltInfoService.GetMainBeltInfo(ListmbInfo); //填充完成之后传进方法 计算 , ListmbInfo = ListmbInfo.OrderBy(x => x.Place).ToList(); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List <MainBeltInfo>)); using (MemoryStream ms = new MemoryStream()) { ser.WriteObject(ms, ListmbInfo); return(Encoding.UTF8.GetString(ms.ToArray())); } }
static void Main(string[] args) { try { OpcServer server = new OpcServer(); server.Connect(serverName); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); }
public DCO(string pamater) { this.ItemPoints = new List <IDataPoint>(); thread = new System.Threading.Thread(new System.Threading.ThreadStart(Monitor)); ILE.LEResult res = new LEResult(); //用这个数据点的配置,启动OPC连接,正因如此,此处注意,无法支持一台设备存在两个OPC_server地址 string[] pmts = pamater.Split(','); strMachine = pmts[0]; //服务PC的IP地址 string strServerName = pmts[1]; //服务名 string strPointName = pmts[2]; //数据点地址名 OpcServerBrowser myBrowser = new OpcServerBrowser(strMachine); try { myBrowser.CLSIDFromProgID(strServerName, out SrvGuid); //获取OPC服务组件的注册ID,获取不到会直接报错 } catch { res.ExtMessage = "服务不存在或无法访问!"; res.Result = false; //return res; throw new Exception("服务不存在或无法访问"); } Host host = new Host(strMachine); server = new OpcServer(); host.Domain = strMachine.ToUpper(); host.HostName = strMachine; host.UserName = ""; host.Password = ""; int rtc = server.Connect(strMachine, SrvGuid); try { HRESULTS.Succeeded(rtc); //this.label1.Text = "连接成功!"; //守护线程 } catch (Exception exc) { res.Result = false; res.ExtMessage = exc.Message; this.server.Disconnect(); this.server = null; throw new Exception("服务连接失败"); } }
static void Main(string[] args) { string progID = args.Length > 0 ? args[0] : "Kepware.KEPServerEX.V5"; OpcServer opcServer = new OpcServer(); opcServer.Connect(progID); System.Threading.Thread.Sleep(500); // we are faster than some servers! foreach (string item in opcServer.BrowseItemIDs(OPCBROWSETYPE.OPC_FLAT)) { Console.WriteLine(item); } opcServer.Disconnect(); }
// public OpcServer opcServer { get; set; } public static bool IsOpcServerConnectionAvailable() { if (opcServer == null) { opcServer = new OpcServer(); } int rtc = 0; SERVERSTATUS objSERVERSTATUS = new SERVERSTATUS(); bool isConnected = false; bool isServerRunning = true; try { isConnected = opcServer.isConnectedDA; if (isConnected) { opcServer.GetStatus(out objSERVERSTATUS); isServerRunning = objSERVERSTATUS.eServerState == OpcServerState.Running; } if (!isConnected || !isServerRunning) { opcMachineHost = GlobalValues.OPC_MACHINE_HOST; opcServerName = GlobalValues.OPC_SERVER_NAME; rtc = opcServer.Connect(opcMachineHost, opcServerName); } } catch (Exception errMsg) { Console.WriteLine("" + errMsg); } finally { } return(opcServer.isConnectedDA); }
private void cmdConnect_Click(object sender, EventArgs e) { try { theServer = new OpcServer(); theServer.Connect(ServerProgID); cmdConnect.Enabled = false; cmdDisconnect.Enabled = true; cmdAddGroup.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Connect/Disconnect to the server. /// </summary> /// <returns></returns> private bool Connect() { // Connect server var url = new Opc.URL(OpcConnectionString); // Create an unconnected server object. OpcServer = GetServerForUrl(url); if (OpcServer == null) { return(false); } // Invoke the connect server callback. try { var connectData = new Opc.ConnectData(Credential, null); OpcServer.Connect(connectData); var opcDaSrerver = OpcServer as Opc.Da.Server; if (opcDaSrerver == null) { return(false); } VendorInfo = opcDaSrerver.GetStatus().VendorInfo; VersionInfo = opcDaSrerver.GetStatus().ProductVersion; StatusInfo = opcDaSrerver.GetStatus().StatusInfo; var state = new Opc.Da.SubscriptionState { ClientHandle = Guid.NewGuid().ToString(), ServerHandle = null, //Name = "DEFAULT", Active = false, UpdateRate = 1000, KeepAlive = 0, //Deadband = 0, //Locale = null }; Subscription = (Subscription)opcDaSrerver.CreateSubscription(state); } catch (Exception e) { throw e; } return(true); }
public bool connectServer() { try { theSrv = new OpcServer(); theSrv.Connect(ServerProgID); TheGrp = theSrv.AddGroup("S7_200_01", false, 900); TheGrp.SetEnable(true); TheGrp.Active = true; return(true); } catch (Exception e) { System.Windows.Forms.MessageBox.Show("连接服务器出错:" + e.ToString()); return(false); } }
//public static OpcServer GetOPCServerConnection() //{ // if (opcServer == null) opcServer = new OpcServer(); // int rtc = 0; // SERVERSTATUS objSERVERSTATUS = new SERVERSTATUS(); // bool isConnected = false; // bool isServerRunning = true; // lock (opcConLock) // { // //do // //{ // try // { // isConnected = opcServer.isConnectedDA; // if (isConnected) // { // opcServer.GetStatus(out objSERVERSTATUS); // isServerRunning = objSERVERSTATUS.eServerState == OpcServerState.Running; // } // if (!isConnected || !isServerRunning) // { // Connection dbpm = new Connection(); // //opcMachineHost = GlobalValues.OPC_MACHINE_HOST; // //opcServerName = GlobalValues.OPC_SERVER_NAME; // //opcMachineHost = dbpm.GetConfigValue("HostServer", "", "Name"); // //opcServerName = dbpm.GetConfigValue("OpcServerName", "", "Name"); // opcMachineHost = ConfigurationManager.AppSettings["OPCSHostMachine"]; // opcServerName = ConfigurationManager.AppSettings["OPCServer"]; // //opcMachineHost = "NISAR"; // //opcServerName = "Matrikon.OPC.Simulation.1"; // rtc = opcServer.Connect(opcMachineHost, opcServerName); // //if (!isServerRunning && IsOPCServerIsRunning()) // // new InitializeEngine().AsynchReadSettings(); // } // } // catch (Exception errMsg) // { // Console.WriteLine("" + errMsg.Message); // } // finally { } // //} while (opcServer.isConnectedDA == false); // } // return opcServer; //} //static bool IsOPCServerIsRunning() //{ // bool isRunning = false; // SERVERSTATUS objSERVERSTATUS = new SERVERSTATUS(); // opcServer.GetStatus(out objSERVERSTATUS); // isRunning = objSERVERSTATUS.eServerState == OpcServerState.Running; // return isRunning; //} //public static T ReadTag<T>(string command) //{ // StartOPcServerIfStopped(); // T result = default(T); // ItemProperties[] item = null; // //get value of command. // item = opcServer.GetProperties(new string[1] { command }, true, new int[] { 2 }); // bool bOk = false; // bOk = item != null && item.Length > 0; // bOk &= bOk && // item[0].Properties != null && item[0].Properties.Length > 0; // if (item[0].Properties == null) return result; // Property property = item[0].Properties[0]; // if (property.Value != null) // result = (T)property.Value; // return result; //} //public static void ReIssueCommand(string command) //{ // StartOPcServerIfStopped(); // SrvAccess.Request(new OpcRequest(Command.Write, command, (object)true)); //} static void StartOPcServerIfStopped() { int rtc = 0; if (opcServer == null) { opcServer = new OpcServer(); } if (SrvAccess == null) { SrvAccess = new OpcThread(opcServer); } if (opcServer.isConnectedDA == false) { rtc = opcServer.Connect("HPIServer", "Intellution.IntellutionGatewayOPCServer"); } }
/// <summary> /// This function connects to the OPC Server, provided to it /// </summary> private void ConnectToServer() { try { // Creating new instance of OPC server OpcSrver = new OpcServer(); // Try to connect with the OPC server int rtc = OpcSrver.Connect("Rockwell-PC", OpcServerName); // Check if connection is failed then throw exception. if (HRESULTS.Failed(rtc)) { throw new OPCException(rtc); } } catch (Exception ex) { // Exception occure so, set OPC server object to null. OpcSrver = null; // hf.LogException("ConnectionToServer: " + ex.ToString()); } }
void StartOPcServerIfStopped() { int rtc = 0; if (opcServer == null) { // rptEngine.Notification("FROM GUI : TRY TO RECONNECT OPC SERVER 1"); opcServer = new OpcServer(); } if (SrvAccess == null) { // rptEngine.Notification("FROM GUI : TRY TO RECONNECT OPC SERVER 2"); SrvAccess = new OpcThread(opcServer); } if (opcServer.isConnectedDA == false) { rtc = opcServer.Connect("HPIServer", "Intellution.IntellutionGatewayOPCServer"); } }
private PLCCommand() { try { _opcSrv.Connect(StrSrvName); for (int i = 0; i < _arrGrps.Length; i++) { string strGrp = _arrGrps[i]; OpcGroup grp = _opcSrv.AddGroup(strGrp, true, 9600); grp.UpdateRate = 100; grp.Active = true; grp.PercentDeadband = 0; _opcGrpsDic.Add(strGrp, grp); string[] arrCurrentItems = _arrItems[i].Split(','); OPCItemDef[] opcItems = new OPCItemDef[arrCurrentItems.Length]; OPCItemResult[] opcResults = new OPCItemResult[arrCurrentItems.Length]; for (int j = 0; j < arrCurrentItems.Length; j++) { string strItemName = $"{StrItemId}.{strGrp}.{arrCurrentItems[j]}"; OPCItemDef item = new OPCItemDef(strItemName, true, opcResults.Length, System.Runtime.InteropServices.VarEnum.VT_BOOL); opcItems[j] = item; } Dictionary <string, OPCItemResult> oDic = new Dictionary <string, OPCItemResult>(); grp.AddItems(opcItems, out opcResults); for (int k = 0; k < opcResults.Length; k++) { oDic.Add(arrCurrentItems[k], opcResults[k]); } _opcResultsDic.Add(strGrp, oDic); } } catch (Exception ee) { LogImpl.Debug("错误" + ee.ToString()); } }
public string conectar() { //variável auxiliar que será retornada string aux = ""; Boolean erro = false; //conexão com o Servidor OPC; Srv = new OpcServer(); int rtc = Srv.Connect("HITecnologia.SOS.DA.1"); int localeID = Srv.GetLocaleID(out localeID); if (HRESULTS.Failed(rtc)) { aux = "Erro na conexão: "; erro = true; } else { aux = "Conectado com Sucesso. LocaleId=" + localeID; } if (!erro) { srwGroup = new SyncIOGroup(Srv); OPCItemState resultadoLeitura; int auxRtc; auxRtc = srwGroup.Read(OPCDATASOURCE.OPC_DS_DEVICE, "Server_2.Driver_1000.DEV255.state", out resultadoLeitura); if (HRESULTS.Failed(auxRtc)) { aux = "Erro na Leitura: " + resultado(auxRtc); } else { aux = resultadoLeitura.DataValue.ToString(); } } return(aux); }
/// <summary> /// Connect to opc server /// </summary> /// <param name="serverName"></param> /// <param name="requestedUpdateRate">In case of use of LinkMaster and Kepserver simulation, this value should match the LinkMaster value</param> /// <returns></returns> public bool Connect(string serverName, int requestedUpdateRate = 250) { srv = new OpcServer(); int rtc = srv.Connect(serverName); if (HRESULTS.Failed(rtc)) { srv.GetErrorString(rtc, 0);//MBR added 0 return Srv.GetErrorString( rtc); return(false); } float deadBand = 0.0F; //Get data start try { OPCGetData.OPCReadGroup = srv.AddGroup("Group1GetData", true, requestedUpdateRate, ref deadBand, 0, 0); } catch (Exception) { srv.Disconnect(); return(false); //return ex.Message; } //Get data end //Set data start try { OPCSetData.OPCWriteGroup = srv.AddGroup("Group1SetData", true, requestedUpdateRate, ref deadBand, 0, 0); } catch (Exception) { srv.Disconnect(); return(false);//return ex.Message; } return(true); //ok }
public static bool StartOPCServer(out string errorMessage) { int rtc = 0; errorMessage = ""; try { opcServer = new OpcServer(); //opcMachineHost = ConfigurationManager.AppSettings["OPCSHostMachine"]; //opcServerName = ConfigurationManager.AppSettings["OPCServer"]; Connection dbpm = new Connection(); //for main l2 server //opcMachineHost = dbpm.GetConfigValue("HostServer", "", "Name"); //opcServerName = dbpm.GetConfigValue("OpcServerName", "", "Name"); //opcMachineHost = "NISAR"; //opcServerName = "Matrikon.OPC.Simulation.1"; //for working machine opcMachineHost = ConfigurationManager.AppSettings["OPCSHostMachine"]; opcServerName = ConfigurationManager.AppSettings["OPCServer"]; if (opcServer.isConnectedDA == false) { rtc = opcServer.Connect(opcMachineHost, opcServerName); } SrvAccess = new OpcThread(opcServer); } catch (Exception errMsg) { errorMessage = errMsg.Message; throw errMsg; } return(HRESULTS.Succeeded(rtc)); }
private PLCCommand2() { try { opcSrv.Connect(strSrvName); for (int i = 0; i < arrGrps.Length; i++) { string strGrp = arrGrps[i]; OpcGroup grp = opcSrv.AddGroup(strGrp, true, 9600); opcGrpsDic.Add(strGrp, grp); string[] arrCurrentItems = arrItems[i].Split(','); OPCItemDef[] opcItems = new OPCItemDef[arrCurrentItems.Length]; OPCItemResult[] opcResults = new OPCItemResult[arrCurrentItems.Length]; for (int j = 0; j < arrCurrentItems.Length; j++) { string strItemName = string.Format("{0}.{1}.{2}", strItemID, strGrp, arrCurrentItems[j]); OPCItemDef item = new OPCItemDef(strItemName, true, opcResults.Length, System.Runtime.InteropServices.VarEnum.VT_BOOL); opcItems[j] = item; } Dictionary <string, OPCItemResult> oDic = new Dictionary <string, OPCItemResult>(); grp.AddItems(opcItems, out opcResults); for (int k = 0; k < opcResults.Length; k++) { oDic.Add(arrCurrentItems[k], opcResults[k]); } opcResultsDic.Add(strGrp, oDic); } } catch (Exception ee) { LogImpl.Error("plc初始化:" + ee.StackTrace); } }
public void Work() { /* try // disabled for debugging * { */ theSrv = new OpcServer(); theSrv.Connect(serverProgID); Thread.Sleep(500); // we are faster then some servers! // add our only working group theGrp = theSrv.AddGroup("OPCCSharp-Group", false, 900); // add two items and save server handles itemDefs[0] = new OPCItemDef(itemA, true, 1234, VarEnum.VT_EMPTY); itemDefs[1] = new OPCItemDef(itemB, true, 5678, VarEnum.VT_EMPTY); OPCItemResult[] rItm; theGrp.AddItems(itemDefs, out rItm); if (rItm == null) { return; } if (HRESULTS.Failed(rItm[0].Error) || HRESULTS.Failed(rItm[1].Error)) { Console.WriteLine("OPC Tester: AddItems - some failed"); theGrp.Remove(true); theSrv.Disconnect(); return; } ; handlesSrv[0] = rItm[0].HandleServer; handlesSrv[1] = rItm[1].HandleServer; // asynch read our two items theGrp.SetEnable(true); theGrp.Active = true; theGrp.DataChanged += new DataChangeEventHandler(this.theGrp_DataChange); theGrp.ReadCompleted += new ReadCompleteEventHandler(this.theGrp_ReadComplete); int CancelID; int[] aE; theGrp.Read(handlesSrv, 55667788, out CancelID, out aE); // some delay for asynch read-complete callback (simplification) Thread.Sleep(500); // asynch write object[] itemValues = new object[2]; itemValues[0] = (int)1111111; itemValues[1] = (double)2222.2222; theGrp.WriteCompleted += new WriteCompleteEventHandler(this.theGrp_WriteComplete); theGrp.Write(handlesSrv, itemValues, 99887766, out CancelID, out aE); // some delay for asynch write-complete callback (simplification) Thread.Sleep(500); // disconnect and close Console.WriteLine("************************************** hit to close..."); Console.ReadLine(); theGrp.DataChanged -= new DataChangeEventHandler(this.theGrp_DataChange); theGrp.ReadCompleted -= new ReadCompleteEventHandler(this.theGrp_ReadComplete); theGrp.WriteCompleted -= new WriteCompleteEventHandler(this.theGrp_WriteComplete); theGrp.RemoveItems(handlesSrv, out aE); theGrp.Remove(false); theSrv.Disconnect(); theGrp = null; theSrv = null; /* } * catch( Exception e ) * { * Console.WriteLine( "EXCEPTION : OPC Tester " + e.ToString() ); * return; * } */ }
static void Main(string[] args) { /*create array of readable Tags*/ var Tags = new List <OPCClientItem>(); Tags.Add(new OPCClientItem() { Name = ".test", ClientHanle = 1 }); OpcServer server = new OpcServer(); try { int transactionID = new Random().Next(1024, 65535); int cancelID = 0; int updateRate = 1000; /*connect to the OPC Server and check it's state*/ server.Connect("Matrikon.OPC.Simulation.1"); var serverStatus = new SERVERSTATUS(); server.GetStatus(out serverStatus); if (serverStatus.eServerState == OPCSERVERSTATE.OPC_STATUS_RUNNING) { /*create group of items*/ OpcGroup group = server.AddGroup("Group1", true, updateRate); group.ReadCompleted += group_ReadCompleted; List <OPCItemDef> items = new List <OPCItemDef>(); Tags.ToList() .ForEach(x => items.Add(new OPCItemDef(x.Name, true, x.ClientHanle, VarEnum.VT_EMPTY))); /* add items and collect their attributes*/ OPCItemResult[] itemAddResults = null; group.AddItems(items.ToArray(), out itemAddResults); for (int i = 0; i < itemAddResults.Length; i++) { OPCItemResult itemResult = itemAddResults[i]; OPCClientItem tag = Tags[i]; tag.ServerHandle = itemResult.HandleServer; tag.AccessRight = (itemResult.AccessRights == OPCACCESSRIGHTS.OPC_READABLE) ? OPCClientItem.EAccessRight.ReadOnly : OPCClientItem.EAccessRight.ReadAndWrite; } ; /*Refresh items in group*/ // group.Refresh2(OPCDATASOURCE.OPC_DS_DEVICE, transactionID, out cancelID); /*Async read data for the group items*/ int[] serverHandles = new int[Tags.Count]; for (int i = 0; i < Tags.Count; i++) { serverHandles[i] = Tags[i].ServerHandle; } ; OPCItemState[] itemsStateResult = null; /*sync read*/ group.Read(OPCDATASOURCE.OPC_DS_DEVICE, serverHandles, out itemsStateResult); Console.WriteLine("Sync read:"); for (int i = 0; i < itemsStateResult.Length; i++) { OPCItemState itemResult = itemsStateResult[i]; Console.WriteLine(" -> item:{0}; value:{1}; timestamp{2}; qualituy:{3}", Tags[i].Name, itemResult.DataValue.ToString(), itemResult.TimeStamp, itemResult.Quality); } ; /*sync write*/ object[] values = new object[Tags.Count]; int[] resultErrors = new int[Tags.Count]; values[0] = (object)256; group.Write(serverHandles, values, out resultErrors); /*async read*/ group.Read(serverHandles, transactionID, out cancelID, out resultErrors); /*wait for a while befor remove group to process async event*/ System.Threading.Thread.Sleep(3000); /*the group must be removed !!! */ group.Remove(true); } ; } finally { server.Disconnect(); server = null; GC.Collect(); }; Console.ReadKey(); }