用于 GenICam GenTL 兼容相机的图像采集接口

接口: GenICamTL
修订: 20.11.16
日期: 2023-04-05

一般情况

本页提供通用 HALCON GenICamTL 接口的文档,用于访问所有兼容 GenICam GenTL 的相机。注册 客户可从 MVTec WWW 服务器 下载该接口的 最新版本

系统要求

接口版本控制

用于数字输入/输出和图像采集的 MVTec 接口始终与一系列 HALCON 版本兼容。因此,版本方案既说明了接口的兼容性,也说明了接口本身的版本。接口版本总是由三个数字组成,中间用点隔开,即 20.11.5。前两个数字描述了接口兼容的最小 HALCON 版本。以 20.11.5 版本为例,这意味着接口兼容 HALCON 20.11 之后的所有 HALCON 版本。最后一个数字说明接口的修订版本,在本例中为修订版本 5。

安装

只有在手动安装或更新接口时,才能按照这些步骤操作:

环境变量

接口可通过几个环境变量进行控制:

局限性

GenICam GenApi

GenICam GenTL

识别和打开设备

通过 GenTL 接口访问的设备通常被描述为由四个实体组成的集合,其中的名称由特定的 GenTL 生产者给出。 设备列表可通过 info_framegrabber 获取,参数为 "info_boards"(所有可检测设备)或 "device"(仅可用设备)。每个条目都由 "token:value"(上面列出的实体,通常还有其他实体)形式的条目组成,并用" | "(空格 - 管道 - 空格)序列分隔。
info_framegrabber 的结果可直接传递给 open_framegrabber。或者,也可以直接指定设备。为此,可以省略一个或多个条目(或指定为 "默认")——这就像使用通配符,意味着不应考虑该实体的特定 ID(任何 ID 都能匹配)。HALCON 采集接口将遍历 GenTL 设备树(生产者 -> 接口 -> 设备 -> 数据流),直到找到所有非默认项的完全匹配项。
对于 open_framegrabber,各个条目的评估值如下: 当使用不含 "token: "和分隔符" | "的纯字符串时,假定生产者、接口和流均为 "默认",它将被直接解释为 GenTL 设备 ID。

替代 IDs:

选择 GenICam 功能描述文件

设备或 GenTL 生产者的功能由 GenICam 功能描述文件(XML 文件)描述,这些文件会自动解析并提供给用户。HALCON GenICamTL 图像采集接口可访问通过以下 GenICam 特征描述文件显示的特征: 在大多数情况下,GenICam 描述文件由设备和 GenTL 生产者提供。可以使用参数 "do_write_configuration"(参见 set_framegrabber_param)为打开的连接存储这些文件的副本。该命令将按照以下格式写入所有 GenICam 描述文件和一个包含各种信息的 "ini" 文件(详见 set_framegrabber_param),包括写入的 GenICam 描述文件的位置:
 
RemoteFile=%PATH_TO_GENICAM_FILE_OF_THE_DEVICE% 
SystemFile=%PATH_TO_GENICAM_FILE_OF_GENTL_SYSTEM_MODULE% 
InterfaceFile=%PATH_TO_GENICAM_FILE_OF_GENTL_INTERFACE_MODULE% 
DeviceFile=%PATH_TO_GENICAM_FILE_OF_GENTL_DEVICE_MODULE% 
StreamFile=%PATH_TO_GENICAM_FILE_OF_GENTL_STREAM_MODULE% 
可重复使用相同的 ini 文件格式,强制 HALCON 采集接口为其中一个或多个实体加载替代 XML 文件。这在更新或故障排除等方面非常有用。ini 文件中列出的文件将用于给定实体,而不是原始文件。对于 ini 文件中排除的实体,将按常规方式搜索和加载 GenICam 描述文件。要应用 ini 文件,请在 "CameraType" 参数中将其完整路径传递给 open_framegrabber

请注意,ini 文件也可重复用于其他目的,如参数 - 持久设备状态 中所述的存储/恢复配置。请注意,指定持久化文件时,它们的优先级高于传递给 open_framegrabber 的其他显式设置。

参数 – 命名规则

有以下几组参数:

参数 – 设备间共享

属于 GenTL 生产者的系统模块和接口模块的参数(即前缀为 "[System]" 和 "[Interface]" 的参数,参见 参数 - 命名规则 )必须以特殊方式处理。
要了解它们的行为,必须明白它们并不描述或配置设备本身,因此并不完全属于已打开的设备实例。
接口模块参数属于发现给定设备的接口,并由该接口下打开的所有设备共享(另见 识别和打开设备 )。系统模块参数属于整个 GenTL 生产者,由该 GenTL 生产者中所有打开的设备共享。
这将产生若干影响。特别是在通过多个设备实例访问系统或接口模块参数时,这些参数必须被视为共享资源。通过一个设备实例修改这些参数会影响通过其他设备实例看到的参数值(可能还会影响其他功能的参数值)。打开设备实例后,这些参数的初始值可能取决于先前打开的设备实例与这些功能的交互。

参数 – GenICam 数据类型

HALCON 本地参数类型有 访问基于 GenICam 的功能时,必须将 GenICam 数据类型映射到 HALCON 识别的参数类型。GenICam 提供以下类型:

参数 – 持续设备状态

采集设备设置的当前状态(定义其工作状态的所有参数值)可能会在未进行采集时持续存在,即在 grab_image_startgrab_image_async 之前或 set_framegrabber_param(..., 'do_abort_grab', 1) 之后。这不仅适用于实际设备参数,也适用于配置 GenTL 的参数和 GenICamTL 图像采集接口的内部参数。设备参数通常保留到设备断电为止。GenTL 生产者模块和消费者参数会一直保留,直到调用 close_framegrabber。使用参数 "settings_selector" 可指示哪些参数需要持久化。持久化功能包括两个步骤,将当前配置存储到文件中,然后重新加载回设备。可以使用 "do_write_settings" 参数存储由 "settings_selector" 指示的选定模块设置,之后再使用 "do_load_settings" 参数重新加载,并在两种情况下都指定所需的持久化文件路径。要查询某个功能是否可以持久化,请使用后缀"_streamable"。

请注意,虽然文件格式有意采用人类可读格式,而且可以根据需要对文件进行手工修改,但此类修改应由熟悉 GenICam 持久功能内部结构和特定设备的人员谨慎完成。对文件的不当修改会导致使用时出错。

重要的是要知道,设备相关功能的持久性虽然由软件执行,但实际上是设备端的功能。如果设备不正确或不完整地执行了持久性支持,它将无法按预期运行--在这种情况下,制造商可以提供更多信息或帮助。

设备和/或 GenTL 生产者可能会根据当前状态阻止与持久性相关的操作,例如在采集正在进行时。

相同的持久性文件可应用于相同类型和固件版本的整套设备。将持久性文件应用于其他类型的设备或使用不同固件版本的设备,很可能会导致不一致,甚至完全失效——相应的设备制造商应为此类使用情况提供指导。

除了 "do_write_settings" 外,还将使用参数 "do_write_configuration" 与 GenICam 功能描述文件选择 一节中记录的 ini 文件一起写入特征持续文件。该命令将生成扩展版本的持续文件,不仅存储当前设备配置,还存储用户集和定序器集的内容(如果设备支持这些内容)。此外,它还将为所有 GenTL 生产者模块(系统、接口、设备和数据流)生成持久文件。ini 文件中的持久文件条目格式如下:
 
RemotePersistence=%PATH_TO_PERSISTENCE_FILE_OF_THE_DEVICE% 
SystemPersistence=%PATH_TO_PERSISTENCE_FILE_OF_GENTL_SYSTEM_MODULE% 
InterfacePersistence=%PATH_TO_PERSISTENCE_FILE_OF_GENTL_INTERFACE_MODULE% 
DevicePersistence=%PATH_TO_PERSISTENCE_FILE_OF_GENTL_DEVICE_MODULE% 
StreamPersistence=%PATH_TO_PERSISTENCE_FILE_OF_GENTL_STREAM_MODULE% 
如果特定设备不支持持久功能(或根本不支持),可使用 GenICam 的 UserSetSave/UserSetLoad 功能(如果设备支持)。这些功能允许在设备的非易失性存储器中存储/加载设备设置。

参数 – MVTec EasyParams

MVTec EasyParams 是一组基于设备常规 GenICam 功能的 MVTec GenTL 消费者参数。通过这些参数,可以轻松访问最常用的相机参数。
可通过调用 "available_easyparam_names" 获取 EasyParams 列表。请注意,"available_param_names" 不包括 EasyParams。MVTec EasyParams 以 [Consumer] 前缀开头,表示它们是 HALCON GenTL 消费者本身的内部参数。
自 HALCON 22.11 版起,这些参数可通过 HDevelop 图像采集助手中的独立选项卡使用。
如果您的设备不支持其中一个 EasyParam,查询其访问权限将返回 "ni"(not implemented,未执行)。如果返回的是 "na"(not available,不可用),则表示该 EasyParam 受支持但当前不可用,例如,它取决于另一个 EasyParam 的当前状态或一个或多个 GenICam 功能的访问,或者因为图像采集正在运行。在后一种情况下,请使用 set_framegrabber_param(..., 'do_abort_grab', ...) 停止采集。
MVTec EasyParams 列表: 有关每个 MVTec EasyParam 的详细信息,请参阅 "获取图像采集卡参数""设置图像采集卡参数 " 一节。
另见 HDevelop 示例 genicamtl_easyparams.hdev。

采集 – 概述,设备控制

图像采集可以是同步的(grab_image/grab_data),也可以是异步的(grab_image_start/grab_image_async/grab_data_async),参见算子的参考文档。
该接口可完全配置和控制相机和 GenTL 生产者的采集过程。请注意,当采集激活时,GenICam 可能会锁定相机或生产者的某些功能。
使用同步抓取(grab_image/grab_data)时,每张图像都会在内部开始新的采集,因此应用程序总能获得新的图像。在传送图像之前,采集会再次停止,因此在每次 grab_image/grab_data 调用之间,所有与采集相关的功能都不会被锁定。
通过 grab_image_start 显式启动或 grab_image_async/grab_data_async 隐式启动的异步抓取,接口会在内部保持抓取运行,收集更多图像,并通过未来的 grab_image_async/grab_data_async 调用进行传输。在使用 set_framegrabber_param(..., 'do_abort_grab', ...) 停止采集之前,采集相关的功能会被锁定。
HALCON 采集接口可正确识别设备上配置的 "连续"、"单帧" 和 "多帧" 采集模式,并相应调整采集控制逻辑。
此外,该接口还可独占访问对采集控制至关重要的几个远程设备功能(AcquisitionStart、AcquisitionStop、AcquisitionAbort、TLParamsLocked)。用户应用程序无法直接控制这些功能。
抓取算子的 "图像" 和 "数据" 版本之间的区别记录在 采集——抓取算子 中。

采集 – 缓冲区处理

接口默认为采集引擎分配 4 个缓冲区(可通过 open_framegrabber 的 "Generic" 参数更改缓冲区数量)。
每当成功获取新图像并将其作为 HALCON 图像传递给应用程序时,接口都会锁定缓冲区(不会将其返回给获取引擎),直到应用程序调用新的抓取相关算子或使用 set_framegrabber_param(..., 'do_abort_grab', ...) 中止获取。在此期间,查询 "最后获取" 的缓冲区信息是完全安全的,例如通过 get_framegrabber_param 参数(如 "buffer_timestamp"、"buffer_is_incomplete"、"image_width" 和 "image_height")查询缓冲区属性。这也适用于最终存在于缓冲区中的 块数据 ,并且也可在易失性模式下使用。
当应用程序调用新的抓取相关算子时,接口会将缓冲区返回给采集引擎,与缓冲区相关的查询不再有效。

采集 – 图像格式处理

对于现代通用图像采集接口,应用程序无法根据当前设置对来自设备的图像格式做出有效假设。例如,有些设备允许在采集过程中更改图像格式属性。其他设置在采集路径中包含多个设备(例如,图像采集器可能会修改相机提供的图像格式)。
HALCON GenICamTL 图像采集接口完全支持这些用例。它会检查每个缓冲区的图像格式和其他重要属性,并生成与采集的图像格式和最终用户配置的输出格式参数(如 "color_space" 和 "bits_per_channel" )相对应的 HALCON 图像。只有在缺少有关缓冲区的必要信息(即 GenTL 生产者不支持)时,才会使用当前设置作为后备。

