예제 #1
0
 void ExecuteW5()
 {
     WipeCombination.Add(string.Format("W5.{0} ({1})", "@CONTINUE_FAIL_AT_SAME_COMPONENT".Translate(), ViewModelLocator.Atom.WipeVM.CmpFailTimes));
     object[] _params = { (object)ViewModelLocator.Atom.WipeVM.CmpFailTimes };
     var alg = JudgeWipeAlgorithmFactory.CreateAlgorithm("W5", _params);
     PrinterManager.getInstance().JudgeWipeRoutines.Add(alg);
 }
예제 #2
0
 void ExecuteW3()
 {
     WipeCombination.Add(String.Format("W3.{0}", "@BRIDGE_DETECT".Translate()));
    
     var alg = JudgeWipeAlgorithmFactory.CreateAlgorithm("W3",null);
     PrinterManager.getInstance().JudgeWipeRoutines.Add(alg);
 }
예제 #3
0
        void ExecuteDeleteLane()
        {
            Log4.PrinterLogger.Info("[A]Press Delete button.");

            if (LaneContainer.Count > 0)
            {
                RemoveOneLaneSetting();

                if (LaneContainer.Count == 1)
                {
                    PrinterManager.getInstance().EnableLane2SettingUI(false);
                }
                else
                if (LaneContainer.Count == 0)
                {
                    PrinterManager.getInstance().EnableLane1SettingUI(false);
                    PrinterManager.getInstance().EnableLane2SettingUI(false);
                }
            }
            else
            {
                Log4.PrinterLogger.Info("[A]There is no data.");
                TRMessageBox.Show("@THERE_IS_NO_DATA".Translate(), "@PRINTER_CENTER".Translate());
            }
        }
예제 #4
0
        void ExecuteAddLane()
        {
            Log4.PrinterLogger.Info("[A]Press Add button.");

            if (LaneContainer.Count < 2)
            {
                AddOneLaneSetting();

                if (LaneContainer.Count == 1)
                {
                    PrinterManager.getInstance().EnableLane1SettingUI(true);
                }
                else
                if (LaneContainer.Count == 2)
                {
                    PrinterManager.getInstance().EnableLane1SettingUI(true);
                    PrinterManager.getInstance().EnableLane2SettingUI(true);
                }
            }
            else
            {
                Log4.PrinterLogger.Info("[A]upport at most 2 lane.");
                TRMessageBox.Show("@SUPPORT_AT_MOST_2_LANE".Translate(), "@PRINTER_CENTER".Translate());
            }
        }
예제 #5
0
 void ExecuteW2()
 {
     WipeCombination.Add(String.Format("W2.{0} ({1}-{2})",
         "@PEAK_OF_SINGLE_PAD_VOLUME".Translate(),
         ViewModelLocator.Atom.WipeVM.PeakRange.LowerBound,
         ViewModelLocator.Atom.WipeVM.PeakRange.UpperBound
         ));
     object[] _params = { (object)ViewModelLocator.Atom.WipeVM.PeakRange.LowerBound
         , (object)ViewModelLocator.Atom.WipeVM.PeakRange.UpperBound };
     var alg = JudgeWipeAlgorithmFactory.CreateAlgorithm("W2", _params);
     PrinterManager.getInstance().JudgeWipeRoutines.Add(alg);
 }
예제 #6
0
 void ExecuteW1()
 {
     WipeCombination.Add(String.Format("W1.{0} ({1}-{2})",
         "@AVERAGE_VOLUME_PERCENTAGE".Translate(),
         ViewModelLocator.Atom.WipeVM.AvgVolRange.LowerBound,
         ViewModelLocator.Atom.WipeVM.AvgVolRange.UpperBound
         ));
     object[] _params = { (object)ViewModelLocator.Atom.WipeVM.AvgVolRange.LowerBound
         , (object)ViewModelLocator.Atom.WipeVM.AvgVolRange.UpperBound };
     var alg = JudgeWipeAlgorithmFactory.CreateAlgorithm("W1", _params);
     PrinterManager.getInstance().JudgeWipeRoutines.Add(alg);
 }
예제 #7
0
        public override void Activate()
        {
            //InDriveInfo Z:(\\IP\Folder)格式,WmiDiskHelper.ExtractDiskID取 "Z:"
            //但當選取的InDriveInfo是 D:格式,WmiDiskHelper.ExtractDiskID取"D:"
            //可是當送給DirectoryWatcher時 因D:本質是Disk Volume而不是Folder
            //而Z:是以建立共享資料夾的虛擬網路硬碟 (可以想成Z:是一個代號),本質上他還是個Folder,所以可以監控
            //因此,為了避免選成Disk,故加一個@"\"
            target = WmiDiskHelper.ExtractDiskID(PrinterSFSetting.InDriveInfo) + @"\"; //Disk mapping
            var des = WmiDiskHelper.ExtractProviderName(PrinterSFSetting.InDriveInfo); //ui顯示用

            WatchedFolder = PrinterManager.getInstance().AddWatcher(target, LaneID, des);
        }
