C#笔记 关于采集卡
周更!节日快乐!
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#笔记 关于采集卡的更多相关文章
- 关于使用,NI采集卡+labview信号采集,问题交流【第二贴】
*** 采集卡 NI PCI-6534: max sample rate 20MHz:32位的数字输入,数字输出. ***输入信号: 峰峰值,4.16V 最小值 -80mV 频率 ...
- Win 10 系统下研华采集卡Advantech Navi SDK虚拟demo设备安装方法
研华的DAQNavi是其采集卡设备的.net编程SDK,安装了其通讯工具Navigator后,可以添加虚拟采集卡 demo device. 在Win10上,执行添加操作时,可能会出现添加失败,这是由于 ...
- 关于basler线阵相机和Mtrox采集卡的安装
说明: 本系列博文是我自己研究生课题,采用做一步记录一步,在论文答辩结束或者机器设计结束之后才会附上源代码! 以前都是用opencv,直接拿个照片去处理,基本都是软件的使用,这次做课题要用到Matro ...
- 如何使用WinDriver为PCIe采集卡装驱动
如何使用WinDriver为PCIe采集卡装驱动 第一步:使用WinDriver生成驱动 1.运行Drier Wizard 2.点击New host driverproject 3.在列表中,选择待安 ...
- 关于海康视频采集卡的简介---基于pci的插潮采集卡
vga 640x480 qvga vga的1/4,宽高分别是vga的一半 (1)采集类型 海康威视 DS-2CE16A2P-IT3P 700TVL 1/3" DIS ICR 红外防水筒型摄像 ...
- 海康威视采集卡结合opencv使用(两种方法)-转
(注:第一种方法是我的原创 ^_^. 第二种方法是从网上学习的.) 第一种方法:利用 板卡的API: GetJpegImage 得到 Jpeg 格式的图像数据,然后用opencv里的一个函数进行解码 ...
- 【VS开发】【DSP开发】如何使用WinDriver为PCIe采集卡装驱动
如何使用WinDriver为PCIe采集卡装驱动 第一步:使用WinDriver生成驱动 1.运行Drier Wizard 2.点击New host driverproject 3.在列表中,选择待安 ...
- 98-基于FPGA Spartan6 的双路光纤PCIe采集卡(2路光纤卡)
基于FPGA Spartan6 的双路光纤PCIe采集卡(2路光纤卡) 1.板卡概述 板卡采用xilinx Spartan6系列芯片,支持 PCI Express Base Specificatio ...
- PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡
PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡 一:前言 这一年关于PCIE高速采集卡的业务量激增,究其原因,发现百度"xilinx pcie dma",出 ...
- HDMI转USB视频采集卡(ACASIS 1080P高清视频采集卡)--九五小庞
ACASIS阿卡西斯是深圳市菲德越科技有限公司旗下数码科技品牌.菲德越是2008年成立的一家专注于采集卡.硬盘盒.集线器等专业3C配件产品,集研发.设计.生产.销售于一体的高新科技公司,我们公司以向客 ...
随机推荐
- mysql 重新整理——配置文件[一]
前言 对mysql 进行从新整理一下,仅做参考,如有任何不对望指出. 正文 mysql 一般分windows和linux,但是他们的运行配置其实是一样的,所以在此不做区分. 直接上一个大体的图: 我个 ...
- 实训篇-Html-计算器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- mysql5.7.20靠谱安装步骤
首先,我看过网上的其他教程. 其次,很多教程都过时了,或者按照步骤失败,反正我一次也没成功. 开始正题:首先,以管理员身份运行cmd 总共就两个命令: 1.mysqld --initialize-in ...
- K8s集群nginx-ingress监控告警最佳实践
本文分享自华为云社区<K8s集群nginx-ingress监控告警最佳实践>,作者:可以交个朋友. 一 背景 nginx-ingress作为K8s集群中的关键组成部分.主要负责k8s集群中 ...
- pip(国内常用镜像源)安装地址
国内常用镜像源 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国 ...
- Schedulerx2.0支持应用级别资源管理和任务优先级
1. 前言 Schedulerx2.0是一套分布式的任务调度+计算框架.作为一套分布式计算引擎,用户经常需要资源管理的需求,当前schedulerx仅仅支持单个任务实例的管控(比如单机子任务并发数.拉 ...
- 如何使用 PTS 快速发起微服务压测
简介:本文讲阐述什么是微服务架构.微服务架构对系统稳定性带来的影响,以及用性能测试验证稳定性的必要性.用户进行微服务压测的痛点和 PTS 的独特优势.云上使用 PTS 快速发起微服务压测的步骤,以及 ...
- 自建Kubernetes集群如何使用弹性容器实例ECI
简介: 虚拟节点(Virtual Node)实现了Kubernetes与弹性容器实例ECI的无缝连接,让Kubernetes集群轻松获得极大的弹性能力,而不必受限于集群的节点计算容量.您可以灵活动态的 ...
- KubeMeet|聊聊新锐开源项目与云原生新的价值聚焦点
简介: 10 月 16 日上海,OAM/KubeVela.OpenKruise.OCM 三大开源项目的社区负责人.核心贡献者和企业用户将齐聚 KubeMeet,和现场 100 名开发者聊聊新的技术环 ...
- KubeDL 加入 CNCF Sandbox,加速 AI 产业云原生化
简介: 2021 年 6 月 23 日,云原生计算基金会(CNCF)宣布通过全球 TOC 投票接纳 KubeDL 成为 CNCF Sandbox 项目.KubeDL 是阿里开源的基于 Kuberne ...