采集 – 抓取算子

采集接口提供了两种从设备采集图像(或其他)数据的机制:grab_image/grab_image_asyncgrab_data/grab_data_async。这两种机制可能更适合不同的使用情况。从内部看,这两种机制的工作原理完全相同(尤其是如何从设备上获取和处理数据),它们的不同之处在于如何向应用程序提供输出。
"传统的" grab_image/grab_image_async 算子仍然适用于只从设备上获取单个二维图像的简单用例。目前,HDevelop 的图像采集助手也在使用这种方法。但是,如果设备正在流式传输更复杂的数据结构,如三维数据、多 AOI 或类似数据,grab_image/grab_image_async 就无法提供所有输出。在所有这些情况下,它只会提供在获取的数据中找到的第一个图像。
"扩展的" grab_data/grab_data_async 算子允许输出任意数量的 HALCON 图像和任意数量的控制数据。因此,它适用于需要输出不止一个 HALCON 图像的高级用例。一个重要的使用案例是通过三维设备(使用三维设备 )进行采集,此时算子可以通过控制数据输出建立并输出三维对象模型。当设备为单次采集输出多个图像时,它还可用于其他(甚至可能是特定设备)情况。
可借助 "image_contents"、"data_contents"和相关参数查询所提供输出的结构。
grab_data/grab_data_async 也可用于简单的单图像用例——在这种情况下,它们只需提供单个 HALCON 图像和零控制数据输出。因此,它们可以完全替代传统的 grab_image/grab_image_async 算子。

使用三维设备

采集接口完全支持 GenICam 标准三维设备模型,因此能够无缝集成符合该模型的三维设备。这尤其意味着应用程序无需关心特定设备的三维数据格式,采集接口将使用设备的信息生成三维数据。
如果收到指示(使用 "create_objectmodel3d" 参数),采集接口将根据从设备采集的坐标数据生成三维对象模型。HALCON 的三维对象模型相关算子可以直接使用该模型。
最终三维对象模型的完整性和准确性在很大程度上取决于实际坐标数据,特别是设备提供的三维配置信息。由于三维配置元数据通常是通过块数据机制( 块数据 )从设备中传递的,因此必须注意设备是否完全启用了块数据生成功能。
如果缺少某些重要的三维配置信息,采集接口会尝试使用合适的默认值,但三维对象模型的输出质量可能会降低。
三维对象模型的创建还可受到 "coordinate_transform_mode"、"confidence_mode"、"confidence_threshold"、"add_objectmodel3d_overlay_attrib"等附加参数的影响。
注意:对于不符合 GenICam 标准三维设备模型的设备,无法自动生成 HALCON 三维对象模型。
请注意,只有 grab_data/grab_data_async 算子支持三维对象模型输出,而不能使用 grab_image/grab_image_async 获取。除三维对象模型外,grab_data/grab_data_async 算子还以 HALCON 图像的形式输出实际原始坐标数据。可以借助 "image_contents"、"data_contents"和相关参数来识别各个输出。

原始输出格式 – 自定义像素格式,非图像缓冲区

HALCON GenICamTL 图像采集接口内置一个转换器,可将 GenICam 标准功能命名规则中描述的像素格式转换为所需的 HALCON 图像格式。参数 ColorSpace 和 BitsPerChannel(open_framegrabber,最终为 set_framegrabber_param)定义了生成的 HALCON 图像所需的格式。如果将这些参数设置为默认值,则会保留来自设备的原始像素格式。
为提供对自定义像素格式(即 PFNC 未定义或 HALCON 不支持的像素格式)的基本支持,可使用值 "raw"。在这种情况下,图像采集接口无需进行任何格式转换即可将缓冲区传送给应用程序。
请注意,在获取包含图像数据以外内容的缓冲区时,也要遵循同样的原则。此类缓冲区的例子可以是文件(如压缩图像)或原始数据(智能相机处理的结果)。此类缓冲区不是真正的 "图像",但仍可作为 "原始" HALCON 图像传送给应用程序。应用程序有责任知道如何解释这些数据。
最后但并非最不重要的一点是,如果用户明确希望接收未经任何转换的原始输入数据,也可以使用 "原始" 。例如,在获取拜耳编码图像时,指定 "原始" 意味着接口不应尝试将其解码为 RGB 或单色格式,而是直接将数据传送给应用程序。
重要的是要知道,当接口没有关于图像格式(尺寸和像素格式)的完整信息时,它必须选择一种人工格式。在这种情况下,它总是提供尺寸与缓冲区大小(图像大小的平方根)相匹配的 8 位图像。最终,HALCON 图像未使用的尾部(如果该人工图像大于源缓冲区)将被填充为零。使用 "image_raw_buffer_type"(图像提取缓冲区类型)和 "image_raw_buffer_padding_bytes"(图像提取缓冲区填充字节)参数,可以查询最后获取的缓冲区是包含已知属性的图像,还是包含其他数据(因此必须使用人工 HALCON 图像大小)以及最终尾部填充的大小。

块数据

与 GenICam 兼容的相机可以在每幅图像中以所谓的 "块数据 "格式提供附加元数据。通常需要先使用 "ChunkModeActive" 和 "ChunkSelector"/"ChunkEnable" 功能启用单个元数据 "块" 的传输。
接口以透明方式对块数据进行解码,并将其与相应的相机特征进行匹配。
实际值可通过常规参数读取机制(即 get_framegrabber_param)读取。元数据的选择取决于设备。与块相关的功能名称通常以约定俗成的前缀 "Chunk" ( 例如 "ChunkExposureTime" 或 "ChunkGain" )开头,不过,相机文档中应包含所支持的块及其相应功能名称的所有信息。
某些与 GenICam 兼容的设备可能会实现纯块模式,在这种模式下传输的是没有图像的元数据。这种模式与 grab_image 算子不兼容,但可与 grab_data 算子一起使用。
只有在 "最后获取的缓冲区" 有效的情况下,与块数据相关的功能才会提供有意义的值, 即从最后一幅图像的传送到下一次调用任何抓取相关算子(请参阅 "采集 - 缓冲区处理 " 一节)。

功能更改通知

相机和 GenTL 生产者通过 GenICam 接口显示的任何功能以及采集接口的内部参数发生变化时,都可能收到通知。
请注意,在各种情况下都可能发出通知,包括: 请注意,每当功能被上述操作之一 "标记为脏"(其缓存失效)时,就会发出通知。这并不一定意味着其值真的发生了变化,这需要应用程序来检查。
可以使用 set_framegrabber_callback 为个别功能注册通知回调(参见 相应的算子文档 )。此外,还可以使用消息队列接收事件通知。在这种情况下,必须先创建一个消息队列,然后再注册单个功能 - 参见 事件消息队列

事件数据

与 GenICam 兼容的设备可以发送异步事件,这些事件可选择携带附加数据。通常需要先使用 "EventSelector"/"EventNotification" 功能启用个别事件类型的传送。对于符合 SFNC 标准的事件,如果启用了参数 "event_notification_helper",则可自动完成这一操作。
事件数据的解码和与相应功能(包括潜在通知)的匹配由接口透明地执行。
实际值可通过常规参数读取机制,如 get_framegrabber_param,或者如果使用消息队列接收事件,则可通过 get_message_tuple 读取。要生成的事件类型取决于设备。与事件相关的功能名称通常以约定俗成的前缀 "Event" 开头(例如 "EventFrameTrigger" 和 "EventFrameTriggerTimestamp"),不过,设备文档应包含有关支持的事件及其相应功能名称的所有信息。
虽然在一般情况下可以随时读取与最后发送的事件相对应的数据,但在使用回调接收事件 时,强烈建议将事件数据的读取与相应事件功能的通知同步进行。只有在这种情况下,才能保证读取的数据与被通知的事件实例完全一致,而不是通过同一事件的新实例来修改功能值。请注意,通知是从事件处理/调度线程的上下文中发出的,因此在处理用户回调时,事件处理机制会暂停。如果多个数据项与同一事件相关联,只需为实际事件功能注册通知,并在回调期间读取所有数据即可。
如果使用消息队列接收事件,您可以决定添加其他数据,以便与相应的事件功能一起传送,参见 事件消息队列 。在这种情况下,接口将在事件生成后立即读取所有指定的事件特征,并将其添加到相应的消息中。这就保证了发送的信息与事件发生时的实际值一致。
除了实际设备生成的异步事件外,GenTL 生产者的任何模块(系统、接口、设备和数据流)都能生成异步事件(可选包括附加数据)。上述关于处理设备事件的信息同样适用于 GenTL 生产者事件,包括启用/禁用这些事件(通常使用特定模块提供的 "EventSelector"/"EventNotification" 功能,即在功能名称中带有相应的模块前缀)。对于符合 SFNC 标准的事件,如果启用了参数 "event_notification_helper",则会自动启用。
接口将自动捕捉和解码事件,并将其与相应的 GenTL 生产者功能相匹配。重要的是要明白,系统和接口模块有可能被多个已打开的设备共享(参见 参数 - 设备间共享 ),因此,这些共享模块产生的异步事件也是如此。

事件消息队列

该接口支持通过消息队列发送功能更改通知。使用 set_framegrabber_param(..., 'event_selector', ...) 选择所需的目标特征。它是与 set_framegrabber_param 相同的普通功能名称(GenICam 功能或内部参数),包括一个可能的前缀,如 "[Device]"(请参阅 参数 - 命名规则 )。
使用 create_message_queue 创建一个接收通知的消息队列,并使用 set_framegrabber_param(..., 'event_message_queue', QueueHandle) 将其分配给所选功能。
消息队列可为任何基于 GenICam 的功能注册,即设备和 GenTL 生产者发布的功能或采集接口的内部功能。此外,还可以为采集接口中发生的内部事件注册通知,特别是 "event_new_buffer" 事件,该事件会在上次采集的缓冲区信息更新时触发(抓取新缓冲区或重启采集时上次缓冲区信息失效)。
可通过调用 get_framegrabber_param(..., 'available_event_names', ...) 来查询支持的目标列表。
功能更改回调的重要用例之一是设备事件传送机制,详情请参见事件数据功能更改通知 一节。
每当给定功能可能发生变化(包括范围或访问模式等其他属性)时,就会向指定队列添加一条新消息。请注意,这并不一定总是意味着该功能实际上有了新值。调用 set_framegrabber_param(..., 'event_message_queue', 0) 会取消注册先前从指定事件中注册的消息队列。请注意,接口只为每个功能保留一个注册,如果您试图为一个已经注册了消息队列的功能注册一个新的消息队列,先前的注册将被新的注册所取代。
通过 dequeue_message 可以检索到事件的信息,其中至少包含三个元组。第一个元组(键 "id")是事件所来自的采集实例的唯一标识符。它是一个字符串,由 "<接口>:<唯一名称>" 组成。第二个元组(键 "event_name" )是之前由 "event_selector" 指定的相应功能的名称。第三个元组(键 "event_value")包含相应功能的值,如果可用且可读的话。
如果您决定添加其他数据与相应的事件功能一起传送,请使用 set_framegrabber_param(..., 'event_data', ...) 添加感兴趣的功能。每个事件数据功能都将附加到事件消息中,键为其名称,元组为其值(如果可读)。注意,通过 "event_data" 指定的重复信息将被忽略。被通知的功能值本身(已在 "event_value" 中报告)也将被视为重复信息,不会再次报告。

使用 HDevelop 图像采集助手

在使用 HDevelop 图像采集助手时,以下提示有助于避免出现问题:

使用内部色彩转换

HALCON GenICamTL 接口支持在软件中执行内部色彩转换。当兼容 PFNC(像素格式命名规则)的相机提供的色彩格式与用户通过参数 "color_space" 设置的格式不同时,转换将自动应用于该相机。所使用的转换算法是最基本的,并对速度进行了优化。

支持从相机(另见 PFNC)到接口(另见本文档中的 "color_space" 参数)的以下转换:

其中 M = 128 表示 8 位原始数据,和 M = 32768 表示 16 位原始数据。
由于 8 位(0...255)的内部 16.16 定点运算和 16 位原始数据的 24.8 定点运算,结果的准确性受到限制。

