Esempio n. 1
0
        public PCDResponse MeasurePart(PCDRequest request)
        {
            _measureOperation = true;
            StatusMessage     = "开始测量";
            PCDResponse resp = null;

            try
            {
                string progName = SearchProgram(request.Part);

                GenerateMeasureParameterFile(request.Part);

                _are.Reset();
                bool success = _pcdmisControl.OpenProgram(progName);
                success = _pcdmisControl.ExecuteProgramAsync();
                _are.WaitOne();

                resp = EvalMeasure(_completed);
            }
            catch (Exception pe)
            {
                resp = new PCDResponse()
                {
                    Success = false,
                    Pass    = false,
                    Message = pe.Message
                };
                ServerLog.Logs.AddLog(pe.Message);
            }
            StatusMessage = "结束测量";
            return(resp);
        }
Esempio n. 2
0
        public PCDResponse GotoSafePostion()
        {
            _measureOperation = false;
            PCDResponse resp = new PCDResponse();

            try
            {
                string progName = ServerDirManager.Inst.SafeLocateProgram;
                if (!File.Exists(progName))
                {
                    resp.Success = false;
                    resp.Message = "安全定位程序不存在";
                    ServerLog.Logs.AddLog(resp.Message);
                    return(resp);
                }
                _are.Reset();
                bool success = _pcdmisControl.OpenProgram(progName);
                success = _pcdmisControl.ExecuteProgramAsync();
                _are.WaitOne();
                resp.Success = success;
                return(resp);
            }
            catch (Exception ex)
            {
                resp.Success = false;
                resp.Message = ex.Message;
                ServerLog.Logs.AddLog(resp.Message);
                return(resp);
            }
        }
Esempio n. 3
0
        private PCDResponse Measure(Part part)
        {
            PCDRequest request = new PCDRequest()
            {
                Part = part
            };
            PCDResponse response = _pcdmisService.MeasurePart(request);

            return(response);
        }
Esempio n. 4
0
        public PCDResponse Disconnect()
        {
            Connected       = false;
            _pcdmisCallback = null;
            PCDResponse response = new PCDResponse()
            {
                Success = true, Message = ""
            };

            return(response);
        }
Esempio n. 5
0
        public async Task <bool> MeasurePartAsync(Part part)
        {
            //判断结果,并启动文件回传
            bool success = true;

            try
            {
                part.Status = PartStatus.PS_Measuring;
                part.Flag   = 0;
                _timer      = new Timer(TestBack /*_ => part.Flag = ++part.Flag % 2*/, part, 0, 2000);

                PCDResponse response = await Task.Run(() => Measure(part));

                _timer.Change(Timeout.Infinite, Timeout.Infinite);
                part.Flag       = 0;
                success         = response.Success;
                part.Pass       = response.Pass;
                part.ResultFile = Path.GetFileName(response.ReportFile);
                part.Status     = success ? PartStatus.PS_Measured : PartStatus.PS_Error;

                if (!success)
                {
                    ClientLogs.Inst.AddLog(new ClientLog(response.Message));
                }
            }
            catch (Exception)
            {
                //通讯失败中终止测量
                success   = false;
                part.Pass = false;
                OfflineEvent?.Invoke(this, null);
                _timer.Change(Timeout.Infinite, Timeout.Infinite);
                part.Flag       = 0;
                part.ResultFile = "";
                part.Status     = PartStatus.PS_Idle;
                ClientLogs.Inst.AddLog(new ClientLog("远程服务器通讯异常"));
                throw new InvalidOperationException("远程服务器通讯异常");
            }

            return(success);
        }
Esempio n. 6
0
        private PCDResponse EvalMeasure(bool completed)
        {
            PCDResponse resp = new PCDResponse();

            if (completed)
            {
                bool pass = EvalReport();
                resp.ReportFile = GetOutputFile();
                resp.Success    = true;
                resp.Pass       = pass;
                resp.Message    = "测量完成。";
            }
            else
            {
                resp.Success    = false;
                resp.Pass       = false;
                resp.ReportFile = "";
                resp.Message    = "测量未完成。";
            }

            return(resp);
        }
Esempio n. 7
0
        public PCDResponse Connect()
        {
            _pcdmisCallback = OperationContext.Current.GetCallbackChannel <IPCDmisCallback>();

            PCDResponse response = new PCDResponse()
            {
                Success = true, Message = ""
            };

            if (_pcdmisCallback == null)
            {
                response.Success = false;
                response.Message = "回连失败";
                ServerLog.Logs.AddLog("回连失败");
            }
            Connected     = response.Success;
            StatusMessage = Connected ? "控制器已连接" : "控制器连接过程中发生错误";
            ServerLog.Logs.AddLog(StatusMessage);
            OperationContext.Current.Channel.Closed  += Channel_Closed;
            OperationContext.Current.Channel.Opened  += Channel_Opened;
            OperationContext.Current.Channel.Faulted += Channel_Faulted;
            _channelCache = OperationContext.Current.Channel;
            return(response);
        }
Esempio n. 8
0
        private PCDResponse SafeLocate()
        {
            PCDResponse response = _pcdmisService.GotoSafePostion();

            return(response);
        }