Beispiel #1
0
        /// <summary>
        /// 根据相机名称获取相机
        /// </summary>
        /// <param name="camName"></param>
        /// <returns></returns>
        protected override bool DoGetCameraByName(string camName)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceNums > 0)
                {
                    rt = false; //大恒USB2.0相机未找到根据名称获取相机的方法
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机获取名称对应设备失败!\n:{0}", "设备列表为空"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #2
0
        /// <summary>
        /// 根据相机索引获取相机
        /// [相机索引号由其上电顺序得来,非固定]
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        protected override bool DoGetCameraByIdx(int index)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceNums > 0)
                {
                    if (index <= _deviceNums)
                    {
                        if (_deviceRef != System.IntPtr.Zero)
                        {
                            status = USBCamera.API.EndHVDevice(_deviceRef);
                            USBCamera.API.HV_VERIFY(status);
                            _deviceRef = System.IntPtr.Zero;
                            _deviceIdx = 0;
                        }

                        if (USBCamera.HVSTATUS.STATUS_OK == status)
                        {
                            _deviceIdx = index;
                            status     = USBCamera.API.BeginHVDevice(_deviceIdx, ref _deviceRef);
                            USBCamera.API.HV_VERIFY(status);
                            rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                            if (!rt)
                            {
                                if (DriverExceptionDel != null)
                                {
                                    DriverExceptionDel(string.Format("错误:大恒USB2.0相机获取索引对应设备失败!\n索引:{0}\n错误代码:{1:X8}",
                                                                     index, System.Convert.ToInt32(status)));
                                }
                            }
                        }
                    }
                    else
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机获取索引对应设备失败!\n索引:{0}\n超出范围", index));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机获取索引对应设备失败!\n:{0}", "设备列表为空"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #3
0
        /// <summary>
        /// 获取索引指定相机的名称
        /// </summary>
        /// <param name="index">相机索引</param>
        /// <returns></returns>
        protected override string DoGetCameraSN(int index)
        {
            if (DoGetCameraByIdx(index))
            {
                USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
                int    size   = sizeof(USBCamera.HVTYPE);
                IntPtr buffer = new IntPtr();
                buffer = System.Runtime.InteropServices.Marshal.AllocHGlobal(size);
                status = USBCamera.API.HVGetDeviceInfo(_deviceRef, USBCamera.HV_DEVICE_INFO.DESC_DEVICE_SERIESNUM, buffer, ref size);
                USBCamera.API.HV_VERIFY(status);

                int[] sn = new int[size / 4];
                System.Runtime.InteropServices.Marshal.Copy(buffer, sn, 0, size / 4);

                StringBuilder str = new StringBuilder();
                //for (int i=0;i<size/4;i++)

                string serialNum = str.ToString();
                str.Remove(0, str.Length);
                System.Runtime.InteropServices.Marshal.FreeHGlobal(buffer);

                return(serialNum);
            }

            return(string.Empty);
        }
Beispiel #4
0
        /// <summary>
        /// 设置相机消隐
        /// </summary>
        public void SetBlanking()
        {
            System.Diagnostics.Debug.Assert(_deviceRef != IntPtr.Zero);

            USBCamera.HVSTATUS status = USBCamera.API.HVSetBlanking(_deviceRef, m_kHBlanking, m_kVBlanking);
            USBCamera.API.HV_VERIFY(status);
        }
Beispiel #5
0
        /// <summary>
        /// 设置相机采集速度
        /// </summary>
        private void SetSnapSpeed()
        {
            System.Diagnostics.Debug.Assert(_deviceRef != IntPtr.Zero);

            USBCamera.HVSTATUS status = USBCamera.API.HVSetSnapSpeed(_deviceRef, m_kSnapSpeed);
            USBCamera.API.HV_VERIFY(status);
        }
Beispiel #6
0
        protected override bool DoPauseGrab()
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机暂停采集失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置暂停采集失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #7
0
        private void SetADC()
        {
            System.Diagnostics.Debug.Assert(_deviceRef != IntPtr.Zero);

            USBCamera.HVSTATUS status = USBCamera.API.HVADCControl(_deviceRef, (byte)USBCamera.HV_ADC_CONTROL.ADC_BITS, m_kADCLevel);
            USBCamera.API.HV_VERIFY(status);
        }
Beispiel #8
0
        /// <summary>
        /// 方法:设置采集模式
        /// </summary>
        /// <param name="acqmode"></param>
        /// <param name="frameNum"></param>
        /// <returns></returns>
        protected override bool DoSetAcquisitionMode(ProCommon.Communal.AcquisitionMode acqmode, uint frameNum)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    DoStartGrab();
                    switch (acqmode)
                    {
                    case ProCommon.Communal.AcquisitionMode.Continue:
                        status = USBCamera.API.HVSetSnapMode(_deviceRef, USBCamera.HV_SNAP_MODE.CONTINUATION);
                        USBCamera.API.HV_VERIFY(status);
                        break;

                    case ProCommon.Communal.AcquisitionMode.SoftTrigger:
                        break;

                    case ProCommon.Communal.AcquisitionMode.ExternalTrigger:
                        status = USBCamera.API.HVSetSnapMode(_deviceRef, USBCamera.HV_SNAP_MODE.TRIGGER);
                        USBCamera.API.HV_VERIFY(status);
                        break;

                    default: break;
                    }

                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置采集模式失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置设备采集模式失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #9
0
        /// <summary>
        /// 方法:设置触发信号边缘
        /// [注:用于触发源为硬触发
        /// 并非大恒USB2.0相机支持边缘信号
        /// 故不再设置触发信号边缘]
        /// </summary>
        /// <param name="dege">边缘信号</param>
        /// <returns></returns>
        protected override bool DoSetTriggerActivation(ProCommon.Communal.EffectiveSignal edge)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    switch (edge)
                    {
                    case ProCommon.Communal.EffectiveSignal.FallEdge:
                        break;

                    case ProCommon.Communal.EffectiveSignal.RaiseEdge:
                        break;

                    default:
                        break;
                    }

                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置触发信号边沿失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置设备采集模式失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #10
0
        protected override bool DoRegisterExceptionCallBack()
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                rt = true;
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #11
0
        /// <summary>
        /// 设置相机输出信号
        /// </summary>
        /// <param name="onOff"></param>
        /// <param name="idx"></param>
        /// <returns></returns>
        protected override bool DoSetOutPut(int idx, bool onOff)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
            }
            catch (System.Exception ex)
            {
                if (DriverExceptionDel != null)
                {
                    DriverExceptionDel(string.Format("错误:迈德威视相机设置输出信号失败!\n错误描述:{0}", ex.Message));
                }
            }
            finally
            {
            }
            return(rt);
        }