예제 #8
0
        public static eWipeStencilReason JudgeWipeByPriorityStrategy(InspectedPanel currentPanel, List <Box> boxes)
        {
            eWipeStencilReason ret = eWipeStencilReason.NoNeedToWipe;
            var wipeRoutines       = PrinterManager.getInstance().JudgeWipeRoutines;

            foreach (var wipe in wipeRoutines)
            {
                ret = wipe.Judge(currentPanel, boxes);
                if (ret != eWipeStencilReason.NoNeedToWipe)
                {
                    break;
                }
            }
            return(ret);
        }
예제 #9
0
 /// <summary>
 /// 用於Load檔
 /// </summary>
 /// <param name="savedfile">The savedfile.</param>
 public void AddOneLaneSetting(OneLaneSelectorVM savedfile)
 {
     LaneContainer.Add(new ucOneLaneSelector(LaneContainer.Count, savedfile));
     //UI顯示
     if (LaneContainer.Count == 1)
     {
         PrinterManager.getInstance().EnableLane1SettingUI(true);
     }
     else
     if (LaneContainer.Count == 2)
     {
         PrinterManager.getInstance().EnableLane1SettingUI(true);
         PrinterManager.getInstance().EnableLane2SettingUI(true);
     }
 }
예제 #10
0
        private void cbDisplaySelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            switch (cbDisplaySelector.SelectedIndex)//Lane1
            {
            case 0:
                if (PrinterManager.getInstance().RemotePrinter[0].Printer != null)
                {
                    ViewModelLocator.Atom.ChartHostVM.Dx    = PrinterManager.getInstance().RemotePrinter[0].Printer.DxHistory;
                    ViewModelLocator.Atom.ChartHostVM.Dy    = PrinterManager.getInstance().RemotePrinter[0].Printer.DyHistory;
                    ViewModelLocator.Atom.ChartHostVM.Theta = PrinterManager.getInstance().RemotePrinter[0].Printer.ThetaHistory;
                }
                else
                {
                    ViewModelLocator.Atom.ChartHostVM.Dx    = null;
                    ViewModelLocator.Atom.ChartHostVM.Dy    = null;
                    ViewModelLocator.Atom.ChartHostVM.Theta = null;
                }
                break;

            case 1:
                if (PrinterManager.getInstance().RemotePrinter[1].Printer != null)
                {
                    ViewModelLocator.Atom.ChartHostVM.Dx    = PrinterManager.getInstance().RemotePrinter[1].Printer.DxHistory;
                    ViewModelLocator.Atom.ChartHostVM.Dy    = PrinterManager.getInstance().RemotePrinter[1].Printer.DyHistory;
                    ViewModelLocator.Atom.ChartHostVM.Theta = PrinterManager.getInstance().RemotePrinter[1].Printer.ThetaHistory;
                }
                else
                {
                    ViewModelLocator.Atom.ChartHostVM.Dx    = null;
                    ViewModelLocator.Atom.ChartHostVM.Dy    = null;
                    ViewModelLocator.Atom.ChartHostVM.Theta = null;
                }
                break;

            case 2:
                break;
            }
        }
예제 #11
0
        /// <summary>
        /// Fuji Changover
        /// </summary>
        /// <param name="Lane">The lane.</param>
        /// <returns></returns>
        public bool CheckCurrentSharedFolder(eAssignedLane_Printer Lane)
        {
            if (PrinterManager.getInstance() == null)
            {
                return(false);
            }
            else
            {
                Log4.PrinterLogger.InfoFormat("[SOA]CheckCurrentSharedFolder({0})", Lane.ToString());
                switch (Lane)
                {
                case eAssignedLane_Printer.None:
                    return(false);

                case eAssignedLane_Printer.Lane1:
                    return(PrinterManager.getInstance().RemotePrinter[0].Printer.CheckCurrentSharedFolder());

                case eAssignedLane_Printer.Lane2:
                    return(PrinterManager.getInstance().RemotePrinter[1].Printer.CheckCurrentSharedFolder());
                }
                return(false);
            }
        }
