Пример #1
0
        //以下檢查站時不包含每個Printer的Rule
        private bool CheckEachValues(int laneID, OneLaneSelectorVM vm, CommonSettingVM commonvm, SharedFolderSettingVM sfvm)
        {
            bool _bAllGood = true;

            //1.檢查CommonSetting


            //2.檢查SharedFolderSetting
            _window.lbStatusReporter.Items.Add(String.Format("@LANE_DATA".Translate() + ":", laneID + 1));
            Log4.PrinterLogger.InfoFormat("Check Lane {0} Data:", laneID + 1);
            //Input SharedFolder
            if (SharedFolderRules.HasInputSharedFolder(vm.Vendor))
            {
                _bAllGood = CheckSharedFolder(sfvm.InDriveInfo, "@RECIEVE");
            }

            //Output SharedFolder
            if (SharedFolderRules.HasOutputSharedFolder(vm.Vendor))
            {
                _bAllGood = CheckSharedFolder(sfvm.OutDriveInfo, "@SEND");
            }

            if (_bAllGood)
            {
                _window.lbStatusReporter.Items.Add("@PASS".Translate());
                Log4.PrinterLogger.Info(" RESULT = PASS!");
            }


            return(_bAllGood);
        }
Пример #2
0
        /// <summary>
        /// Service開啟的入口點*****
        /// </summary>
        /// <param name="laneID">The lane identifier.</param>
        /// <param name="vm">The vm.</param>
        /// <param name="commonvm">The commonvm.</param>
        /// <param name="sfvm">The SFVM.</param>
        /// <returns></returns>
        public bool ImportSetting(int laneID, OneLaneSelectorVM vm, CommonSettingVM commonvm, SharedFolderSettingVM sfvm)
        {
            bool ret = false;



            RemotePrinter[laneID].PrinterVendor = vm.Vendor;//此時Create物件,開始監控sharedFolder
            RemotePrinter[laneID].Printer.PrinterCommonSetting = commonvm.Clone();
            RemotePrinter[laneID].Printer.PrinterSFSetting     = sfvm.Clone();
            RemotePrinter[laneID].Printer.Activate();//開始監控
            return(ret);
        }
Пример #3
0
 public PrinterBase(ePrinterVendor vendor, eAssignedLane_Printer laneID)
 {
     LaneID = laneID;
     Vendor = vendor;
     InspectedPanels.Clear();
     PrinterCommonSetting = new CommonSettingVM();
     PrinterSFSetting     = new SharedFolderSettingVM();
     DxHistory            = new ObservableCollection <KeyValuePair <double, double> >();
     DyHistory            = new ObservableCollection <KeyValuePair <double, double> >();
     ThetaHistory         = new ObservableCollection <KeyValuePair <double, double> >();
     DxHistory.Clear();
     DyHistory.Clear();
     ThetaHistory.Clear();
     //Accumulation = 0;//= AccDx = AccDy = AccTheta = 0;
 }
Пример #4
0
        static public CommonSettingVM ToCommonSettingVM(this XElement root)
        {
            CommonSettingVM ret = null;

            try
            {
                ret = new CommonSettingVM();

                eMatchingBasis basis;
                Enum.TryParse(root.getValue("MatchingBasis"), true, out basis);// #改Enum
                ret.MatchingBasis = basis;

                ret.IsMoveStencil = bool.Parse(root.getAttributeValue("Adjustment", "IsMoveStencil"));
                ret.IsMovePCB     = bool.Parse(root.getAttributeValue("Adjustment", "IsMovePCB"));

                ret.IsCWRotate  = bool.Parse(root.getAttributeValue("Rotate", "IsCWRotate"));
                ret.IsCCWRotate = bool.Parse(root.getAttributeValue("Rotate", "IsCCWRotate"));


                ret.IsQuadrent1 = bool.Parse(root.getAttributeValue("Quadrent", "IsQuadrent1"));
                ret.IsQuadrent2 = bool.Parse(root.getAttributeValue("Quadrent", "IsQuadrent2"));
                ret.IsQuadrent3 = bool.Parse(root.getAttributeValue("Quadrent", "IsQuadrent3"));
                ret.IsQuadrent4 = bool.Parse(root.getAttributeValue("Quadrent", "IsQuadrent4"));

                var FilterElement = root.getElement("Filter");
                ret.IsHeightFilter         = bool.Parse(FilterElement.getValue("Height"));
                ret.HeightRange.LowerBound = double.Parse(FilterElement.getAttributeValue("Height", "LowerBound"));
                ret.HeightRange.UpperBound = double.Parse(FilterElement.getAttributeValue("Height", "UpperBound"));
                ret.IsAreaFilter           = bool.Parse(FilterElement.getValue("Area"));
                ret.AreaRange.LowerBound   = double.Parse(FilterElement.getAttributeValue("Area", "LowerBound"));
                ret.AreaRange.UpperBound   = double.Parse(FilterElement.getAttributeValue("Area", "UpperBound"));
                ret.IsVolumeFilter         = bool.Parse(FilterElement.getValue("Volume"));
                ret.VolumeRange.LowerBound = double.Parse(FilterElement.getAttributeValue("Volume", "LowerBound"));
                ret.VolumeRange.UpperBound = double.Parse(FilterElement.getAttributeValue("Volume", "UpperBound"));
            }
            catch
            {
                return(null);
            }
            return(ret);
        }