Beispiel #12
0
        protected override bool DoSetGain(float gain)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    int gn = Convert.ToInt32(gain);
                    for (int i = 0; i < 4; i++)
                    {
                        status = USBCamera.API.HVAGCControl(_deviceRef, (byte)(USBCamera.HV_CHANNEL.RED_CHANNEL + i), gn);
                        USBCamera.API.HV_VERIFY(status);
                    }
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置模拟增益失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置增益失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #13
0
        protected override bool DoStartGrab()
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    IntPtr[] pBuffers = new IntPtr[1];
                    pBuffers[0] = m_pRawBuffer;
                    status      = USBCamera.API.HVStartSnap(_deviceRef, pBuffers, 1);
                    USBCamera.API.HV_VERIFY(status);
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机开启采集失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置开启采集失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #14
0
        /// <summary>
        /// 获取相机类型
        /// </summary>
        private void GetCameraType()
        {
            if (_deviceRef != IntPtr.Zero)
            {
                IntPtr        buffer = new IntPtr();
                int           size   = sizeof(USBCamera.HVTYPE);
                StringBuilder str    = new StringBuilder();

                buffer = System.Runtime.InteropServices.Marshal.AllocHGlobal(size);
                USBCamera.HVSTATUS status = USBCamera.API.HVGetDeviceInfo(_deviceRef, USBCamera.HV_DEVICE_INFO.DESC_DEVICE_TYPE, buffer, ref size);
                USBCamera.API.HV_VERIFY(status);
                int[] type = new int[size / 4];
                System.Runtime.InteropServices.Marshal.Copy(buffer, type, 0, size / 4);
                for (int i = 0; i < size / 4; i++)
                {
                    str.Append(((USBCamera.HVTYPE)type[i]).ToString().Substring(0, 8));
                }
                m_strCameraType = str.ToString();
                str.Remove(0, str.Length);
                System.Runtime.InteropServices.Marshal.FreeHGlobal(buffer);
            }
        }