예제 #12
0
        /// <summary>
        /// Fuji EasyLink
        /// </summary>
        /// <param name="Lane">The lane.</param>
        /// <returns>
        /// <c>true</c> if [is need write comp image] [the specified lane]; otherwise, <c>false</c>.
        /// </returns>
        public bool IsNeedWriteCompImage(eAssignedLane_Printer Lane)
        {
            if (PrinterManager.getInstance() == null)
            {
                return(false);
            }
            else
            {
                Log4.PrinterLogger.InfoFormat("[SOA]IsNeedWriteCompImage({0})", Lane.ToString());
                switch (Lane)
                {
                case eAssignedLane_Printer.None:
                    return(false);

                case eAssignedLane_Printer.Lane1:
                    return(PrinterManager.getInstance().RemotePrinter[0].Printer.IsNeedWriteCompImage());

                case eAssignedLane_Printer.Lane2:
                    return(PrinterManager.getInstance().RemotePrinter[1].Printer.IsNeedWriteCompImage());
                }
                return(false);
            }
        }
예제 #13
0
        public string GetWriteCompImagePath(eAssignedLane_Printer Lane)
        {
            if (PrinterManager.getInstance() == null)
            {
                return(string.Empty);
            }
            else
            {
                Log4.PrinterLogger.InfoFormat("[SOA]GetWriteCompImagePath({0})", Lane.ToString());
                switch (Lane)
                {
                case eAssignedLane_Printer.None:
                    return(string.Empty);

                case eAssignedLane_Printer.Lane1:
                    return(PrinterManager.getInstance().RemotePrinter[0].Printer.GetWriteCompImagePath());

                case eAssignedLane_Printer.Lane2:
                    return(PrinterManager.getInstance().RemotePrinter[1].Printer.GetWriteCompImagePath());
                }
                return(string.Empty);
            }
        }
예제 #14
0
 public ePrinterVendor GetPrinterCurrentVendor(eAssignedLane_Printer Lane)
 {
     Log4.PrinterLogger.InfoFormat("[SOA]GetPrinterCurrentVendor({0})", Lane.ToString());
     return(PrinterManager.getInstance().RemotePrinter[(int)Lane - 1].Printer.Vendor);
 }
예제 #15
0
 void ExecuteDeleteList()
 {
     PrinterManager.getInstance().JudgeWipeRoutines.RemoveAt(SelectedIndex);
     _WipeCombination.Remove(SelectedItem);
    
 }
