用于 GigE Vision 兼容相机的图像采集接口

接口: GigEVision2
修订: 20.11.16
日期: 2023-04-06

一般情况

本页提供通用 HALCON GigEVision2 接口的文档,用于访问所有符合 GigE Vision 标准的相机。注册 客户可从 MVTec WWW 服务器 下载该接口的 最新版本

(该 GigEVision2 接口取代了旧版的、已废弃的 HALCON 采集 GigEVision 接口。从以前的 GigEVision 采集接口转换到新版本 GigEVision2 的用户请注意强调 两个接口版本之间差异 的一节,以便轻松过渡)。

系统要求

环境变量

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

接口版本控制

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

安装

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

功能

局限性

GigE Vision 兼容性

GenICam GenApi

GigE Vision 设备访问

为确保完全访问设备,必须满足以下前提条件:

一般情况: Linux:

MVTec GigE Vision 流过滤器

使用多台相机

识别和打开设备

与(采集)设备的连接通过 open_framegrabber 算子建立。算子提供一组参数,用于配置设备的基本属性以及 HALCON GigEVision2 接口的控制方式 - 参见 相应章节 。其中一些参数还可在运行时通过 set_framegrabber_param 进行修改。本节只讨论 open_framegrabber 的 "Device" 参数,该参数用于识别应打开的设备(通常是相机)。
与通过 GigEVision2 接口访问的设备的连接是通过设备 ID 建立的,该 ID 保证每个 GigE Vision 设备都是唯一的,并且(通常)在多个会话中保持不变。也可选择通过接口 ID 进一步定义连接,定义主机的单个网络接口用于设备查找。也可以使用附加到设备上的用户自定义名称来代替唯一的设备 ID。最后,还可以使用设备的 IP 地址或序列号。
在任何时候,都可以使用 info_framegrabber 参数 "device" 或 "info_boards" 来获取系统中当前可用的所有设备列表——参见 相应章节 。这两个参数都会返回设备列表,每个设备都使用上述实体指定,格式为 " | device:<device id> | ... | interface:<interface id> | ... " ,其中 "<device id>" 为唯一设备 ID 或用户自定义名称("DeviceUserID")。如果在设备上设置了用户自定义名称,info_framegrabber 获得的字符串将包含 "user_name:<user-defined name>" 条目。为方便用户,如果用户定义的名称是唯一的,"device" 条目会反映该名称。如果同一用户定义名称分配给多个设备,则只有第一个设备会使用该名称,其他所有设备都将使用唯一名称。完整字符串(从 info_framegrabber 调用中获得)可直接用于 open_framegrabber 的 "Device" 参数,格式相同。如上图所示,它由 "token:value " 式的条目组成,以" | "分隔。"device" 条目是最重要的条目。可选的 "interface" 条目指定了查找设备的网络接口。
或者,您也可以直接指定设备。为此,可以省略一个或多个条目(或指定为 "default" )——这就像使用通配符一样,意味着不应考虑该实体的特定 ID(任何 ID 都能匹配)。对 open_framegrabber 而言,只有 " | device:<device id>" 字符串条目是重要的,其他条目会被忽略,也可以省略。除设备 ID 外,设备还可以通过其他标识符打开:用户自定义名称(使用格式为 "user_name:<user_defined_name>" 的字符串指定设备)、IP 地址("device_ip:<device_ip>")或序列号("device_sn:<device_serial_number>")。
当使用不含 "token: "和分隔符" | "的纯字符串时,它将被直接解释为设备 ID。
作为一种特殊情况,可以使用字符串 "default"——在这种情况下,HALCON 采集接口将使用第一个可用设备(将跳过当前报告为不可访问的设备)。当再次使用相同的 "default" 字符串时,该设备将不再可访问,因此将打开下一个可访问的设备。这样,所有连接到系统的设备都可以在循环中轻松打开。

请注意,当前版本的接口只支持单流设备,并且总是打开第一个可用的流。如果将来增加了对多图像流设备的支持,打开设备的格式可能会扩展为流条目。

选择 GenICam 功能描述文件

设备或 GigE Vision 生产者的功能由 GenICam 功能描述文件(XML 文件)描述,这些文件会自动解析并提供给用户。HALCON GigEVision2 图像采集接口可访问通过以下 GenICam 功能描述文件显示的功能: 在大多数情况下,GenICam 描述文件由设备和 GigE Vision 生产者提供。可以使用参数 "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_THE_SYSTEM_MODULE% 
InterfaceFile=%PATH_TO_GENICAM_FILE_OF_THE_INTERFACE_MODULE% 
DeviceFile=%PATH_TO_GENICAM_FILE_OF_THE_LOCAL_DEVICE_MODULE% 
StreamFile=%PATH_TO_GENICAM_FILE_OF_THE_STREAM_MODULE% 
可重复使用相同的 ini 文件格式,强制 HALCON 采集接口为其中一个或多个实体加载替代 XML 文件。这在更新或故障排除等方面非常有用。ini 文件中列出的文件将用于给定实体,而不是原始文件。对于 ini 文件中排除的实体,将按常规方式搜索和加载 GenICam 描述文件。要应用 ini 文件,请在 "CameraType" 参数中将其完整路径传递给 open_framegrabber

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

参数 – 命名约定

有以下几组参数:

参数 – 设备间共享

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

参数 – GenICam 数据类型

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

参数 – 持续设备状态

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

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

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

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

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

除了 "do_write_settings" 外,还将使用参数 "do_write_configuration" 与 GenICam 功能描述文件选择 一节中记录的 ini 文件一起写入特征持续文件。该命令将生成扩展版本的持续文件,不仅存储当前设备配置,还存储用户集和定序器集的内容(如果设备支持这些内容)。此外,它还将为所有 GigE Vision 生产者模块(系统、接口、设备和数据流)生成持久文件。ini 文件中的持久文件条目格式如下:
 
RemotePersistence=%PATH_TO_PERSISTENCE_FILE_OF_THE_DEVICE% 
SystemPersistence=%PATH_TO_PERSISTENCE_FILE_OF_THE_SYSTEM_MODULE% 
InterfacePersistence=%PATH_TO_PERSISTENCE_FILE_OF_THE_INTERFACE_MODULE% 
DevicePersistence=%PATH_TO_PERSISTENCE_FILE_OF_THE_LOCAL_DEVICE_MODULE% 
StreamPersistence=%PATH_TO_PERSISTENCE_FILE_OF_THE_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 示例 gigevision2_easyparams.hdev。

采集 – 概述,设备控制

图像采集可以是同步的(grab_image/grab_data),也可以是异步的(grab_image_start/grab_image_async/grab_data_async),参见算子的参考文档。
该接口可完全配置和控制相机的采集过程。请注意,当采集激活时,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")查询缓冲区属性。这也适用于最终存在于缓冲区中的 块数据 ,并且也可在易失性模式下使用。
当应用程序调用新的抓取相关算子时,接口会将缓冲区返回给采集引擎,与缓冲区相关的查询不再有效。

可能出现的情况是,相机临时或持续获取数据的速度高于应用程序处理数据的速度。在这种情况下,GigE Vision 生产者的流引擎会根据 "[Stream]StreamBufferHandlingMode" 参数决定如何处理获取的缓冲区。

请注意,可通过 高级流引擎控制 中描述的附加参数进一步控制流引擎行为。

采集 – 图像格式处理

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

采集 – 抓取算子

采集接口提供了两种从设备采集图像(或其他)数据的机制: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 GigEVision2 图像采集接口内置一个转换器,可将 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 算子一起使用。
只有在 "最后获取的缓冲区" 有效的情况下,与块数据相关的功能才会提供有意义的值, 即从最后一幅图像的传送到下一次调用任何抓取相关算子(请参阅 "采集 - 缓冲区处理 " 一节)。

功能更改通知

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

事件数据

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

事件消息队列

该接口支持通过消息队列发送功能更改通知。使用 set_framegrabber_param(..., 'event_selector', ...) 选择所需的目标特征。它是与 set_framegrabber_param 相同的普通功能名称(GenICam 功能或内部参数),包括一个可能的前缀,如 "[Device]"(请参阅 参数 - 命名规则 )。
使用 create_message_queue 创建一个接收通知的消息队列,并使用 set_framegrabber_param(..., 'event_message_queue', QueueHandle) 将其分配给所选功能。
消息队列可为任何基于 GenICam 的功能注册,即设备和 GigE Vision 生产者发布的功能或采集接口的内部功能。此外,还可以为采集接口中发生的内部事件注册通知,特别是 "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" 中报告)也将被视为重复信息,不会再次报告。

高级流引擎控制