Beispiel #15
0
        protected override bool DoSetExposureTime(float exposuretime)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    status = SetExposureTime(m_OutPutWindow.Width, m_kUpperET, m_kLowerET,
                                             m_kHBlanking, m_kSnapSpeed, m_kResolotion);
                    USBCamera.API.HV_VERIFY(status);
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置曝光时间失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置曝光时间失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #16
0
        /// <summary>
        /// 设置表征源图像大小的矩形
        /// </summary>
        private void SetOutPutWindow()
        {
            System.Diagnostics.Debug.Assert(_deviceRef != IntPtr.Zero);

            IntPtr buffer = new IntPtr();
            int    size   = 0;

            USBCamera.HVSTATUS status = USBCamera.API.HVGetDeviceInfo(_deviceRef, USBCamera.HV_DEVICE_INFO.DESC_RESOLUTION, buffer, ref size);

            buffer = System.Runtime.InteropServices.Marshal.AllocHGlobal(size);
            status = USBCamera.API.HVGetDeviceInfo(_deviceRef, USBCamera.HV_DEVICE_INFO.DESC_RESOLUTION, buffer, ref size);
            USBCamera.API.HV_VERIFY(status);
            int[] type = new int[64];
            System.Runtime.InteropServices.Marshal.Copy(buffer, type, 0, 64);

            System.Runtime.InteropServices.Marshal.FreeHGlobal(buffer);

            m_OutPutWindow.Width  = type[(int)m_kResolotion * 2];
            m_OutPutWindow.Height = type[(int)m_kResolotion * 2 + 1];

            status = USBCamera.API.HVSetOutputWindow(_deviceRef, m_OutPutWindow.X, m_OutPutWindow.Y, m_OutPutWindow.Width, m_OutPutWindow.Height);
            USBCamera.API.HV_VERIFY(status);
        }
