Пример #1
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();
        }
Пример #2
0
        static bool IsOPCServerIsRunning()
        {
            bool         isRunning       = false;
            SERVERSTATUS objSERVERSTATUS = new SERVERSTATUS();

            opcServer.GetStatus(out objSERVERSTATUS);
            isRunning = objSERVERSTATUS.eServerState == OpcServerState.Running;
            return(isRunning);
        }
Пример #3
0
        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)
                        {
                            opcMachineHost = GlobalValues.OPC_MACHINE_HOST;
                            opcServerName  = GlobalValues.OPC_SERVER_NAME;
                            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);
        }
Пример #4
0
 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;
     }
 }
Пример #5
0
        /// <summary>
        /// Returns whether Server is connected or not.
        /// </summary>
        /// <returns></returns>
        public bool IsOPCServerConnected()
        {
            string Function_Name = "IsOPCServerConnected";

            LogHelper.Trace(CLASS_NAME, Function_Name, "Function_Entered");
            bool ret = false;

            lock (m_opcDataDicObj)
            {
                if (m_opcSrvConnectFlag)
                {
                    SERVERSTATUS sts = new SERVERSTATUS();
                    sts.eServerState = OPCSERVERSTATE.OPC_STATUS_RUNNING;
                    try
                    {
                        m_OPCServer.GetStatus(out sts);

                        if (sts.eServerState != OPCSERVERSTATE.OPC_STATUS_RUNNING)
                        {
                            LogHelper.Info(CLASS_NAME, Function_Name, string.Format("status is {0}", sts.eServerState.ToString()));
                        }
                        //bool statusFlag = (sts.eServerState == OPCSERVERSTATE.OPC_STATUS_RUNNING) ? true : false;
                    }
                    catch (Exception localException)
                    {
                        LogHelper.Error(CLASS_NAME, Function_Name, localException);
                        //check is server is ok?
                        //if (localException.Message.Contains("The RPC server is unavailable."))
                        // Fixed issue - related to System Language, to avoid it used Error code
                        if (localException.Message.Contains("0x800706BA"))
                        {
                            m_opcSrvConnectFlag = false;
                        }
                    }
                }
                ret = m_opcSrvConnectFlag;
            }

            if (!ret)
            {
                LogHelper.Debug(CLASS_NAME, Function_Name, "OPC Server status is Down!");
            }
            LogHelper.Trace(CLASS_NAME, Function_Name, "Function_Exited");
            return(ret);
        }
Пример #6
0
        // 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);
        }
Пример #7
0
 public void GetStatus(out SERVERSTATUS serverStatus)
 {
     this.ifServer.GetStatus(out serverStatus);
 }
Пример #8
0
 private static void onBGSrvGetStatus(BGException ex, SERVERSTATUS stat, object tag)
 {
     connectStatus = ex == null && stat.eServerState == OpcServerState.Running;
 }
Пример #9
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();
        }
Пример #10
0
        public void TestCreateSERVERSTATUS01()
        {
            SERVERSTATUS sERVERSTATUS = CreateSERVERSTATUS01();

            Assert.IsNotNull(sERVERSTATUS);
        }
Пример #11
0
        public static SERVERSTATUS CreateSERVERSTATUS01()
        {
            SERVERSTATUS sERVERSTATUS = new SERVERSTATUS();

            return(sERVERSTATUS);
        }