周更!节日快乐!

1. 参数

1.1 CAM file

CAM file是文件扩展名为.cam的可读ASCII文件,包含了参数列表,比如:AcquisitionMode,TrigMode等。通过McSetParamStr方法将Camfile加载到通道:

McSetParamStr(MyChannelMyChannel, MC_CamFile , "VCC VCC-870A_P15RA");

1.2 channel

通道是摄像头、帧捕获器和主机PC内存之间的采集路径。通道由三部分组成:

1. 负责图像捕获的相机。
2. 帧捕获器负责图像的采集和传输。
3. 用于在主机PC中存储图像的内存缓冲区。

通道可以被设置为以下四种状态之一:

Name Meaning
Orphan 没有与之关联的抓取器。因此不可能立即获取图像。但是通道存在,其所有参数都可以自由设置或获取。
Idle

当通道处于空闲状态时,它有一个与之关联的抓取器。因此,可以立即进行图像采集。在此状态下,MultiCam可能会自动将抓取器资源重新分配给另一个通道。

Ready

当通道处于就绪状态时,它有一个与之关联的抓取器。因此,可以立即进行图像采集。在此状态下,MultiCam无法自动将抓取器资源重新分配给另一个通道。

Active 当通道处于活动状态时,它有一个与其相关联的抓取器,并执行图像采集序列。在此状态下,MultiCam无法自动将抓取器资源重新分配给另一个通道。

代码示例:

1.3 surface

surface是一个缓冲区,用户应用程序可以在其中找到要分析的采集图像。内存缓冲区由称为surface的MultiCam对象表示。surface可以由Multicam自动创建,也可以由用户手动创建。抓取器通过DMA机制自动将采集的图像传输到目标surface。通道可以有一个或多个surface(默认为4)。根据surface的数量,定义了单缓冲和多缓冲。

Surface state Meaning
FREE 自由表面能够无条件地从抓取器接收图像数据。
FILLING

目前正在从抓取器接收图像数据,或准备接收数据。一个cluster中应该都有一个FILLING状态的Surface。

FILLED 已完成从抓取器接收图像数据,已准备好进行处理。
PROCESSING

PROCESSING状态的Surface正在被处理器处理。

RESERVED 从标准状态转换机制中删除。

代码示例:

一组surface称为cluster,一个通道只能有一个cluster。cluster的状态有OFF,READY(在获取图像但没有surface处于PROCESSING),BUSY(有surface处于PROCESSING),UNAVAILABLE(不能获取图像)

Single Buffering

Dual Buffering

Triple Buffering

1.4 Multicam Signaling

信号是由通道生成的与用户应用程序交互的事件。

Frame Trigger Violation  
Start Exposure 该信号在帧曝光条件开始时发出。
End Exposure 该信号在帧曝光条件结束时发出。
Surface Filled 当目标cluster的Surface 进入Filled状态时,会发出此信号。
Surface Processing 当目标cluster的Surface 进入Processing状态时,会发出此信号。
Cluster Unavailable  
Acquisition failure (**)  

Start of Acquisition Sequence

 
End of Acquisition Sequence  
End of Channel Activity  

有三种机制可以访问它们:

1. 涉及在出现预定义信号时自动调用的用户编写的函数。(callback)
2. 允许线程等待预定义信号出现的专用机制。
3. 涉及标准Windows等待函数的用户定义机制。

使用callback的步骤:

1. 默认情况下,禁用所有信号。SignalEnable参数用于设置它。

2. 注册回调函数

3. 在回调函数中,使用包含触发事件信息的PMCSIGNALINFO捕获事件。

示例:

1.5 Trigger

触发事件由TrigMode和NextTrigMode参数进行设置。

1.5.1 初始触发事件:

  • 连续:将ChannelState设为Active后立即启动,NextTrigMode为REPEAT
  • 硬触发
  • 软触发:将ForceTrig参数设置为TRIG
  • 结合触发

1.5.2 触发事件的结束

可以通过EndTrigMode结束采集阶段:
1)帧、页或行计数器到期时,采集序列自动终止。(AUTO)
2)当检测到硬件端触发线的有效转换时,采集序列终止(HARD)
或者通过BreakEffect参数直接终止channel的活动状态:

1)在slice/phase/sequence结束后再停止采集(FINISH)

2)立刻停止(ABORT)

