Пример #1
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;
     }
 }
Пример #2
0
 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);
     }
 }
Пример #3
0
        // 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);
            }
        }
Пример #5
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();
        }
Пример #6
0
        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);
            }
        }
Пример #7
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();
        }
Пример #8
0
        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);
        }
Пример #9
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();
        }
        public CamOpcServer()
        {
            camOPCServer = new OpcServer();

            if (camOPCServer.isConnectedDA == false)
            {
                rtc = camOPCServer.Connect("localhost", "CameraOPCSvr");
            }
        }
Пример #11
0
        public void TestConnect03()
        {
            //testing -- valid flow
            OpcServer opcServer         = new OpcServer();
            Accessor  opcServerAccessor = ReflectionAccessor.Wrap(opcServer);

            //Test Procedure Call
            opcServer.Connect("TransactiveDataSource");
            //Post Condition Check
        }
Пример #12
0
        /*******************************************************************/


        /// <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("从电控获取数据失败,请重新查询!");
            }
        }
Пример #13
0
        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()));
            }
        }
Пример #14
0
 static void Main(string[] args)
 {
     try
     {
         OpcServer server = new OpcServer();
         server.Connect(serverName);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
     Console.ReadLine();
 }
Пример #15
0
        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("服务连接失败");
            }
        }
Пример #16
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();
        }
Пример #17
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);
        }
Пример #18
0
 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);
     }
 }
Пример #19
0
        /// <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);
        }
Пример #20
0
        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");
            }
        }
Пример #22
0
 /// <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");
            }
        }
Пример #24
0
        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());
            }
        }
Пример #25
0
        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);
        }
Пример #26
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
        }
        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));
        }
Пример #28
0
        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);
            }
        }
Пример #29
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;
             *      }	*/
        }
Пример #30
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();
        }