固件更新

采集接口支持 GenICam 固件更新标准,允许以通用方式更新支持相同标准的设备上的固件。如果设备支持该标准,其供应商会以 GUF 文件(即扩展名为 .guf 的文件)的形式分发固件更新文件。
要应用固件更新,必须在特殊配置模式(称为 "安全模式")下打开设备(open_framegrabber)。可通过 open_framegrabber 的 "通用" 参数选择该模式,该参数必须包含 "device_access=safe-mode"。
在安全模式下打开时,大部分常规参数(由 HALCON 采集接口、设备本身或 GenTL 生产者提供)将不可用。取而代之的是与给定设备和接口技术相对应的配置参数,尤其是与固件更新相关的参数。
要更新设备,首先要在 "fwupdate_file_path" 中选择 GUF 文件,然后使用 "fwupdate_update_selector" 从文件中选择一个(可能是多个)更新,最后通过 "do_fwupdate_apply" 进行应用。这些参数的文档提供了更多详细信息。
请注意,更新程序可能包括一次或多次设备重置,重置后设备必须被采集接口重新发现。重置和重新发现所需的时间由设备供应商在 GUF 文件中指定。然而,在某些情况下(取决于设备本身、其连接技术和系统设置),重新发现超时时间不够,设备无法被安全地重新发现。在这种情况下,可以指定一个额外的超时时间,将其添加到 GUF 文件中指定的超时时间中,以便成功完成进程。该参数 "fwupdate_wait_after_reset" 指定了以毫秒为单位的额外超时。
另见 HDevelop 示例 genicamtl_fwupdate.hdev。

info_framegrabber 的参数

参数 值列表 类型 方式 描述
'bits_per_channel' [-1, 8, 10, 12, 14, 16] 整数 预定义 每个通道的比特值。
'camera_type' ['CAMFILE:', 'ini;xml', '<path>', 'default'] 字符串 预定义 连接配置文件的语法和默认值。
'color_space' ['default', 'gray', 'raw', 'rgb', 'yuv'] 字符串 预定义 值。
'defaults' [0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1.0, 'false', 'default', '0', 0, 0] 混合型 预定义 open_framegrabber 的默认值。
'device' [' | device:<device id> | unique_name:<unique name> | user_name:<user-defined name> | interface:<interface id> | producer:<cti file including path>'] 字符串 动态 系统中发现的 GenTL 设备列表,包含设备 ID、唯一名称、用户自定义名称、接口 ID 和 GenTL 生产者文件路径等信息。参见 "设备打开" 一节 的完整描述。仅列出当前可打开的设备。
'external_trigger' [] 忽略。
'field' [] 未使用。
'general' [] 字符串 预定义 有关 HALCON GenICamTL 接口的信息。
'generic' ['', 'num_buffers=<num>' , 'device_access=<mode>' , 'direct_connection=<mode>' , 'streaming_mode=0' , 'device_event_handling=0' ] 字符串 预定义 通用参数的值列表。
'horizontal_resolution' [0, 1] 整数 预定义 水平分辨率的值列表。
'image_height' [] 不支持查询。
'image_width' [] 不支持查询。
'info_boards' [' | device:<device_id> | unique_name:<unique_name> | user_name:<user_defined_name> | interface:<interface_id> | producer:<cti file including path> | vendor:<device_vendor> | model:<device_model> | tl_type:<tl_type> | status:<device_status>'] 字符串 动态 系统中发现的 GenTL 设备列表,以字符串形式显示附加信息。某些值只有在可用时才会显示。
  • device_id 是设备名称,将由 info_framegrabber(...,'device',...) 显示。如果设置了 user_name(或 "DeviceUserID"),则会显示该名称。否则将使用 unique_name 。
  • unique_name 是设备的唯一标识符。字符串的格式取决于传输层的类型。
  • user_name 表示 "DeviceUserID" 功能的值,它是用户为设备定义的名称。如果设备已打开并提供该功能,则可以设置该值。
  • interface 显示设备与 PC 连接的硬件接口。以传输层类型 "GEV" 为例,这是网卡的 MAC 地址。
  • producer 显示 GenICamTL 生产者 cti 文件的完整路径。
  • vendor 表示功能 "DeviceVendorName" 的值。
  • model 表示功能 "DeviceModelName" 的值。
  • tl_type 显示底层传输层的类型,如 "GEV"、"U3V"。
  • status 显示设备配置是否正确。可能的值包括 "可用"、"只读"、"忙" 和 "未知"。甚至当前无法打开的设备也会被列出。
'parameters' ['<parameters>'] 字符串 预定义 HALCON 接口的预定义参数。
'parameters_readonly' ['<parameters>'] 字符串 预定义 HALCON 接口的预定义只读参数。
'parameters_writeonly' ['<parameters>'] 字符串 预定义 HALCON 接口的预定义只写参数。
'port' [] 未使用。
'revision' '<revision>' 字符串 预定义 GenICamTL 接口的版本号。
'start_column' [] 不支持查询。
'start_row' [] 不支持查询。
'vertical_resolution' [0, 1] 整数 预定义 垂直分辨率的值列表。

open_framegrabber 的参数

参数 默认值 类型 描述
Name 'GenICamTL' 字符串 HALCON 接口的名称。
HorizontalResolution 0, 1, resolution 1 整数 设置所需的相机图像水平分辨率:
  • 0:保持相机当前的宽度设置。
  • 1: 如果垂直分辨率也设为 1,则使用 GenICam SFNC 功能配置相机的全分辨率(重置合并/抽取功能并将图像尺寸设为最大)。
  • 分辨率: 直接使用该值作为图像宽度。
VerticalResolution 0, 1, resolution 1 整数 设置所需的相机图像垂直分辨率:
  • 0: 保持相机当前的高度设置。
  • 1: 如果水平分辨率也设为 1,则使用 GenICam SFNC 功能配置相机的全分辨率(重置合并/抽取功能并将图像尺寸设为最大)。
  • 分辨率: 直接使用该值作为图像高度。
ImageWidth --- 0 忽略。
ImageHeight --- 0 忽略。
StartRow --- 0 忽略。通过设备参数配置图像大小。
StartColumn --- 0 忽略。通过设备参数配置图像大小。
Field --- 忽略。
BitsPerChannel -1, 8, 10, 12, 14, 16 -1 整数 生成的 HALCON 图像每个通道的比特数。如果为-1,则使用各采集缓冲区的比特深度。如果指定的值大于 8,抓取的图像将以 uint2 图像的形式传输。
ColorSpace 'default', 'gray', 'raw', 'rgb', 'yuv' 'default' 字符串 指定所需的,从而指定生成的 HALCON 图像的图像通道数。如果单色像素格式为 "默认",则设为 "灰度",否则设为 "rgb"(未知像素格式设为 "原始")。
Generic '', ['num_buffers=<num>' , 'device_access=<mode>' , 'direct_connection=<mode>' , 'streaming_mode=0' , 'device_event_handling=0' ], -1 -1 混合型 通过通用参数,可以在相机初始化之前设置一些重要的值。请注意,包括值在内的参数名称必须是字符串,例如 "num_buffers=5" 将缓冲区的数量设置为 5。
可使用以下参数:
  • num_buffers: 设置所用采集缓冲区的最大数量。请注意,根据所使用相机的图像大小,缓冲区数量过多可能会超出计算机的可用内存大小。我们建议至少使用 2 个缓冲区。请注意,接口内部锁定 1 个缓冲区(参见 采集缓冲区处理 ),因此如果您的应用程序需要 n 个缓冲区,"num_buffers" 必须设置为 n+1。默认值:4。
  • device_access: 通过该参数可以设置设备的访问模式。有效值为:"独占" 表示独占读/写访问;"控制" 表示读/写访问,其他应用程序可能以只读模式连接;"只读" 表示只读访问。特殊值 "安全模式" 以受限模式打开设备,允许执行固件更新(参见 固件更新 )。默认值:"独占"。
  • direct_connection: 使用已知的 GenTL 接口和设备 ID,实现与设备的直接连接。GenTL 规范允许在已知设备/接口 ID 的情况下直接打开设备,而无需明确指示 GenTL 生产者刷新其内部设备列表,从而优化了不必要的超时。由于某些 GenTL 生产者无法正确实现这一点,因此默认禁用该参数。可能的值为 "启用" 和 "禁用"。
  • streaming_mode: 要禁用流(与抓取相关的算子),必须将该参数设置为 0。 对于支持流的设备,流默认为打开状态。
  • device_event_handling:如果要禁用设备事件,以减少所使用的资源(如传输次数或生产者中的 CPU 占用率),则必须将此参数设置为 0。 对于支持事件的设备,事件处理默认为打开状态。
ExternalTrigger --- 忽略。要配置触发模式,请使用带有相机通用(SFNC)触发参数的 set_framegrabber_param
CameraType 'default', <ini/xml filename> 'default' 字符串 配置文件的完整路径,其中指定了要为设备和 GenTL 生产者加载的其他 GenICam 描述文件,参见 有关设备打开一节 的详细描述。
Device ' | device:<device id> | unique_name:<unique name> | user_name:<user-defined name> | interface:<interface id> | producer:<cti file (including path)> | stream:<stream id>', '<device id>' 字符串 要打开相机,可以使用 info_framegrabber(...'device'...)info_framegrabber(...'info_boards'...) 中显示的设备名称。某些字符串条目可能会被跳过或设置为 "默认"。要打开特定相机,必须设置 device 或 unique_name。此外,还可以指定用于采集的设备数据流 ID。作为快捷方式,可以只指定设备 ID 或用户自定义名称,或者使用字符串 "默认"。参见 有关设备打开一节 的完整描述。
Port --- 未使用。
LineIn --- 忽略。

set_framegrabber_param 的参数

相机和 GenTL 生产者的参数通过 GenICam 访问,并在相应相机或 GenTL 生产者的 GenICam 描述文件中定义,因此每个产品的参数集都不同(不过参数命名应符合 SFNC 和 GenTL SFNC GenICam 标准)。调用 get_framegrabber_param(..., 'available_param_names', ...) 会返回一个元组,其中包含所连接相机和 GenTL 生产者的所有可用参数。另见有关 参数命名规则 一节。
例如,要设置 AcqHandle 所指相机的当前增益(调用 open_framegrabber 之后),用户可以调用 set_framegrabber_param(AcqHandle, 'Gain', 6.0)
请注意,只有当参数值有效时,接口才会设置该值。不符合给定功能允许范围的整数和浮点数值会与最接近的有效值对齐。其他功能类型的无效值将被拒绝。
除了相机和 GenTL 生产者的 GenICam 参数外,set_framegrabber_param 还支持以下 HALCON 接口参数:

参数 默认值 类型 描述
'[Consumer]exposure' 实数 指定曝光时间。曝光时间通常以微秒为单位。不过,相机可能会偏离这一标准。有关更多详细信息,请参阅您相机的说明文档。如果 [Consumer]exposure_auto 未设置为 "关",则 [Consumer]exposure 访问为只读或不可用。此外,此 EasyParam 还取决于相机参数 ExposureMode。如果 [Consumer]exposure 不可用,您可能需要手动将 ExposureMode 更改为 "Timed" 。
'[Consumer]exposure_auto' 'Off', 'Continuous', 'Once' 字符串 指定曝光时间是由用户手动设置还是由相机自动设置。
  • 关:曝光时间由用户手动设置。
  • 一次:相机设备根据下一张成功拍摄的图像自动估算一次曝光时间。您的设备可能无法执行此值。
  • 连续:相机在获取每张图像时都会自动连续更新曝光时间。您的设备可能无法执行此值。
此 EasyParam 取决于相机参数 ExposureMode 。如果 [Consumer]exposure_auto 不可用,则可能需要手动将曝光模式更改为 "Timed" 。
'[Consumer]gain' 实数 允许通过应用放大系数来增加图像亮度。有关更多详细信息,请查阅您的相机文档。如果 [Consumer]gain_auto 未设置为 "关",则 [Consumer]gain 访问权限为只读或不可用。
'[Consumer]gain_auto' 'Off', 'Continuous', 'Once' 字符串 指定增益是由用户手动设置还是由相机自动设置。
  • 关:增益由用户手动设置。
  • 一次:相机根据下一张成功捕捉的图像自动估算一次增益。您的设备可能无法执行此值。
  • 连续:相机在获取每幅图像时都会自动连续更新增益。您的设备可能无法执行此值。
