示例#1
0
        public MainForm()
        {
            log4net.Config.XmlConfigurator.Configure();
            log.Info("MainForm.MainForm : Application opened as " + PROGRAM_NAME);

            InitializeComponent();
            this.Text    = PROGRAM_NAME;
            isCameraMode = false;

            zibReplayCam1.SetText("");
            zibReplayCam2.SetText("");
            Camera1Display.SetText("");
            Camera2Display.SetText("");

            SwitchDisplayMode();

            guiSem           = new Semaphore(0, 1);
            program_settings = new Settings();
            // see how much memory is available on computer and take 80% of it
            float freeMem = 1000;

            try
            {
                System.Diagnostics.PerformanceCounter ramCounter = new System.Diagnostics.PerformanceCounter("Memory", "Available MBytes");
                freeMem = ramCounter.NextValue();
            }
            catch (Exception inner)
            {
                log.Error("MainForm.Form1_Load : Unable to retrieve amount of free memory on system, defaulting to 1GB.", inner);
            }
            if (freeMem > 2100)
            {
                freeMem = 2100;
            }

            // each queue takes 6 MB per item in it
            int queueSize = 50;//Convert.ToInt32(freeMem * 0.90) / 32;

            mainQueue = new CircularQueue <QueueElement>("MAIN", queueSize);
            ipQueue1  = new CircularQueue <QueueElement>("IP1", queueSize);
            ipQueue2  = new CircularQueue <QueueElement>("IP2", queueSize);
            saveQueue = new CircularQueue <QueueElement>("save_queue", queueSize);

            // initialize camera and processor 1
            cam1 = new Camera();
            cam1.AddSubscriber(ipQueue1);
            cam1.AddSubscriber(mainQueue);
            imagep1 = new FailureDetector(DEFAULT_IMAGE_PROCESSOR1_NAME, ref cam1);
            imagep1.SetConsumerQueue(ipQueue1);
            imagep1.AddSubscriber(saveQueue);
            imagep1.AddSubscriber(mainQueue);
            imagep1.EnableAutoExposure(true);
            imagep1.EnableAutoROI(false);

            // initialize camera and processor 2
            cam2 = new Camera();
            cam2.AddSubscriber(ipQueue2);
            cam2.AddSubscriber(mainQueue);
            imagep2 = new FailureDetector(DEFAULT_IMAGE_PROCESSOR2_NAME, ref cam2);
            imagep2.SetConsumerQueue(ipQueue2);
            imagep2.AddSubscriber(saveQueue);
            imagep2.AddSubscriber(mainQueue);
            imagep2.EnableAutoExposure(true);
            imagep2.EnableAutoROI(false);

            // sets image queue
            saveEngine = new ImageHistoryBuffer();
            saveEngine.SetConsumerQueue(saveQueue);

            // add thread error handlers
            cam1.ThreadError       += new ThreadErrorHandler(Camera0ThreadError);
            cam2.ThreadError       += new ThreadErrorHandler(Camera1ThreadError);
            imagep1.ThreadError    += new ThreadErrorHandler(ImageProcessor0ThreadError);
            imagep2.ThreadError    += new ThreadErrorHandler(ImageProcessor0ThreadError);
            saveEngine.ThreadError += new ThreadErrorHandler(SaveQueueThreadError);

            // start the cameras
            RefreshCameras();


            // initialize camera and processor periods
            camera1Period  = 0.066;
            camera2Period  = 0.066;
            process1Period = 0.2;
            process2Period = 0.2;

            // need to update comboboxes
            cmboCam1View.Items.Add(DISPLAY_TYPE_NORMAL);
            cmboCam1View.Items.Add(DISPLAY_TYPE_PROCESSED);
            cmboCam1View.SelectedIndex = 0;

            cmboCam2View.Items.Add(DISPLAY_TYPE_NORMAL);
            cmboCam2View.Items.Add(DISPLAY_TYPE_PROCESSED);
            cmboCam2View.SelectedIndex = 0;

            cmbo_DataType.Items.Add(DISPLAY_TYPE_NORMAL);
            cmbo_DataType.Items.Add(DISPLAY_TYPE_PROCESSED);
            cmbo_DataType.SelectedIndex = 1;

            cmbo_VideoType.Items.Add(VIDEO_TYPE_TEST);
            cmbo_VideoType.Items.Add(VIDEO_TYPE_DEBUG);
            cmbo_VideoType.SelectedIndex = 0;

            cmbo_DataType.SelectedIndexChanged  += cmbo_DataType_SelectedIndexChanged;
            cmbo_VideoType.SelectedIndexChanged += cmbo_VideoType_SelectedIndexChanged;

            isReplayManagerValid = false;

            guiSem.Release();
            // setup timer update
            TimerCallback tcb = new TimerCallback(DisplayImage);

            imageUpdateTimer = new System.Threading.Timer(tcb, imageUpdateTimer, Timeout.Infinite, Timeout.Infinite);
            imageUpdateTimer.Change(1, 200);

            // setup garbage collector
            TimerCallback tcb2 = new TimerCallback(GarbageCollector);

            garbageCollector = new System.Threading.Timer(tcb2, garbageCollector, Timeout.Infinite, Timeout.Infinite);
            garbageCollector.Change(1, 100);

            // setup replay feedback
            TimerCallback tcb3 = new TimerCallback(ReplayFeedbackTimer);

            replayFeedbackTimer = new System.Threading.Timer(tcb3, replayFeedbackTimer, Timeout.Infinite, Timeout.Infinite);
        }
