小工具知识网

当前位置: 首页 > 行业知识 > C# ID2013系列使用海康官方SDK读码

行业知识

C# ID2013系列使用海康官方SDK读码

2026-11-07 22:35:43 来源:互联网转载

文章目录

  • 一、开发前准备
  • 二、开始开发
    • 1.引入库
    • 2.遍历设备
    • 3.连接设备
    • 4.开始采集
    • 5.关闭设备
    • 6.停止收集设备
    • 总结

      一、开发前准备

      开发前需要去海康官网下载相机读码器客户端

      网址:下载连接

      安装后插上设备网线口,然后打开软件进行设置。[

      选择连接的读码器,双击连接上相机。开始进行算法设置。设置完成后记得保存。

      如果需要更改相机IP地址,在工具–> IP配置工具进行设置。

      二、开始开发

      1.引入库

      MvCodeReaderSDK.Net.dll

      地址在软件安装目录下面:以我的安装目录为例:

      D:\tools\scan\IDMVS\Development\Modules\MvCodeReaderSDK\Demo\C#\BasicDemo\bin\AnyCpu

      2.遍历设备

      代码如下:

      //在遍历设备前先加入如下代码MvCodeReader.MV_CODEREADER_DEVICE_INFO_LIST m_stDeviceList = new MvCodeReader.MV_CODEREADER_DEVICE_INFO_LIST(); private MvCodeReader m_cMyDevice = new MvCodeReader(); bool m_bGrabbing = false;private void getAllDev_Click(object sender, EventArgs e){    System.GC.Collect();    m_stDeviceList.nDeviceNum = 0;    int nRet = MvCodeReader.MV_CODEREADER_EnumDevices_NET(ref m_stDeviceList, MvCodeReader.MV_CODEREADER_GIGE_DEVICE);    if (0 != nRet)    {        MessageBox.Show($"Enumerate devices fail!{nRet}");        return;    }    if (0 == m_stDeviceList.nDeviceNum)    {        MessageBox.Show($"None Device!{0}");        return;    }    for (int i = 0; i  

      3.连接设备

      代码如下:

      private void conDev_Click(object sender, EventArgs e){    if (m_stDeviceList.nDeviceNum == 0 )    {        MessageBox.Show($"No stDevInfo, please select!{0}");        return;    }    //我这边只连接一个设备,有需要的自己修改列表值即可    MvCodeReader.MV_CODEREADER_DEVICE_INFO stDevInfo =(MvCodeReader.MV_CODEREADER_DEVICE_INFO)Marshal.PtrToStructure(m_stDeviceList.pDeviceInfo[0],typeof(MvCodeReader.MV_CODEREADER_DEVICE_INFO));    if (null == m_cMyDevice)    {        m_cMyDevice = new MvCodeReader();        if (null == m_cMyDevice)        {            return;        }    }    int nRet = m_cMyDevice.MV_CODEREADER_CreateHandle_NET(ref stDevInfo);    if (MvCodeReader.MV_CODEREADER_OK != nRet)    {        MessageBox.Show($"MV_CODEREADER_CreateHandle_NET fail!!{nRet}");        return;    }    nRet = m_cMyDevice.MV_CODEREADER_OpenDevice_NET();    if (MvCodeReader.MV_CODEREADER_OK != nRet)    {        m_cMyDevice.MV_CODEREADER_DestroyHandle_NET();        MessageBox.Show($"Device open fail!{nRet}");        return;    }    m_cMyDevice.MV_CODEREADER_SetEnumValue_NET("TriggerMode", (uint)MvCodeReader.MV_CODEREADER_TRIGGER_MODE.MV_CODEREADER_TRIGGER_MODE_OFF);}

      4.开始采集

      代码如下:

      private void bgnCollect_Click(object sender, EventArgs e){                m_bGrabbing = true;    int nRet = m_cMyDevice.MV_CODEREADER_StartGrabbing_NET();    if (MvCodeReader.MV_CODEREADER_OK != nRet)    {        m_bGrabbing = false;        MessageBox.Show($"Start Grabbing Fail!{nRet}");        return;    }}//这个线程在窗体实例化的时候就开启,这样在开启线程按钮按下直接开始采集public void ReceiveThreadProcess(){    int nRet = MvCodeReader.MV_CODEREADER_OK;    IntPtr pData = IntPtr.Zero;    MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2 stFrameInfoEx2 = new MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2();    IntPtr pstFrameInfoEx2 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2)));    Marshal.StructureToPtr(stFrameInfoEx2, pstFrameInfoEx2, false);    while (true)    {        if(m_bGrabbing)        {             z++;            nRet = m_cMyDevice.MV_CODEREADER_GetOneFrameTimeoutEx2_NET(ref pData, pstFrameInfoEx2, 1000);            if (nRet == MvCodeReader.MV_CODEREADER_OK)            {                stFrameInfoEx2 = (MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2)Marshal.PtrToStructure(pstFrameInfoEx2, typeof(MvCodeReader.MV_CODEREADER_IMAGE_OUT_INFO_EX2));            }            if (nRet == MvCodeReader.MV_CODEREADER_OK)            {                if (0 >= stFrameInfoEx2.nFrameLen)                {                    continue;                }                MvCodeReader.MV_CODEREADER_RESULT_BCR_EX2 stBcrResultEx2 = (MvCodeReader.MV_CODEREADER_RESULT_BCR_EX2)Marshal.PtrToStructure(stFrameInfoEx2.UnparsedBcrList.pstCodeListEx2, typeof(MvCodeReader.MV_CODEREADER_RESULT_BCR_EX2));                for (int i = 0; i  

      5.关闭设备

      代码如下:

      private void button10_Click(object sender, EventArgs e){    if (m_bGrabbing == true)    {        m_bGrabbing = false;        m_cMyDevice.MV_CODEREADER_StopGrabbing_NET();    }    m_cMyDevice.MV_CODEREADER_CloseDevice_NET();    m_cMyDevice.MV_CODEREADER_DestroyHandle_NET();}

      6.停止收集设备

      代码如下:

      private void button9_Click(object sender, EventArgs e){    m_bGrabbing = false;    int nRet = m_cMyDevice.MV_CODEREADER_StopGrabbing_NET();    if (nRet != MvCodeReader.MV_CODEREADER_OK)    {        MessageBox.Show($"Stop Grabbing Fail!{nRet}");    }}

      总结

      总体效果图如下,可以根据自己需要在进行开发。

      操作步骤如下:先预览设备–>连接设备–>开始采集–>停止采集–>关闭设备

      demo地址:demo下载地址

上一篇:英语mb音节怎么读?

下一篇:服务器cpu怎么加?