如何在Sapera中获取外触发信号计数

在很多应用场合,用户进行外触发工作,通常有两种方式来获得外触发信号的个数:

(1)采用IO计数卡,将外触发信号接入计数卡中,计数卡通过硬件对信号进行计数读出,优势在于计数精度较高及实时性好,劣势在于会增加系统成本、会占用计算机插槽、加大系统的复杂性及调试难度 。

(2)使用标准采集卡,在采集软件中增加对IO计数的功能。优势在于易于开发调试,无需增加系统复杂性。

本文针说明采用调用Sapera SDK的方式来实现,主要借助于SapTransfer和它的一些派生类。

  1. SapTransfer

功能:管理转移过程

常用函数:SapTransfer::Create

  SapTransfer::Freeze

  SapTransfer::Grab

  SapTransfer::Snap

  SapTransfer::Wait

  SapTransfer::Abort

  SapTransfer::IsGrabbing

  SapTransfer::GetPair

  1. Specialized Transfer Classes

功能:特别转换类(一系列从属于SapTransfer的类,使用户方便操作许多常用的转移节点)

常用转换类:SapAcqToBuf Class 

SapAcqDeviceToBuf Class 

SapCabToBuf Class 

SapBufToBuf Class 

SapAcqToCab Class 

SapCabToCab Class 

SapBufToCab Class

上述类将端口的节点与图像的buffer进行关联, 这样每一帧图像进入SapTransfer的回调函数后,用户可以获得当前图像的节点信息,这些信息就包含有时间戳,而时间戳的计数基准可以以系统时间或者外触发信号的个数。通过上述方式,即可实现对外触发进行计数

采用该种方式按照如下几个步骤进行:

(1)在OnInitDlg函数new了m_Xfer对象之后,CreateObjects之前配置时间戳计时的基准

m_Xfer->GetPair(0)->SetCounterStampTimeBase(SapXferPair::CounterStampLineTrigger) ;

其中 GetPair(int pairindex)函数为获得特定节点的进入权限,节点为0到(获得的最大节点数-1),与采集卡上的端口进行对应

SetCounterStampTimeBase为设置计时基准的函数,参数可设几种,默认为CounterStampMicroSec,

    SapXferPair::CounterStampMicroSec      //以系统时间us为计数基准

    SapXferPair::CounterStampMilliSec   //以系统时间ms为计数基准

    SapXferPair::CounterStampLine     //以行有效信号或者水平同步信号为计数基准

    SapXferPair::CounterStampLineTrigger  //以编码器行触发脉冲为计数基准

    SapXferPair::CounterStampFrame     //以针有效信号或垂直同步信号为计数基准

    SapXferPair::CounterStampExtFrameTrigger     以编码器帧触发脉冲为计数基准

需要注意的是,部分采集卡及采集卡驱动版本不支持里面的CounterStampExtFrameTrigger等,在调试代码时可能出现assert错误,请升级至最新采集卡驱动

(2)在XferCallback(SapXferCallbackInfo *pInfo) 中增加用以记录序号的int型变量timestamp,

int timestamp ;

m_Buffers->GetCounterStamp(×tamp);

(3)通过获取的时间戳与前一个时间戳相减,再与实际采集到的图像比对,以检查是否丢行 。例如设置一帧图像为1000行,如果前后两个时间戳之间的差为1001,则实际采集时出现了丢一行的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bryan Ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值