예제 #16
0
        /// <summary>
        /// Fuji Changover
        /// </summary>
        /// <param name="Lane">The lane.</param>
        /// <returns></returns>
        //Fuji Changover
        //public bool NeedCreateTheDataToNext(eAssignedLane_Printer Lane, int size)
        //{
        //    if (PrinterManager.getInstance() == null)
        //        return false;
        //    else
        //    {
        //        InspectedPanel panel = new InspectedPanel();
        //        try
        //        {
        //            #region MMF

        //            using (var mmf = MemoryMappedFile.CreateOrOpen("PrinterCenter_" + Lane.ToString(), size, MemoryMappedFileAccess.ReadWrite))
        //            {
        //                using (var mmvStream = mmf.CreateViewStream(0, size))
        //                {
        //                    BinaryFormatter binFormatter = new BinaryFormatter();
        //                    byte[] buffer = new byte[size];
        //                    mmvStream.Read(buffer, 0, size);
        //                    panel = (InspectedPanel)binFormatter.Deserialize(new MemoryStream(buffer));
        //                }
        //            }

        //            #endregion MMF
        //        }
        //        catch (Exception e)
        //        {
        //            Log4.PrinterLogger.ErrorFormat("NeedCreate MMF Exception");
        //            Log4.PrinterLogger.ErrorFormat(e.Message);
        //            return false;
        //        }

        //        Log4.PrinterLogger.InfoFormat("NeedCreateTheDataToNext({0},{1})", Lane.ToString(), size);

        //        switch (Lane)
        //        {
        //            case eAssignedLane_Printer.None:
        //                break;

        //            case eAssignedLane_Printer.Lane1:
        //                ViewModelLocator.Atom.FlowHostVM.spiInspectedData.Add("[" + eAssignedLane_Printer.Lane1.ToString() + "]" + panel.InspectStartTime);
        //                Log4.PrinterLogger.InfoFormat(" -Push [{0}] NeedCreate CurrentInspectModeTemp.InspectMode={1} .InspectResult={2}", Lane.ToString(), panel.InspectMode, panel.InspectResult);
        //                PrinterManager.getInstance().CurrentInspectModeTemp[0].InspectMode = panel.InspectMode;
        //                PrinterManager.getInstance().CurrentInspectModeTemp[0].InspectResult = panel.InspectResult;
        //                Log4.PrinterLogger.InfoFormat(" -Enqueue [{0}] NeedCreate SPI Data InspectTime = {1}", Lane.ToString(), panel.InspectStartTime);
        //                PrinterManager.getInstance().RemotePrinter[0].Printer.InspectedPanels.Enqueue(panel);
        //                //PrinterManager.getInstance().RemotePrinter[0].Printer.StartProcess();
        //                break;

        //            case eAssignedLane_Printer.Lane2:
        //                ViewModelLocator.Atom.FlowHostVM.spiInspectedData.Add("[" + eAssignedLane_Printer.Lane2.ToString() + "]" + panel.InspectStartTime);
        //                Log4.PrinterLogger.InfoFormat(" -Push [{0}] NeedCreate CurrentInspectModeTemp.InspectMode={1} .InspectResult={2}", Lane.ToString(), panel.InspectMode, panel.InspectResult);
        //                PrinterManager.getInstance().CurrentInspectModeTemp[1].InspectMode = panel.InspectMode;
        //                PrinterManager.getInstance().CurrentInspectModeTemp[1].InspectResult = panel.InspectResult;
        //                Log4.PrinterLogger.InfoFormat(" -Enqueue [{0}] NeedCreate SPI Data InspectTime = {1}", Lane.ToString(), panel.InspectStartTime);
        //                PrinterManager.getInstance().RemotePrinter[1].Printer.InspectedPanels.Enqueue(panel);
        //                //PrinterManager.getInstance().RemotePrinter[1].Printer.StartProcess();
        //                break;
        //        }
        //        return true;
        //    }
        //}
        //*/

        public bool SendCurrentInspectedPanelData(eAssignedLane_Printer Lane, int size)
        {
            if (PrinterManager.getInstance() == null)
            {
                return(false);
            }
            else
            {
                InspectedPanel panel = new InspectedPanel();
                try
                {
                    #region MMF

                    using (var mmf = MemoryMappedFile.CreateOrOpen("PrinterCenter_" + Lane.ToString(), size, MemoryMappedFileAccess.ReadWrite))
                    {
                        using (var mmvStream = mmf.CreateViewStream(0, size))
                        {
                            BinaryFormatter binFormatter = new BinaryFormatter();
                            byte[]          buffer       = new byte[size];

                            mmvStream.Read(buffer, 0, size);
                            panel = (InspectedPanel)binFormatter.Deserialize(new MemoryStream(buffer));
                        }
                    }

                    #endregion MMF
                }
                catch (Exception e)
                {
                    Log4.PrinterLogger.ErrorFormat("MMF Exception");
                    Log4.PrinterLogger.ErrorFormat(e.Message);
                    return(false);
                }

                Log4.PrinterLogger.InfoFormat("[D]SendCurrentInspectedPanelData({0},{1})", Lane.ToString(), size);

                switch (Lane)
                {
                case eAssignedLane_Printer.None:
                    break;

                case eAssignedLane_Printer.Lane1:
                    ViewModelLocator.Atom.FlowHostVM.spiInspectedData.Add("[" + eAssignedLane_Printer.Lane1.ToString() + "]" + panel.InspectStartTime);
                    Log4.PrinterLogger.InfoFormat(" -Push [{0}] CurrentInspectModeTemp.InspectMode={1} .InspectResult={2}", Lane.ToString(), panel.InspectMode, panel.InspectResult);
                    PrinterManager.getInstance().CurrentInspectModeTemp[0].InspectMode   = panel.InspectMode;
                    PrinterManager.getInstance().CurrentInspectModeTemp[0].InspectResult = panel.InspectResult;
                    Log4.PrinterLogger.InfoFormat(" -Enqueue [{0}] SPI Data InspectTime = {1}", Lane.ToString(), panel.InspectStartTime);
                    PrinterManager.getInstance().RemotePrinter[0].Printer.InspectedPanels.Enqueue(panel);
                    //PrinterManager.getInstance().RemotePrinter[0].Printer.StartProcess();
                    break;

                case eAssignedLane_Printer.Lane2:
                    ViewModelLocator.Atom.FlowHostVM.spiInspectedData.Add("[" + eAssignedLane_Printer.Lane2.ToString() + "]" + panel.InspectStartTime);
                    Log4.PrinterLogger.InfoFormat(" -Push [{0}] CurrentInspectModeTemp.InspectMode={1} .InspectResult={2}", Lane.ToString(), panel.InspectMode, panel.InspectResult);
                    PrinterManager.getInstance().CurrentInspectModeTemp[1].InspectMode   = panel.InspectMode;
                    PrinterManager.getInstance().CurrentInspectModeTemp[1].InspectResult = panel.InspectResult;
                    Log4.PrinterLogger.InfoFormat(" -Enqueue [{0}] SPI Data InspectTime = {1}", Lane.ToString(), panel.InspectStartTime);
                    PrinterManager.getInstance().RemotePrinter[1].Printer.InspectedPanels.Enqueue(panel);
                    //PrinterManager.getInstance().RemotePrinter[1].Printer.StartProcess();
                    break;
                }
                return(true);
            }
        }