1.6 Acquisition Mode

  • VIDEO模式用于从标准区域扫描摄像机记录多个视频序列。ActivityLength指定通道活动周期内的序列数。
  • SNAPSHOT模式用于从区域扫描相机获取快照图像。唯一序列能够在信道活动周期内获取SeqLength_Fr帧。
  • PAGE模式用于从线扫描相机获取离散对象的图像。每一页由连续的行组成;页面长度(以行表示)由PageLength\u Ln指定。单个序列能够在通道活动周期内获取SeqLength_Pg页面。
  • WEB模式用于从线扫描相机获取连续对象(如网络)的图像。在信道活动周期内,可使用单个序列获取连续行的SeqLength_。序列被划分为连续的相位,每个相位获取PageLength\u Ln行。如果SeqLength_Ln不是PageLength_Ln的倍数,则在最后阶段会部分填充surface。序列和第一采集阶段根据触发模式启动。后续采集阶段自动启动,无任何线路损耗。BreakEffect指定用户中断时的行为。

1.7 Exception

异常通过异常代码或Windows异常进行管理。ErrorHandling参数设置错误管理行为,有4个可能的值。

  • None 没有异常时为MC_OK或者0,有异常时函数会返回MCSTATUS类型的值。

  • MSGBOX 没有异常时为MC_OK或者0,有异常会显示对话框

  • Exception
  • MSGException

2. Demo

2.1 打开driver

// Open MultiCam driver
MC.OpenDriver();

2.2 创建channel

// Create a channel and associate it with the first connector on the first board
MC.Create("CHANNEL", out channel);
MC.SetParam(channel, "DriverIndex", 0);

2.3 相机参数设置

// Choose the CAM file
MC.SetParam(channel, "CamFile", "1000m_P50RG");
// Choose the camera expose duration
MC.SetParam(channel, "Expose_us", 20000);
// Choose the pixel color format
MC.SetParam(channel, "ColorFormat", "Y8");

2.4 触发模式更改

//Set the acquisition mode to Snapshot
MC.SetParam(channel, "AcquisitionMode", "SNAPSHOT");
// Choose the way the first acquisition is triggered
MC.SetParam(channel, "TrigMode", "COMBINED");
// Choose the triggering mode for subsequent acquisitions
MC.SetParam(channel, "NextTrigMode", "COMBINED");

2.5 事件触发

2.5.1 注册回调函数

// Register the callback function
multiCamCallback = new MC.CALLBACK(MultiCamCallback);
MC.RegisterCallback(channel, multiCamCallback, channel);

2.5.2 开启信号

// Enable the signals corresponding to the callback functions
MC.SetParam(channel, MC.SignalEnable + MC.SIG_SURFACE_PROCESSING, "ON");
MC.SetParam(channel, MC.SignalEnable + MC.SIG_ACQUISITION_FAILURE, "ON");

2.5.3 判断接收到的信号

如果接收到的是MC.SIG_SURFACE_PROCESSING,调用ProcessingCallback获取图片的数据,将图片数据转换为bitmap。如果接收到的是MC.SIG_ACQUISITION_FAILURE,调用AcqFailureCallback输出"Acquisition Failure"。

private void MultiCamCallback(ref MC.SIGNALINFO signalInfo)
{
switch(signalInfo.Signal)
{
case MC.SIG_SURFACE_PROCESSING:
ProcessingCallback(signalInfo);
break;
case MC.SIG_ACQUISITION_FAILURE:
AcqFailureCallback(signalInfo);
break;
default:
throw new Euresys.MultiCamException("Unknown signal");
}
}

2.6 channel状态置为READY

// Prepare the channel in order to minimize the acquisition sequence startup latency
MC.SetParam(channel, "ChannelState", "READY");

3.  测试程序的编写

触发模式就用默认的连续触发。

将camfile的加载显示在界面上。

Demo界面只有Go和stop还有状态条,增加按钮打开/关闭相机和开始/停止采集。

曝光开始事件触发,帧开始count++;surface_processing事件触发,采图count++;获取失败事件触发,丢失帧count++。

代码绝对是运行不起来的,毕竟我是一个采集卡都没见过的人,纸上谈兵罢了哈哈哈

