VisionPro相機硬件觸發初始化 - C#

        private void InitAcqFifo()
        {
            CogFrameGrabbers FrameGrabber = new CogFrameGrabbers();//識別已安裝的幀抓取器的類//幀抓取器:相機
            if (FrameGrabber.Count > 0)//如果相機個數大於1
            {
                for (int i = 0; i < FrameGrabber.Count; i++)
                {
                    //在此幀抓取器上創建新的採集fifo。AutoPrepare的值將用作autopreparenabled屬性的初始設置。如果該值爲真,則在創建fifo後將準備fifo。
                    FIFO[i] = FrameGrabber[i].CreateAcqFifo(FrameGrabber[i].AvailableVideoFormats[1], CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
                    if (FIFO == null)
                    {
                        throw new CogAcqCannotCreateFifoException("無法創建採集FIFO.");
                    }
                    CameraName = FIFO[i].FrameGrabber.Name;
                    Trigger[i] = FIFO[i].OwnedTriggerParams;
                    Trigger[i].TriggerModel = CogAcqTriggerModelConstants.Auto;//獲取由外部觸發器啓動。調用startackire是個錯誤
                    Trigger[i].TriggerEnabled = true;
                    if (Trigger == null)
                    {
                        throw new CogAcqNoFrameGrabberException("這種板型 " + FIFO[i].FrameGrabber.Name + "不支持觸發模式.");
                    }
                    //FIFO[i].StartAcquire();
                    AcqExposure = FIFO[i].OwnedExposureParams;
                    AcqExposure.Exposure = 0.45;
                    //AcqBrightness = FIFO[i].OwnedBrightnessParams;
                    //AcqBrightness.Brightness = 0.9;
                    //FIFO[i].Complete += new CogCompleteEventHandler(FIFO0_Complete);
                    switch (i)
                    {
                        case 0: FIFO[0].Complete += new CogCompleteEventHandler(FIFO0_Complete); break;
                        case 1: FIFO[1].Complete += new CogCompleteEventHandler(FIFO1_Complete); break;
                        case 2: FIFO[2].Complete += new CogCompleteEventHandler(FIFO2_Complete); break;
                    }
                }
            }
            else
            {
                throw new CogAcqNoFrameGrabberException("電路板可能丟失或工作不正常.");
            }
        }


        public int numReadyVal0, numPendingVal0, myTicket0, currentTrigNum0;
        public int numReadyVal1, numPendingVal1, myTicket1, currentTrigNum1;
        public int numReadyVal2, numPendingVal2, myTicket2, currentTrigNum2;
        public bool busyVal0 = false;
        public bool busyVal1 = false;
        public bool busyVal2 = false;
        int TriggerCount0 = 0;
        int TriggerCount1 = 0;
        int TriggerCount2 = 0;
        ICogImage[] Image = new ICogImage[5];/////
        bool CamFlag1 = false, CamFlag2 = false, CamFlag3 = false;
        void FIFO0_Complete(object sender, CogCompleteEventArgs e)
        {
            try
            {
                FIFO[0].GetFifoState(out numPendingVal0, out numReadyVal0, out busyVal0);

                if (numReadyVal0 > 0)
                {
                    TriggerCount0++;
                    numReadyVal0 = 0;
                    Image[0] = FIFO[0].CompleteAcquire(-1, out myTicket0, out currentTrigNum0);
                    //cogRecordDisplay1.Image = FIFO[0].CompleteAcquire(-1, out myTicket0, out currentTrigNum0);
                    CamFlag1 = true;
                    
                    if (TriggerCount0 == 4)
                    {
                        TriggerCount0 = 0;
                        GC.Collect();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        void FIFO1_Complete(object sender, CogCompleteEventArgs e)
        {
            try
            {
                FIFO[1].GetFifoState(out numPendingVal1, out numReadyVal1, out busyVal1);

                if (numReadyVal1 > 0)
                {
                    TriggerCount1++;
                    numReadyVal1 = 0;
                    Image[1] = FIFO[1].CompleteAcquire(-1, out myTicket1, out currentTrigNum1);
                    //cogRecordDisplay2.Image = FIFO[1].CompleteAcquire(-1, out myTicket1, out currentTrigNum1);
                    CamFlag2 = true;
                    
                    if (TriggerCount1 == 4)
                    {
                        TriggerCount1 = 0;
                        GC.Collect();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        void FIFO2_Complete(object sender, CogCompleteEventArgs e)
        {
            try
            {
                FIFO[2].GetFifoState(out numPendingVal2, out numReadyVal2, out busyVal2);

                if (numReadyVal2 > 0)
                {
                    TriggerCount2++;
                    numReadyVal2 = 0;
                    Image[2] = FIFO[2].CompleteAcquire(-1, out myTicket2, out currentTrigNum2) ;
                    //cogRecordDisplay3.Image = FIFO[2].CompleteAcquire(-1, out myTicket2, out currentTrigNum2);
                    CamFlag3 = true;
                    if (TriggerCount2 == 4)
                    {
                        TriggerCount2 = 0;
                        GC.Collect();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

感覺我這備註寫的挺多的,應該好理解吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章