예제 #17
0
 public PrinterDuplexService()
 {
     _window   = (PrinterWindow)App.Current.MainWindow;
     _Callback = OperationContext.Current.GetCallbackChannel <IPrinterDuplexServiceCallback>();
     PrinterManager.getInstance().PrinterDuplexServiceInstance = this;
 }
예제 #18
0
        public void StartProcess(eAssignedLane_Printer Lane, string filename)
        {
            if (PrinterManager.getInstance() == null)
            {
                return;
            }
            else
            {
                Log4.PrinterLogger.InfoFormat("[SOA]StartProcess({0},{1})", Lane.ToString(), filename);
                //如果檔案是用XML則需要enqueue
                if (PrinterManager.getInstance().ExchangeMethod == SFCData.eSFCDataExchangeMethod.XML)
                {
                    InspectedPanel panel = null;
                    while (panel == null)
                    {
                        panel = null;
                        try
                        {
                            panel = IPCHelper.DeserializeFromXML <InspectedPanel>(filename);
                        }
                        catch (Exception ex)
                        {
                            //Log4.SFCLogger.InfoFormat("Pause {0} ms", iPause);
                            //Thread.Sleep(iPause);
                            //Log4.SFCLogger.ErrorFormat("DeserializeFromXML File {0} Exception:{1}", AssemblyPath + "\\DataExchange\\" + e.Name, ex.Message);
                        }
                    }
                    switch (Lane)
                    {
                    case eAssignedLane_Printer.None:
                        break;

                    case eAssignedLane_Printer.Lane1:
                        ViewModelLocator.Atom.FlowHostVM.spiInspectedData.Add("[" + eAssignedLane_Printer.Lane1.ToString() + "]" + panel.InspectStartTime);
                        Log4.PrinterLogger.InfoFormat(" -Push [{0}] CurrentInspectModeTemp.InspectMode={1} .InspectResult={2}", Lane.ToString(), panel.InspectMode, panel.InspectResult);
                        PrinterManager.getInstance().CurrentInspectModeTemp[0].InspectMode   = panel.InspectMode;
                        PrinterManager.getInstance().CurrentInspectModeTemp[0].InspectResult = panel.InspectResult;
                        Log4.PrinterLogger.InfoFormat(" -Enqueue [{0}] SPI Data InspectTime = {1}", Lane.ToString(), panel.InspectStartTime);
                        PrinterManager.getInstance().RemotePrinter[0].Printer.InspectedPanels.Enqueue(panel);

                        break;

                    case eAssignedLane_Printer.Lane2:
                        ViewModelLocator.Atom.FlowHostVM.spiInspectedData.Add("[" + eAssignedLane_Printer.Lane2.ToString() + "]" + panel.InspectStartTime);
                        Log4.PrinterLogger.InfoFormat(" -Push [{0}] CurrentInspectModeTemp.InspectMode={1} .InspectResult={2}", Lane.ToString(), panel.InspectMode, panel.InspectResult);
                        PrinterManager.getInstance().CurrentInspectModeTemp[1].InspectMode   = panel.InspectMode;
                        PrinterManager.getInstance().CurrentInspectModeTemp[1].InspectResult = panel.InspectResult;
                        Log4.PrinterLogger.InfoFormat(" -Enqueue [{0}] SPI Data InspectTime = {1}", Lane.ToString(), panel.InspectStartTime);
                        PrinterManager.getInstance().RemotePrinter[1].Printer.InspectedPanels.Enqueue(panel);

                        break;
                    }
                }
                switch (Lane)
                {
                case eAssignedLane_Printer.None:
                    break;

                case eAssignedLane_Printer.Lane1:
                    PrinterManager.getInstance().RemotePrinter[0].Printer.StartProcess();
                    break;

                case eAssignedLane_Printer.Lane2:
                    PrinterManager.getInstance().RemotePrinter[1].Printer.StartProcess();
                    break;
                }
            }
        }