流引擎试图在所有标准使用情况下都能很好地工作。不过,为了达到最佳性能(无论从每个应用的角度来看这意味着什么),最好对某些参数进行微调,以满足特定设备类型和应用的需求。GigE Vision 流协议的一个重要方面是管理丢失数据包的重发请求(由于各种原因,特别是 CPU 负载过高,数据包可能会在设备和应用程序之间丢失)。重发请求的控制可能需要从应用角度(更倾向于低延迟、高吞吐量或高可靠性)和设备角度(固定的可预测数据包/块时序与不规则流的预期,如线扫描相机)来考虑。根据设备和系统的已知特性,重发请求最好既不要发出得太晚(设备可能不再存储这些数据包的副本),也不要发出得太早(可能导致重复发送数据包)。
因此,可以通过各种流参数对引擎进行配置,包括 "[Stream]GevStreamMaxPacketGaps"、"[Stream]GevStreamMaxBlockDuration" 或 "[Stream]GevStreamDeliverIncompleteBlocks" 。更改参数时,该参数将在最近的适当时间点(通常是在将缓冲区重新排序回引擎时)传递给数据包处理引擎,并应用于后续的缓冲区获取。
某些参数,特别是 "[Stream]GevStreamRingBufferSize" 或 "[Stream]GevStreamReceiveSocketSize" ,在调整超高速设备(不使用过滤器驱动程序时)的接口性能时会产生重大影响。它们的使用可能与系统密切相关,应根据实际目标系统的测试经验,与实际网卡驱动程序的配置一起进行调整。
另一方面,该引擎提供的各种统计数据可能有助于观察其性能和行为,并有助于微调输入参数。这些统计数据包括 "[Stream]GevStreamLostPacketCount"、"[Stream]GevStreamResendCommandCount" 或 "[Stream]GevStreamIncompleteBlockCount" 等。统计信息会定期更新,并在每次采集启动时重置。
有关流参数的完整列表和详细信息,请参阅流参数文档。
如果不使用流过滤驱动程序,处理传入数据的能力会严重影响流引擎的性能。流引擎线程相对于系统中其他线程的优先级对此影响很大。详情请参考参数 "[Stream]StreamThreadPriority"、"[Stream]StreamThreadSchedulingPolicy" 和 "[Stream]StreamThreadApplyPriority" 的文档。设备打开时,一般会选择合适的默认优先级。
最后,可以在打开设备时使用 "streaming_mode=0" 通用参数完全禁用流基础设施。

高级事件引擎控制

事件引擎在标准用例中运行良好。但是,在特定的使用情况下,必须对其行为进行微调。本节中描述的参数仅用于高级用途,应谨慎对待——错误的配置会严重影响性能。
事件引擎线程优先级由参数 "[Device]DeviceEventsThreadPriority"、"[Device]DeviceEventsThreadSchedulingPolicy" 和 "[Device]DeviceEventsThreadApplyPriority" 控制。设备打开时,一般会选择合适的默认优先级。
在打开设备时,可使用 "device_event_handling=0" 通用参数完全禁用事件处理基础结构。

调试 GigE Vision 应用程序

在调试使用 GigE Vision 设备的应用程序时,必须知道 GigE Vision 协议的核心概念是使用常规 "心跳" 数据包保持与设备的连接。当应用程序停止保持心跳时,设备就会断开连接。HALCON GigEVision2 可以完全透明地处理心跳控制,但有一种特殊情况它不能这样做,即应用程序正在调试并遇到断点时。在这种情况下,所有线程通常都会停止,包括负责心跳维护的线程。
为防止调试时失去与设备的连接,可以大幅延长心跳超时时间或完全禁用设备上的心跳控制。详情请参阅参数 "[Device]DeviceLinkHeartbeatTimeout" 和 "[Device]DeviceLinkHeartbeatMode" 的描述。

使用 HDevelop 图像采集助手

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

使用内部色彩转换

HALCON GigEVision2 接口支持在软件中执行内部色彩转换。当兼容 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 采集接口、设备本身或 Gige Vision 生产者提供)将不可用。取而代之的是与给定设备和接口技术相对应的配置参数,尤其是与固件更新相关的参数。
要更新设备,首先要在 "fwupdate_file_path" 中选择 GUF 文件,然后使用 "fwupdate_update_selector" 从文件中选择一个(可能是多个)更新,最后通过 "do_fwupdate_apply" 进行应用。这些参数的文档提供了更多详细信息。
请注意,更新程序可能包括一次或多次设备重置,重置后设备必须被采集接口重新发现。重置和重新发现所需的时间由设备供应商在 GUF 文件中指定。然而,在某些情况下(取决于设备本身、其连接技术和系统设置),重新发现超时时间不够,设备无法被安全地重新发现。在这种情况下,可以指定一个额外的超时时间,将其添加到 GUF 文件中指定的超时时间中,以便成功完成进程。该参数 "fwupdate_wait_after_reset" 指定了以毫秒为单位的额外超时。
另见 HDevelop 示例 gigevision2_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:Esen | device_ip:<device ip> | device_sn:<serial number>'] 字符串 动态 系统中发现的 GigE Vision 设备列表,包含设备 ID、唯一名称、用户定义名称、连接接口和图像采集接口标识符等信息。参见 "设备打开" 一节 的完整描述。仅列出当前可打开的设备。
'external_trigger' [] 忽略。
'field' [] 未使用。
'general' [] 字符串 预定义 有关 HALCON GigEVision2 接口的信息。
'generic' ['', 'num_buffers=<num>' , 'direct_connection=<mode>' , 'force_ip=<interface_ip/device_mac/force_device_ip/force_device_mask[/force_device_gateway/force_command_timeout]>' , 'force_sockdrv=1' , '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:Esen | vendor:<device_vendor> | model:<device_model> | device_ip:<device_ip> | device_sn:<device_serial_number> | interface_ip:<interface_ip> | status:<device_status> | suggestion:<generic_param>'] 字符串 动态 系统中发现的 GigE Vision 设备列表,包含字符串形式的附加信息。某些值只有在可用时才会显示。对于配置错误的设备(如子网 IP 错误的设备),建议使用相应的通用参数来解决问题。
  • device_id 是设备名称,将由 info_framegrabber(...,'device',...) 显示。如果设置了 user_name(或 "DeviceUserID"),则会显示该名称。否则将使用 unique_name 。
  • unique_name 是一个字符串,包含设备 MAC 地址、供应商和型号,并用下划线分隔。其他设备都不应该有相同的字符串,因此这是设备的唯一名称。
  • user_name 表示 "DeviceUserID" 功能的值,它是用户为设备定义的名称。如果设备已打开并提供该功能,则可以设置该值。
  • interface 显示设备与 PC 连接的硬件接口。对于 GigEVision2,此条目值为 "Esen_ITF_",并附加网络接口卡的 MAC 地址、IP 和子网掩码。
  • producer 显示 GenICamTL 生产者 cti 文件的完整路径。
  • vendor 表示功能 "DeviceVendorName" 的值。
  • model 表示功能 "DeviceModelName" 的值。
  • tl_type 显示底层传输层的类型,即 "U3V"。
  • device_ip 显示设备的 IP 地址,如 169.54.12.243/16。该值也可通过 "GevCurrentIPAddress" 功能查询。
  • device_sn 显示设备的序列号,也代表特征 "DeviceSerialNumber" 的值。
  • interface_ip 是通过广播请求检测到设备的接口(主要是网卡)的 IP 地址,例如 169.54.18.34/16。
  • status 显示设备配置是否正确。可能的值包括 "可用"、"只读"、"忙"、"配置错误" 和 "未知"。对于配置错误的设备(如子网 IP 设置不正确的设备),建议信息标记会提供相应的通用参数来解决问题。"忙"状态表示设备当前被其他应用程序打开。即使当前无法打开的设备也会被列出。
  • suggestion 仅在因设备位于错误子网而被报告为 "配置错误" 时才会添加。建议信息的值将是可用于解决问题的通用 "force_ip" 参数。这意味着如果您在 open_framegrabber 算子的 通用 参数(请参阅其文档)中按原样传递建议的 "force_ip" 参数,GigEVision2 接口将尝试将设备临时切换到正确的子网并打开它。
'parameters' ['<parameters>'] 字符串 预定义 HALCON 接口的预定义参数。
'parameters_readonly' ['<parameters>'] 字符串 预定义 HALCON 接口的预定义只读参数。
'parameters_writeonly' ['<parameters>'] 字符串 预定义 HALCON 接口的预定义只写参数。
'port' [] 未使用。
'revision' '<revision>' 字符串 预定义 GigEVision2 接口的版本号。
'start_column' [] 不支持查询。
'start_row' [] 不支持查询。
'vertical_resolution' [0, 1] 整数 预定义 垂直分辨率的值列表。

open_framegrabber 的参数

