欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > C#收集海康系读码器内容并硬触发IO报警

C#收集海康系读码器内容并硬触发IO报警

2024/10/24 9:20:15 来源:https://blog.csdn.net/u011540323/article/details/141328820  浏览:    关键词:C#收集海康系读码器内容并硬触发IO报警

最近有个需求,需要对几台打码机读码器进行集中防重。

实现目标:1.对条码进行分机台收集追溯

                   2.发现重复进行触发IO报警

首先使用海康MVS软件对读码器进行设置,通讯设置为TCP服务器,我们软件做客户端 进行数据收集。

然后再收集到数据中进行重复校验。最后输出报警信号。

关键代码
        /// <summary>
        /// 获取设备列表
        /// </summary>
        public static List<string> DeviceListAcq()
        {
            List<string> snList = new List<string>();
            // ch:创建设备列表 | en:Create Device List
            System.GC.Collect();
            m_pstDeviceList.nDeviceNum = 0;
            int nRet = MvCodeReader.MV_CODEREADER_EnumDevices_NET(ref m_pstDeviceList, MvCodeReader.MV_CODEREADER_GIGE_DEVICE);
            if (0 != nRet)
            {
                WriteLogHelper.WriteLogsAsync("Enumerate devices fail!", "设备获取");
                return snList;
            }

            if (0 == m_pstDeviceList.nDeviceNum)
            {
                WriteLogHelper.WriteLogsAsync("None Device", "设备获取");
                return snList;
            }

            byte[] chUserDefinedName = null;

            // ch:在窗体列表中显示设备名 | en:Display stDevInfo name in the form list
            for (int i = 0; i < m_pstDeviceList.nDeviceNum; i++)
            {
                MvCodeReader.MV_CODEREADER_DEVICE_INFO stDevInfo = (MvCodeReader.MV_CODEREADER_DEVICE_INFO)Marshal.PtrToStructure(m_pstDeviceList.pDeviceInfo[i], typeof(MvCodeReader.MV_CODEREADER_DEVICE_INFO));
                if (stDevInfo.nTLayerType == MvCodeReader.MV_CODEREADER_GIGE_DEVICE)
                {
                    IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(stDevInfo.SpecialInfo.stGigEInfo, 0);
                    MvCodeReader.MV_CODEREADER_GIGE_DEVICE_INFO stGigeInfo = (MvCodeReader.MV_CODEREADER_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MvCodeReader.MV_CODEREADER_GIGE_DEVICE_INFO));
                    if (stGigeInfo.chUserDefinedName != "")
                    {
                        var name = ("GEV: " + stGigeInfo.chUserDefinedName + " (" + stGigeInfo.chSerialNumber + ")");
                       
                    }
                    else
                    {
                       
                        var name = ("GEV: " + stGigeInfo.chManufacturerName + " " + stGigeInfo.chModelName + " (" + stGigeInfo.chSerialNumber + ")");
                    }
                    snList.Add(stGigeInfo.chSerialNumber);
                }
            }

            // ch:选择第一项 | en:Select the first item
            return snList;
        }

public bool OpenDevice(string sn) {
           var snList =  DeviceListAcq();
            if (snList.Count == 0 )
            {
               // ShowErrorMsg("No stDevInfo, please select", 0);
                return false;
            }
          var  snIndex = snList.FindIndex(x => x==sn);
            if (snIndex < 0) {
                return false;
            }
            // ch:获取选择的设备信息 | en:Get selected stDevInfo information
            MvCodeReader.MV_CODEREADER_DEVICE_INFO stDevInfo =
                (MvCodeReader.MV_CODEREADER_DEVICE_INFO)Marshal.PtrToStructure(m_pstDeviceList.pDeviceInfo[snIndex],
                                                              typeof(MvCodeReader.MV_CODEREADER_DEVICE_INFO));

            // ch:打开设备 | en:Open stDevInfo
            if (null == m_MyCamera)
            {
                m_MyCamera = new MvCodeReader();
                if (null == m_MyCamera)
                {
                    return false;
                }
            }

            int nRet = m_MyCamera.MV_CODEREADER_CreateHandle_NET(ref stDevInfo);
            if (MvCodeReader.MV_CODEREADER_OK != nRet)
            {
                return false;
            }

            nRet = m_MyCamera.MV_CODEREADER_OpenDevice_NET();
            if (MvCodeReader.MV_CODEREADER_OK != nRet)
            {
                m_MyCamera.MV_CODEREADER_DestroyHandle_NET();
                WriteLogHelper.WriteLogsAsync("设备打开异常", "设备获取");
                return false;
            }

            m_MyCamera.MV_CODEREADER_SetEnumValue_NET("TriggerMode", (uint)MvCodeReader.MV_CODEREADER_TRIGGER_MODE.MV_CODEREADER_TRIGGER_MODE_ON);

            // ch:设置采集连续模式 | en:Set Continues Aquisition Mode
            //m_MyCamera.MV_CODEREADER_SetEnumValue_NET("TriggerMode", (uint)MvCodeReader.MV_CODEREADER_TRIGGER_MODE.MV_CODEREADER_TRIGGER_MODE_OFF);
            // 设置输出 硬输出
            //var res = m_MyCamera.MV_CODEREADER_SetEnumValue_NET("LineSource", 6);

            // ch:开始采集 | en:Start Grabbing
             nRet = m_MyCamera.MV_CODEREADER_StartGrabbing_NET();
            if (MvCodeReader.MV_CODEREADER_OK != nRet)
            {
               WriteLogHelper.WriteLogsAsync($"设备打开失败{nRet}", "设备开始采集"); 
            }


          

            //m_MyCamera.MV_CODEREADER_RegisterTriggerCallBack_NET
            // 触发设置
            // m_MyCamera.MV_CODEREADER_SetEnumValue_NET("TriggerSource", (uint)MvCodeReader.MV_CODEREADER_TRIGGER_SOURCE.MV_CODEREADER_TRIGGER_SOURCE_LINE0);
            return true;

        }

  /// <summary>
        /// 发送报警
        /// </summary>
        /// <returns></returns>
        public bool SendWarn() {
            // 发送IO触发
            var res = m_MyCamera.MV_CODEREADER_SetCommandValue_NET("LineTriggerSoftware");

            return res == 0;
        }

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com