1. 介绍
GenICam GenTL标准的设计目标是提供一种枚举连接到已知系统的设备的通用方法,与一个或多个设备通信,如果可能,从独立于底层传输技术的设备到主机。这允许第三方软件以独立于传输层的方式,使用不同的技术控制摄像头并获取数据。
GenICam GenTL标准的核心是定义一个统一的传输层接口(TLI)。传输技术和第三方之间的软件接口软件由一个C接口、一个已定义的行为和一组标准化的要素名称及其含义。要访问这些功能,需要使用GenICam GenApi模块
GenICam GenApi模块定义了一种XML描述文件格式,用于描述如何访问和控制设备功能。标准要素命名约定定义了这些功能的行为。
GenTL软件界面不包括远程的任何特定于设备的功能除用于建立通信的设备外的其他设备。GenTL提供一个允许访问的端口通过GenApi模块连接到远程设备功能。这使得GenTL成为与设备和从它们流式传输数据。GenApi和GenTL的结合提供了一个完整的软件架构访问设备(例如相机)。
2. 框架
本节内容提供一个高级视角来帮助理解GenICam GenTL标准的不同构成部分。
2.1 概览
GenTL的目标是提供一个透明的传输层接口来获取图像或其他数据,以及与设备通信。其目的不是配置设备除传输相关功能外,即使必须间接使用与设备通信配置信息。
生产者消费者模型图
当单独用时,GenTL 常常用来识别两个不同的实体:GenTL生产者和GenTL消费者。
一个 GenTL生产者就是一个软件驱动来实现GenTL接口来使能一个应用程序或软件库来获取或配置硬件,或者获得设备的流格式图像数据。
一个GenTL消费者是用定义好的GenTL接口能使用一个或多个GenTL生产者的软件。比如是一个应用程序或一个软件库。
2.1.2GenICam GenApi
强调推荐不要在GenTL生产实现中使用GenApi模块
2.1.3 GenICam GenTL SFNC
为了可以配置一个GenTL 生产者,每个模块实现了虚拟寄存器映射,且提供了一个GenApi兼容的XML文件。在这些XML文件中,只有必须的(mandatory)特征才会在这个文档中描述。所有的特征描述在GenTL SFNC文档中。
2.2 GenTL模块
GenTL 标准定义了一个实现GenTL接口库的分层结构。一个模块定义了一个层。这些模块以树展示了它们的分层结构,以系统模块System Module作为这棵树的根结点。
2.2.1 系统模块System Module
对于每个GenTL消费者,作为层次结构根的系统模块是到GenTL Producer软件驱动程序的入口点。它代表整个系统(不是全局的,只是从GenTL库的角度来看,主机端的整个GenTL生产者驱动程序系统的视图。
系统模块的主要任务是枚举和实例化实现范围内可用的接口。
系统模块还提供信号能力和模块的配置GenTL消费者的内部功能。
可以有一个包含多个传输层的GenTL生产商并将其表示为不同的接口模块。在这种情况下系统模块的传输层技术必须“混合”(见第6.6.1章),并且子接口模块公开其实际的传输层技术。在这种情况下第一个接口可以是CamerLink的图像采集板卡,第二个接口可以是IIDC1394控制器。
2.2.2 接口模块 Interface Module
接口模块表示系统中的一个物理接口。对于基于以太网的传输层技术这将是一个网络接口卡;对于基于CameraLink的实现这将是一个图像数据帧采集板卡。枚举和实例化此接口上的可用设备是此模块的主要角色。接口模块也向GenTL用户提供信号和模块配置功能。一个系统可能包含零个、一个或多个接口。一个接口只表示一个传输层技术。不允许配备GigE Vision相机和一个CameraLink相机在同一个接口上。接口数量没有逻辑限制由系统寻址。这仅受所用硬件的限制。
2.2.3 设备模块 Device Module
设备模块代表一个物理远程设备的GenTL生产者代理。设备模块的职责是使能与远程设备的通信用于枚举和实例化数据流模块。设备模块也向GenTL用户提供信号和模块配置功能。一个接口模块可以包含零个、一个或多个设备模块实例。设备是始终使用一个传输层技术。对于连接到接口的设备数量,逻辑上不受限制,这仅受所用硬件的限制。
2.2.4 数据流模块Data Stream Module
来自远程设备的单个(图像)数据流由数据流模块表示。本模块的目的是提供采集引擎并维护内部缓冲池。除此之外,数据流模块还提供了信号和模块GenTL消费者的配置功能。一个设备可以包含零个、一个或多个数据流。逻辑上设备可以拥有的流数没有限制,这仅受使用的硬件和实现的限制。
2.2.5 缓冲模块 Buffer Module
缓冲模块封装单个内存缓冲区,作为图像采集数据的存放目的地。内存可以是用户分配的,也可以是GenTL生产者分配的。这个后者可以是预先分配的系统内存。
缓冲模块还提供信号和GenTL消费者的模块配置功能。
要启用数据流,必须向数据流模块实例通告至少一个缓冲区,并放入输入缓冲池。
GenTL生产者可以对改变图像的图像数据进行预处理格式和/或缓冲区大小。有关参数的详细列表,请参阅第5.5章描述缓冲区。
2.3 GenTL模块公共部分
生产者和消费者之间的互动和兼容性是由C接口、模块行为的描述、信号、配置和采集引擎保障的。
2.3.1 C接口
C接口提供GenTL生产者的入口点。它枚举并创建所有模块实例。它包括由数据流模块处理的采集。这个GenTL用户也可以访问模块的信号和配置接口通过C接口。因此,仅使用C接口就可以流式传输图像,独立于底层技术。GenTL生产者的默认状态应为确保能够打开设备并从中接收数据。选择C接口的原因主要有如下几个:
尽管由于上述原因选择了C接口,但实际的GenTL生产者实现可以在面向对象的语言中完成。除了全局函数,所有接口函数都在可以映射到对象的句柄上工作。任何可以用C接口导出库的编程语言都可以用于实现GenTL生产者。为保证GenTL生产者和GenTL消费者的互换性,无需语言除与ANSI C兼容的功能外,可在的接口中使用特定功能GenTL生产者。
2.3.2 配置
每个模块都提供GenTL端口功能,以便GenICam GenApi(或任何其他类似的非参考实现)可用于访问模块的配置。这个GenTL Producer实现的基本操作可以通过C接口完成无需使用特定的模块配置。更复杂或特定于实现可以使用GenTL端口通过灵活的GenApi功能接口进行访问功能和提供的GenApi XML描述。每个模块都有这个XML描述,模块的端口可以用来读取和/或修改模块中的设置。为此,每个模块都有自己的虚拟寄存器端口功能可以访问的映射。因此,访问远程设备的配置已扩展到传输层模块本身。
2.3.3 信号(事件)
每个模块都可以通知GenTL消费者某些事件。举个例子,如果有新的图像数据来自远程设备,一个新的缓冲事件就会发出。特定模块支持的事件数取决于该模块及其实现。C接口使GenTL消费者能够在模块上注册事件。使用的事件对象依赖于平台和实现,但封装在C接口中。