GenTL

GenTL定义了5种对象类型,按父/子关系组织:

1. 系统模块
2. 接口模块
3. 设备模块
4. 数据流模块
5. 缓冲模块

每个模块:

对应于系统的特定元件;
定义可以查询的相关信息 (info命令)(使用get info函数);
允许行使该模块的功能(使用特定函数)。

此外,除缓冲模块外的所有模块,都充当允许读/写操作的端口GenApi使用这些端口函数加载该模块的描述文件,并使用其GenApi功能。

系统模块

系统模块(也称为TLSystem)代表GenTL发生器(例如coaxlink.cti库)。此模块位于父/子树的顶部。

系统模块提供关于GenTL发生器的基本信息:例如CTI文件的完整路径和供应商名称(Euresys)。

系统模块的真正目的,是列出系统中存在的接口(或采集卡)。系统模块最重要的功能是TLGetNumInterfaces(检索系统中的采集卡数量)和TLOpenInterface(访问其中一个采集卡)。

接口模块

GenTL标准调用帧抓取器接口。系统模块为每个采集卡提供一个子接口:如果计算机中有两个Coaxlink 卡,系统模块将提供两个子接口。

每个接口代表一个采集卡。接口模块中有全局帧捕获功能,如数字I/O线。这意味着控制I/O线的GenApi功能连接到接口。

每个接口还充当一个或多个设备的父接口。接口模块最重要的功能是IFGetNumDevices(检索可连接到接口的相机数量)和IFOpenDevice(访问其中一个设备)。

设备模块

GenTL标准使用术语设备远程设备来表示两个相关但不同的概念。远程设备是一个真正的相机,实际地连接到一个采集卡。这与我们在这里描述的设备模块不同。

设备模块是包含与相机相关的采集卡设置的模块。这包括触发器和频闪器之类的东西。

设备模块还充当一个或几个 数据流的父级,并且可以被视为的 远程设备的同级。设备模块最重要的功能是 DevOpenDataStream (访问数据流)和 DevGetPort (访问远程设备)。

数据流模块

数据流模块处理缓冲区。在采集运行期间,图像从相机发送到采集卡,然后将其传输到主机上分配的内存缓冲区。数据流模块是图像采集发生的地方。这是大多数功能所在的地方。

缓冲处理非常灵活。可以使用任意数量的缓冲区。缓冲区要么在输入队列中,要么在输出队列中,要么暂时取消。应用程序决定空缓冲区何时排队(到输入FIFO ),以及填充的缓冲区何时弹出(从输出FIFO )。

缓冲模块

缓冲模块简单地表示给父数据流的存储器缓冲区。有用的元数据与缓冲区关联。这包括图像宽度、高度、像素格式、时间戳…这些是通过 info命令 检索的(请参见 BUFFER_INFO_CMD_LIST ,在标准 GenTL 头文件中)。

缓冲模块是唯一没有读/写端口功能的模块;它没有GenApi功能。

GenTL API

GenTL可以检测、控制和使用所有相机和图像采集卡功能,但其使用非常繁琐:

cti 文件必须动态加载,并且必须通过指针访问它们导出的函数。
函数返回必须由应用程序检查的错误代码。
大多数函数从非类型缓冲区读取/向非类型缓冲区写入:应用程序必须确定所需的缓冲区大小,分配临时缓冲区,将数据转换到此缓冲区/从此缓冲区转换数据,最后释放缓冲区内存。

我们不建议直接使用GenTL API,而是建议使用以下两种方法之一:

处理这些复杂问题的Euresys::EGenTL库,以便用户不必这样做;
或者提供高级、易用界面的Euresys::EGrabber库。