示例#2
0
        private bool Start()
        {
            log.Info("MainForm.Start : Starting image processors and save queue engine.");
            // set parameters for image processors
            MetaData metadata = MetaData.Instance;

            imagep1.SetContrast(metadata.MinimumContrast);
            imagep1.SetRange(metadata.ImagerNoise);
            imagep1.SetTargetIntensity(metadata.TargetIntenstiy);
            imagep2.SetContrast(metadata.MinimumContrast);
            imagep2.SetRange(metadata.ImagerNoise);
            imagep2.SetTargetIntensity(metadata.TargetIntenstiy);

            Rectangle r = Camera1Display.GetRegionToProcess();

            if (r != Rectangle.Empty)
            {
                imagep1.EnableAutoROI(true);
                imagep1.SetRegionToProcess(r);
            }
            else
            {
                imagep1.EnableAutoROI(false);
            }

            r = Camera2Display.GetRegionToProcess();
            if (r != Rectangle.Empty)
            {
                imagep2.EnableAutoROI(true);
                imagep2.SetRegionToProcess(r);
            }
            else
            {
                imagep2.EnableAutoROI(false);
            }

            try
            {
                imagep1.Start(1000 / metadata.TestFrequency);
            }
            catch (Exception inner)
            {
                string            errMsg = "MainForm.Start : Error starting image processor 1.";
                MainFormException ex     = new MainFormException(errMsg, inner);
                log.Error(errMsg, ex);
                DisplayError(errMsg, ex);
                return(false);
            }
            Thread.Sleep(100);
            try
            {
                imagep2.Start(1000 / metadata.TestFrequency);
            }
            catch (Exception inner)
            {
                string            errMsg = "MainForm.Start : Error starting image processor 2.";
                MainFormException ex     = new MainFormException(errMsg, inner);
                log.Error(errMsg, ex);
                DisplayError(errMsg, ex);
                return(false);
            }
            try
            {
                saveEngine.Start(5);
            }
            catch (Exception inner)
            {
                string            errMsg = "MainForm.Start : Error starting save engine.";
                MainFormException ex     = new MainFormException(errMsg, inner);
                log.Error(errMsg, ex);
                DisplayError(errMsg, ex);
                return(false);
            }
            return(true);
        }