Example #1
0
        public void Stop()
        {
            try
            {
                // 点表采集者服务
                if (stationCollecter != null)
                {
                    stationCollecter.Stop();
                    if (!stationCollecter.IsRuning)
                    {
                        TraceManagerForOPC.AppendDebug("点表采集管理服务已停止");
                        this.stationCollecter = null;
                    }
                    else
                    {
                        TraceManagerForOPC.AppendErrMsg("点表采集管理服务停止失败");
                    }
                }

                // 命令消费器
                if (commandCustomer != null)
                {
                    commandCustomer.Stop();
                    if (!commandCustomer.IsRuning)
                    {
                        TraceManagerForOPC.AppendDebug("命令消费器已停止");
                        this.commandCustomer = null;
                    }
                    else
                    {
                        TraceManagerForOPC.AppendErrMsg("命令消费器停止失败");
                    }
                }

                //OPC客户端管理服务
                if (opcClientManager != null)
                {
                    opcClientManager.Stop();
                    if (!opcClientManager.IsRuning)
                    {
                        TraceManagerForOPC.AppendDebug("OPC客户端管理服务已停止");
                        this.opcClientManager = null;
                    }
                    else
                    {
                        TraceManagerForOPC.AppendErrMsg("OPC客户端管理服务停止失败");
                    }
                }
            }
            catch { }

            IsRuning = false;
        }
Example #2
0
        // 定时采集任务执行体
        public bool ExcuteCollectHandle(out string errMsg)
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start(); //  开始监视代码运行时间
            // 加载需要采集点
            if (!LoadCache(out List <PumpJZ> jzs, out errMsg))
            {
                return(false);
            }
            if (jzs.Count == 0)
            {
                errMsg = "机组表没有读取模式为OPC的有效机组";;
                return(false);
            }
            // 从OPC缓存中取数
            if (!Collect(ref jzs, out errMsg))
            {
                return(false);
            }
            // 存入到数据库
            string saveSQL = GetSavePointsSQL(jzs);

            if (string.IsNullOrWhiteSpace(saveSQL))
            {
                errMsg = string.Format(@"采集OPC-机组数量{0}获取存入数据库SQL失败", jzs.Count);
                return(false);
            }
            DBUtil.ExecuteNonQuery(saveSQL, out string err);
            stopwatch.Stop();                                   //  停止监视
            TimeSpan timespan     = stopwatch.Elapsed;          //  获取当前实例测量得出的总时间
            double   milliseconds = timespan.TotalMilliseconds; //  总毫秒数

            if (!string.IsNullOrWhiteSpace(err))
            {
                errMsg = "更新OPC-二供实时数据失败" + ",耗时:" + milliseconds.ToString() + "毫秒," + err;
                return(false);
            }
            TraceManagerForOPC.AppendDebug("更新OPC-二供实时数据成功" + ",耗时:" + milliseconds.ToString() + "毫秒");
            return(true);
        }
Example #3
0
        // 定时采集任务执行体
        public bool ExcuteCollectHandle(out string errMsg)
        {
            errMsg = "";
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start(); //  开始监视代码运行时间
            // 加载需要采集点
            if (!LoadCache(out Dictionary <int, Station> dicStations, out errMsg))
            {
                return(false);
            }

            // 从OPC缓存中取数
            if (!Collect(ref dicStations, out errMsg))
            {
                return(false);
            }
            // 存入到数据库
            string saveSQL = GetSavePointsSQL(dicStations);

            if (string.IsNullOrWhiteSpace(saveSQL))
            {
                errMsg = string.Format(@"采集OPC-站点数量{0}获取存入数据库SQL失败", dicStations.Count);
                return(false);
            }
            DBUtil.ExecuteNonQuery(saveSQL, out string err);
            stopwatch.Stop();                                   //  停止监视
            TimeSpan timespan     = stopwatch.Elapsed;          //  获取当前实例测量得出的总时间
            double   milliseconds = timespan.TotalMilliseconds; //  总毫秒数

            if (!string.IsNullOrWhiteSpace(err))
            {
                errMsg = "更新OPC-SCADA实时数据失败" + ",耗时:" + milliseconds.ToString() + "毫秒," + err;
                return(false);
            }
            TraceManagerForOPC.AppendDebug("更新OPC-SCADA实时数据成功" + ",耗时:" + milliseconds.ToString() + "毫秒");
            return(true);
        }
Example #4
0
        public void Start(out string errMsg)
        {
            errMsg = "";
            if (IsRuning)
            {
                return;
            }

            try
            {
                // Scada-OPC通信服务
                if (opcScadaService != null)
                {
                    opcScadaService.Stop();
                }
                opcScadaService = new OPCScadaService(Config.projectConfigPath);
                opcScadaService.Start(out errMsg);
                if (opcScadaService.IsRuning)
                {
                    TraceManagerForOPC.AppendDebug("Scada-OPC通信服务已经打开");
                }
                else
                {
                    errMsg = "Scada-OPC通信服务打开失败";
                    Stop();
                    return;
                }
            }
            catch (Exception e)
            {
                errMsg = e.Message;
                Stop();
                return;
            }
            IsRuning = true;
        }
Example #5
0
        public void Stop()
        {
            if (opcCaches == null)
            {
                return;
            }

            foreach (string key in opcCaches.Keys)
            {
                OpcDaClient opc = opcCaches[key];
                if (opc == null)
                {
                    continue;
                }
                try
                {
                    opc.Stop();
                    TraceManagerForOPC.AppendDebug(key + "已断开连接");
                }
                catch { }
            }
            opcCaches = null;
            IsRuning  = false;
        }
