Esempio n. 1
0
        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();
        }
Esempio n. 2
0
 //[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);
     }
 }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 5
0
        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;
     }
 }
Esempio n. 7
0
        public void Dispose()
        {
            //释放
            OpcServer opcServer = OpcServers.FirstOrDefault(c => c.PKID == pkid);

            if (opcServer != null)
            {
                opcServer.Disconnect();
            }
        }
Esempio n. 8
0
 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;
     }
 }
Esempio n. 9
0
        /// <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
        }
Esempio n. 10
0
 public void disconnectServer()
 {
     try
     {
         if (theSrv != null)
         {
             theSrv.Disconnect();
         }
     }
     catch (Exception e)
     {
         System.Windows.Forms.MessageBox.Show("断开服务器连接出错:" + e.ToString());
     }
 }
Esempio n. 11
0
        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
        }
Esempio n. 12
0
        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();
        }
Esempio n. 13
0
        /// <summary>
        /// Disconnect server
        /// </summary>
        private void Disconnect()
        {
            if (OpcServer == null)
            {
                return;
            }

            try
            {
                OpcServer.Disconnect();
            }
            catch
            {}

            OpcServer.Dispose();
            OpcServer = null;
        }
Esempio n. 14
0
        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();
        }
Esempio n. 15
0
        //---------------------------------------------------------------
        // 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)
                {
                }
            }
        }
Esempio n. 18
0
        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();
        }
Esempio n. 19
0
        //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 { }
        }
Esempio n. 20
0
        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;
        }
Esempio n. 21
0
        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;
        }
Esempio n. 22
0
        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();
        }
Esempio n. 23
0
 public void CloseServer()
 {
     OpcSrver.Disconnect();
 }
Esempio n. 24
0
 public void Abort()
 {
     thread.Abort();
     myRefreshGroup.Dispose();
     server.Disconnect();
 }
Esempio n. 25
0
        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;
             *      }	*/
        }
Esempio n. 26
0
        /// <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");
        }
Esempio n. 27
0
        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();
        }
Esempio n. 28
0
        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;
             *  }	*/
        }
Esempio n. 29
0
        // ------------------------------ 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);
            }
        }
Esempio n. 30
0
        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();
        }