'[Consumer]trigger' 'Off', 'Software', 'Line<x>' 字符串 指定触发图像采集的模式。
  • 关:触发模式停用,设备以自由运行模式运行,连续获取图像。
  • 软件:触发模式已激活,可使用 [Consumer]trigger_software 生成内部触发。
  • 线路 <x>:触发模式被激活,指定的物理线路被配置为触发信号的外部源。该 EasyParam 不支持其他硬件触发信号。
'[Consumer]trigger_activation' 'RisingEdge', 'FallingEdge', 'AnyEdge', 'LevelHigh', 'LevelLow' 字符串 指定触发器的激活模式。此 EasyParam 在使用硬件触发器(即 [Consumer]trigger 为 "Line<x>")且设备支持的情况下可用。
  • 上升沿:源信号上升沿时触发有效。
  • 下降沿:源信号下降沿时触发有效。
  • 任何边缘:在源信号的下降沿或上升沿触发有效。
  • 高电平:只要源信号的电平为高电平,触发就视为有效。
  • 电平低:只要源信号的电平处于低电平,触发就视为有效。
'[Consumer]trigger_delay' 实数 指定接收到触发器后激活图像采集前的延迟时间。延迟单位通常为微秒。不过,相机可能会偏离这一标准。详细信息请查阅相机的文档。
'[Consumer]trigger_software' 整数 产生内部信号。[Consumer]trigger 必须设置为 "软件",否则 EasyParam 无法使用。
'add_objectmodel3d_overlay_attrib' 'disable', 'enable' 'disable' 字符串 控制采集接口是否应尝试将强度/颜色叠加附加到生成的三维对象模型上。仅适用于从给定抓取算子输出三维对象模型的情况。开启后,采集接口将尝试在采集的数据中找到合适的信息(如果设备提供)。如果有,则会以扩展属性的形式为输出模型中的每个点添加叠加信息。请注意,在某些高级用例中,设备可能会输出多个潜在的叠加图像,因此采集接口会尝试找到最合适的图像。
首先,它尝试在获取的数据中识别标记为 "强度" 图像的数据。如果找到并提供的是单色二维图像,它将作为 "&intensity_gray" 扩展属性附加。如果找到并提供的是 RGB 图像,则会附加三个扩展属性" &intensity_red" 、"&intensity_green" 和 "&intensity_blue" 。
如果无法识别 "强度" 数据,则会尝试查找标记为 "反射率" 的数据。如果找到并以单色二维图像的形式提供,则将其添加为 "&reflectance_gray" 扩展属性。如果找到并提供的是 RGB 图像,则会附加三个扩展属性"&reflectance_red" 、"&reflectance_green" 和 "&reflectance_blue" 。
最后,如果 "强度" 和 "反射率" 数据都无法识别(要么不存在,要么没有被设备正确标记),它就会在获取的数据中挑选第一个可以映射到三维坐标的二维图像。如果找到并提供的是单色二维图像,它将作为 "&overlay_gray" 扩展属性附加。如果找到并提供的是 RGB 图像,它将作为 "&overlay_red" 、"&overlay_green" 和 "&overlay_blue" 三个扩展属性附加。
如果找不到合适的二维图像,则不会添加叠加。例如,可以使用带有 "扩展属性名称" 参数的 get_object_model_3d_params 算子来查询实际添加的扩展属性。叠加还可用于可视化目的。
'bits_per_channel' -1, 8, 10, 12, 14, 16 整数 生成的 HALCON 图像每个通道的比特数。如果为-1,则使用各采集缓冲区的比特深度。如果指定的值大于 8,抓取的图像将以 uint2 图像的形式传输。
'buffer_reallocation_mode' 'only_increase_size', 'follow_payloadsize' 'only_increase_size' 字符串 定义为新采集重新分配缓冲区时所遵循的策略。如果使用 "only_increase_size"(只增加大小),则只有在有效载荷大小增加时才会重新分配缓冲区。如果使用 "follow_payloadsize" ,则每次有效载荷大小发生变化时都会重新分配缓冲区。
'clear_buffer' 'disable', 'enable' 'disable' 字符串 如果启用,则在重新排队前会清除每个缓冲区的内容(所有字节都设置为 0xF0,而不考虑预期的像素格式),这样就可以看到图像的哪些部分丢失了,以防某些图像数据包传输失败。当然,这个参数会增加运行时的开销,因为每次缓冲区排队时都要写入 0xF0 数据。它主要用于结合传输层进行调试,因为传输层不能保证传输完整的图像。请注意,该参数不会修改缓冲区队列,只会将缓冲区的内容设置为已定义的状态。
'color_space' 'default', 'gray', 'raw', 'rgb', 'yuv' 字符串 指定所需的,从而指定生成的 HALCON 图像的图像通道数。如果单色像素格式为 "默认",则设为 "灰度",否则设为 "rgb"(未知像素格式设为 "原始")。
'confidence_mode' 'off', 'object_model_3d' 'off' 字符串 控制采集接口是否使用(以及如何使用)像素置信度信息。仅适用于置信度信息与实际像素数据一起交付(按像素)的设备和用例。
区分有效像素和无效像素的阈值由 "置信度阈值" 参数控制。
请注意,在某些使用情况下,可能有其他标准来标记给定像素无效,例如,如果设备对三维坐标使用 "无效像素值"。"置信度模式" 参数不包括这些情况,三维对象模型始终会剔除这些无效像素。可能的值有:
  • 关:默认值。像素置信度信息不会应用于任何抓取算子输出,即使是由设备提供。
  • object_model_3d: 如果像素置信度信息可用,它将应用于最终生成的三维对象模型(但不应用于任何其他输出,特别是不应用于图像输出)。这意味着,置信度低于配置阈值的像素("点")不会包含在生成的三维对象模型中。
'confidence_threshold' [0.0, 1.0] 0.5 浮点数 区分有效像素和无效像素的阈值。仅适用于将置信度信息(按像素)与实际像素数据一起传送的设备和用例。使用 "confidence_mode" 参数可决定如何应用置信度阈值(应用于哪些输出)。
阈值被解释为 0.0 和 1.0 之间的(浮点数)比率。采集接口会将此比率重新映射到设备提供的实际置信度范围,并以此来决定哪些像素有效,哪些无效。置信度低于指定阈值的像素将被视为无效。
'coordinate_transform_mode' 'none', 'cartesian', 'reference' 'reference' 字符串 控制采集接口在根据获取的三维坐标建立三维对象模型时,应尝试执行哪些坐标变换算子。请注意,决定执行哪种变换以及使用哪些参数完全取决于设备提供的三维配置信息和获取的数据。如果这些信息不充分或坐标不准确,变换的结果可能毫无意义或无法预测。详情请参阅使用三维设备
可能的值有:
  • 无: 采集接口不会执行任何坐标转换。三维对象模型将包含 "原始" 坐标,可能只是根据设备的提示进行缩放。
  • 笛卡尔:如果设备使用的坐标系不是笛卡尔坐标系,采集接口将把坐标转换为笛卡尔坐标系(HALCON 三维对象模型的本机坐标系)。它不会尝试将坐标从设备的内部("锚")坐标系进一步转换到参考系。
  • 参考: 默认模式。如果需要,将转换为笛卡尔坐标系,然后如果设备支持 "参考" 坐标系并提供相应指令,则尝试将其转换为 "参考" 坐标系。参考系的目的是允许合并和对齐来自多个设备的数据。参考系与原生("锚")坐标系不同,原生坐标系是针对特定设备的,与设备的实际测量系统和实际配置相对应。
    参考系统的位置和方向应由设备外壳上的参考点标记标明。
    由于参考坐标系总是笛卡尔坐标系,因此这总是直接意味着向笛卡尔坐标系的转换。