参数 默认值 类型 描述
Name 'GigEVision2' 字符串 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>' , 'direct_connection=<mode>' , 'force_ip=<interface_ip/device_mac/force_device_ip/force_device_mask[/force_device_gateway/force_command_timeout]>' , 'force_sockdrv=1' , 'streaming_mode=0' , 'device_event_handling=0' ], -1 -1 混合型 通过通用参数,可以在相机初始化之前设置一些重要的值。请注意,包括值在内的参数名称必须是字符串,例如 "num_buffers=5" 将缓冲区的数量设置为 5。
可使用以下参数:
  • num_buffers: 设置所用采集缓冲区的最大数量。请注意,根据所使用相机的图像大小,缓冲区数量过多可能会超出计算机的可用内存大小。我们建议至少使用 2 个缓冲区。请注意,接口内部锁定 1 个缓冲区(参见 采集缓冲区处理 ),因此如果您的应用程序需要 n 个缓冲区,"num_buffers" 必须设置为 n+1。默认值:4。
  • direct_connection: 使用已知的 GenTL 接口和设备 ID,实现与设备的直接连接。GenTL 规范允许在已知设备/接口 ID 的情况下直接打开设备,而无需明确指示 GenTL 生产者刷新其内部设备列表,从而优化了不必要的超时。由于某些 GenTL 生产者无法正确实现这一点,因此默认禁用该参数。可能的值为 "启用" 和 "禁用"。
  • force_ip: 请求在连接前向设备强制临时新 IP 设置。当设备配置的子网与其连接的接口不匹配时使用。参数格式为 "force_ip=interface_ip/device_mac/force_device_ip/force_device_mask" ,其中,interface_ip 是设备要连接的接口的当前 IP 地址(即发送强制 IP 请求的接口),device_mac 是要配置的设备的 MAC 地址,force_device_ip 和 force_device_mask 是要强制设备使用的新 IP 地址和子网掩码。所有 IP 地址均采用十进制点分隔格式,MAC 地址采用十六进制冒号分隔格式。请注意,强制 IP 设置不是永久性的(设备重启后也不会生效)。上述参数的基本格式可通过两个附加参数 "force_ip=interface_ip/device_mac/force_device_ip/force_device_mask/force_device_gateway/force_command_timeout" 进行扩展,其中 force_device_gateway 是要在设备上配置的新默认网关,force_command_timeout 指定了操作等待设备确认强制 IP 成功的时间(以微秒为单位)。不存在时,将使用默认网关 "0.0.0.0" 和 7000000 微秒的命令超时。还请注意,在使用 info_framegrabber(...'info_boards'...) 查询设备列表时,对于每个 IP 设置不正确(子网错误)的设备,GigEVision2 都会建议使用 force_ip 通用参数,包括合适的 IP 地址以及与发现的设备接口相对应的其他参数(验证给定的建议 IP 地址当前未在该网段上使用)。在使用 HDevelop 图像采集助手时,它将直接建议在连接到设备时应用通用参数。
  • force_sockdrv: 如果存在,则始终使用套接字驱动程序来处理设备的数据流。即使过滤器驱动程序可用,也不会自动使用。
    该参数仅适用于 Windows 系统。
  • streaming_mode: 要禁用流(与抓取相关的算子),必须将该参数设置为 0。 对于支持流的设备,流默认为打开状态。
  • device_event_handling:如果要禁用设备事件,以减少所使用的资源(如传输次数或生产者中的 CPU 占用率),则必须将此参数设置为 0。 对于支持事件的设备,事件处理默认为打开状态。
ExternalTrigger --- 忽略。要配置触发模式,请使用带有相机通用(SFNC)触发参数的 set_framegrabber_param
CameraType 'default', <ini/xml filename> 'default' 字符串 配置文件的完整路径,其中指定了要为设备和 GigE Vision 生产者加载的其他 GenICam 描述文件,参见 有关设备打开一节 的详细描述。
Device ' | device:<device id> | unique_name:<unique name> | user_name:<user-defined name> | interface:<interface id> | producer:Esen | device_ip:<device ip> | device_sn:<serial number>', '<device id>' 字符串 要打开相机,可以使用 iinfo_framegrabber(...'device'...)info_framegrabber(...'info_boards'...) 中显示的设备名称。某些字符串条目可能会被跳过或设置为 "默认"。要打开特定相机,必须设置设备、用户名、唯一名称、序列号或设备的 IP 地址。最好明确指定所提供的参数,例如 "user_name:MyCamera" 或 "device_ip:192.168.1.1" 。当 device_ip 与通用参数 "direct_connection=enable" 结合使用时,将跳过设备发现过程,从而缩短连接时间。
作为一种快捷方式,可以只指定唯一的设备 ID,而不指定任何限定符。也可以使用字符串 "默认",接口将返回检测到的第一个设备。参见 "打开设备 "一节 的完整描述。
Port --- 未使用。
LineIn --- 忽略。

set_framegrabber_param 的参数

