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(); }
//[MethodImplAttribute(MethodImplOptions.Synchronized)]//Синхронизировать метод private void Disconnect() { lock (lockConn) { DateTime dt1 = DateTime.Now; _cntconn--; if (_cntconn < 0) { _cntconn = 0; } //Отключить если подключено и SERVERSTATUS status; if (_opcsrv != null) { _opcsrv.GetStatus(out status); if (status != null && status.eServerState == OPCSERVERSTATE.OPC_STATUS_RUNNING && _cntconn == 0 && !_keepalive) { _opcsrv.Disconnect(); } } //Проверим нет должно ли остаться открытым соединение if (_cntconn == 0 && _keepalive) { _cntconn++; } _server.LogWrite(LogType.DEBUG, "[" + this._name + "] : Disconnect - Активных соединений: " + _cntconn); } }
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(); }
/// <summary> /// Disconnects from the server and clear all children. /// </summary> private void Disconnect(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.Disconnect(); } node.Nodes.Clear(); } catch (Exception e) { MessageBox.Show(e.Message); } }
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 void dispose() { if (opcServer != null) { opcServer.Disconnect(); opcServer = null; } }
public void Dispose() { //释放 OpcServer opcServer = OpcServers.FirstOrDefault(c => c.PKID == pkid); if (opcServer != null) { opcServer.Disconnect(); } }
private void cmdDisconnect_Click(object sender, EventArgs e) { cmdDisconnect.Enabled = false; cmdAddGroup.Enabled = false; cmdConnect.Enabled = true; if (theServer != null) { int[] aE = new int[2]; try { theServer.Disconnect(); } catch (Exception ex) { MessageBox.Show(ex.Message); } theServer = null; } }
/// <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 void disconnectServer() { try { if (theSrv != null) { theSrv.Disconnect(); } } catch (Exception e) { System.Windows.Forms.MessageBox.Show("断开服务器连接出错:" + e.ToString()); } }
public void TestErr_Disconnect01() { //testing -- valid flow OpcServer opcServer = new OpcServer(); Accessor opcServerAccessor = ReflectionAccessor.Wrap(opcServer); opcServerAccessor.SetField("ifServer", new OPCServerComClass()); opcServerAccessor.SetField("shutdowncpoint", new SampleConnectionPoint()); opcServerAccessor.SetField("shutdowncookie", 1); opcServerAccessor.SetField("OPCserverObj", opcServerAccessor.GetField("ifServer")); //Test Procedure Call opcServer.Disconnect(); //Post Condition Check }
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(); }
/// <summary> /// Disconnect server /// </summary> private void Disconnect() { if (OpcServer == null) { return; } try { OpcServer.Disconnect(); } catch {} OpcServer.Dispose(); OpcServer = null; }
private void Form1_FormClosed(object sender, FormClosedEventArgs e) { //theGrp.RemoveItems(handlesSrv, out aE); if (theGrp != null) { theGrp.Remove(false); theTargGrp.Remove(false); theSrv.Disconnect(); theGrp = null; theTargGrp = null; theSrv = null; } stopReceive = true; connect.Abort(); Process.GetCurrentProcess().Kill(); }
//--------------------------------------------------------------- // Queue OPC server access request public void Stop() { if (SioGrp == null) { return; } // terminate the server access thread StopThread = new ManualResetEvent(false); StopThread.WaitOne(5000, true); StopThread.Close(); StopThread = null; SioGrp.Dispose(); SioGrp = null; OpcSrv.Disconnect(); }
/// <summary> /// Recursively searches the tree and free objects. /// </summary> private void Clear(TreeNode parent) { // search children. foreach (TreeNode child in parent.Nodes) { Clear(child); } // disconnect servers. if (IsServerNode(parent)) { OpcServer server = (OpcServer)parent.Tag; if (server.IsConnected) { server.Disconnect(); } } }
public void Disconnect() { List <int> l_ServerHandleList = _serverModel.GetServerHandleList(); if (l_ServerHandleList.Count > 0) { try { int[] l_RemoveRes; _group.RemoveItems(l_ServerHandleList.ToArray(), out l_RemoveRes); } catch (Exception) { } } if (_group != null) { _group.DataChanged -= new DataChangeEventHandler(Group_DataChange); try { _group.Remove(true); } catch (Exception) { } } if (_server != null) { _server.ShutdownRequested -= new ShutdownRequestEventHandler(Server_ShutdownRequest); try { _server.Disconnect(); } catch (Exception) { } } }
private void bwLer_DoWork(object sender, DoWorkEventArgs e) { //Esse loop fica em verdadeiro (rodando sempre) quando clico no botão de leitura: while (lerTag) { //Esse método abaixo faz a leitura OPC de todos os tags que eu tiver cadastrado rtc = oGrp.Read(OPCDA.OPCDATASOURCE.OPC_DS_CACHE, iHnd, out rslt); for (int i = 0; i < tags.Count; i++) { //Isso aqui é só um tratamento para ver se não veio dado vazio, se vier, escrever erro na tela: if (rslt[i].DataValue == null) { //Condição de erro de leitura this.Invoke(new MethodInvoker(delegate { })); } else { //Se estiver OK o valor, escreve seu valor lido na tela: this.Invoke(new MethodInvoker(delegate { lv_tagList.Items[i].SubItems[1].Text = rslt[i].DataValue.ToString(); itensValor[i] = rslt[i].DataValue.ToString(); string nomeTag = tags[i].Substring(shortcut.Length); insertDb(buscaTagId(nomeTag), rslt[i].DataValue.ToString()); })); } System.Threading.Thread.Sleep(tempoScan); } } //Esse método abaixo faz a desconexão com o OPC Server. srv.Disconnect(); }
//public void initializeSynchIfOPCStopped() //{ // if (!isServerRunning) //once igs server stopped, then all listener will stop working // new InitializeEngine().AsynchReadSettings(); //} //public static bool IsCamOpcServerConnectionAvailable() //{ // if (camOPCServer == null) // camOPCServer = new OpcServer(); // int rtc = 0; // try // { // if (camOPCServer.isConnectedDA == false) // { // camOPCMachineHost = GlobalValues.CAM_HOST_SERVER; // camOPCServerName = GlobalValues.CAM_OPC_SERVER_NAME; // rtc = camOPCServer.Connect(camOPCMachineHost, camOPCServerName); // } // } // catch (Exception errMsg) // { // Console.WriteLine("" + errMsg); // } // finally { } // return camOPCServer.isConnectedDA; //} //public static OpcServer GetCamOPCServerConnection() //{ // int rtc = 0; // try // { // if (camOPCServer == null) // camOPCServer = new OpcServer(); // do // { // try // { // if (camOPCServer.isConnectedDA == false) // { // camOPCMachineHost = GlobalValues.CAM_HOST_SERVER; // camOPCServerName = GlobalValues.CAM_OPC_SERVER_NAME; // rtc = camOPCServer.Connect(camOPCMachineHost, camOPCServerName); // } // } // catch (Exception errMsg) // { // } // finally { } // } while (camOPCServer.isConnectedDA == false); // } // catch (Exception errMsg) // { // } // finally { } // return camOPCServer; //} public static void StopOPCServer() { try { lock (lockOpcServer) { if (opcServer != null && opcServer.isConnectedDA) { opcServer.Disconnect(); } } //lock (lockCamOpcServer) //{ // if (camOPCServer != null) // { // if (camOPCServer.isConnectedDA) camOPCServer.Disconnect(); // } //} } finally { } }
public void Close() { if (!OpcConnected) { return; } if (_theGrp != null) { _theGrp.DataChanged -= new DataChangeEventHandler(this.theGrp_DataChange); _theGrp.WriteCompleted -= new WriteCompleteEventHandler(this.theGrp_WriteComplete); RemoveItem(); _theGrp.Remove(false); _theGrp = null; } if (_theSrv != null) { _theSrv.Disconnect(); // should clean up _theSrv = null; } OpcConnected = false; }
private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (!opc_connected) { return; } if (theGrp != null) { theGrp.DataChanged -= new DataChangeEventHandler(this.theGrp_DataChange); theGrp.WriteCompleted -= new WriteCompleteEventHandler(this.theGrp_WriteComplete); RemoveItem(); theGrp.Remove(false); theGrp = null; } if (theSrv != null) { theSrv.Disconnect(); // should clean up theSrv = null; } opc_connected = false; }
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! OpcGroup opcGroup = opcServer.AddGroup("SampleGroup", false, 900); List <string> itemNames = new List <string>(); if (args.Length > 1) { for (int i = 1; i < args.Length; i++) { itemNames.Add(args[i]); } } else { itemNames.Add("Simulation Examples.Functions.Ramp1"); itemNames.Add("Simulation Examples.Functions.Random1"); } OpcItemDefinition[] opcItemDefs = new OpcItemDefinition[itemNames.Count]; for (int i = 0; i < opcItemDefs.Length; i++) { opcItemDefs[i] = new OpcItemDefinition(itemNames[i], true, i, VarEnum.VT_EMPTY); } opcGroup.AddItems(opcItemDefs, out OpcItemResult[] opcItemResult); if (opcItemResult == null) { Console.WriteLine("Error add items - null value returned"); return; } int[] serverHandles = new int[opcItemResult.Length]; for (int i = 0; i < opcItemResult.Length; i++) { if (HRESULTS.Failed(opcItemResult[i].Error)) { Console.WriteLine("AddItems - failed {0}", itemNames[i]); opcGroup.Remove(true); opcServer.Disconnect(); return; } else { serverHandles[i] = opcItemResult[i].HandleServer; } } opcGroup.SetEnable(true); opcGroup.Active = true; bool result = opcGroup.Read(OPCDATASOURCE.OPC_DS_CACHE, serverHandles, out OpcItemState[] states); foreach (OpcItemState s in states) { if (HRESULTS.Succeeded(s.Error)) { Console.WriteLine(" {0}: {1} (Q:{2} T:{3})", s.HandleClient, s.DataValue, s.Quality, DateTime.FromFileTime(s.TimeStamp)); } else { Console.WriteLine(" {0}: ERROR = 0x{1:x} !", s.HandleClient, s.Error); } } opcGroup.Remove(true); opcServer.Disconnect(); }
public void CloseServer() { OpcSrver.Disconnect(); }
public void Abort() { thread.Abort(); myRefreshGroup.Dispose(); server.Disconnect(); }
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; * } */ }
/// <summary> /// initialize OPC server and group /// </summary> /// <param name="serverName">OPC Server Name</param> /// <param name="groupName">OPC Group name under the OPC server. /// Here groupName is trendViewer Process ID in string</param> /// public void InitializeServer(string serverName, string groupName) { string Function_Name = "InitializeServer"; LogHelper.Trace(CLASS_NAME, Function_Name, "Function_Entered"); lock (m_opcDataDicObj) { try { m_OPCSrvName = serverName; m_OPCGroupName = groupName; //Fix - Remove opcGroup and Disconnect server to avoid GC Fianlizer thread call these methods try { if (m_OPCGroup != null) { m_OPCGroup.Remove(false); m_OPCGroup = null; } if (m_OPCServer != null) { m_OPCServer.Disconnect(); m_OPCServer = null; } } catch (Exception localException) { LogHelper.Error(CLASS_NAME, Function_Name, localException); } m_OPCServer = new OpcServer(); LogHelper.Trace(CLASS_NAME, Function_Name, "Before Connect"); m_OPCServer.Connect(serverName); LogHelper.Trace(CLASS_NAME, Function_Name, "After Connect"); Thread.Sleep(200); m_OPCServer.SetClientName("DirectOPC " + groupName + serverName); // set my client name (exe+process no) SERVERSTATUS sts; m_OPCServer.GetStatus(out sts); LogHelper.Info(CLASS_NAME, Function_Name, serverName + ": " + DateTime.FromFileTime(sts.ftStartTime).ToString()); LogHelper.Info(CLASS_NAME, Function_Name, serverName + ": " + sts.eServerState.ToString()); // add event handler for server shutdown m_OPCServer.ShutdownRequested += new ShutdownRequestEventHandler(this.OPCSrv_ServerShutDown); //Setup opc group m_OPCGroup = m_OPCServer.AddGroup("MFTOPC-Group-" + serverName, true, UPDATEGROUPRATE); m_OPCGroup.DataChanged += new DataChangeEventHandler(this.OPCGrp_DataChange); m_opcSrvConnectFlag = true; } catch (COMException localException) { LogHelper.Error(CLASS_NAME, Function_Name, localException); LogHelper.Info(CLASS_NAME, Function_Name, "Initialize of the OPC Server is not successful"); } catch (Exception localException) { LogHelper.Error(CLASS_NAME, Function_Name, localException); } } LogHelper.Trace(CLASS_NAME, Function_Name, "Function_Exited"); }
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(); }
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, timeref); if (sendtags > tags.Length) { sendtags = tags.Length; } var itemDefs = new OPCItemDef[tags.Length]; for (var i = 0; i < tags.Length; i++) { itemDefs[i] = new OPCItemDef(tags[i], true, i, 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; } ; var handlesSrv = new int[itemDefs.Length]; for (var i = 0; i < itemDefs.Length; i++) { handlesSrv[i] = rItm[i].HandleServer; } currentValues = new Single[itemDefs.Length]; // 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); while (webSend == "yes") { HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; context.Response.AddHeader("Access-Control-Allow-Origin", "*"); byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseStringG); // Get a response stream and write the response to it. response.ContentLength64 = buffer.Length; System.IO.Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); // You must close the output stream. output.Close(); } // disconnect and close Console.WriteLine("************************************** hit <return> to close..."); Console.ReadLine(); theGrp.ReadCompleted -= new ReadCompleteEventHandler(this.theGrp_ReadComplete); 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; * } */ }
// ------------------------------ events ----------------------------- public void theGrp_DataChange(object sender, DataChangeEventArgs e) { foreach (OPCItemState s in e.sts) { if (HRESULTS.Succeeded(s.Error)) { if (consoleOut == "yes") { Console.WriteLine(" ih={0} v={1} q={2} t={3}", s.HandleClient, s.DataValue, s.Quality, s.TimeStamp); } try { currentValues[s.HandleClient] = Convert.ToSingle(s.DataValue) * Single.Parse(ratios[s.HandleClient]) + Single.Parse(offsets[s.HandleClient]); } catch (FormatException fex) { Console.WriteLine("Неверный формат числа. Используй запятую вместо точки. {0} ", fex); File.WriteAllText("error" + DateTime.Now.ToString("HHmmss") + ".txt", "Неверный формат числа. Используй запятую вместо точки." + "\n " + fex.ToString() + "\n " + fex.Message); theSrv.Disconnect(); } } else { Console.WriteLine(" ih={0} ERROR=0x{1:x} !", s.HandleClient, s.Error); } } string responseString = "{"; for (int i = 0; i < currentValues.Length - 1; i++) { string value = ""; if ((isbool[i] == "b" && currentValues[i] == 1) || (isbool[i] == "!b" && currentValues[i] == 0)) { value = "true"; } else if ((isbool[i] == "b" && currentValues[i] == 0) || (isbool[i] == "!b" && currentValues[i] == 1)) { value = "false"; } else { value = currentValues[i].ToString(); } responseString = responseString + "\"tag" + i + "\":\"" + value + "\", "; } string valuelast = ""; int lasti = currentValues.Length - 1; if ((isbool[lasti] == "b" && currentValues[lasti] == 1) || (isbool[lasti] == "!b" && currentValues[lasti] == 0)) { valuelast = "true"; } else if ((isbool[lasti] == "b" && currentValues[lasti] == 0) || (isbool[lasti] == "!b" && currentValues[lasti] == 1)) { valuelast = "false"; } else { valuelast = currentValues[lasti].ToString(); } responseString = responseString + "\"tag" + (lasti) + "\":\"" + valuelast + "\"}"; responseStringG = responseString; byte[] byteArray = new byte[sendtags * 4]; Buffer.BlockCopy(currentValues, 0, byteArray, 0, byteArray.Length); if (udpSend == "yes") { UDPsend(byteArray); } }
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! OpcGroup opcGroup = opcServer.AddGroup("SampleGroup", false, 900); List <string> itemNames = new List <string>(); if (args.Length > 1) { for (int i = 1; i < args.Length; i++) { itemNames.Add(args[i]); } } else { itemNames.Add("Simulation Examples.Functions.Ramp1"); itemNames.Add("Simulation Examples.Functions.Random1"); } OpcItemDefinition[] opcItemDefs = new OpcItemDefinition[itemNames.Count]; for (int i = 0; i < opcItemDefs.Length; i++) { opcItemDefs[i] = new OpcItemDefinition(itemNames[i], true, i, VarEnum.VT_EMPTY); } opcGroup.AddItems(opcItemDefs, out OpcItemResult[] opcItemResult); if (opcItemResult == null) { Console.WriteLine("Error add items - null value returned"); return; } int[] serverHandles = new int[opcItemResult.Length]; for (int i = 0; i < opcItemResult.Length; i++) { if (HRESULTS.Failed(opcItemResult[i].Error)) { Console.WriteLine("AddItems - failed {0}", itemNames[i]); opcGroup.Remove(true); opcServer.Disconnect(); return; } else { serverHandles[i] = opcItemResult[i].HandleServer; } } opcGroup.DataChanged += OpcGroup_DataChanged; opcGroup.SetEnable(true); opcGroup.Active = true; Console.WriteLine("********** Press <Enter> to close **********"); Console.ReadLine(); opcGroup.DataChanged -= OpcGroup_DataChanged; opcGroup.Remove(true); opcServer.Disconnect(); }