'create_objectmodel3d' 'disable', 'enable' 'disable' 字符串 控制采集接口在遇到采集数据中的三维坐标时是否应尝试生成 HALCON 三维对象模型。
要获取三维对象模型,应用程序必须使用 grab_data/grab_data_async 算子,它们可以通过控制数据输出返回生成模型的句柄。而 grab_image/grab_image_async 算子不能返回三维对象模型。
重要提示:默认情况下禁用该参数。启用后,一旦不再需要给定的模型,应用程序就有责任使用 clear_object_model_3d 算子释放生成的对象模型和相关资源。为此,应用程序应跟踪每次 grab_data/grab_data_async 调用的控制数据输出中哪些带有三维对象模型句柄。这可以使用 "data_contents" 参数来实现。
生成三维模型模型时,采集接口会处理采集数据中的三维坐标,并借助设备报告的实际三维配置信息构建点云。详情请参阅使用三维设备
'delay_after_stop' <milliseconds> 0 整数 设备停止采集(AcquisitionStop 命令)与 GenTL 生产者之间的等待时间(毫秒)。最佳值取决于所用设备的速度和 GenTL 生产者所需的额外安全性。如果 GenTL 生产者功能强大,则无需延迟。
'do_abort_grab' --- 终止当前图像采集并解锁采集时可能锁定的参数。参见 采集概述
'do_fileaccess_delete' --- 删除设备文件 "fileaccess_remote_name" 的内容,前提是设备支持文件删除操作。
请注意,只有在给定设备支持 GenICam 文件访问功能时,所有与文件访问相关的参数才可用。
'do_fileaccess_download' --- 将设备文件 "fileaccess_remote_name" 的内容下载到 "fileaccess_file_path" 中指定的主机文件中。
请注意,只有给定设备支持 GenICam 文件访问功能时,所有与文件访问相关的参数才可用。
'do_fileaccess_upload' --- 将主机文件 "fileaccess_file_path" 中的数据上传到 "fileaccess_remote_name" 中指定的设备文件。用户有责任确保源文件的大小和内容符合设备的预期。
请注意,只有当指定设备支持 GenICam 文件访问功能时,所有与文件访问相关的参数才可用。
'do_fwupdate_apply' --- 应用在 "fwupdate_update_selector" 中选择的固件更新。
请注意,所有固件更新相关参数只能在专用的 "安全模式" 下使用,参见 固件更新
'do_load_settings' <input_file> 字符串 恢复先前存储的已打开设备的设置。参数 "settings_selector" 指定是否要恢复实际(远程)设备、GenTL 生产者模块之一或消费者参数(GenICamTL 图像采集接口的内部参数)的设置。参见 "参数 - 持续设备状态" 一节的详细描述。
'do_write_configuration' <output_file> 字符串 写入配置 (ini) 文件,并将带有设备当前配置的 GenICam 描述文件和持久性文件写入同一目录。
字符串参数必须是目标 ini 文件的文件名(包括完整路径)。该路径必须在写入之前就存在。写入的 ini 文件包含写入的描述文件和持久化文件的路径列表。
为远程设备和与当前打开的设备相关联的每个 GenTL 生产者模块写入 GenICam 描述文件。为远程设备和每个 GenTL 生产者模块以及 GenICamTL 图像采集接口的内部参数写入持久文件。
完整配置可通过 open_framegrabber 算子的 "CameraType" 参数加载,详细描述参见 "设备打开" 一节 。内部参数的持久值会覆盖传递给 "open_framegrabber" 的相应参数(尤其是 "BitsPerChannel" 和 "ColorSpace" )。
可以使用 "默认" 或空字符串来代替指定输出 ini 文件的全名。在这种情况下,文件将被写入临时目录(取决于 %TEMP%%TMP%$TMPDIR/tmp%HALCONROOT%),配置文件的文件名为 halcon_generl_config.ini。此默认选项也适用于使用图像采集助手。
另见相关小节 选择 GenICam 功能描述文件参数 - 持续设备状态
'do_write_settings' <output_file> 字符串 写入已打开设备的当前设置,以便日后恢复。参数 "settings_selector" 指定要写入的是实际(远程)设备的设置、GenTL 生产者模块之一还是消费者参数(GenICamTL 图像采集接口的内部参数)。参见 "参数 - 持续设备状态" 一节的详细描述。
'event_data' '<list of genicam_feature/internal_parameter>' 字符串 配置 GenICam 功能和/或内部参数(自由组合),以便将其添加到 "event_message_queue" 指定的消息队列中,为在 "event_selector" 中选择的功能发送功能更改通知。
功能可以单独添加,也可以作为一个元组添加——该参数的每个 "设置" 操作都会追加到当前的事件数据列表中。要移除单个功能,请在其前面加上"~"。要清除当前添加的所有功能,请调用 set_framegrabber_param(..., 'event_data', [])
如需进一步了解该机制的用法,请访问 事件消息队列
'event_message_queue' 0, '<queue_handle>' 句柄 选择采集接口应向其发送功能更改通知的消息队列(详见 事件消息队列 )。
相应的 功能/参数 需要事先通过 "event_selector" 选择。
设置 0 (NULL)后,先前选定的消息队列将不再收到有关给定功能/参数的通知。
'event_notification_helper' 'disable', 'enable' 'disable' 字符串 控制采集接口在 set_framegrabber_callback 期间,如果回调正在(未)注册到符合 SFNC 标准的事件上,是否应尝试自动(取消)设置 "EventNotification"。请注意,只有当回调是在实际事件特征(如 "EventExposureEnd")而非事件数据特征(如 "EventExposureEndTimestamp")上注册时才会起作用。有关事件的更多信息,参见 事件数据
'event_selector' '<genicam_feature/internal_parameter>' 'grab_timeout' 字符串 选择一个 GenICam 功能或内部参数,为其配置通过消息队列发送的功能更改通知。
这些通知会连同在 "event_data" 中配置的附加数据一起发送到 "event_message_queue" 中指定的消息队列。
有关该机制使用的更多信息,请参阅 事件消息队列(这是通过回调发送通知的另一种选择,即 功能更改通知 )。
'fileaccess_file_path' '<file_path>' 字符串 指定用于主机和设备之间文件交换操作的本地文件(在主机文件系统中)的完整路径、"do_fileaccess_download" 或 "do_fileaccess_upload"。
当前用户/进程必须有足够的权限访问文件。请注意,只有当指定设备支持 GenICam 文件访问功能时,所有与文件访问相关的参数才可用。
'fileaccess_remote_name' '<file_name>' 字符串 选择设备上需要执行 "do_fileaccess_download"、"do_fileaccess_upload" 或 "do_fileaccess_delete" 文件访问处理操作之一的文件。
文件名必须是设备执行的文件之一 - 有效文件名称集可通过 "fileaccess_remote_name_values" 查询。请注意,只有当指定设备支持 GenICam 文件访问功能时,所有与文件访问相关的参数才可用。
'fwupdate_file_path' '<file_name>' 字符串 包含 GenICam 兼容固件更新(guf 文件)的文件路径。设置后,将验证该文件并枚举其中包含的固件更新。如果无效或找不到与当前设备匹配的更新,则会出错。如果成功,可以使用 "fwupdate_update_selector_values" 查询匹配的更新集,并使用 "fwupdate_update_selector" 选择实际要应用的更新。最后,可使用 "do_fwupdate_apply" 应用选定的更新。
请注意,所有固件更新相关参数只能在专用的 "安全模式" 下使用,参见 固件更新
'fwupdate_update_selector' '<firmware_update_label>' 字符串 选择可通过 "do_fwupdate_apply" 应用的固件更新。在 "fwupdate_file_path" 中选择一个有效的固件更新文件后,选择器就可用了。可使用 "fwupdate_update_selector_values" 查询选项(描述在该文件中找到的匹配固件更新的标签)。
请注意,所有固件更新相关参数只能在专用的 "安全模式" 下使用,参见 固件更新
'fwupdate_wait_after_reset' '<timeout>' 整数 如果在固件更新过程中需要重置设备,在设备重新发现前应用的额外超时(毫秒)。该超时将添加到固件更新文件本身指定的相应超时中。当使用原始超时无法安全地重新发现设备时,用于解决系统特定问题。
请注意,所有固件更新相关参数只能在专用的 "安全模式" 下使用,参见 固件更新
'grab_timeout' <milliseconds> 5000 整数 终止待处理抓取的预期超时(毫秒)。如果指定-1,则超时设置为无限。
'image_height' --- 0 不支持(只读参数)。
'image_width' --- 0 不支持(只读参数)。
'register_<addr>_<len>' 整数 直接访问寄存器,用于读写整数。数值必须是十六进制,如 0x0938。注意只接受 4 或 8 字节长度的值。设备字节顺序不进行转换。注意: 这是一个危险的功能,用于调试和特殊情况。通常只能使用 XML 中的功能。
'settings_selector' 'RemoteDevice', 'Stream', 'Device', 'System', 'Interface', 'Consumer' 'RemoteDevice' 字符串 在使用 set_framegrabber_param(..., 'do_write_settings', [])set_framegrabber_param(..., 'do_load_settings', []) 时,选择将哪个组件(参数集)的可流参数持久保存到文件中或从文件中恢复。在实际(远程)设备、GenTL 生产者模块之一或消费者参数(GenICamTL 图像采集接口的内部参数)之间进行选择。并非所有 GenTL 生产者都能实现所有模块。查询 "settings_selector_values" 可获得可接受值的列表。有关该机制使用的更多信息,请参阅 参数 - 持久设备状态
'split_param_values_into_dwords' 'disable', 'enable' 'disable' 字符串 启用一种特殊模式,允许将整数参数视为两个 32 位整数的元组。为了与单参数模式兼容,第一个元组元素总是携带数值的低 32 位部分,第二个元素携带高 32 位部分。用户有责任正确组合这两个部分。该模式特别有助于解决 32 位 HALCON 仅具有 32 位整数参数,但必须面对 64 位宽 GenICam 功能的问题。在此模式下,get_framegrabber_param 返回的总是两个整数的元组,set_framegrabber_param 可接受单个参数或元组。请注意,该模式只影响整数参数,而且只影响基于 GenICam 的参数,而不影响 HALCON GenICamTL 图像采集接口的内部参数("buffer_timestamp"、"buffer_timestamp_ns"、"device_timestamp_frequency" 和 "buffer_frameid" 内部参数除外)。
'start_async_after_grab_async' 'disable', 'enable' 'enable' 字符串 默认情况下,在 grab_image_async 结束时,会自动向采集设备发出一条新的异步抓取命令。如果参数 "start_async_after_grab_async" 设置为 "disable",则会省略新的抓取命令。
'start_column' --- 0 不支持(只读参数)。通过设备参数配置图像大小。
'start_row' --- 0 不支持(只读参数)。通过设备参数配置图像大小。
'volatile' 'disable', 'enable' 'disable' 字符串 启用后,将开启易失性模式,直接使用图像缓冲区创建 HALCON 图像。这是避免在内存中复制原始图像的最快模式。但要注意,采集引擎可能会随时用新数据覆盖旧图像。当设备配置发生变化,必须重新分配采集缓冲区时,旧的 HALCON 图像甚至会失效(指向不再存在的内存)。另见 有关采集缓冲区处理的详细信息
请注意,无论当前配置如何,都可以随时开启易失性模式。不过,在运行时,只有与易失性模式兼容的采集图像才会传送给应用程序(其他图像将被丢弃)。兼容尤其是指采集图像的像素格式与为 HALCON 图像输出格式配置的 color_space 和 bits_per_channel 设置相匹配。

get_framegrabber_param 的参数

可能还存在以下后缀的其他只读参数:

在调用 info_framegrabber(.., 'parameters', ..) 时,所有这些后置固定参数名都不会返回,而是用于通过通用图形用户界面,特别是 HDevelop 图像采集助手,方便地进行参数设置。

参数 默认值 类型 方式 描述
'[Consumer]exposure' 实数 预定义 指定曝光时间。曝光时间通常以微秒为单位。不过,相机可能会偏离这一标准。有关更多详细信息,请参阅您相机的说明文档。如果 [Consumer]exposure_auto 未设置为 "关",则 [Consumer]exposure 访问为只读或不可用。此外,此 EasyParam 还取决于相机参数 ExposureMode。如果 [Consumer]exposure 不可用,您可能需要手动将 ExposureMode 更改为 "Timed"。
'[Consumer]exposure_auto' 'Off', 'Continuous', 'Once' 字符串 预定义 指定曝光时间是由用户手动设置还是由相机自动设置。
  • 关:曝光时间由用户手动设置。
  • 一次:相机设备根据下一张成功拍摄的图像自动估算一次曝光时间。您的设备可能无法执行此值。
  • 连续:相机在获取每张图像时都会自动连续更新曝光时间。您的设备可能无法执行此值。
此 EasyParam 取决于相机参数 ExposureMode。如果 [Consumer]exposure_auto 不可用,则可能需要手动将曝光模式更改为 "Timed"。
'[Consumer]gain' 实数 预定义 允许通过应用放大系数来增加图像亮度。有关更多详细信息,请查阅您的相机文档。如果 [Consumer]gain_auto 未设置为 "关",则 [Consumer]gain 访问权限为只读或不可用。
'[Consumer]gain_auto' 'Off', 'Continuous', 'Once' 字符串 预定义 指定增益是由用户手动设置还是由相机自动设置。
  • 关:增益由用户手动设置。
  • 一次:相机根据下一张成功捕捉的图像自动估算一次增益。您的设备可能无法执行此值。
  • 连续:相机在获取每幅图像时都会自动连续更新增益。您的设备可能无法执行此值。
'[Consumer]info_general' 句柄 预定义 返回包含设备一般信息的字典句柄。字典中的每个键映射一个 GenICam 设备信息功能。如果某个键未在设备上实现,其值将设为 "ni"(not implemented,即未实现)。包含的键:
  • 设备供应商名称(字符串)
  • 设备型号名称(字符串)
  • 设备版本(字符串)
  • 设备固件版本(字符串)
  • 设备序列号(字符串)
  • 设备系列名称 (字符串)
  • 传感器宽度(整数)
  • 传感器高度(整数)
HDevelop 图像采集助手不支持此 MVTec EasyParam。
'[Consumer]trigger' 'Off', 'Software', 'Line<x>' 字符串 预定义 指定触发图像采集的模式。
  • 关:触发模式停用,设备以自由运行模式运行,连续获取图像。
  • 软件:触发模式已激活,可使用 [Consumer]trigger_software 生成内部触发。
  • 线路 <x>:触发模式被激活,指定的物理线路被配置为触发信号的外部源。该 EasyParam 不支持其他硬件触发信号。
'[Consumer]trigger_activation' 'RisingEdge', 'FallingEdge', 'AnyEdge', 'LevelHigh', 'LevelLow' 字符串 预定义 指定触发器的激活模式。此 EasyParam 在使用硬件触发器(即 [Consumer]trigger 为 "Line<x>")且设备支持的情况下可用。
  • 上升沿:源信号上升沿时触发有效。
  • 下降沿:源信号下降沿时触发有效。
  • 任何边缘:在源信号的下降沿或上升沿触发有效。
  • 高电平:只要源信号的电平为高电平,触发就视为有效。
  • 电平低:只要源信号的电平处于低电平,触发就视为有效。