相机和 GigE Vision 生产者的参数通过 GenICam 访问,并在相应相机或 GigE Vision 生产者的 GenICam 描述文件中定义,因此每个产品的参数集都不同(不过参数命名应符合 SFNC 和 GenTL SFNC GenICam 标准)。调用 get_framegrabber_param(..., 'available_param_names', ...) 会返回一个元组,其中包含所连接相机和 GigE Vision 生产者的所有可用参数。另见有关 参数命名规则 一节。
例如,要设置 AcqHandle 所指相机的当前增益(调用 open_framegrabber 之后),用户可以调用 set_framegrabber_param(AcqHandle, 'Gain', 6.0)
请注意,只有当参数值有效时,接口才会设置该值。不符合给定功能允许范围的整数和浮点数值会与最接近的有效值对齐。其他功能类型的无效值将被拒绝。
除了相机和 GigE Vision 生产者的 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 无法使用。
'[Device]DeviceEventsThreadApplyPriority' --- 整数 将通过 "[Device]DeviceEventsThreadPriority" 和 "[Device]DeviceEventsThreadSchedulingPolicy" 参数配置的线程优先级和调度策略(如果适用于给定的操作系统)应用到事件处理线程。如果线程正在运行,则直接应用这些值。如果线程暂时未运行,则会存储这些值,并在线程再次启动时立即应用。应用程序有责任确保调用进程有足够的权限。
如果设备不支持设备事件,或使用 "device_event_handling=0" 通用参数禁用了事件处理功能,则无法使用该功能。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[Device]DeviceEventsThreadPriority' <thread_priority> 整数 用于内部事件处理线程的操作系统特定线程优先级值。实际值直接是操作系统的优先级标识符,例如 Windows 下的 THREAD_PRIORITY_HIGHEST 或 Linux 下的实时优先级值。
只有在执行 "[Device]DeviceEventsThreadApplyPriority" 命令参数后,才会应用实际优先级,如果适用于 给定系统,还可能连同 "[Device]DeviceEventsThreadSchedulingPolicy" 值一起应用。
应用程序有责任确保调用进程有足够权限应用优先级更改,并确保写入参数的值是有效的优先级标识符。应用 "[Device]DeviceEventsThreadApplyPriority" 后,应用程序可以读回优先级值,以验证是否正确应用。
请注意,在打开设备时,GigE Vision 生产者会尝试将线程优先级提升到合适的值。
如果设备不支持设备事件,或使用 "device_event_handling=0" 通用参数禁用了事件处理功能,则无法使用该功能。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[Device]DeviceEventsThreadSchedulingPolicy' <scheduling_policy> 整数 用于内部事件处理线程的操作系统特定调度策略值。实际值直接是操作系统的优先级标识符,例如 Linux 下的 SCHED_FIFO。请注意,Windows 下不提供此功能。
只有在执行 "[Device]DeviceEventsThreadApplyPriority" 命令参数和 "[Device]DeviceEventsThreadPriority" 值后,才会应用实际调度策略。
应用程序有责任确保调用进程有足够的权限应用调度策略,并确保写入参数的值是有效的调度策略标识符。应用 "[Device]DeviceEventsThreadApplyPriority" 后,应用程序可以读回调度策略值,以验证是否正确应用。
如果设备不支持设备事件,或使用 "device_event_handling=0" 通用参数禁用了事件处理,则无法使用该功能。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[Device]DeviceLinkHeartbeatMode' 'Off', 'On' 'Off' 字符串 允许禁用设备上的心跳控制。该参数只有在给定设备支持时才会出现。通常只有在调试程序时才禁用心跳(以防止在遇到断点时丢失设备连接)。在禁用且未重新启用设备时,如果应用程序未能正确关闭连接(例如在崩溃或调试器硬停止时),设备将不会认为连接已过期,而必须重新启动。在大多数情况下,保持默认值不变是最佳解决方案。一个可能的例外是,如果给定的设备不支持禁用心跳,那么在调试时可以大大延长超时时间。
'[Device]DeviceLinkHeartbeatTimeout' <timeout> 整数 心跳超时(单位微秒),如果应用程序无法维持心跳协议,设备将在超时后断开连接。大多数情况下,保持默认值不变是最佳解决方案。一个可能的例外情况是,如果给定设备不支持禁用心跳,调试时可以大幅延长超时时间。
'[Device]DeviceMessageChannelKeepAliveTimeout' 30000 浮点数 在监听设备事件时向设备的消息通道端口发送保持接收数据包的间隔(单位毫秒),以模拟事件流量是出站流量而不是入站流量,从而有助于在有防火墙的情况下可靠地接收事件。实际所需的时间间隔可能取决于实际使用的防火墙。零表示完全不发送任何 keep-alive 数据包。
'[Device]EventNotification' 'Off', 'On' 'Off' 字符串 启用/禁用在 "[Device]EventSelector" 中选择的 GigE Vision 生产者设备模块事件的传送。
'[Device]EventSelector' 'DeviceLost' 字符串 使用 "[Device]EventNotification" 选择要启用/禁用的 GigE Vision 生产者设备模块事件。
'[Device]LinkCommandRetryCount' 3 整数 指定 HALCON GigEVision2 在未收到设备的相应命令确认(假设命令丢失)时,尝试向设备重发给定控制命令的次数。与 "[Device]LinkCommandTimeout" 一起使用,通常应保持不变。
'[Device]LinkCommandTimeout' 200000 整数 指定 HALCON GigEVision2 在假定命令丢失并尝试再次发送之前,等待设备确认单个控制命令的超时(单位微秒)。与 "[Device]LinkCommandRetryCount" 一起使用,通常应保持不变。
'[Interface]GevDeviceForceGateway' <gateway> 整数 在 "[Interface]DeviceSelector" 中选择的设备要强制使用的默认网关(连同 IP 地址)。该参数仅用于为设备准备所需的 IP 配置值(与 "[Interface]GevDeviceForceIPAddress" 和 "[Interface]GevDeviceForceSubnetMask" 一起),这些设置实际上是通过 "[Interface]GevDeviceForceIP" 一起应用的。
请谨慎使用,使用与设备连接的接口不匹配的配置可能会导致设备无法访问。旨在解决此类情况。仅适用于当前未打开的设备。
请注意,open_framegrabber 中的 "force_ip" 通用参数也有类似作用。
'[Interface]GevDeviceForceIP' 0, 1 整数 向 "[Interface]DeviceSelector" 中选择的设备发送更改当前 IP 设置(IP 地址、子网掩码和默认网关)的请求。请求的新设置是先前存储在参数 "[Interface]GevDeviceForceIPAddress"、"[Interface]GevDeviceForceSubnetMask" 和 "[Interface]GevDeviceForceGateway" 中的设置。请谨慎使用,使用与设备连接的接口不匹配的配置可能会导致设备无法连接。旨在解决此类情况。仅适用于当前未打开的设备,已打开的设备将忽略该请求。设置不会在设备的电源循环中持续存在。
该操作可能会耗费大量时间(秒),等待操作完成的超时可由 "[Interface]GevDeviceForceIPTimeout" 控制,详情请查看其文档。要查询操作状态,请在启动操作后读取 "[Interface]GevDeviceForceIP" 参数的值: 0 表示 "尚未完成",1 表示 "操作已完成"。一旦 "完成",可使用"[Interface]GevDeviceLastForceIPSuccess" 读取操作的实际成功率。
请注意,open_framegrabber 中的 "force_ip" 通用参数也有类似作用。
'[Interface]GevDeviceForceIPAddress' <ip_address> 整数 在"[Interface]DeviceSelector" 中选择的设备要强制使用的 IP 地址(连同子网掩码和网关)。该参数仅用于为设备准备所需的 IP 配置值(与 "[Interface]GevDeviceForceSubnetMask" 和 "[Interface]GevDeviceForceGateway" 一起,这些设置实际上是通过 "[Interface]GevDeviceForceIP" 一起应用的。
请谨慎使用,使用与设备所连接接口不匹配的配置可能会导致设备无法连接。旨在解决此类情况。仅适用于当前未打开的设备。 使用 "[Interface]GevDeviceProposeIP" 可自动为该参数填充合适的值。
请注意,open_framegrabber 中的 "force_ip" 通用参数也有类似作用。
'[Interface]GevDeviceForceIPTimeout' [10000, 10000000] 7000000 整数 等待 "[Interface]GevDeviceForceIP" 操作结果的超时(单位微秒)。请注意,遵守 GigE Vision 规范建议的设备将通过 ARP 机制验证所需 IP 地址的可用性(冲突),这意味着它可能需要等待长达 7 秒的 ARP 响应。因此,7 秒是超时值的默认值。
'[Interface]GevDeviceForceSubnetMask' <subnet_mask> 整数 在 "[Interface]GevDeviceForceGateway" 中所选设备中强制使用的子网掩码(与 IP 地址一起)。该参数仅用于为设备准备所需的 IP 配置值(与 "[Interface]GevDeviceForceIPAddress" 和 "[Interface]GevDeviceForceGateway" 一起,使用 "[Interface]GevDeviceForceIP" 实际应用这些设置。
请谨慎使用,使用与设备所连接接口不匹配的配置可能会导致设备无法连接。旨在解决此类情况。仅适用于当前未打开的设备。
请注意,open_framegrabber 中的 "force_ip" 通用参数也有类似作用。
'[Interface]GevDeviceProposeIP' --- 整数 为在 "[Interface]DeviceSelector" 中选择的设备生成合适的 IP 设置建议(IP 地址、子网掩码和默认网关)。建议的设置与设备所连接接口的子网相匹配,以便设备可以直接连接。
建议的设置存储在参数 "[Interface]GevDeviceForceIPAddress"、"[Interface]GevDeviceForceSubnetMask" 和 "[Interface]GevDeviceForceGateway" 中,并可使用 "[Interface]GevDeviceForceIP" 应用到设备。
'[Stream]DeviceStreamChannelKeepAliveTimeout' 30000 浮点数 活动流传输期间向设备的流通道端口发送保持连接数据包的间隔(单位毫秒),以模拟流流量是出站流量而不是入站流量,从而有助于在有防火墙的情况下可靠地进行流传输。实际所需的时间间隔可能取决于实际使用的防火墙。零表示完全不发送 keep-alive 数据包。
'[Stream]DeviceStreamChannelNegotiatePacketSize' --- 整数 根据远程设备、主机及其连接路径,开始协商最佳数据包大小。协商结果将应用于设备,并反映在 "[Stream]DeviceStreamChannelPacketSize" 中。如果协商失败,算法会尝试将配置恢复为初始数据包大小值。
请注意,协商会在打开设备时自动应用。
'[Stream]DeviceStreamChannelPacketSize' <packet_size> 整数 为设备数据流通道配置的数据包大小(类似功能也可能出现在远程设备本身的功能设置中)。同时配置远程设备和 GigE Vision 生产者。
'[Stream]DeviceStreamChannelPacketSizeInc' --- 整数 控制用于流通道的数据包大小功能的预期增量。它既影响数据包大小的直接控制("[Stream]DeviceStreamChannelPacketSize"),也影响协商算法("[Stream]DeviceStreamChannelNegotiatePacketSize")。
除非有理由应用更严格的限制,否则该限制通常应与设备本身施加的实际限制同步设置。当设备限制未知时,初始值设置为 4。
'[Stream]DeviceStreamChannelPacketSizeMax' --- 整数 控制流通道所需的最大数据包大小。它既影响数据包大小的直接控制("[Stream]DeviceStreamChannelPacketSize"),也影响协商算法("[Stream]DeviceStreamChannelNegotiatePacketSize")。
除非有理由应用更严格的限制,否则该限制通常应与设备本身施加的实际限制同步设置。当设备限制未知时,初始值将设置为设备连接的网络接口所接受的 MTU 大小。
'[Stream]DeviceStreamChannelPacketSizeMin' --- 整数 控制流通道所需的最小数据包大小。它既影响数据包大小的直接控制("[Stream]DeviceStreamChannelPacketSize"),也影响协商算法("[Stream]DeviceStreamChannelNegotiatePacketSize")。
限值通常应与设备本身规定的实际限值同步设置,除非有理由适用更严格的限值。当设备限制未知时,初始值设置为 46。
'[Stream]EventNotification' 'Off', 'On' 'Off' 字符串 启用/禁用在 "[Stream]EventSelector" 中选择的 GigE Vision 生产者数据流模块事件的传输。
'[Stream]EventSelector' 'TransferEnd' 字符串 使用 "[Stream]EventNotification" 选择要启用/禁用的 GigE Vision 生产者数据流模块事件。
'[Stream]GevStreamAbortCheckPeriod' 300000 浮点数 以微秒为单位的时间间隔,定义数据包处理线程检查停止请求的频率。时间越短,获取停止的速度越快,但意味着空闲时线程活动越多。
'[Stream]GevStreamDeliverIncompleteBlocks' 0, 1 1 整数 标志,表示不完整的缓冲区(有一个或多个数据包丢失)应被传送还是丢弃。需要注意的是,如果一个数据块的首部或尾部丢失,它还是会被丢弃。
'[Stream]GevStreamFullBlockTerminatesPrev' 0, 1 0 整数 标志,指示接收到完整缓冲区后,是否立即终止获取队列中之前的任何缓冲区,无论这些缓冲区是否仍在等待重发,从而避免阻塞完整缓冲区。
'[Stream]GevStreamMaxBlockDuration' 0 浮点数 数据块的最长持续时间("在线"),单位为微秒。过期时,引擎将假定已收到数据块预告片(数据块尾随控制数据包),如果支持数据包重发,则会要求重发。 零表示无限制,例如适用于具有稀疏行触发器的行扫描设备。
注:对于过滤器驱动程序,该值四舍五入为毫秒。如果过期,则检查最早的数据块是否可以发送。如果不能,则请求重新发送最早的数据块。如果丢失的数据包多于尾部数据包,则该数据块也会被标记为送达。当计时器第二次过期时,标记的数据块要么被丢弃,要么被发送。
'[Stream]GevStreamMaxPacketGaps' 30 整数 套接字驱动程序: 一个数据块中数据包间隙的最大数量。影响分配给重发机制的资源量。 过滤器驱动程序: 不完整数据块允许丢失数据包的百分比。因此,这也是每个数据块发送重发请求的最大数量。 一旦超过,引擎将放弃完成该数据块的尝试,并将其丢弃。
'[Stream]GevStreamPacketOrderDelay' 10 浮点数 控制在请求重发之前,等待不按顺序到达的数据包多长时间。对于套接字驱动程序来说,这是一个以微秒为单位的时间段;对于过滤器驱动程序来说,这是检查数据包是否丢失并最终触发重发之前需要等待的数据包数量。 主要目的是避免在预计数据包会失序的情况下过早发出重发请求(例如基于链路聚合的连接,或因多个传感器标签使用不当而导致数据包发送失序的相机)。
'[Stream]GevStreamReceiveSocketSize' 128000 整数 套接字接收缓冲区的大小(字节)。直接映射到 SO_RCVBUF 套接字选项。仅适用于套接字驱动程序,过滤器驱动程序不使用。 在 Linux 系统上,在 sysctl "rmem_max" 参数限制允许的范围内大幅增加该值,通常能显著改善使用超高速设备时的性能问题(数据包丢失)。
在 Windows 系统上,将该值增加到 512000 通常会提高性能,再增加可能没有影响,甚至有负面影响(需在每个系统上测试)。相反,"[Stream]GevStreamRingBufferSize" 的影响可能更大。
'[Stream]GevStreamRingBufferSize' 256000 整数 用于存储数据包的流引擎环形缓冲区的大小(字节)。环形缓冲区用于分隔套接字排水线程和数据包处理线程。仅适用于套接字驱动程序,过滤器驱动程序不使用。
如果系统负载很高,环形缓冲区可帮助克服性能峰值并防止数据包丢失。
最佳值应在使用高速设备遇到性能问题(数据包丢失)时通过实验找到。将其设置为几个完整缓冲区的大小可能会在 Windows 系统上获得最佳效果。 在 Linux 系统上,"[Stream]GevStreamReceiveSocketSize" 的影响可能更大。
'[Stream]StreamBufferHandlingMode' 'OldestFirst', 'OldestFirstOverwrite', 'NewestOnly' 'OldestFirst' 字符串 选择流引擎用于处理新采集数据的模式,尤其是当相机运行速度快于应用程序处理速度时。该参数只有在没有采集活动时才可写入。支持的值有
  • "最旧优先": 采集的缓冲区始终以 FIFO 方式(最旧优先)传送。如果采集引擎从相机接收到一个新的缓冲区,但没有可用的空闲缓冲区来填充它,新数据将被丢弃。
  • "最旧优先重写": 获取的缓冲区总是以 FIFO 方式传送(最旧优先)。如果采集引擎从相机接收到一个新的缓冲区,但没有可用的空闲缓冲区来填充该缓冲区,则会检查是否有较旧的缓冲区等待传送,但尚未被消费者接收。如果有,它就取其中最旧的缓冲区,用新数据覆盖并将其添加到输出队列的末尾。如果输出队列为空(没有缓冲区可供覆盖),则丢弃新数据。仅适用于套接字驱动程序,未定义过滤器驱动程序的行为。
  • "仅最新": 等待交付的缓冲区输出队列中永远不会包含超过一个(最新的)缓冲区。如果采集引擎接收到一个新缓冲区,而输出队列中已经有一个等待交付的旧缓冲区,则会将新缓冲区放入输出队列,而将旧缓冲区重新用于下一次采集。如果没有可用的空闲缓冲区,且输出队列也是空的,则会丢弃新数据。
'[Stream]StreamThreadApplyPriority' --- 整数 将通过 "[Stream]StreamThreadPriority" 和 "[Stream]StreamThreadSchedulingPolicy" 参数配置的线程优先级和调度策略(如果适用于给定的操作系统)应用于流处理线程。如果线程正在运行(采集启动),则直接应用这些值。如果线程暂时未运行,则会存储这些值,并在线程再次启动时立即应用。应用程序有责任确保调用进程拥有足够的权限。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[Stream]StreamThreadPriority' <thread_priority> 整数 用于内部流处理线程的操作系统特定线程优先级值。实际值直接是操作系统的优先级标识符,例如 Windows 下的 THREAD_PRIORITY_HIGHEST 或 Linux 下的实时优先级值。
实际优先级只有在执行 "[Stream]StreamThreadApplyPriority" 命令参数后才会应用,如果适用于给定系统,还可能与 "[Stream]StreamThreadSchedulingPolicy" 值一起应用。
应用程序有责任确保调用进程有足够权限应用优先级更改,并确保写入参数的值是有效的优先级标识符。应用 "[Stream]StreamThreadApplyPriority" 后,应用程序可以读回优先级值,以验证是否正确应用。
请注意,在打开设备时,GigE Vision 生产者会尝试将线程优先级提升至合适的值。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[Stream]StreamThreadSchedulingPolicy' <scheduling_policy> 整数 用于内部流处理线程的操作系统特定调度策略值。实际值直接是操作系统的优先级标识符,例如 Linux 下的 SCHED_FIFO。请注意,Windows 下不提供此功能。
只有在执行 "[Stream]StreamThreadApplyPriority" 命令参数和 "[Stream]StreamThreadPriority" 值后,才会应用实际调度策略。
应用程序有责任确保调用进程有足够的权限应用调度策略,并确保写入参数的值是有效的调度策略标识符。应用 "[Stream]StreamThreadApplyPriority" 后,应用程序可以读回调度策略值,以验证是否正确应用。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'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" 三个扩展属性附加。
如果没有找到合适的二维图像,则不会添加叠加。例如,可以使用带有 "extended_attribute_names" 参数的 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 图像的图像通道数。如果单色像素格式为 "default",则设为 "gray",否则设为 "rgb"(未知像素格式设为 "raw")。
'confidence_mode' 'off', 'object_model_3d' 'off' 字符串 控制采集接口是否使用(以及如何使用)像素置信度信息。仅适用于置信度信息与实际像素数据一起交付(按像素)的设备和用例。
区分有效和无效像素的阈值由 "置信度阈值" 参数控制。 请注意,在某些使用情况下,可能有其他标准来标记给定像素无效,例如,如果设备使用 "无效像素值" 来表示三维坐标。这些情况不包含在 "confidence_mode" 参数中,并且三维对象模型始终会剔除这些无效像素。可能的值有:
  • 关:默认值。像素置信度信息不会应用于任何抓取算子输出,即使是由设备提供。
  • 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 命令)与 GigE Vision 生产者之间的等待时间(毫秒)。
'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" 指定是否要恢复实际(远程)设备、GigE Vision 生产者模块之一或消费者参数(GigEVision2 图像采集接口的内部参数)的设置。参见 "参数 - 持续设备状态" 一节的详细描述。
'do_write_configuration' <output_file> 字符串 写入配置 (ini) 文件,并将带有设备当前配置的 GenICam 描述文件和持久性文件写入同一目录。
字符串参数必须是目标 ini 文件的文件名(包括完整路径)。该路径必须在写入之前就存在。写入的 ini 文件包含写入的描述文件和持久化文件的路径列表。
为远程设备和与当前打开的设备相关联的每个 GigE Vision 生产者模块写入 GenICam 描述文件。为远程设备和每个 GigE Vision 生产者模块以及 GigEVision2 图像采集接口的内部参数写入持久文件。
完整配置可通过 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" 指定要写入的是实际(远程)设备的设置、GigE Vision 生产者模块之一还是消费者参数(GigEVision2 图像采集接口的内部参数)。参见 "参数 - 持续设备状态" 一节的详细描述。
'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' 实数 预定义 指定接收到触发器后激活图像采集前的延迟时间。延迟单位通常为微秒。不过,相机可能会偏离这一标准。详细信息请查阅相机的文档。
'[Device]DeviceEventsThreadPriority' <thread_priority> 整数 预定义 用于内部事件处理线程的操作系统特定线程优先级值。实际值直接是操作系统的优先级标识符,例如 Windows 下的 THREAD_PRIORITY_HIGHEST 或 Linux 下的实时优先级值。
只有在执行 "[Device]DeviceEventsThreadApplyPriority" 命令参数后,才会应用实际优先级,如果适用于 给定系统,还可能连同 "[Device]DeviceEventsThreadSchedulingPolicy" 值一起应用。
应用程序有责任确保调用进程有足够权限应用优先级更改,并确保写入参数的值是有效的优先级标识符。应用 "[Device]DeviceEventsThreadApplyPriority" 后,应用程序可以读回优先级值,以验证是否正确应用。
请注意,在打开设备时,GigE Vision 生产者会尝试将线程优先级提升到合适的值。
如果设备不支持设备事件,或使用 "device_event_handling=0" 通用参数禁用了事件处理功能,则无法使用该功能。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[Device]DeviceEventsThreadSchedulingPolicy' <scheduling_policy> 整数 预定义 用于内部事件处理线程的操作系统特定调度策略值。实际值直接是操作系统的优先级标识符,例如 Linux 下的 SCHED_FIFO。请注意,Windows 下不提供此功能。
只有在执行 "[Device]DeviceEventsThreadApplyPriority" 命令参数和 "[Device]DeviceEventsThreadPriority" 值后,才会应用实际调度策略。
应用程序有责任确保调用进程有足够的权限应用调度策略,并确保写入参数的值是有效的调度策略标识符。应用 "[Device]DeviceEventsThreadApplyPriority" 后,应用程序可以读回调度策略值,以验证是否正确应用。
如果设备不支持设备事件,或使用 "device_event_handling=0" 通用参数禁用了事件处理,则无法使用该功能。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[Device]DeviceLinkHeartbeatMode' 'Off', 'On' 'Off' 字符串 预定义 允许禁用设备上的心跳控制。该参数只有在给定设备支持时才会出现。通常只有在调试程序时才禁用心跳(以防止在遇到断点时丢失设备连接)。在禁用且未重新启用设备时,如果应用程序未能正确关闭连接(例如在崩溃或调试器硬停止时),设备将不会认为连接已过期,而必须重新启动。在大多数情况下,保持默认值不变是最佳解决方案。一个可能的例外是,如果给定的设备不支持禁用心跳,那么在调试时可以大大延长超时时间。
'[Device]DeviceLinkHeartbeatTimeout' <timeout> 整数 预定义 心跳超时(单位微秒),如果应用程序无法维持心跳协议,设备将在超时后断开连接。大多数情况下,保持默认值不变是最佳解决方案。一个可能的例外情况是,如果给定设备不支持禁用心跳,调试时可以大幅延长超时时间。
'[Device]DeviceMessageChannelKeepAliveTimeout' 30000 浮点数 预定义 在监听设备事件时向设备的消息通道端口发送保持接收数据包的间隔(单位毫秒),以模拟事件流量是出站流量而不是入站流量,从而有助于在有防火墙的情况下可靠地接收事件。实际所需的时间间隔可能取决于实际使用的防火墙。零表示完全不发送任何 keep-alive 数据包。
'[Device]EventDeviceLost' 整数 预定义 发送有关 "设备丢失" 事件(与设备失去连接)的通知。如 功能更改通知 所述,要接收此类通知,必须使用 "[Device]EventSelector" 和 "[Device]EventNotification" 注册 "DeviceLost "事件传送,并为该功能注册通知回调("[Device]EventDeviceLost" )。收到通知时,建议尝试读取 [Device]EventDeviceLost 的值。如果可以读取,则表示与设备的连接确实丢失了(注意,实际读取的该参数值并不重要)。与设备失去连接后,设备句柄将不再可用,应予以关闭。
'[Device]EventNotification' 'Off', 'On' 'Off' 字符串 预定义 启用/禁用在 "[Device]EventSelector" 中选择的 GigE Vision 生产者设备模块事件的传送。
'[Device]EventSelector' 'DeviceLost' 字符串 预定义 使用 "[Device]EventNotification" 选择要启用/禁用的 GigE Vision 生产者设备模块事件。
'[Device]GevDeviceGateway' <gateway> 整数 预定义 设备的默认网关地址,整数格式。
'[Device]GevDeviceIPAddress' <ip_address> 整数 预定义 设备的 IP 地址,整数格式。
'[Device]GevDeviceMACAddress' <mac_address> 整数 预定义 设备的 MAC 地址,整数格式。
'[Device]GevDeviceSubnetMask' <subnet_mask> 整数 预定义 设备的子网掩码,整数格式。
'[Device]LinkCommandRetryCount' 3 整数 预定义 指定 HALCON GigEVision2 在未收到设备的相应命令确认(假设命令丢失)时,尝试向设备重发给定控制命令的次数。与 "[Device]LinkCommandTimeout" 一起使用,通常应保持不变。
'[Device]LinkCommandTimeout' 200000 整数 预定义 指定 HALCON GigEVision2 在假定命令丢失并尝试再次发送之前,等待设备确认单个控制命令的超时(单位微秒)。与 "[Device]LinkCommandRetryCount" 一起使用,通常应保持不变。
'[Interface]GevDeviceForceGateway' <gateway> 整数 预定义 在 "[Interface]DeviceSelector" 中选择的设备要强制使用的默认网关(连同 IP 地址)。该参数仅用于为设备准备所需的 IP 配置值(与 "[Interface]GevDeviceForceIPAddress" 和 "[Interface]GevDeviceForceSubnetMask" 一起),这些设置实际上是通过 "[Interface]GevDeviceForceIP" 一起应用的。
请谨慎使用,使用与设备连接的接口不匹配的配置可能会导致设备无法访问。旨在解决此类情况。仅适用于当前未打开的设备。
请注意,open_framegrabber 中的 "force_ip" 通用参数也有类似作用。
'[Interface]GevDeviceForceIP' 0, 1 整数 预定义 向 "[Interface]DeviceSelector" 中选择的设备发送更改当前 IP 设置(IP 地址、子网掩码和默认网关)的请求。请求的新设置是先前存储在参数 "[Interface]GevDeviceForceIPAddress"、"[Interface]GevDeviceForceSubnetMask" 和 "[Interface]GevDeviceForceGateway" 中的设置。请谨慎使用,使用与设备连接的接口不匹配的配置可能会导致设备无法连接。旨在解决此类情况。仅适用于当前未打开的设备,已打开的设备将忽略该请求。设置不会在设备的电源循环中持续存在。
该操作可能会耗费大量时间(秒),等待操作完成的超时可由 "[Interface]GevDeviceForceIPTimeout" 控制,详情请查看其文档。要查询操作状态,请在启动操作后读取 "[Interface]GevDeviceForceIP" 参数的值: 0 表示 "尚未完成",1 表示 "操作已完成"。一旦 "完成",可使用"[Interface]GevDeviceLastForceIPSuccess" 读取操作的实际成功率。
请注意,open_framegrabber 中的 "force_ip" 通用参数也有类似作用。
'[Interface]GevDeviceForceIPAddress' <ip_address> 整数 预定义 在"[Interface]DeviceSelector" 中选择的设备要强制使用的 IP 地址(连同子网掩码和网关)。该参数仅用于为设备准备所需的 IP 配置值(与 "[Interface]GevDeviceForceSubnetMask" 和 "[Interface]GevDeviceForceGateway" 一起,这些设置实际上是通过 "[Interface]GevDeviceForceIP" 一起应用的。
请谨慎使用,使用与设备所连接接口不匹配的配置可能会导致设备无法连接。旨在解决此类情况。仅适用于当前未打开的设备。 使用 "[Interface]GevDeviceProposeIP" 可自动为该参数填充合适的值。
请注意,open_framegrabber 中的 "force_ip" 通用参数也有类似作用。
'[Interface]GevDeviceForceIPTimeout' [10000, 10000000] 7000000 整数 预定义 等待 "[Interface]GevDeviceForceIP" 操作结果的超时(单位微秒)。请注意,遵守 GigE Vision 规范建议的设备将通过 ARP 机制验证所需 IP 地址的可用性(冲突),这意味着它可能需要等待长达 7 秒的 ARP 响应。因此,7 秒是超时值的默认值。
'[Interface]GevDeviceForceSubnetMask' <subnet_mask> 整数 预定义 在 "[Interface]GevDeviceForceGateway" 中所选设备中强制使用的子网掩码(与 IP 地址一起)。该参数仅用于为设备准备所需的 IP 配置值(与 "[Interface]GevDeviceForceIPAddress" 和 "[Interface]GevDeviceForceGateway" 一起,使用 "[Interface]GevDeviceForceIP" 实际应用这些设置。
请谨慎使用,使用与设备所连接接口不匹配的配置可能会导致设备无法连接。旨在解决此类情况。仅适用于当前未打开的设备。
请注意,open_framegrabber 中的 "force_ip" 通用参数也有类似作用。
'[Interface]GevDeviceLastForceIPSuccess' 0, 1 1 整数 预定义 报告上次 "[Interface]GevDeviceForceIP" 操作是否成功。只有在操作实际完成后,该参数才会给出有意义的输出:应首先通过回读 "[Interface]GevDeviceForceIP" 参数来查询其完成情况(更多详情请参见其文档)。
'[Interface]GevInterfaceMACAddress' <mac_address> 整数 预定义 设备所连接主机网络接口的 MAC 地址,整数格式。
'[Interface]GevInterfaceMTU' <timeout> 整数 预定义 设备连接的主机网络接口当前接受的最大传输单元 (MTU)。
'[Interface]GevInterfaceSubnetIPAddress' <ip_address> 整数 预定义 设备所连接主机网络接口的 IP 地址,整数格式。
'[Interface]GevInterfaceSubnetMask' <subnet_mask> 整数 预定义 设备所连接主机网络接口的子网掩码,整数格式。
'[Stream]DeviceStreamChannelKeepAliveTimeout' 30000 浮点数 预定义 活动流传输期间向设备的流通道端口发送保持连接数据包的间隔(单位毫秒),以模拟流流量是出站流量而不是入站流量,从而有助于在有防火墙的情况下可靠地进行流传输。实际所需的时间间隔可能取决于实际使用的防火墙。零表示完全不发送 keep-alive 数据包。
'[Stream]DeviceStreamChannelPacketSize' <packet_size> 整数 预定义 为设备数据流通道配置的数据包大小(类似功能也可能出现在远程设备本身的功能设置中)。同时配置远程设备和 GigE Vision 生产者。
'[Stream]DeviceStreamChannelPacketSizeInc' --- 整数 预定义 控制用于流通道的数据包大小功能的预期增量。它既影响数据包大小的直接控制("[Stream]DeviceStreamChannelPacketSize"),也影响协商算法("[Stream]DeviceStreamChannelNegotiatePacketSize")。
除非有理由应用更严格的限制,否则该限制通常应与设备本身施加的实际限制同步设置。当设备限制未知时,初始值设置为 4。
'[Stream]DeviceStreamChannelPacketSizeMax' --- 整数 预定义 控制流通道所需的最大数据包大小。它既影响数据包大小的直接控制("[Stream]DeviceStreamChannelPacketSize"),也影响协商算法("[Stream]DeviceStreamChannelNegotiatePacketSize")。
除非有理由应用更严格的限制,否则该限制通常应与设备本身施加的实际限制同步设置。当设备限制未知时,初始值将设置为设备连接的网络接口所接受的 MTU 大小。
'[Stream]DeviceStreamChannelPacketSizeMin' --- 整数 预定义 控制流通道所需的最小数据包大小。它既影响数据包大小的直接控制("[Stream]DeviceStreamChannelPacketSize"),也影响协商算法("[Stream]DeviceStreamChannelNegotiatePacketSize")。
限值通常应与设备本身规定的实际限值同步设置,除非有理由适用更严格的限值。当设备限制未知时,初始值设置为 46。
'[Stream]EventNotification' 'Off', 'On' 'Off' 字符串 预定义 启用/禁用在 "[Stream]EventSelector" 中选择的 GigE Vision 生产者数据流模块事件的传输。
'[Stream]EventSelector' 'TransferEnd' 字符串 预定义 使用 "[Stream]EventNotification" 选择要启用/禁用的 GigE Vision 生产者数据流模块事件。
'[Stream]EventTransferEnd' 整数 预定义 发送有关 "传输结束" 事件(在流引擎内完成缓冲区传输)的通知。要接收此类通知,必须使用 "[Stream]EventSelector" 和 "[Stream]EventNotification" 注册 "TransferEnd" 事件传送,并为该功能注册通知回调("[Stream]EventTransferEnd"),详见 功能更改通知 。从该参数读取的实际值并不重要。使用 "[Stream]EventTransferEndFrameID" 和 "[Stream]EventTransferEndBufferUndeliverable" 可获得有关该事件的其他信息。
重要提示:生成的传输结束事件与实际交付的缓冲区之间不存在 1:1 的映射关系。损坏/无法交付的缓冲区将被流引擎丢弃。根据队列状态和 "[Stream]StreamBufferHandlingMode" 参数,即使是有效的缓冲区也会被丢弃在输出队列中。
'[Stream]EventTransferEndBufferUndeliverable' 0, 1 整数 预定义 表示通过 "[Stream]EventTransferEnd" 发出传输结束事件信号的最后一个缓冲区是否可交付(有效)的标志。损坏/无法交付的缓冲区将被流引擎丢弃。根据队列状态和 "[Stream]StreamBufferHandlingMode" 参数,即使是有效的缓冲区也会被丢弃在输出队列中。
'[Stream]EventTransferEndFrameID' 整数 预定义 通过 "[Stream]EventTransferEnd" 发出传输结束事件信号的最后一个缓冲区的帧 ID。
'[Stream]EventTransferEndUndeliverabilityReason' 'Unspecified', 'InvalidPacket', 'IncompleteBuffer', 'ValidationFailedNoTrailer', 'ValidationFailed' 字符串 预定义 说明最后一个缓冲区无法交付的原因的字符串。当'[Stream]EventTransferEndBufferUndeliverable' == 1 时,请使用此字符串来查找根本原因。
'[Stream]GevStreamAbortCheckPeriod' 300000 浮点数 预定义 以微秒为单位的时间间隔,定义数据包处理线程检查停止请求的频率。时间越短,获取停止的速度越快,但意味着空闲时线程活动越多。
'[Stream]GevStreamActiveEngine' 'SocketDriver', 'FilterDriver' 字符串 预定义 告知当前使用的流引擎(套接字驱动程序或过滤器驱动程序)。仅适用于 Windows 系统(其他系统始终使用套接字驱动程序)。
'[Stream]GevStreamDeliveredPacketCount' 0 整数 预定义 已交付区块中成功接收的所有数据包。未交付(跳过或丢弃)的数据块中的数据包不计算在内。
'[Stream]GevStreamDeliverIncompleteBlocks' 0, 1 1 整数 预定义 标志,表示不完整的缓冲区(有一个或多个数据包丢失)应被传送还是丢弃。需要注意的是,如果一个数据块的首部或尾部丢失,它还是会被丢弃。
'[Stream]GevStreamDiscardedBlockCount' 0 整数 预定义 因任何原因被丢弃的数据块数量,包括数据损坏、丢失数据包过多(根据所选输入参数)或丢失头文件和/或尾文件。
'[Stream]GevStreamDuplicatePacketCount' 0 整数 预定义 接收两次的数据包(通常是因为重发请求太早到达)。
'[Stream]GevStreamEngineUnderrunCount' 0 整数 预定义 由于给定数据块到达时没有缓冲区调度到采集引擎而被丢弃的数据块数量。
'[Stream]GevStreamFullBlockTerminatesPrev' 0, 1 0 整数 预定义 标志,指示接收到完整缓冲区后,是否立即终止获取队列中之前的任何缓冲区,无论这些缓冲区是否仍在等待重发,从而避免阻塞完整缓冲区。
'[Stream]GevStreamIncompleteBlockCount' 0 整数 预定义 交付不完整(其中有一个或多个数据包丢失)的数据块数量。
'[Stream]GevStreamLostPacketCount' 0 整数 预定义 已交付数据块中丢失的所有数据包(即使在重新发送后)。未交付(跳过或丢弃)数据块中的数据包不计算在内。
'[Stream]GevStreamMaxBlockDuration' 0 浮点数 预定义 数据块的最长持续时间("在线"),单位为微秒。过期时,引擎将假定已收到数据块预告片(数据块尾随控制数据包),如果支持数据包重发,则会要求重发。 零表示无限制,例如适用于具有稀疏行触发器的行扫描设备。
注:对于过滤器驱动程序,该值四舍五入为毫秒。如果过期,则检查最早的数据块是否可以发送。如果不能,则请求重新发送最早的数据块。如果丢失的数据包多于尾部数据包,则该数据块也会被标记为送达。当计时器第二次过期时,标记的数据块要么被丢弃,要么被发送。
'[Stream]GevStreamMaxPacketGaps' 30 整数 预定义 套接字驱动程序: 一个数据块中数据包间隙的最大数量。影响分配给重发机制的资源量。 过滤器驱动程序: 不完整数据块允许丢失数据包的百分比。因此,这也是每个数据块发送重发请求的最大数量。 一旦超过,引擎将放弃完成该数据块的尝试,并将其丢弃。
'[Stream]GevStreamOversizedBlockCount' 0 整数 预定义 检测到超大(即一个或多个数据包无法放入分配的缓冲区)的数据块数量。无论缓冲区是否实际交付,都会被计算在内。
'[Stream]GevStreamPacketOrderDelay' 10 浮点数 预定义 控制在请求重发之前,等待不按顺序到达的数据包多长时间。对于套接字驱动程序来说,这是一个以微秒为单位的时间段;对于过滤器驱动程序来说,这是检查数据包是否丢失并最终触发重发之前需要等待的数据包数量。主要目的是避免在预计数据包会失序的情况下过早发出重发请求(例如基于链路聚合的连接,或因多个传感器标签使用不当而导致数据包发送失序的相机)。
'[Stream]GevStreamReceiveSocketSize' 128000 整数 预定义 套接字接收缓冲区的大小(字节)。直接映射到 SO_RCVBUF 套接字选项。仅适用于套接字驱动程序,过滤器驱动程序不使用。 在 Linux 系统上,在 sysctl "rmem_max" 参数限制允许的范围内大幅增加该值,通常能显著改善使用超高速设备时的性能问题(数据包丢失)。
在 Windows 系统上,将该值增加到 512000 通常会提高性能,再增加可能没有影响,甚至有负面影响(需在每个系统上测试)。相反,"[Stream]GevStreamRingBufferSize" 的影响可能更大。
'[Stream]GevStreamResendCommandCount' 0 整数 预定义 重发请求的次数(不管是单数据包还是多数据包)。每次重发都会被计算在内,即使同一数据包已发送多次。即使属于缓冲区的重发请求从未送达,也会被计算在内。
'[Stream]GevStreamResendPacketCount' 0 整数 预定义 请求重发的数据包数量。每次重发都会被计算在内,即使同一数据包已发送多次。即使属于从未发送的缓冲区的数据包也会被计算在内。要求重新发送缓冲区尾部(其中有未知数量的数据包)时,只计算单个数据包。
'[Stream]GevStreamRingBufferSize' 256000 整数 预定义 用于存储数据包的流引擎环形缓冲区的大小(字节)。环形缓冲区用于分隔套接字排水线程和数据包处理线程。仅适用于套接字驱动程序,过滤器驱动程序不使用。
如果系统负载很高,环形缓冲区可帮助克服性能峰值并防止数据包丢失。
最佳值应在使用高速设备遇到性能问题(数据包丢失)时通过实验找到。将其设置为几个完整缓冲区的大小可能会在 Windows 系统上获得最佳效果。 在 Linux 系统上,"[Stream]GevStreamReceiveSocketSize" 的影响可能更大。
'[Stream]GevStreamSeenPacketCount' 0 整数 预定义 流中看到的所有数据包(包括无效数据包或重复数据包)。
'[Stream]GevStreamSkippedBlockCount' 0 整数 预定义 某处跳过的数据块数量(我们从未见过属于这些数据块的任何有效数据包)。
'[Stream]GevStreamUnavailablePacketCount' 0 整数 预定义 设备明确宣布不可用(重新发送后)的所有数据包(而不是直接静默不重新发送的数据包)。这通常意味着重发请求来得太晚。
'[Stream]StreamBufferHandlingMode' 'OldestFirst', 'OldestFirstOverwrite', 'NewestOnly' 'OldestFirst' 字符串 预定义 选择流引擎用于处理新采集数据的模式,尤其是当相机运行速度快于应用程序处理速度时。该参数只有在没有采集活动时才可写入。支持的值有
  • "最旧优先": 采集的缓冲区始终以 FIFO 方式(最旧优先)传送。如果采集引擎从相机接收到一个新的缓冲区,但没有可用的空闲缓冲区来填充它,新数据将被丢弃。
  • "最旧优先重写": 获取的缓冲区总是以 FIFO 方式传送(最旧优先)。如果采集引擎从相机接收到一个新的缓冲区,但没有可用的空闲缓冲区来填充该缓冲区,则会检查是否有较旧的缓冲区等待传送,但尚未被消费者接收。如果有,它就取其中最旧的缓冲区,用新数据覆盖并将其添加到输出队列的末尾。如果输出队列为空(没有缓冲区可供覆盖),则丢弃新数据。仅适用于套接字驱动程序,未定义过滤器驱动程序的行为。
  • "仅最新": 等待交付的缓冲区输出队列中永远不会包含超过一个(最新的)缓冲区。如果采集引擎接收到一个新缓冲区,而输出队列中已经有一个等待交付的旧缓冲区,则会将新缓冲区放入输出队列,而将旧缓冲区重新用于下一次采集。如果没有可用的空闲缓冲区,且输出队列也是空的,则会丢弃新数据。
'[Stream]StreamThreadPriority' <thread_priority> 整数 预定义 用于内部流处理线程的操作系统特定线程优先级值。实际值直接是操作系统的优先级标识符,例如 Windows 下的 THREAD_PRIORITY_HIGHEST 或 Linux 下的实时优先级值。
实际优先级只有在执行 "[Stream]StreamThreadApplyPriority" 命令参数后才会应用,如果适用于给定系统,还可能与 "[Stream]StreamThreadSchedulingPolicy" 值一起应用。
应用程序有责任确保调用进程有足够权限应用优先级更改,并确保写入参数的值是有效的优先级标识符。应用 "[Stream]StreamThreadApplyPriority" 后,应用程序可以读回优先级值,以验证是否正确应用。
请注意,在打开设备时,GigE Vision 生产者会尝试将线程优先级提升至合适的值。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[Stream]StreamThreadSchedulingPolicy' <scheduling_policy> 整数 预定义 用于内部流处理线程的操作系统特定调度策略值。实际值直接是操作系统的优先级标识符,例如 Linux 下的 SCHED_FIFO。请注意,Windows 下不提供此功能。
只有在执行 "[Stream]StreamThreadApplyPriority" 命令参数和 "[Stream]StreamThreadPriority" 值后,才会应用实际调度策略。
应用程序有责任确保调用进程有足够的权限应用调度策略,并确保写入参数的值是有效的调度策略标识符。应用 "[Stream]StreamThreadApplyPriority" 后,应用程序可以读回调度策略值,以验证是否正确应用。
注意:设置该参数可能导致系统无法使用或性能不佳,请谨慎使用。
'[System]GevTLSubsystemInfo' '<subsystem_info>' 字符串 预定义 有关 GigE Vision 生产者实施子系统的信息。主要用于故障排除和支持。
'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" 三个扩展属性附加。
如果没有找到合适的二维图像,则不会添加叠加。例如,可以使用带有 "extended_attribute_names" 参数的 get_object_model_3d_params 运算符查询实际添加的扩展属性。覆盖层也可用于可视化目的。
'available_callback_types' ['<callback_types>'] 字符串 动态 返回一个包含所有参数的列表,可以为这些参数注册回调。这包括设备和 GigE Vision 生产者通过 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 GigEVision2 图像采集接口使用的参数(不包括 MVTec EasyParams,可使用 "available_easyparam_names" 列出),以及设备和 GigE Vision 生产者通过 GenICam 接口发布的参数(参见 参数命名规则 )。某些参数的可用性可能取决于采集状态、其他参数的值或其他条件,因此列表在运行期间会动态变化。
'bits_per_channel' -1, 8, 10, 12, 14, 16 -1 整数 预定义 生成的 HALCON 图像每个通道的比特数。如果为-1,则使用各采集缓冲区的比特深度。如果指定的值大于 8,抓取的图像将以 uint2 图像的形式传输。
'buffer_frameid' <frame_id> 整数 动态 设备(或 GigE Vision 生产者)最后抓取(图像)缓冲区上的帧 ID。通常是按顺序递增的帧编号。序列中跳过的 ID 可能表示设备或 GigE Vision 生产者丢弃了一个或多个帧,例如由于采集引擎溢出的原因。请注意,在 32 位系统上,最多只能传送 64 位时间戳的低 32 位部分(除非启用了 "split_param_values_into_dwords" 参数)。参见 采集缓冲区处理
'buffer_is_incomplete' 0, 1 整数 动态 显示最后抓取的图像是否不完整(例如由于数据包丢失)。参见 采集缓冲区处理
'buffer_reallocation_mode' 'only_increase_size', 'follow_payloadsize' 'only_increase_size' 字符串 预定义 定义为新采集重新分配缓冲区时所遵循的策略。如果使用 "only_increase_size",则只有在有效载荷大小增加时才会重新分配缓冲区。如果使用 "follow_payloadsize",则每次有效载荷大小发生变化时都会重新分配缓冲区。
'buffer_timestamp' <timestamp> 整数 动态 设备(或 GigE Vision 生产者)最后抓取(图像)缓冲区的时间戳。时间戳的单位和实际含义(何时生成)取决于设备。如果知道时间戳计数器的频率,则可以从 "buffer_timestamp_ns" 中读取以纳秒为单位的值。需要注意的是,在 32 位系统上,最多只能提供 64 位时间戳的低 32 位部分(除非启用了 "split_param_values_into_dwords" 参数)。 参见 采集缓冲区处理
'buffer_timestamp_ns' <timestamp> 整数 动态 设备(或 GigE Vision 生产者)最后抓取(图像)缓冲区的时间戳。该值以纳秒为单位,但如果时间戳频率未知,则可能无法使用(另请参阅 "buffer_timestamp" 和 "device_timestamp_frequency")。请注意,在 32 位系统上,最多只能传送 64 位时间戳的低 32 位部分(除非启用了 "split_param_values_into_dwords" 参数)。参见 采集缓冲区处理
'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 命令)与 GigE Vision 生产者之间的等待时间(毫秒)。最佳值取决于所用设备的速度和 GigE Vision 生产者所需的额外安全性。如果 GigE Vision 生产者功能强大,则无需延迟。
'device' ' | device:<device id> | unique_name:<unique name> | user_name:<user-defined name> | interface:<interface id> | producer:Esen | device_ip:<device ip> | device_sn:<serial number>', '<device id>' 字符串 动态 返回打开设备(open_framegrabber)时使用的设备参数字符串。
'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" 参数)。
'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>' , '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 整数 动态 显示当前是否有图像等待 GigE Vision 生产者传输。
'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' 'GigEVision2' 字符串 预定义 HALCON 接口的名称。
'num_buffers' <number> 4 整数 预定义 用于图像采集的缓冲区数量。
'num_buffers_await_delivery' <number> 整数 动态 等待 GigE Vision 生产者发送的(图像)缓冲区数量。
'num_buffers_underrun' <number> 整数 动态 自打开设备以来因缓冲队列不足而丢失的缓冲区数量。当 GigE Vision 生产者有新的图像数据可用,但却没有空闲的缓冲区来存储这些数据时,就会出现队列不足。
'port' <port> -1 整数 预定义 该值不会被使用,因此会返回默认值。
'register_<addr>_<len>' 整数 预定义 直接访问寄存器,用于读写整数。数值必须是十六进制,如 0x0938。注意只接受 4 或 8 字节长度的值。设备字节顺序不进行转换。注意: 这是一个危险的功能,用于调试和特殊情况。通常只能使用 XML 中的功能。
'revision' '<revision>' 字符串 预定义 GigEVision2 接口的版本号。
'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 明确允许关闭流功能,即使对于支持流的设备也是如此。
'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 的功能,即设备和 GigE Vision 生产者通过 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有关采集控制一节 。请注意,此算子会启动 GigE Vision 生产者和设备上的采集,并锁定采集期间受保护的功能。如果 grab_image_start 被重复调用,则会在 GigE Vision 生产者和设备上重新开始采集。这意味着缓冲区队列和所有与流相关的统计参数(如 "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" 参数,因为所有 GigE Vision 生产者都无法可靠地支持该参数。如果需要,应用程序需要自行实现其他功能。

算子 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 Examples

该接口有以下示例:

从以前的 GigEVision 接口实现转换

本章旨在帮助用户从旧版本(GigEVision)转换到新版的采集接口(GigEVision2)。直接基于 GigEVision2 接口启动新应用程序的用户可以完全忽略本章内容。

GigEVision2 接口是对以前接口的重大改写,其目标是支持 GigE Vision 2 规范,与 GenICam 标准系列的现代版本完全兼容,并在所有基于 GenICam 的 HALCON 采集接口(特别是 GigEVision2、USB3Vision 和 GenICamTL)中实现相似的用户体验。因此,不可能与该接口的前一版本保持完全向后兼容。

GigEVision2 引入的最重要的新功能: 目前存在的限制,将在今后的接口更新中加以解决: 与打开设备有关的更改(open_framegrabberinfo_framegrabber): 在 GigEVision2 接口版本中,配置采集接口和所连接设备的各种参数发生了变化或被移除。这反映了内部架构的重大变化,现在所有基于 GenICam 的 HALCON 采集接口都采用了 GenICam GenTL 架构模型。参见 获取帧捕获器参数设置帧捕获器参数 中的详细信息。 目前不支持以下回调(set_framegrabber_callback):

故障排除

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

一般情况: 过滤器驱动器(MVTec GigE Vision 流过滤器): GenICam: 如果仍有问题,请联系当地经销商。

您的支持请求需要以下信息,以避免不必要的查询。 请运行 HDevelop 示例 gigevision2_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 的注册商标。此处提及或使用的所有其他品牌名称、设计、服务标志和商标(无论是否注册)均为其各自所有者的财产。