周更!节日快乐!

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. redis 简单整理——复制配置[二十二]

    前言 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到 其他机器,满足故障恢复和负载均衡等需求.Redis也是如此,它为我们提 供了复制功能,实现了相同数据的多个Redis副本.复制功能 ...

  2. Mysql安装和远程登录--Centos7

    在Centos7中使用的包管理工具是yum,当然使用包管理工具安装也是最方便的. 本文操作内容需要在root用户下,否则有些步骤无法成功执行. 系统环境信息展示 安装 MySQL 提供的 RPM wg ...

  3. burp suite历程-安装burp suite

    安装时,捯饬了快一上午,不是jdk高了就是装上后不好使了,后来看了下以下文章,安装成功,特此记录以备不时之需: 内容拷贝至链接:https://juejin.cn/post/6844904111867 ...

  4. The request client is not a secure context and the resource is in more-private address space `privat

    Chrome跨域问题:has been blocked by CORS policy: The request client is not a secure context and the resou ...

  5. React中类组件和函数组件

    一.类组件 类组件,顾名思义,也就是通过使用ES6类的编写形式去编写组件,该类必须继承React.Component 如果想要访问父组件传递过来的参数,可通过this.props的方式去访问 在组件中 ...

  6. Javscript数组的常用方法有哪些?

    数组基本操作可以归纳为 增.删.改.查,需要留意的是哪些方法会对原数组产生影响,哪些方法不会 下面对数组常用的操作方法做一个归纳 增 下面前三种是对原数组产生影响的增添方法,第四种则不会对原数组产生影 ...

  7. Webpack中Loader和Plugin的区别?编写Loader,Plugin的思路?

    一.区别 前面两节我们有提到Loader与Plugin对应的概念,先来回顾下 loader 是文件加载器,能够加载资源文件,并对这些文件进行一些处理,诸如编译.压缩等,最终一起打包到指定的文件中 pl ...

  8. axios请求时获取不到错误提示问题。

    前端方面使用axios请求,由于新增时,有的条件格式填写错误.后端返回412状态码. ,axios可能封装不完善,他获取数据使状态码为4开头的统统不暴露出去,导致请求时,412这样的状态码,获取不到里 ...

  9. 力扣598(java)-范围求和Ⅱ(简单)

    题目: 给你一个 m x n 的矩阵 M ,初始化时所有的 0 和一个操作数组 op ,其中 ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai 和 0 <= ...

  10. Quick BI产品核心功能大图(五)移动端:让数据在更多业务场景中流通

    ​简介:将数据更好的融入日常工作中,一个重要的前提条件就是多端多渠道的数据触达和办公协同能力. Quick BI凭借移动端交互体验,帮助用户随时随地便捷查看报表,并通过在线协同方式,追踪策略的执行落地 ...