'[Consumer]trigger_delay' 实数 预定义 指定接收到触发器后激活图像采集前的延迟时间。延迟单位通常为微秒。不过,相机可能会偏离这一标准。详细信息请查阅相机的文档。
'add_objectmodel3d_overlay_attrib' 'disable', 'enable' 'disable' 字符串 预定义 控制采集接口是否应尝试将强度/颜色叠加附加到生成的三维对象模型上。仅适用于从给定抓取算子输出三维对象模型的情况。开启后,采集接口将尝试在采集的数据中找到合适的信息(如果设备提供)。如果有,则会以扩展属性的形式为输出模型中的每个点添加叠加信息。请注意,在某些高级用例中,设备可能会输出多个潜在的叠加图像,因此采集接口会尝试找到最合适的图像。
首先,它尝试在获取的数据中识别标记为 "强度" 图像的数据。如果找到并提供的是单色二维图像,它将作为 "&intensity_gray" 扩展属性附加。如果找到并提供的是 RGB 图像,则会附加三个扩展属性 "&intensity_red"、"&intensity_green" 和 "&intensity_blue"。
如果无法识别 "强度" 数据,则会尝试查找标记为 "反射率" 的数据。如果找到并以单色二维图像的形式提供,则将其添加为 "&reflectance_gray" 扩展属性。如果找到并提供的是 RGB 图像,则会附加三个扩展属性 "&reflectance_red"、"&reflectance_green" 和 "&reflectance_blue"。
最后,如果 "强度" 和 "反射率" 数据都无法识别(要么不存在,要么没有被设备正确标记),它就会在获取的数据中挑选第一个可以映射到三维坐标的二维图像。如果找到并提供的是单色二维图像,它将作为 "&overlay_gray" 扩展属性附加。如果找到并提供的是 RGB 图像,它将作为 "&overlay_red"、"&overlay_green" 和 "&overlay_blue" 三个扩展属性附加。
如果找不到合适的二维图像,则不会添加叠加。例如,可以使用带有 "扩展属性名称" 参数的 get_object_model_3d_params 算子来查询实际添加的扩展属性。叠加还可用于可视化目的。
'available_callback_types' ['<callback_types>'] 字符串 动态 返回一个包含所有参数的列表,可以为这些参数注册回调。这包括设备和 GenTL 生产者通过 GenICam 接口发布的所有参数,包括那些暂时不可用的参数,因为可用性变化可能与回调有关。
'available_easyparam_names' '[Consumer]exposure_auto', '[Consumer]exposure', '[Consumer]gain_auto', '[Consumer]gain', '[Consumer]info_general', '[Consumer]trigger', '[Consumer]trigger_activation', '[Consumer]trigger_delay', '[Consumer]trigger_software' 字符串 预定义 返回包含所有 MVTec EasyParams 的列表(参见 MVTec EasyParams )。
'available_param_names' ['<names>'] 字符串 动态 返回包含所有可用参数的列表,即 HALCON GenICamTL 图像采集接口使用的参数(不包括 MVTec EasyParams,可使用 "available_easyparam_names" 列出),以及设备和 GenTL 生产者通过 GenICam 接口发布的参数(参见 参数命名规则 )。某些参数的可用性可能取决于采集状态、其他参数的值或其他条件,因此列表在运行期间会动态变化。
'bits_per_channel' -1, 8, 10, 12, 14, 16 -1 整数 预定义 生成的 HALCON 图像每个通道的比特数。如果为-1,则使用各采集缓冲区的比特深度。如果指定的值大于 8,抓取的图像将以 uint2 图像的形式传输。
'buffer_frameid' <frame_id> 整数 动态 设备(或 GenTL 生产者)最后抓取(图像)缓冲区上的帧 ID。通常是按顺序递增的帧编号。序列中跳过的 ID 可能表示设备或 GenTL 生产者丢弃了一个或多个帧,例如由于采集引擎溢出的原因。请注意,在 32 位系统上,最多只能传送 64 位时间戳的低 32 位部分(除非启用了 "split_param_values_into_dwords" 参数)。参见 采集缓冲区处理 。DSGetBufferInfo -> BUFFER_INFO_FRAMEID
'buffer_is_incomplete' 0, 1 整数 动态 显示最后抓取的图像是否不完整(例如由于数据包丢失)。参见 采集缓冲区处理 。DDSGetBufferInfo -> BUFFER_INFO_IS_INCOMPLETE
'buffer_reallocation_mode' 'only_increase_size', 'follow_payloadsize' 'only_increase_size' 字符串 预定义 定义为新采集重新分配缓冲区时所遵循的策略。如果使用 "only_increase_size"(只增加大小),则只有在有效载荷大小增加时才会重新分配缓冲区。如果使用 "follow_payloadsize",则每次有效载荷大小发生变化时都会重新分配缓冲区。
'buffer_timestamp' <timestamp> 整数 动态 设备(或 GenTL 生产者)最后抓取(图像)缓冲区的时间戳。时间戳的单位和实际含义(何时生成)取决于设备。如果知道时间戳计数器的频率,则可以从 "buffer_timestamp_ns" 中读取以纳秒为单位的值。需要注意的是,在 32 位系统上,最多只能提供 64 位时间戳的低 32 位部分(除非启用了 "split_param_values_into_dwords" 参数)。 参见 采集缓冲区处理 。 DSGetBufferInfo -> BUFFER_INFO_TIMESTAMP
'buffer_timestamp_ns' <timestamp> 整数 动态 设备(或 GenTL 生产者)最后抓取(图像)缓冲区的时间戳。该值以纳秒为单位,但如果时间戳频率未知,则可能无法使用(另请参阅 "buffer_timestamp" 和 "device_timestamp_frequency")。请注意,在 32 位系统上,最多只能传送 64 位时间戳的低 32 位部分(除非启用了 "split_param_values_into_dwords" 参数)。参见 采集缓冲区处理 。 DSGetBufferInfo -> BUFFER_INFO_TIMESTAMP_NS
'camera_type' 'default', <ini/xml filename> 'default' 字符串 预定义 返回用于 open_framegrabber 中 CameraType 参数的配置文件的路径。
'clear_buffer' 'disable', 'enable' 'disable' 字符串 预定义 如果启用,则在重新排队前会清除每个缓冲区的内容(所有字节都设置为 0xF0,而不考虑预期的像素格式),这样就可以看到图像的哪些部分丢失了,以防某些图像数据包传输失败。当然,这个参数会增加运行时的开销,因为每次缓冲区排队时都要写入 0xF0 数据。它主要用于结合传输层进行调试,因为传输层不能保证传输完整的图像。请注意,该参数不会修改缓冲区队列,只会将缓冲区的内容设置为已定义的状态。
'color_space' 'default', 'gray', 'raw', 'rgb', 'yuv' 'default' 字符串 预定义 返回当前的。
'confidence_mode' 'off', 'object_model_3d' 'off' 字符串 预定义 控制采集接口是否使用(以及如何使用)像素置信度信息。仅适用于置信度信息与实际像素数据一起交付(按像素)的设备和用例。
区分有效像素和无效像素的阈值由 "置信度阈值" 参数控制。
请注意,在某些使用情况下,可能有其他标准来标记给定像素无效,例如,如果设备对三维坐标使用 "无效像素值"。"置信度模式" 参数不包括这些情况,三维对象模型始终会剔除这些无效像素。可能的值有:
  • 关:默认值。像素置信度信息不会应用于任何抓取算子输出,即使是由设备提供。
  • object_model_3d: 如果像素置信度信息可用,它将应用于最终生成的三维对象模型(但不应用于任何其他输出,特别是不应用于图像输出)。这意味着,置信度低于配置阈值的像素("点")不会包含在生成的三维对象模型中。
'confidence_threshold' [0.0, 1.0] 0.5 浮点数 预定义 区分有效像素和无效像素的阈值。仅适用于将置信度信息(按像素)与实际像素数据一起传送的设备和用例。使用 "confidence_mode" 参数可决定如何应用置信度阈值(应用于哪些输出)。
阈值被解释为 0.0 和 1.0 之间的(浮点数)比率。采集接口会将此比率重新映射到设备提供的实际置信度范围,并以此来决定哪些像素有效,哪些无效。置信度低于指定阈值的像素将被视为无效。
'coordinate_transform_mode' 'none', 'cartesian', 'reference' 'reference' 字符串 预定义 控制采集接口在根据获取的三维坐标建立三维对象模型时,应尝试执行哪些坐标变换算子。请注意,决定执行哪种变换以及使用哪些参数完全取决于设备提供的三维配置信息和获取的数据。如果这些信息不充分或坐标不准确,变换的结果可能毫无意义或无法预测。详情请参阅 使用三维设备 。
可能的值有:
  • 无: 采集接口不会执行任何坐标转换。三维对象模型将包含 "原始" 坐标,可能只是根据设备的提示进行缩放。
  • 笛卡尔:如果设备使用的坐标系不是笛卡尔坐标系,采集接口将把坐标转换为笛卡尔坐标系(HALCON 三维对象模型的本机坐标系)。它不会尝试将坐标从设备的内部("锚")坐标系进一步转换到参考系。
  • 参考: 默认模式。如果需要,将转换为笛卡尔坐标系,然后如果设备支持 "参考" 坐标系并提供相应指令,则尝试将其转换为 "参考" 坐标系。参考系的目的是允许合并和对齐来自多个设备的数据。参考系与原生("锚")坐标系不同,原生坐标系是针对特定设备的,与设备的实际测量系统和实际配置相对应。
    参考系统的位置和方向应由设备外壳上的参考点标记标明。
    由于参考坐标系总是笛卡尔坐标系,因此这总是直接意味着向笛卡尔坐标系的转换。
'create_objectmodel3d' 'disable', 'enable' 'disable' 字符串 预定义 控制采集接口在遇到采集数据中的三维坐标时是否应尝试生成 HALCON 三维对象模型。
要获取三维对象模型,应用程序必须使用 grab_data/grab_data_async 算子,它们可以通过控制数据输出返回生成模型的句柄。而 grab_image/grab_image_async 算子不能返回三维对象模型。
重要提示:默认情况下禁用该参数。启用后,一旦不再需要给定的模型,应用程序就有责任使用 clear_object_model_3d 算子释放生成的对象模型和相关资源。为此,应用程序应跟踪每次 grab_data/grab_data_async 调用的控制数据输出中哪些带有三维对象模型句柄。这可以使用 "data_contents" 参数来实现。
生成三维模型模型时,采集接口会处理采集数据中的三维坐标,并借助设备报告的实际三维配置信息构建点云。详情请参阅 使用三维设备 。
'data_contents' 'unknown', 'object_model_3d', 'text_report' 0 字符串 预定义 描述上次抓取算子返回的控制数据输出逻辑类型的元组。如果最后一次成功抓取是通过 grab_image/grab_image_async 执行的,则不适用。如果是 grab_data/grab_data_async,它将返回一个大小与通过这些算子返回的控制数据值数量相对应的元组。可能的值有:
  • 未知:无法确定数据的逻辑类型。
  • object_model_3d:整数,表示从获取的数据中生成的三维对象模型的句柄。重要提示:模型不再使用时必须释放(clear_object_model_3d),否则会导致相关资源泄漏。三维对象模型的生成由 "create_objectmodel3d" 参数控制(默认为禁用)。请注意,在特殊使用情况下,可以生成多个对象模型。
  • 文本报告:可用于内部目的和支持案例。所有应用程序均应忽略。
