编程语言
首页 > 编程语言> > C#笔记 采集卡测试

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 初始触发事件:

1.5.2 触发事件的结束

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

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

2)立刻停止(ABORT)

1.6 Acquisition Mode

1.7 Exception

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

 

 

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++。

 

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

标签:触发,MC,C#,抓取,surface,笔记,图像,采集卡,channel
来源: https://www.cnblogs.com/Fish0403/p/15451010.html