Exemple #1
0
        private void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            // run all background tasks here
            BackgroundWorker worker       = sender as BackgroundWorker;
            DataTable        dtComponents = dsData.Tables["Components"];
            DataView         dv           = new DataView(dtComponents);

            dv.RowFilter = "Pick = 1";
            int currentrow = 0;
            int totalrows  = dv.Count;

            Nozzle1Xoffset = dh.Nozzle1Xoffset;
            Nozzle1Yoffset = dh.Nozzle1Yoffset;
            Nozzle2Xoffset = dh.Nozzle2Xoffset;
            Nozzle2Yoffset = dh.Nozzle2Yoffset;

            if (totalrows > 0)
            {
                /* Components table columns
                 *  ComponentCode
                 *  ComponentName
                 *  PlacementX
                 *  PlacementY
                 *  PlacementRotate
                 *  PlacementNozzle
                 *
                 * component list
                 * ComponentCode
                 * ComponentValue
                 * Package
                 *
                 * PlacementHeight
                 * FeederHeight
                 * FeederX
                 * FeederY
                 * VerifywithCamera
                 * TapeFeeder
                 *
                 *
                 * */
                double pcbHeight = double.Parse(dsData.Tables["BoardInfo"].Rows[0][1].ToString());

                double feedrate = 100;
                // double placerate = 20000;
                // double feederPosX = 0;
                //double feederPosY = 0;
                //double feederPosZ = 0;
                //double placePosX = 0;
                //double placePosY = 0;
                //double ComponentRotation = 0;
                //double PlacementHeight = 0;
                //int PlacementNozzle = 1;
                //double PlaceSpeed = 100;

                // bool TapeFeeder = false;
                // bool VerifyCamera = false;



                while (currentrow < totalrows)
                {
                    if (backgroundWorkerBuildPCB.CancellationPending)
                    {
                        e.Cancel = true;
                        dv.Dispose();
                        break;
                    }



                    kfl.PlacementNozzle = int.Parse(dv[currentrow]["PlacementNozzle"].ToString());
                    kfl.PickSpeed       = feedrate;
                    kfl.PlaceSpeed      = comp.GetPlaceSpeed(dv[currentrow]["ComponentCode"].ToString(), feedrate);

                    kfl.FeederX      = CalcXLocation(comp.GetFeederX(dv[currentrow]["ComponentCode"].ToString()), kfl.PlacementNozzle);
                    kfl.FeederY      = CalcYLocation(comp.GetFeederY(dv[currentrow]["ComponentCode"].ToString()), kfl.PlacementNozzle);
                    kfl.FeederHeight = comp.GetFeederHeight(dv[currentrow]["ComponentCode"].ToString());

                    kfl.PlaceHeight = comp.GetPlacementHeight(dv[currentrow]["ComponentCode"].ToString()) - pcbHeight;

                    kfl.TapeFeeder = comp.GetComponentTapeFeeder(dv[currentrow]["ComponentCode"].ToString());

                    kfl.PlaceX        = CalcXLocation(double.Parse(dv[currentrow]["PlacementX"].ToString()), kfl.PlacementNozzle);
                    kfl.PlaceY        = CalcYLocation(double.Parse(dv[currentrow]["PlacementY"].ToString()), kfl.PlacementNozzle);
                    kfl.PlaceRotation = double.Parse(dv[currentrow]["PlacementRotate"].ToString());

                    kfl.VerifyCamera = comp.GetComponentVerifywithCamera(dv[currentrow]["ComponentCode"].ToString());

                    //feederPosX = CalcXLocation(comp.GetFeederX(dv[currentrow]["ComponentCode"].ToString()), PlacementNozzle);
                    //double feederPosY = CalcYLocation(comp.GetFeederY(dv[currentrow]["ComponentCode"].ToString()), PlacementNozzle);
                    //feederPosZ = comp.GetFeederHeight(dv[currentrow]["ComponentCode"].ToString());
                    // PlacementHeight = comp.GetPlacementHeight(dv[currentrow]["ComponentCode"].ToString()) - pcbHeight;
                    //TapeFeeder = comp.GetComponentTapeFeeder(dv[currentrow]["ComponentCode"].ToString());
                    // placePosX = CalcXLocation(double.Parse(dv[currentrow]["PlacementX"].ToString()), kfl.PlacementNozzle);
                    //placePosY = CalcYLocation(double.Parse(dv[currentrow]["PlacementY"].ToString()), kfl.PlacementNozzle);
                    //ComponentRotation = double.Parse(dv[currentrow]["PlacementRotate"].ToString());
                    //VerifyCamera = comp.GetComponentVerifywithCamera(dv[currentrow]["ComponentCode"].ToString());

                    if (currentrow == 0)
                    {
                        SetFeederOutputs(comp.GetFeederID(dv[currentrow]["ComponentCode"].ToString())); // send feeder to position
                    }
                    //MessageBox.Show(kfl.FeederY.ToString());
                    //kf.MoveSingleFeed(kfl.PickSpeed, 100, kfl.FeederY, ClearHeight, ClearHeight, 0, 0);

                    kf.MoveSingleFeed(kfl.PickSpeed, kfl.FeederX, kfl.FeederY, ClearHeight, ClearHeight, 0, 0);


                    if (comp.GetComponentTapeFeeder(dv[currentrow]["ComponentCode"].ToString()))
                    {
                        while (!usbController.GetFeederReadyStatus())
                        {
                            Thread.Sleep(10);
                        }
                        Thread.Sleep(50);
                        if (kfl.PlacementNozzle == 1)
                        {
                            // use picker 1
                            kf.MoveSingleFeed(kfl.PickSpeed, kfl.FeederX, kfl.FeederY, kfl.FeederHeight, ClearHeight, 0, 0);
                            Thread.Sleep(Nozzel1PickSleep);
                            // go down and turn on suction
                            usbController.SetVAC1(true);
                            Thread.Sleep(Nozzel1PickSleep);
                            kf.MoveSingleFeed(kfl.PickSpeed, kfl.FeederX, kfl.FeederY, ClearHeight, ClearHeight, 0, 0);
                        }
                        else
                        {
                            // nozzle 2 on tape feeder
                            kf.MoveSingleFeed(kfl.PickSpeed, kfl.FeederX, kfl.FeederY, ClearHeight, kfl.FeederHeight, 0, 0);
                            Thread.Sleep(Nozzel2PickSleep);
                            // go down and turn on suction
                            usbController.SetVAC2(true);
                            Thread.Sleep(Nozzel2PickSleep);
                            kf.MoveSingleFeed(kfl.PickSpeed, kfl.FeederX, kfl.FeederY, ClearHeight, ClearHeight, 0, 0);
                        }
                    }
                    else
                    {
                        // use picker 2
                        while (usbController.CheckChipMotorRunning())
                        {
                            Thread.Sleep(10);
                        }
                        kf.MoveSingleFeed(kfl.PickSpeed, kfl.FeederX, kfl.FeederY, ClearHeight, kfl.FeederHeight, 0, 0);
                        Thread.Sleep(Nozzel2PickSleep); // 200

                        usbController.SetVAC2(true);
                        Thread.Sleep(Nozzel2PickSleep); // 300
                        kf.MoveSingleFeed(kfl.PickSpeed, kfl.FeederX, kfl.FeederY, ClearHeight, ClearHeight, 0, 0);
                    }
                    // send picker to pick next item
                    if (currentrow >= 0 && (currentrow + 1) < totalrows)
                    {
                        Thread.Sleep(100);
                        Thread.Sleep(100);


                        SetFeederOutputs(comp.GetFeederID(dv[currentrow + 1]["ComponentCode"].ToString())); // send feeder to position
                    }


                    // check if place speed needs to go slower


                    // rotate head and place component

                    //SetResultsLabelText("Placing Component");
                    if (comp.GetComponentTapeFeeder(dv[currentrow]["ComponentCode"].ToString()) && (kfl.PlacementNozzle == 1))
                    {
                        /*
                         * if (kfl.VerifyCamera)
                         * {
                         *  kfl = CheckWithCamera(kfl, kf, 1, usbController, img);
                         *  kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, ClearHeight, ClearHeight, 0, kfl.PlaceRotation);
                         *  kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, kfl.PlaceHeight, ClearHeight, 0, kfl.PlaceRotation);
                         *
                         * } else
                         * {
                         */
                        kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, ClearHeight, ClearHeight, 0, kfl.PlaceRotation);
                        kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, kfl.PlaceHeight, ClearHeight, 0, kfl.PlaceRotation);

                        // }
                        Thread.Sleep(Nozzel1PlaceSleep);
                        usbController.SetVAC1(false);
                        Thread.Sleep(Nozzel1PlaceSleep);
                        kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, ClearHeight, ClearHeight, 0, kfl.PlaceRotation);
                    }
                    else
                    {
                        // use picker 2  CalcXwithNeedleSpacing

                        /*
                         * if (kfl.VerifyCamera)
                         * {
                         *  kfl = CheckWithCamera(kfl, kf, 2, usbController, img);
                         *  kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, ClearHeight, ClearHeight, kfl.PlaceRotation, 0);
                         *  Thread.Sleep(200);
                         *  kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, ClearHeight, kfl.PlaceHeight, kfl.PlaceRotation, 0);
                         * }
                         * else
                         * {*/
                        kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, ClearHeight, ClearHeight, kfl.PlaceRotation, 0);
                        Thread.Sleep(Nozzel2PlaceSleep);
                        kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, ClearHeight, kfl.PlaceHeight, kfl.PlaceRotation, 0);

                        //}

                        // go down and turn off suction
                        Thread.Sleep(Nozzel2PlaceSleep);
                        usbController.SetVAC2(false);
                        Thread.Sleep(Nozzel2PlaceSleep);
                        kf.MoveSingleFeed(kfl.PlaceSpeed, kfl.PlaceX, kfl.PlaceY, ClearHeight, ClearHeight, kfl.PlaceRotation, 0);
                    }

                    currentrow++;
                }
                // move near to home point
                kf.MoveSingleFeed(kfl.PickSpeed, 10, 10, 10, 10, 0, 0);
            }
            else
            {
                MessageBox.Show("Board file not loaded");
            }
            backgroundWorkerBuildPCB.CancelAsync();
            usbController.SetResetFeeder();
            usbController.RunVibrationMotor(MotorRunLoop);
            kf.RunHomeAll();

            //dtLog.WriteXml(_LogFile);

            dv.Dispose();
            dtComponents.Dispose();
        }