'data_purpose_id' --- 0xFFFFFFFFFFFFFFFF 整数 预定义 整数值元组,用于跟踪与上一个抓取算子返回的单个控制数据输出相关联的数据目标 IDs。适用于数据应与设备配置相匹配的高级用例。该参数的使用与特定应用有关,需要了解 GenICam SFNC 数据模型和特定设备。如果上一次成功抓拍是通过 grab_image/grab_image_async 执行的,则不适用。如果是 grab_data/grab_data_async,则返回一个元组,其大小与通过这些算子返回的控制数据值的数量相对应。如果无法识别 ID(例如,由于底层通信协议不提供此类信息),则将返回无效值(给定整数范围内的最大值)。
'data_region_id' --- 0xFFFFFFFFFFFFFFFF 整数 预定义 整数值元组,用于跟踪与上一个抓取算子返回的单个控制数据输出相关联的区域 IDs。适用于数据应与设备配置相匹配的高级用例。该参数的使用与特定应用有关,需要了解 GenICam SFNC 数据模型和特定设备。如果上一次成功抓拍是通过 grab_image/grab_image_async 执行的,则不适用。如果是 grab_data/grab_data_async,则返回一个元组,其大小与通过这些操作符返回的控制数据值的数量相对应。如果无法识别 ID(例如,由于底层通信协议不提供此类信息),则将返回无效值(给定整数范围内的最大值)。
'data_source_id' --- 0xFFFFFFFFFFFFFFFF 整数 预定义 整数值元组,用于跟踪与上一个抓取算子返回的单个控制数据输出相关联的源 IDs。适用于数据应与设备配置相匹配的高级用例。该参数的使用与特定应用有关,需要了解 GenICam SFNC 数据模型和特定设备。如果上一次成功抓拍是通过 grab_image/grab_image_async 执行的,则不适用。如果是 grab_data/grab_data_async,则返回一个元组,其大小与通过这些操作符返回的控制数据值的数量相对应。如果无法识别 ID(例如,由于底层通信协议不提供此类信息),则将返回无效值(给定整数范围内的最大值)。
'delay_after_stop' <milliseconds> 0 整数 预定义 设备停止采集(AcquisitionStop 命令)与 GenTL 生产者之间的等待时间(毫秒)。最佳值取决于所用设备的速度和 GenTL 生产者所需的额外安全性。如果 GenTL 生产者功能强大,则无需延迟。
'device' ' | device:<device id> | unique_name:<unique name> | user_name:<user-defined name> | interface:<interface id> | producer:<cti file (including path)> | stream:<stream id>', '<device id>' 字符串 动态 返回打开设备(open_framegrabber)时使用的设备参数字符串。
'device_access' 'exclusive', 'control', 'read-only', 'safe-mode' 'exclusive' 字符串 预定义 open_framegrabber 中指定的 device_access 通用参数的值。
'device_event_handling' 0, 1 1 整数 预定义 open_framegrabber 中指定的 device_event_handling 通用参数的值。默认情况下,支持事件传送(消息通道)的设备将打开 device_event_handling,不支持事件功能的设备将关闭 device_event_handling。通用参数 device_event_handling 明确允许关闭事件处理功能,即使对于支持事件的设备也是如此。
'device_timestamp_frequency' <frequency_hz> 整数 动态 设备时间戳计数器的频率,单位为每秒嘀嗒数 (Hz)。并非所有设备的频率都是已知的。例如,计数器用于将时间戳附加到获取的缓冲区。需要注意的是,在 32 位系统上,最多只能传送 64 位时间戳的低 32 位部分(除非启用了 "split_param_values_into_dwords" 参数)。DevGetInfo -> DEVICE_INFO_TIMESTAMP_FREQUENCY
'direct_connection' 'disable', 'enable' 'disable' 字符串 预定义 open_framegrabber 中指定的 direct_connection 通用参数的值。
'event_data' '<list of genicam_feature/internal_parameter>' 字符串 预定义 配置 GenICam 功能和/或内部参数(自由组合),以便将其添加到 "event_message_queue" 指定的消息队列中,为在 "event_selector" 中选择的功能发送功能更改通知。
功能可以单独添加,也可以作为一个元组添加——该参数的每个 "设置" 操作都会追加到当前的事件数据列表中。要移除单个功能,请在其前面加上"~"。要清除当前添加的所有功能,请调用 set_framegrabber_param(..., 'event_data', [])
如需进一步了解该机制的用法,请访问 事件消息队列 。
'event_message_queue' 0, '<queue_handle>' 句柄 预定义 选择采集接口应向其发送功能更改通知的消息队列(详见 事件消息队列 )。
相应的 功能/参数 需要事先通过 "event_selector" 选择。
设置 0 (NULL)后,先前选定的消息队列将不再收到有关给定功能/参数的通知。
'event_notification_helper' 'disable', 'enable' 'disable' 字符串 预定义 控制采集接口在 set_framegrabber_callback 期间,如果回调正在(未)注册到符合 SFNC 标准的事件上,是否应尝试自动(取消)设置 "EventNotification" 。请注意,只有当回调是在实际事件特征(如 "EventExposureEnd")而非事件数据特征(如 "EventExposureEndTimestamp" )上注册时才会起作用。有关事件的更多信息,参见 事件数据 。
'event_selector' '<genicam_feature/internal_parameter>' 'grab_timeout' 字符串 预定义 选择一个 GenICam 功能或内部参数,为其配置通过消息队列发送的功能更改通知。
这些通知会连同在 "event_data" 中配置的附加数据一起发送到 "event_message_queue" 中指定的消息队列。
有关该机制使用的更多信息,请参阅 事件消息队列(这是通过回调发送通知的另一种选择,即 功能更改通知 )。
'external_trigger' <default> 'false' 字符串 预定义 该值不会被使用,因此会返回默认值。
'field' '<default>' 'progressive' 字符串 预定义 该值不会被使用,因此会返回默认值。
'fileaccess_file_path' '<file_path>' 字符串 预定义

指定用于主机和设备之间文件交换操作的本地文件(在主机文件系统中)的完整路径、"do_fileaccess_download" 或 "do_fileaccess_upload"。
当前用户/进程必须有足够的权限访问文件。请注意,只有当指定设备支持 GenICam 文件访问功能时,所有与文件访问相关的参数才可用。

'fileaccess_remote_name' '<file_name>' 字符串 预定义 选择设备上需要执行 "do_fileaccess_download"、"do_fileaccess_upload" 或 "do_fileaccess_delete" 文件访问处理操作之一的文件。
文件名必须是设备执行的文件之一 - 有效文件名称集可通过 "fileaccess_remote_name_values" 查询。请注意,只有当指定设备支持 GenICam 文件访问功能时,所有与文件访问相关的参数才可用。
'fwupdate_file_path' '<file_name>' 字符串 预定义 包含 GenICam 兼容固件更新(guf 文件)的文件路径。设置后,将验证该文件并枚举其中包含的固件更新。如果无效或找不到与当前设备匹配的更新,则会出错。如果成功,可以使用 "fwupdate_update_selector_values" 查询匹配的更新集,并使用 "fwupdate_update_selector" 选择实际要应用的更新。最后,可使用 "do_fwupdate_apply" 应用选定的更新。
请注意,所有固件更新相关参数只能在专用的 "安全模式" 下使用,参见 固件更新 。
'fwupdate_update_selector' '<firmware_update_label>' 字符串 预定义 选择可通过 "do_fwupdate_apply" 应用的固件更新。在 "fwupdate_file_path" 中选择一个有效的固件更新文件后,选择器就可用了。可使用 "fwupdate_update_selector_values" 查询选项(描述在该文件中找到的匹配固件更新的标签)。
请注意,所有固件更新相关参数只能在专用的 "安全模式" 下使用,参见 固件更新 。
'fwupdate_wait_after_reset' '<timeout>' 整数 预定义 如果在固件更新过程中需要重置设备,在设备重新发现前应用的额外超时(毫秒)。该超时将添加到固件更新文件本身指定的相应超时中。当使用原始超时无法安全地重新发现设备时,用于解决系统特定问题。
请注意,所有固件更新相关参数只能在专用的 "安全模式" 下使用,参见 固件更新 。
'generic' '', ['num_buffers=<num>' , 'device_access=<mode>' , 'direct_connection=<mode>' , 'streaming_mode=0' , 'device_event_handling=0' ], -1 -1 混合型 预定义 通用参数的值。
'grab_timeout' <milliseconds> 5000 整数 预定义 当前抓取超时(毫秒)。
'horizontal_resolution' 0, 1, resolution 1 整数 预定义 水平分辨率的当前值。
'image_available' 0, 1 整数 动态 显示当前是否有图像等待 GenTL 生产者发送。DSGetStreamInfo -> STREAM_INFO_NUM_AWAIT_DELIVERY
'image_contents' 'unknown', 'image', 'coord_a', 'coord_b', 'coord_c', 'coord_mixed', 'confidence' 0 字符串 预定义 描述上次抓取算子返回的图像数据逻辑类型的元组。如果最后一次成功抓取是通过 grab_image/grab_image_async 执行的,该参数返回的总是单一值。如果是通过 grab_data/grab_data_async,则返回一个元组,其大小与通过这些算子返回的图像数相对应。可能的值有:
  • 未知:无法确定图像的逻辑类型,这通常意味着某种自定义数据,可能是原始数据。
  • 图像:常规二维图像。生成的 HALCON 图像格式受参数 "bits_per_channel" 和 "color_space"(如果使用)的影响。
  • 坐标_a: 根据 GenICam 三维模型,输出的 HALCON 图像包含与三维 "坐标 A "相对应的数据。坐标的解释取决于设备使用的坐标系: X 表示直角坐标系,θ 表示球面坐标系,θ 表示圆柱坐标系(更多详情请参考 GenICam SFNC 标准)。提供的数据未经任何转换,忽略了 "bits_per_channel" 和 "color_space" 参数。
  • 坐标_b:根据 GenICam 三维模型,输出的 HALCON 图像包含与三维 "坐标 B "相对应的数据。坐标的解释取决于设备使用的坐标系: Y 表示直角坐标系,φ 表示球面坐标系,Y 表示圆柱坐标系(更多详情请参考 GenICam SFNC 标准)。提供的数据未经任何转换,忽略了 "bits_per_channel" 和 "color_space" 参数。
  • 坐标_c:根据 GenICam 三维模型,输出的 HALCON 图像包含与三维 "坐标 C "相对应的数据。坐标的解释取决于设备使用的坐标系: Z 表示直角坐标系,ρ 表示球面坐标系,ρ 表示圆柱坐标系(更多详情请参考 GenICam SFNC 标准)。提供的数据未经任何转换,忽略了 "bits_per_channel" 和 "color_space" 参数。
  • 坐标_混合:当数据被识别为三维坐标但格式未知时使用。在这种情况下,数据将 "按原样" 输出到 HALCON 图像中,不做任何转换,也就是说,应用程序必须知道如何处理自定义数据格式。提供的数据不进行任何转换,忽略 "bits_per_channel" 和 "color_space" 参数。
  • 置信度:输出的 HALCON 图像包含与像素置信度相对应的数据,表示相应像素的有效程度。其解释取决于设备用于表示置信度的实际底层像素格式(详情请参考 GenICam SFNC 标准)。提供的数据未经任何转换,忽略了 "bits_per_channel" 和 "color_space" 参数。
