Beispiel #1
0
        private void CameraClose()
        {
            try
            {
                if (!IsStop)
                {
                    this.CameraGrabStop();
                }
                if (MatroxCameraList != null)
                {
                    foreach (var cam in MatroxCameraList)
                    {
                        //cam free
                        MIL.MdigFree(cam.DigitizerID);
                        try
                        {
                            //board free
                            MIL.MsysFree(cam.SystemID);
                        }
                        catch
                        {
                            //보드에 연결된 카메라가 다 닫히지 않았다면 이리로 들어옴
                        }
                    }
                    MatroxCameraList.Clear();

                    //app free
                    MIL.MappFree(_MilApplication);
                }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message + "\n" + err.StackTrace);
            }
        }
Beispiel #2
0
        private void CameraOpen()
        {
            try
            {
                //mil app open
                MIL.MappAlloc(MIL.M_NULL, MIL.M_DEFAULT, ref _MilApplication);
                //mil throw 관리
                MIL.MappControl(_MilApplication, MIL.M_ERROR, MIL.M_THROW_EXCEPTION);

                //설치된 보드 드라이버 수 가져오기
                var insSysCount = MIL.MappInquire(MIL.M_INSTALLED_SYSTEM_COUNT);
                for (int i = 0; i < insSysCount; i++)
                {
                    MIL_ID        tmpSystem = MIL.M_NULL;
                    StringBuilder sb        = new StringBuilder();

                    //보드 종류 문자열로 뽑아내기
                    MIL.MappInquire(_MilApplication, MIL.M_INSTALLED_SYSTEM_DESCRIPTOR + i, sb);

                    var boardCount = 0;
                    //같은 종류의 보드 몇 개까지 존재하는지 확인
                    while (sb.ToString() != "M_SYSTEM_HOST")
                    {
                        MIL_ID systemId = MIL.M_NULL;
                        try
                        {
                            //보드 alloc
                            MIL.MsysAlloc(sb.ToString(), boardCount, MIL.M_DEFAULT, ref systemId);
                        }
                        catch
                        {
                            //해당 보드는 메인보드에서 인식되지 않음 (없음)
                            break;
                        }
                        //alloc된 보드 추가
                        var cam = new MatroxCamera();

                        //Digitizer 몇개 존재하는지 확인
                        var digCount = MIL.MsysInquire(systemId, MIL.M_DIGITIZER_NUM);
                        //임의의 dcf file 추가 (원하는 dcf로 변경)
                        var dcfPath = AppDomain.CurrentDomain.BaseDirectory + @"\camfile.dcf";

                        //보드에 연결된 카메라 수만큼 돎
                        for (int ii = 0; ii < digCount; ii++)
                        {
                            MIL_ID digitId = MIL.M_NULL;
                            //digitizer alloc
                            MIL.MdigAlloc(systemId, ii, dcfPath, MIL.M_DEFAULT, ref digitId);
                            cam.SystemID    = systemId;
                            cam.DigitizerID = digitId;
                        }
                        MatroxCameraList.Add(cam);
                        boardCount++;
                    }
                }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message + "\n" + err.StackTrace);
            }
        }