Beispiel #17
0
        protected override bool DoSetTriggerDelay(int lineIdx, float trigdelay)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    //未发现设置触发延迟方法
                    USBCamera.API.HV_VERIFY(status);
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:迈德威视相机设置触发延迟失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:迈德威视相机设置触发延迟失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #18
0
        protected override bool DoSetFrameRate(float fps)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    //未发现设置采集帧率方法
                    USBCamera.API.HV_VERIFY(status);
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置采集帧率失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机设置采集帧率失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #19
0
        protected override bool DoSoftTriggerOnce()
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    status = USBCamera.API.HVTriggerShot(_deviceRef);
                    USBCamera.API.HV_VERIFY(status);
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机软触发采集失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机单次软触发采集失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #20
0
        protected override bool DoOpen()
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    status = USBCamera.API.HVOpenSnap(_deviceRef, _SDKImageGrabbedDel, new IntPtr());
                    USBCamera.API.HV_VERIFY(status);
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机打开设备失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机打开失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #21
0
        protected override bool DoRegisterImageGrabbedCallBack()
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceRef != System.IntPtr.Zero)
                {
                    //已经在打开相机设备时注册
                    rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                    if (!rt)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机注册图像采集回调失败!\n错误代码:{0:X8}", System.Convert.ToInt32(status)));
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机注册采集回调函数失败!\n错误描述:{0}", "设备未连接"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }
Beispiel #22
0
        //----------------------------------------------------------------------------------

        /**
         *  设置曝光时间
         *  \param      int                 [in] 窗口宽度
         *  \param      int                 [in] 分子
         *  \param      int                 [in] 分母
         *  \param      int                 [in] 消隐控制
         *  \param      HV_SNAP_SPEED       [in] 采集速度
         *  \param      HV_RESOLUTION       [in] 分辨率
         *  \return		HVSTATUS            [out]状态
         */

        //----------------------------------------------------------------------------------
        protected USBCamera.HVSTATUS SetExposureTime(int nWindWidth, int nUpper, int nLower, int nHBlanking,
                                                     USBCamera.HV_SNAP_SPEED SnapSpeed, USBCamera.HV_RESOLUTION Resolution)
        {
            double clockFreq = 0.0;
            int    tB        = nHBlanking;
            int    outPut    = nWindWidth;
            double exposure  = 0.0;

            System.Diagnostics.Debug.Assert(nLower != 0);
            double temp = (double)nUpper / (double)nLower;
            double tInt = (temp > m_kZeorInDouble) ? temp : m_kZeorInDouble;

            if (IsGV400())
            {
                tB       += 0x5e;
                clockFreq = (SnapSpeed == USBCamera.HV_SNAP_SPEED.HIGH_SPEED) ? 26600000.0 : 13300000.0;
                int rate = 0;

                switch (Resolution)
                {
                case USBCamera.HV_RESOLUTION.RES_MODE0:
                    rate = 1;
                    break;

                case USBCamera.HV_RESOLUTION.RES_MODE1:
                    rate = 2;
                    break;

                default:
                    return(USBCamera.HVSTATUS.STATUS_PARAMETER_OUT_OF_BOUND);
                }

                outPut = outPut * rate;

                if ((tInt * clockFreq) <= (outPut + tB - 255))
                {
                    exposure = 1;
                }
                else
                {
                    System.Diagnostics.Debug.Assert((outPut + tB) != 0);
                    exposure = ((tInt * clockFreq) - (outPut + tB - 255)) / (outPut + tB);
                }

                if (exposure < 3)
                {
                    exposure = 3;
                }
                else if (exposure > 32766)
                {
                    exposure = 32766;
                }
            }
            else if (IsHV300())
            {
                clockFreq = (SnapSpeed == USBCamera.HV_SNAP_SPEED.HIGH_SPEED) ? 24000000 : 12000000;
                tB       += 142;
                if (tB < 21)
                {
                    tB = 21;
                }
                int param1 = 331;
                int param2 = 38;
                int param3 = 316;
                if (Resolution == USBCamera.HV_RESOLUTION.RES_MODE1)
                {
                    param1 = 673;
                    param2 = 22;
                    param3 = 316 * 2;
                }
                int AQ   = outPut + param1 + param2 + tB;
                int tmp  = param1 + param3;
                int trow = (AQ > tmp) ? AQ : tmp;

                System.Diagnostics.Debug.Assert(trow != 0);
                exposure = ((tInt * clockFreq) + param1 - 132.0) / trow;

                if ((exposure - (int)exposure) > 0.5)
                {
                    exposure += 1.0;
                }
                if (exposure <= 0)
                {
                    exposure = 1;
                }
                else if (exposure > 1048575)
                {
                    exposure = 1048575;
                }
            }
            else if (IsHV200())
            {
                clockFreq = (SnapSpeed == USBCamera.HV_SNAP_SPEED.HIGH_SPEED) ? 24000000 : 12000000;
                tB       += 53;
                if (tB < 19)
                {
                    tB = 19;
                }
                int AQ   = outPut + 305 + tB;
                int trow = (617 > AQ) ? 617 : AQ;
                System.Diagnostics.Debug.Assert((trow + 1) != 0);
                exposure = (tInt * clockFreq + 180.0) / trow + 1;

                if ((exposure - (int)exposure) > 0.5)
                {
                    exposure += 1.0;
                }
                if (exposure <= 0)
                {
                    exposure = 1;
                }
                else if (exposure > 16383)
                {
                    exposure = 16383;
                }
            }
            else if (IsHV5051())
            {
                USBCamera.SHUTTER_UNIT_VALUE unit = USBCamera.SHUTTER_UNIT_VALUE.SHUTTER_MS;

                if (nLower == 1000000)
                {
                    unit = USBCamera.SHUTTER_UNIT_VALUE.SHUTTER_US;
                }

                //设置曝光时间单位
                USBCamera.HVSTATUS status = USBCamera.API.HVAECControl(_deviceRef, (byte)USBCamera.HV_AEC_CONTROL.AEC_SHUTTER_UNIT, (int)unit);
                if (!USBCamera.API.HV_SUCCESS(status))
                {
                    return(status);
                }

                //设置曝光时间
                return(USBCamera.API.HVAECControl(_deviceRef, (byte)USBCamera.HV_AEC_CONTROL.AEC_SHUTTER_SPEED, nUpper));
            }
            else
            {
                clockFreq = (SnapSpeed == USBCamera.HV_SNAP_SPEED.HIGH_SPEED) ? 24000000 : 12000000;
                tB       += 9;
                tB       -= 19;
                if (tB <= 0)
                {
                    tB = 0;
                }
                if ((outPut + 244.0 + tB) > 552)
                {
                    exposure = (tInt * clockFreq + 180.0) / ((double)outPut + 244.0 + tB);
                }
                else
                {
                    exposure = ((tInt * clockFreq) + 180.0) / 552;
                }

                if ((exposure - (int)exposure) > 0.5)
                {
                    exposure += 1.0;
                }
                if (exposure <= 0)
                {
                    exposure = 1;
                }
                else if (exposure > 16383)
                {
                    exposure = 16383;
                }
            }

            return(USBCamera.API.HVAECControl(_deviceRef, (byte)USBCamera.HV_AEC_CONTROL.AEC_EXPOSURE_TIME, (int)exposure));
        }
Beispiel #23
0
 /// <summary>
 /// 设置分辨率
 /// </summary>
 private void SetResolution()
 {
     System.Diagnostics.Debug.Assert(_deviceRef != IntPtr.Zero);
     USBCamera.HVSTATUS status = USBCamera.API.HVSetResolution(_deviceRef, m_kResolotion);
     USBCamera.API.HV_VERIFY(status);
 }
Beispiel #24
0
        /// <summary>
        /// 根据相机SN地址获取相机
        /// </summary>
        /// <param name="camSN"></param>
        /// <returns></returns>
        protected override bool DoGetCameraBySN(string camSN)
        {
            bool rt = false;

            USBCamera.HVSTATUS status = USBCamera.HVSTATUS.STATUS_OK;
            try
            {
                if (_deviceNums > 0)
                {
                    int    j  = 1;
                    string sn = string.Empty;
                    for (int i = 1; i <= _deviceNums; i++)
                    {
                        sn = DoGetCameraSN(i);
                        if (sn == camSN)
                        {
                            _deviceIdx = i;
                        }
                        j++;
                    }
                    if (j > _deviceNums)
                    {
                        if (DriverExceptionDel != null)
                        {
                            DriverExceptionDel(string.Format("错误:大恒USB2.0相机获取设备失败!\n设备SN:{0}\n异常描述{1}",
                                                             camSN, "指定SN不匹配"));
                        }
                    }
                    else
                    {
                        if (_deviceRef != System.IntPtr.Zero)
                        {
                            status = USBCamera.API.EndHVDevice(_deviceRef);
                        }
                        status = USBCamera.API.BeginHVDevice(_deviceIdx, ref _deviceRef);
                        USBCamera.API.HV_VERIFY(status);
                        rt = (USBCamera.HVSTATUS.STATUS_OK == status) ? true : false;
                        if (!rt)
                        {
                            if (DriverExceptionDel != null)
                            {
                                DriverExceptionDel(string.Format("错误:大恒USB2.0相机获取序列号对应设备失败!\n设备SN:{0}\n错误代码:{1:X8}",
                                                                 camSN, System.Convert.ToInt32(status)));
                            }
                        }
                    }
                }
                else
                {
                    if (DriverExceptionDel != null)
                    {
                        DriverExceptionDel(string.Format("错误:大恒USB2.0相机获取序列号对应设备失败!\n:{0}", "设备列表为空"));
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }

            return(rt);
        }