'image_height' <height> 0 整数 预定义 最后获取的图像的高度。参见 采集缓冲区处理 。如果没有可用的有效最后缓冲区,则返回远程设备 "高度" 参数的最后查询值。
'image_pixel_format' --- 0 整数 预定义 代表用于生成单个图像输出的源数据原始像素格式 ID 的整数值元组。这通常是给定像素格式的 PFNC 32 位 ID,如果未知或用于生成给定图像输出的数据自然不是图像,则报告为 0。如果源数据是多分量图像(如 RGB 或多分量三维坐标格式),无论所有分量是否用于生成给定的图像输出(如 RGB 图像),还是图像输出只反映了其中一个分量(如单独的三维坐标平面,作为单独的 HALCON 图像输出),都会报告原始的多分量像素格式。原始的多分量像素格式可能是平面格式,也可能不是。请注意,如果用户通过 "bits_per_channel" 和 "color_space" 参数要求进行转换,实际 HALCON 图像的和位深度可能与源格式有很大不同。
'image_purpose_id' --- 0xFFFFFFFFFFFFFFFF 整数 预定义 整数值元组,用于跟踪与上一个抓取算子返回的单个图像输出相关联的数据用途 IDs。适用于数据应与设备配置相匹配的高级用例。该参数的使用与特定应用有关,需要了解 GenICam SFNC 数据模型和特定设备。如果上一次成功抓拍是通过 grab_image/grab_image_async 执行的,该参数返回的始终是单一值。如果是 grab_data/grab_data_async,则返回一个元组,其大小与通过这些算子返回的图像数相对应。如果无法识别 ID(例如,由于底层通信协议不提供此类信息),则将返回无效值(给定整数范围内的最大值)。
'image_raw_buffer_padding_bytes' --- 0 整数 预定义 整数元组,用于报告 "blob"(参见 "image_raw_buffer_type")类型原始缓冲区的大小,以及在抓取的 HALCON 图像末尾未使用的填充字节数。由于在这种情况下需要为生成的 HALCON 图像选择人工尺寸,图像的大小可能不完全等于缓冲区数据的大小,因此可能需要填充。"图像" 类型的缓冲区报告为零。仅适用于 "原始" 色彩格式。请参见 原始输出格式 一章。如果上一次成功抓取是通过 grab_image/grab_image_async 执行的,则该参数返回的始终是单一值。如果是 grab_data/grab_data_async,则返回一个元组,其大小与通过这些算子返回的图像数相对应。
'image_raw_buffer_type' 'image', 'blob' 0 字符串 预定义 字符串元组,显示最后抓取的 HALCON 图像是由包含已知属性(尤其是图像尺寸和像素格式)的实数图像数据的缓冲区创建的,还是由其他数据(非图像数据或未知格式的图像数据)的 blob 创建的。请注意,如果是 blob 数据,HALCON 图像的尺寸是没有意义的。主要适用于 "原始" 色彩格式。可能的值为 "image" 和 "blob" 。请参见 原始输出格式 一章。如果上一次成功抓取是通过 grab_image/grab_image_async 执行的,则该参数返回的始终是单一值。如果是 grab_data/grab_data_async,则返回一个元组,其大小与通过这些算子返回的图像数相对应。
'image_region_id' --- 0xFFFFFFFFFFFFFFFF 整数 预定义 整数值元组,用于跟踪与最后抓取算子返回的单个图像输出相关联的区域 IDs。适用于数据应与设备配置相匹配的高级用例。该参数的使用与特定应用有关,需要了解 GenICam SFNC 数据模型和特定设备。如果上一次成功抓取是通过 grab_image/grab_image_async 执行的,则该参数返回的始终是单一值。如果是 grab_data/grab_data_async,则返回一个元组,其大小与通过这些算子返回的图像数相对应。如果无法识别 ID(例如,由于底层通信协议不提供此类信息),则将返回无效值(给定整数范围内的最大值)。
'image_source_id' --- 0xFFFFFFFFFFFFFFFF 整数 预定义 整数值元组,用于跟踪与上次抓取算子返回的单个图像输出相关联的源 IDs。适用于数据应与设备配置相匹配的高级用例。该参数的使用与特定应用有关,需要了解 GenICam SFNC 数据模型和特定设备。如果上一次成功抓取是通过 grab_image/grab_image_async 执行的,则该参数返回的始终是单一值。如果是 grab_data/grab_data_async,则返回一个元组,其大小与通过这些算子返回的图像数相对应。如果无法识别 ID(例如,由于底层通信协议不提供此类信息),则将返回无效值(给定整数范围内的最大值)。
'image_width' <width> 0 整数 预定义 最后获取的图像的宽度。参见 采集缓冲区处理 。如果没有可用的有效最后缓冲区,则返回远程设备 "宽度" 参数的最后查询值。
'line_in' <default> 0 整数 预定义 该值不会被使用,因此会返回默认值。
'name' 'GenICamTL' 字符串 预定义 HALCON 接口的名称。
'num_buffers' <number> 4 整数 预定义 用于图像采集的缓冲区数量。
'num_buffers_await_delivery' <number> 整数 动态 等待 GenTL 生产者发送的(图像)缓冲区数量。DSGetStreamInfo -> STREAM_INFO_NUM_AWAIT_DELIVERY
'num_buffers_underrun' <number> 整数 动态 自打开设备以来,因缓冲队列不足而丢失的缓冲区数量。当 GenTL 生产者有新的图像数据可用,但却没有空闲的缓冲区来存储这些数据时,就会出现队列不足。 DSGetStreamInfo -> STREAM_INFO_NUM_UNDERRUN
'port' <port> -1 整数 预定义 该值不会被使用,因此会返回默认值。
'register_<addr>_<len>' 整数 预定义 直接访问寄存器,用于读写整数。数值必须是十六进制,如 0x0938。注意只接受 4 或 8 字节长度的值。设备字节顺序不进行转换。注意: 这是一个危险的功能,用于调试和特殊情况。通常只能使用 XML 中的功能。
'revision' '<revision>' 字符串 预定义 GenICamTL 接口的版本号。
'settings_selector' 'RemoteDevice', 'Stream', 'Device', 'System', 'Interface', 'Consumer' 'RemoteDevice' 字符串 预定义 在使用 set_framegrabber_param(..., 'do_write_settings', []) 和 set_framegrabber_param(..., 'do_load_settings', []) 时,选择将哪个组件(参数集)的可流参数持久保存到文件中或从文件中恢复。在实际(远程)设备、GenTL 生产者模块之一或消费者参数(GenICamTL 图像采集接口的内部参数)之间进行选择。并非所有 GenTL 生产者都能实现所有模块。查询 "settings_selector_values" 可获得可接受值的列表。有关该机制使用的更多信息,请参阅 参数 - 持久设备状态
'split_param_values_into_dwords' 'disable', 'enable' 'disable' 字符串 预定义

启用一种特殊模式,允许将整数参数视为两个 32 位整数的元组。为了与单参数模式兼容,第一个元组元素总是携带数值的低 32 位部分,第二个元素携带高 32 位部分。用户有责任正确组合这两个部分。该模式特别有助于解决 32 位 HALCON 仅具有 32 位整数参数,但必须面对 64 位宽 GenICam 功能的问题。在此模式下,get_framegrabber_param 返回的总是两个整数的元组,set_framegrabber_param 可接受单个参数或元组。请注意,该模式只影响整数参数,而且只影响基于 GenICam 的参数,而不影响 HALCON GenICamTL 图像采集接口的内部参数("buffer_timestamp"、"buffer_timestamp_ns"、"device_timestamp_frequency" 和 "buffer_frameid" 内部参数除外)。

'start_async_after_grab_async' 'disable', 'enable' 'enable' 字符串 预定义 "start_async_after_grab_async" 的状态。
'start_column' <column> 0 整数 预定义 不支持,返回值始终为 0。
'start_row' <row> 0 整数 预定义 不支持,返回值始终为 0。
'streaming_mode' 0, 1 1 整数 预定义 open_framegrabber 中指定的 streaming_mode 通用参数的值。默认情况下,支持流的设备会打开 streaming_mode,而外围设备(没有任何数据流的设备)则关闭 streaming_mode。通用参数 streaming_mode 明确允许关闭流功能,即使对于支持流的设备也是如此。
'tl_displayname' '<name>' 字符串 动态 所用 GenTL 生产者的可读名称。TLGetInfo -> TL_INFO_DISPLAYNAME
'tl_filename' '<file name>' 字符串 预定义 所用 GenTL 生产者的文件名。TLGetInfo -> TL_INFO_NAME
'tl_id' '<id>' 字符串 动态 所用 GenTL 生产者的唯一标识符。TLGetInfo -> TL_INFO_ID
'tl_model' '<model name>' 字符串 动态 所用 GenTL 生产者的名称,用于区分来自同一供应商的不同类型的 GenTL 生产者实现。TLGetInfo -> TL_INFO_MODEL
'tl_pathname' '<path name>' 字符串 预定义 所用 GenTL 生产者的完整路径。TLGetInfo -> TL_INFO_PATHNAME
'vertical_resolution' 0, 1, resolution 1 整数 预定义 垂直分辨率的当前值。
'volatile' 'disable', 'enable' 'disable' 字符串 预定义 易失性模式的当前值。

算子 set_framegrabber_lut

此接口不支持。

算子 get_framegrabber_lut

此接口不支持。

算子 set_framegrabber_callback

该接口通过算子 set_framegrabber_callbackget_framegrabber_callback 支持功能更改回调。
回调可用于任何基于 GenICam 的功能,即设备和 GenTL 生产者通过 GenICam 描述文件发布的功能,以及采集接口的内部参数。
可通过调用 get_framegrabber_param(..., 'available_callback_types', ...) 查询支持的回调目标列表。
设备事件传送机制是功能更改回调的重要用例之一,详情参见 事件数据功能通知 一节。set_framegrabber_callback 的 "CallbackType" 参数定义了注册回调的功能。它是与 set_framegrabber_param 相同的纯功能名称,包括一个可能的前缀,如 "[Device]"(请参阅 参数命名规则 )。
每当给定功能可能发生变化(包括范围或访问模式等其他属性)时,注册的回调函数就会被调用。请注意,这并不一定总是意味着该功能实际上有了新值。如果回调函数被设置为 NULL,相应的回调函数将被取消注册。请注意,接口只为每个特性保留一个注册,如果您试图为一个已注册回调函数的功能注册一个新的回调函数,先前的注册将被新的注册所取代。

回调函数的签名是 Herror (__stdcall *HAcqCallback)(void *AcqHandle, void *Context, void *UserContext) 并使用以下参数:

需要注意的是,用户专用回调函数的执行时间必须尽可能短,因为在回调函数执行期间,可能会阻塞对其他内部回调的处理。要做到这一点,可以将当前的处理工作从用户专用回调函数转移到一个单独的线程中,该线程通过信号或事件进行控制。回调函数在底层接口或驱动程序的上下文中执行。
同样重要的是要了解,回调可能会作为参数设置或抓取操作的副作用被触发,即可能会在各自的锁中被调用。用户有责任在回调处理程序中考虑到这一点,以避免死锁风险。

算子 get_framegrabber_callback

该接口通过算子 set_framegrabber_callbackget_framegrabber_callback 支持功能回调。更多信息参见 set_framegrabber_callback

算子 grab_image_start

启动新的异步抓取。另见 grab_image_start有关采集控制一节 。请注意,此算子会启动 GenTL 生产者和设备上的采集,并锁定采集期间受保护的功能。如果 grab_image_start 被重复调用,则会在 GenTL 生产者和设备上重新开始采集。这意味着缓冲区队列和所有与流相关的统计参数(如 "buffer_frameid")都会被重置。可以使用 set_framegrabber_param(..., 'do_abort_grab', ...) 停止采集(并解锁功能)。

算子 grab_image

grab_image 启动对单幅图像的新同步抓取。另见 grab_image有关采集控制一节有关抓取算子 。请注意,该接口会将获取的图像转换为由参数 "bits_per_channel" 和 "color_space" 指定的所需图像格式。

算子 grab_image_async

grab_image_async 返回单幅图像,并开始下一次异步抓取。另见 grab_image_async有关采集控制一节有关抓取算子 。请注意,该接口会将获取的图像转换为由参数 "bits_per_channel" 和 "color_space" 指定的所需图像格式。
HALCON GenICamTL 采集接口忽略了 grab_image_async 算子的 "MaxDelay" 参数,因为所有 GenTL 生产者都无法可靠地支持该参数。如果需要,应用程序需要自行实现其他功能。

算子 grab_data

grab_data 启动一个新的同步抓取,根据输入和配置的不同,可能会产生输出图像元组和各种数据输出元组。另见 grab_data有关采集控制一节有关抓取算子 。请注意,该接口会将获取的图像转换为由参数 "bits_per_channel" 和 "color_space" 指定的所需图像格式。输出元组使用 "data_contents"、"image_contents" 及相关参数描述。

算子 grab_data_async

grab_data_async 返回获取的图像/数据,并开始下一次异步抓取。另见 grab_data_async有关采集控制一节有关抓取算子 。请注意,该接口会将获取的图像转换为由参数 "bits_per_channel" 和 "color_space" 指定的所需图像格式。输出元组使用 "data_contents"、"image_contents" 及相关参数描述。
HALCON GenICamTL 采集接口忽略了 grab_image_async 算子的 "MaxDelay" 参数,因为所有 GenTL 生产者都无法可靠地支持该参数。如果需要,应用程序需要自行实现其他功能。

算子 close_framegrabber

此算子关闭设备。另见 close_framegrabber

HDevelop 示例

该接口有以下示例:

故障排除

如果 HALCON GenICamTL 接口出现问题,以下提示可能有助于解决问题。

一般情况: GenICam: 如果仍有问题,请联系当地经销商。

您的支持请求需要以下信息,以避免不必要的查询。 请运行 HDevelop 示例 genicamtl_information.hdev,收集有关系统和相机配置的信息,然后在请求支持时附上生成的文件。

第三方库的使用

该接口依赖于第三方库。有关版权和许可信息,参见 HALCON 基本目录中的文件 third_party_genicamtl.txt。除非文件中有明确说明,否则将不加修改地使用这些库。

您可以通过发送电子邮件至 info@mvtec.com 申请获得 GPL 或 LGPL 许可的第三方库的源代码,邮件主题为 "申请第三方库的源代码"。

发行说明


关于超链接的免责声明: 用户可通过本页面的超文本链接访问外部非 MVTec 网站。任何此类访问均应理解,非 MVTec 网站的内容不受 MVTec Software GmbH 的控制,MVTec Software GmbH 对此类网站不作任何陈述,用户应自行承担风险。MVTec Software GmbH 不对外部非 MVTec 网站的隐私保护措施或内容负责。
版权说明: © MVTec Software GmbH 版权所有。保留所有权利。除非另有说明,本页面内容的版权和类似权利,包括但不限于此处出现的所有文本、设计和图像,均为 MVTec Software GmbH 所拥有的版权作品。"MVTec Software GmbH" 和 "HALCON" 是 MVTec Software GmbH 的注册商标。此处提及或使用的所有其他品牌名称、设计、服务标志和商标(无论是否注册)均为其各自所有者的财产。