Пример #5
0
        /// <summary>
        /// Gets the candidate boxes. 每個繼承PrinterBase在實作 Caculate的時候會使用到此function 為UI介面挑選box的candidate選項
        /// </summary>
        /// <param name="currentPanel">The current panel.</param>
        /// <param name="vm">The vm.</param>
        /// <returns></returns>
        public static List <Box> GetCandidateBoxes(InspectedPanel currentPanel, CommonSettingVM vm)
        {
            List <Box> Boxes = new List <Box>();

            //var BadBoards = (from board in currentPanel.Panel.Boards
            //                 where board.IsHasBadMark == true
            //                 select board).ToList();

            foreach (var board in currentPanel.Panel.Boards)
            {
                if (board.IsSkipped || board.IsHasBadMark)
                {
                    continue;
                }

                foreach (var component in board.Components)
                {
                    foreach (var box in component.Boxes)
                    {
                        bool _IsPassHFilter = false;
                        bool _IsPassAFilter = false;
                        bool _IsPassVFilter = false;
                        //H
                        if (vm.IsHeightFilter)
                        {
                            if (box.Height_p >= vm.HeightRange.LowerBound &&
                                box.Height_p <= vm.HeightRange.UpperBound)
                            {
                                _IsPassHFilter = true;
                            }
                            else
                            {
                                _IsPassHFilter = false;
                            }
                        }
                        else
                        {
                            _IsPassHFilter = true; //表示不用Filter
                        }
                        //A
                        if (vm.IsAreaFilter)
                        {
                            if (box.Area_p >= vm.AreaRange.LowerBound &&
                                box.Area_p <= vm.AreaRange.UpperBound)
                            {
                                _IsPassAFilter = true;
                            }
                            else
                            {
                                _IsPassAFilter = false;
                            }
                        }
                        else
                        {
                            _IsPassAFilter = true; //表示不用Filter
                        }
                        //V
                        if (vm.IsVolumeFilter)
                        {
                            if (box.Volume_p >= vm.VolumeRange.LowerBound &&
                                box.Volume_p <= vm.VolumeRange.UpperBound)
                            {
                                _IsPassVFilter = true;
                            }
                            else
                            {
                                _IsPassVFilter = false;
                            }
                        }
                        else
                        {
                            _IsPassVFilter = true; //表示不用Filter
                        }
                        if (_IsPassHFilter && _IsPassAFilter && _IsPassVFilter)
                        {
                            Boxes.Add(box);
                        }
                    }
                }
            }
            return(Boxes);
        }
Пример #6
0
        void ExecuteSaveFile()
        {
            List <OneLaneSelectorVM> _lstOneLaneModel = new List <OneLaneSelectorVM>();

            foreach (var item in ViewModelLocator.Atom.LaneSelectorHostVM.LaneContainer)
            {
                _lstOneLaneModel.Add((OneLaneSelectorVM)(item as ucOneLaneSelector).DataContext);
            }

            TRMessageBox.Show("@AUTOLOADFILENAME_HINT".Translate());
            System.Windows.Forms.SaveFileDialog ofd = new System.Windows.Forms.SaveFileDialog();
            ofd.Filter = "Xml Files (*.xml)| *.xml";

            //string pathName = "PlacerCenter.xml";
            ofd.Filter = "Xml Files (*.xml)| *.xml";
            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    XElement              root          = new XElement("PRINTERCENTER");
                    CommonSettingVM       lane1CommonVM = (CommonSettingVM)_window.ucLane1_Common.DataContext;
                    SharedFolderSettingVM lane1SFVM     = (SharedFolderSettingVM)_window.ucLane1_SF.DataContext;
                    CommonSettingVM       lane2CommonVM = (CommonSettingVM)_window.ucLane2_Common.DataContext;
                    SharedFolderSettingVM lane2SFVM     = (SharedFolderSettingVM)_window.ucLane2_SF.DataContext;



                    List <XElement> LaneList = new List <XElement>();

                    foreach (var lane in _lstOneLaneModel)
                    {
                        var iLaneID = _lstOneLaneModel.IndexOf(lane) + 1;
                        var sVendor = lane.Vendor;
                        if (iLaneID == 1)
                        {
                            var el = new XElement("LANE", new XAttribute("ID", iLaneID)
                                                  , new XElement("Vendor", sVendor)
                                                  , lane1CommonVM.ToXml()
                                                  , lane1SFVM.ToXml()
                                                  );
                            LaneList.Add(el);
                        }
                        else if (iLaneID == 2)
                        {
                            var el = new XElement("LANE", new XAttribute("ID", iLaneID)
                                                  , new XElement("Vendor", sVendor)
                                                  , lane2CommonVM.ToXml()
                                                  , lane2SFVM.ToXml()
                                                  );
                            LaneList.Add(el);
                        }
                    }

                    root.Add(LaneList);


                    root.Save(ofd.FileName);
                }
                catch (Exception ex)
                {
                    Log4.PrinterLogger.ErrorFormat("Exception={0}", ex.Message);
                    return;
                }
            }
        }
 /// <summary>
 /// CommonSettingVM
 /// 原先Printer計算流程: PrinterCorrection > WipeAlogrithm(MPM) > 建立MergedData > Update
 /// Update步驟內將 "PrinterCorrection" 算好的資料,再根據註冊表做轉換
 /// 原先註冊表 1.bSolderMoveToPad 2.bCCWRotate 3.nQuandarnt
 /// </summary>
 /// <param name="setting">The setting.</param>
 public RotationCorrectionAlgorithm(CommonSettingVM setting)
 {
     Name     = "Rotation Algorithm";
     Settings = setting;
 }