Example #6
0
        public void Start(out string errMsg)
        {
            errMsg = "";

            if (IsRuning)
            {
                return;
            }
            try
            {
                // 环境检查
                if (!EnvChecker.CheckForScada(out errMsg))
                {
                    TraceManagerForOPC.AppendErrMsg("SCADA-OPC环境检查未通过:" + errMsg);
                    return;
                }
                TraceManagerForOPC.AppendDebug("SCADA-OPC环境检查通过");


                //OPC客户端管理服务打开
                if (opcClientManager != null)
                {
                    opcClientManager.Stop();
                }
                opcClientManager = new OpcClient(OPCClientManagerType.Scada);
                opcClientManager.Start();
                if (opcClientManager.IsRuning)
                {
                    TraceManagerForOPC.AppendDebug("OPC客户端管理服务已经打开");
                }
                else
                {
                    TraceManagerForOPC.AppendErrMsg("OPC客户端管理服务打开失败");
                    Stop();
                    return;
                }

                // 命令消费器
                if (commandCustomer != null)
                {
                    commandCustomer.Stop();
                }
                commandCustomer = new StationCommandConsumer(opcClientManager);
                commandCustomer.Start();
                if (commandCustomer.IsRuning)
                {
                    TraceManagerForOPC.AppendDebug("命令消费器已经打开");
                }
                else
                {
                    TraceManagerForOPC.AppendErrMsg("命令消费器打开失败");
                    Stop();
                    return;
                }

                // 泵房点表采集者服务
                if (stationCollecter != null)
                {
                    stationCollecter.Stop();
                }
                stationCollecter = new StationCollecter(opcClientManager, commandCustomer);
                stationCollecter.Start();
                if (stationCollecter.IsRuning)
                {
                    TraceManagerForOPC.AppendDebug("点表采集管理服务已经打开");
                }
                else
                {
                    TraceManagerForOPC.AppendErrMsg("点表采集管理服务打开失败");
                    Stop();
                    return;
                }
            }
            catch (Exception e)
            {
                errMsg = e.Message;
                TraceManagerForOPC.AppendErrMsg("SCADA_OPC服务启动异常" + e.Message + "堆栈:" + e.StackTrace);
                Stop();
                return;
            }

            IsRuning = true;
        }
Example #7
0
        public void Start()
        {
            // 同步配置信息
            LoadConfig();

            // 同步 jz 表中有几种 OPCServer
            string[] dbServerNames = LoadPumpJZOPCServerNames();
            if (dbServerNames == null || dbServerNames.Length == 0)
            {
                TraceManagerForOPC.AppendErrMsg("机组表中没有读取模式为 OPC 的机组, 无法启动 OPC 服务");
                Stop();
                return;
            }

            string[] serverNames = OpcDaClient.GetLocalServer();
            if (serverNames == null || serverNames.Length == 0)
            {
                TraceManagerForOPC.AppendErrMsg("本地计算机没有安装 OPCServer, 无法启动 OPC 服务");
                Stop();
                return;
            }
            opcCaches = new ConcurrentDictionary <string, OpcDaClient>();

            // 创建 OPC 客户端对象
            foreach (string dbServerName in dbServerNames)
            {
                if (string.IsNullOrWhiteSpace(dbServerName) || dbServerName.Length < 6)
                {
                    TraceManagerForOPC.AppendErrMsg("数据库中 OPC 服务器名非法, 无法启动 OPC 客户端");
                    Stop();
                    return;
                }
                string dbServerNameHead = dbServerName.Trim().ToLower().Substring(0, 5);
                if (serverNames.Where(str => str.Contains(dbServerNameHead)).ToArray().Length == 0)
                {
                    TraceManagerForOPC.AppendErrMsg("本地没有安装 " + dbServerName + " 服务器, 无法启动 OPC 客户端");
                    Stop();
                    return;
                }

                OpcDaClient opc = new OpcDaClient(serverNames.Where(str => str.Contains(dbServerNameHead)).ToArray()[0], UpdateRate, null, DefaultGroupDeadband);
                opcCaches.TryAdd(dbServerName, opc);
            }
            // OPC 客户端连接服务器
            foreach (string key in opcCaches.Keys)
            {
                OpcDaClient opc = opcCaches[key];
                if (opc != null)
                {
                    FuncTimeout <OpcDaClient, bool> timeout = new FuncTimeout <OpcDaClient, bool>();
                    timeout.Do = StartOPCClient;

                    bool isTimeout = timeout.DoWithTimeout(opc, new TimeSpan(0, 0, 0, 15), out bool reslut);    // 只等待 15 秒
                    if (isTimeout)
                    {
                        // 超时
                        if (key == "KingView.View.1")
                        {
                            TraceManagerForOPC.AppendErrMsg("连接 " + opc.ProgID + " OPC服务器超时 " + ", 可能原因为未配置其 DCOM 权限");
                        }
                        else
                        {
                            TraceManagerForOPC.AppendErrMsg("连接 " + opc.ProgID + " OPC服务器超时");
                        }
                        Stop();
                        return;
                    }

                    if (reslut)
                    {
                        TraceManagerForOPC.AppendDebug("已连接 " + opc.ProgID + " OPC 服务器");
                    }
                    else
                    {
                        if (key == "KingView.View.1")
                        {
                            TraceManagerForOPC.AppendErrMsg("连接 " + opc.ProgID + " OPC 服务器失败" + ", 可能原因为组态王未运行");
                        }
                        else
                        {
                            TraceManagerForOPC.AppendErrMsg("连接 " + opc.ProgID + " OPC 服务器失败");
                        }
                        Stop();
                        return;
                    }
                }
            }
            IsRuning = true;
        }