Exemple #2
0
        public KflopLocation CheckWithCamera(KflopLocation kfl, Kflop kf, int nozzle, UsbDevice usbController, System.Windows.Controls.Image imgref)
        {
            double CameraX = 295.4;
            double CameraY = 150.2;

            double CameraX2 = 263.5;
            double CameraY2 = 150.2;

            double PlaceX        = kfl.PlaceX;
            double PlaceY        = kfl.PlaceY;
            double PlaceRotation = kfl.PlaceRotation;


            int retrycounter = 0;


            img          = imgref;
            outstr.Loc1X = 0;
            videoCam.Start();

            if (nozzle == 1)
            {
                kf.MoveSingleFeed(kfl.PlaceSpeed, CameraX, CameraY, ClearHeight, ClearHeight, 0, kfl.PlaceRotation);
                usbController.SetHeadCameraLED(true);
            }
            else
            {
                kf.MoveSingleFeed(kfl.PlaceSpeed, CameraX2, CameraY2, ClearHeight, ClearHeight, kfl.PlaceRotation, 0);
                usbController.SetHeadCameraLED(true);
            }
            Thread.Sleep(2000);
            // verify camera image if needed

            // loop until part has correct rotation
            while (VisionCorrectionNeeded && retrycounter < 100)
            {
                if (outstr.OffsetX < 0.5 && outstr.OffsetY < 0.5)
                {
                    PlaceX        = PlaceX + outstr.OffsetX;
                    PlaceY        = PlaceY + outstr.OffsetY;
                    PlaceRotation = PlaceRotation + outstr.LocAngle;

                    VisionCorrectionNeeded = true;
                }
                else
                {
                    if (nozzle == 1)
                    {
                        PlaceX        = PlaceX + outstr.OffsetX;
                        PlaceY        = PlaceY + outstr.OffsetY;
                        PlaceRotation = PlaceRotation + outstr.LocAngle;
                        CameraX       = CameraX + outstr.OffsetX;
                        CameraY       = CameraY + outstr.OffsetY;

                        kf.MoveSingleFeed(kfl.PlaceSpeed, CameraX, CameraY, ClearHeight, ClearHeight, 0, PlaceRotation);
                    }
                    else
                    {
                        PlaceX        = PlaceX + outstr.OffsetX;
                        PlaceY        = PlaceY + outstr.OffsetY;
                        PlaceRotation = PlaceRotation + outstr.LocAngle;
                        CameraX2      = CameraX2 + outstr.OffsetX;
                        CameraX2      = CameraX2 + outstr.OffsetY;


                        kf.MoveSingleFeed(kfl.PlaceSpeed, CameraX2, CameraY2, ClearHeight, ClearHeight, kfl.PlaceRotation, 0);
                    }
                    VisionCorrectionNeeded = false;
                }
                outstr.Loc1X = 0;
                Thread.Sleep(1000);
                retrycounter++;
            }



            usbController.SetHeadCameraLED(false);
            if (videoCam != null && videoCam.IsRunning)
            {
                videoCam.SignalToStop();
            }
            return(kfl);
        }