C#笔记 关于采集卡的更多相关文章

  1. 关于使用,NI采集卡+labview信号采集,问题交流【第二贴】

    *** 采集卡 NI PCI-6534:  max sample rate 20MHz:32位的数字输入,数字输出.  ***输入信号:    峰峰值,4.16V   最小值 -80mV    频率 ...

  2. Win 10 系统下研华采集卡Advantech Navi SDK虚拟demo设备安装方法

    研华的DAQNavi是其采集卡设备的.net编程SDK,安装了其通讯工具Navigator后,可以添加虚拟采集卡 demo device. 在Win10上,执行添加操作时,可能会出现添加失败,这是由于 ...

  3. 关于basler线阵相机和Mtrox采集卡的安装

    说明: 本系列博文是我自己研究生课题,采用做一步记录一步,在论文答辩结束或者机器设计结束之后才会附上源代码! 以前都是用opencv,直接拿个照片去处理,基本都是软件的使用,这次做课题要用到Matro ...

  4. 如何使用WinDriver为PCIe采集卡装驱动

    如何使用WinDriver为PCIe采集卡装驱动 第一步:使用WinDriver生成驱动 1.运行Drier Wizard 2.点击New host driverproject 3.在列表中,选择待安 ...

  5. 关于海康视频采集卡的简介---基于pci的插潮采集卡

    vga 640x480 qvga vga的1/4,宽高分别是vga的一半 (1)采集类型 海康威视 DS-2CE16A2P-IT3P 700TVL 1/3" DIS ICR 红外防水筒型摄像 ...

  6. 海康威视采集卡结合opencv使用(两种方法)-转

    (注:第一种方法是我的原创 ^_^. 第二种方法是从网上学习的.) 第一种方法:利用 板卡的API:  GetJpegImage 得到 Jpeg 格式的图像数据,然后用opencv里的一个函数进行解码 ...

  7. 【VS开发】【DSP开发】如何使用WinDriver为PCIe采集卡装驱动

    如何使用WinDriver为PCIe采集卡装驱动 第一步:使用WinDriver生成驱动 1.运行Drier Wizard 2.点击New host driverproject 3.在列表中,选择待安 ...

  8. 98-基于FPGA Spartan6 的双路光纤PCIe采集卡(2路光纤卡)

    基于FPGA Spartan6 的双路光纤PCIe采集卡(2路光纤卡) 1.板卡概述  板卡采用xilinx Spartan6系列芯片,支持 PCI Express Base Specificatio ...

  9. PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡

    PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡 一:前言 这一年关于PCIE高速采集卡的业务量激增,究其原因,发现百度"xilinx pcie dma",出 ...

  10. HDMI转USB视频采集卡(ACASIS 1080P高清视频采集卡)--九五小庞

    ACASIS阿卡西斯是深圳市菲德越科技有限公司旗下数码科技品牌.菲德越是2008年成立的一家专注于采集卡.硬盘盒.集线器等专业3C配件产品,集研发.设计.生产.销售于一体的高新科技公司,我们公司以向客 ...

随机推荐

  1. mysql 重新整理——配置文件[一]

    前言 对mysql 进行从新整理一下,仅做参考,如有任何不对望指出. 正文 mysql 一般分windows和linux,但是他们的运行配置其实是一样的,所以在此不做区分. 直接上一个大体的图: 我个 ...

  2. 实训篇-Html-计算器

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. mysql5.7.20靠谱安装步骤

    首先,我看过网上的其他教程. 其次,很多教程都过时了,或者按照步骤失败,反正我一次也没成功. 开始正题:首先,以管理员身份运行cmd 总共就两个命令: 1.mysqld --initialize-in ...

  4. K8s集群nginx-ingress监控告警最佳实践

    本文分享自华为云社区<K8s集群nginx-ingress监控告警最佳实践>,作者:可以交个朋友. 一 背景 nginx-ingress作为K8s集群中的关键组成部分.主要负责k8s集群中 ...

  5. pip(国内常用镜像源)安装地址

    国内常用镜像源 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国 ...

  6. Schedulerx2.0支持应用级别资源管理和任务优先级

    1. 前言 Schedulerx2.0是一套分布式的任务调度+计算框架.作为一套分布式计算引擎,用户经常需要资源管理的需求,当前schedulerx仅仅支持单个任务实例的管控(比如单机子任务并发数.拉 ...

  7. 如何使用 PTS 快速发起微服务压测

    ​简介:本文讲阐述什么是微服务架构.微服务架构对系统稳定性带来的影响,以及用性能测试验证稳定性的必要性.用户进行微服务压测的痛点和 PTS 的独特优势.云上使用 PTS 快速发起微服务压测的步骤,以及 ...

  8. 自建Kubernetes集群如何使用弹性容器实例ECI

    简介: 虚拟节点(Virtual Node)实现了Kubernetes与弹性容器实例ECI的无缝连接,让Kubernetes集群轻松获得极大的弹性能力,而不必受限于集群的节点计算容量.您可以灵活动态的 ...

  9. KubeMeet|聊聊新锐开源项目与云原生新的价值聚焦点

    ​简介: 10 月 16 日上海,OAM/KubeVela.OpenKruise.OCM 三大开源项目的社区负责人.核心贡献者和企业用户将齐聚 KubeMeet,和现场 100 名开发者聊聊新的技术环 ...

  10. KubeDL 加入 CNCF Sandbox,加速 AI 产业云原生化

    ​简介: 2021 年 6 月 23 日,云原生计算基金会(CNCF)宣布通过全球 TOC 投票接纳 KubeDL 成为 CNCF Sandbox 项目.KubeDL 是阿里开源的基于 Kuberne ...