上位机HALCON视觉 system系统相关函数介绍
上位机HALCON视觉 system系统相关函数介绍
一.open_compute_device( : : DeviceIdentifier : DeviceHandle) 函数打开参数DeviceIdentifier指向的电脑设备。 返回结果保存在参数 DeviceHandle.。 通过函数activate_compute_device开关电脑设备DeviceHandle 二.release_compute_device( : : DeviceHandle : ) 关闭一个电脑设备DeviceHandle 三.query_available_compute_devices( : : : DeviceIdentifier)
函数返回可用的电脑设备列表。 使用get_compute_device_info查询一个指定的设备信息。 使用open_compute_device打开HALCON内的设备。 目前只支持OpenCL兼容的GPUs, GPUs支持扩展cl_khr_byte_addressable_store图像对象。 Radeon HD 5000系列的ATI/AMD板卡,或更新的版本也支持; 当前不支持通过Windows远程桌面使用OpenCL,因为Windows远程桌面不允许访问显卡驱动。 你可以使用VNC的解决方案在远程计算机上使用OpenCL。当然你可以在Linux机器上通过SSH使用OpenCL。 建议使用 最新的GPU的图形驱动程序。要在Linux系统上访问GPU,您应是 'video'组的成员。 四. activate_compute_device( : : DeviceHandle : ) 激活一个电脑设备 五. deactivate_compute_device( : : DeviceHandle : ) 停用指定电脑设备DeviceHandle 六. deactivate_all_compute_devices( : : : ) 停用全部的电脑设备 七. get_compute_device_info( : : DeviceIdentifier, InfoName : Info) 获取指定电脑设备的信息 不同于函数get_compute_device_param,此函数查询静态信息,使设备不必打开(参考open_compute_device)和激活(参考activate_compute_device) 八. set_compute_device_param( : : DeviceHandle, ParamName, ParamValue : )设置一个电脑设备的参数 九. get_compute_device_param( : : DeviceHandle, ParamName : ParamValue) 获取电脑设备参数信息 'alloc_pinned' 如果“true”,所有操作符的输出图像矩阵都是在页锁定(所谓的“钉住”)内存中创建的。'asynchronous_execution' 如果“true”,在电脑设备上执行的运算符不等待设备计算完成,但在启动计算之后返回。'buffer_cache_capacity' 计算设备缓冲区缓存的最大大小(以字节为单位)。 'buffer_cache_used' 计算设备缓冲区缓存的当前大小(以字节为单位) 'image_cache_capacity' 计算设备图像缓存的最大大小(以字节为单位)。 'image_cache_used' 计算设备图像缓存的当前大小(以字节为单位)。 'pinned_mem_cache_capacity' 页锁定(内存)内存缓存的最大大小(以字节为单位) 'pinned_mem_cache_used' 页面锁定内存缓存的当前大小(以字节为单位) 十. init_compute_device( : : DeviceHandle, Operators : ) 初始化电脑设备及在参数 Operators 准备一系列的算子。 此外,设备被激活为当前线程使用。 使用get_operator_info测试函数是否可以在计算设备上执行。 十一. release_all_compute_devices( : : : ) 关闭全部电脑设备 十二. count_relation( : : RelationName : NumOfTuples) 在通过传递参数’database'到set_system打开数据库后,HALCON的五个关系数据库之一的条目个数就可以通过此函数获得; HALCON的数据库由五个称作关系的表组成。在这种关系的单个条目称为数组,(不与Halcon元组命名对象数组混淆)。
如果启用,Halcon数据库包含区域数据,图像矩阵和xlds的基本关系,以及HALCON的对象和Halcon数组的容器关系。 HALCON的对象区域和图像由两个关系的元素组成:在区域数据关系中包含一个数组指针的区域。 一个映像还包括一个指向区域数据关系中的元组的指针(如一个区域) 另外还有一个或多个指向矩阵关系中的数组的指针。 如果有多个矩阵指针,则该图像称为多通道图像。
这两个区域和图像称为对象。一个区域可以看作是没有图像矩阵的图像的特殊情况。由于要有效管理内存的原因,区域数据关系和图像矩阵关系的数组将被不同的对象一起使用。 因此,可能有比图像矩阵更多的图像。 只有这两个低级的关系对内存消耗。图像对象(区域和图像)只包含区域和矩阵数据上的引用,因此只需要几个字节的内存。 例程: set_system('database','true') reset_obj_db(512,512,3) count_relation('image',I1) count_relation('region',R1) count_relation('XLD',X1) count_relation('object',O1) count_relation('tuple',T1) read_image(X,'monkey') count_relation('image',I2) count_relation('region',R2) count_relation('XLD',X2) count_relation('object',O2) count_relation('tuple',T2)
* * Result:I1 = 1 (undefined image) * R1 = 2 (full and empty region) * X1 = 0 (no XLD data) * O1 = 2 (full and empty objects) * T1 = 0 (always 0 in the normal mode )
* I2 = 2 (additionally the image 'monkey') * R2 = 2 (read_image uses the full region) *X2 = 0 (no XLD data) * O2 = 3 (additionally the image object X) * T2 = 0.
十三. get_modules( : : : UsedModules, ModuleKey) 获得当前所有函数(算子)使用的模块数量。 每个算子属于一个模块(最大值为32)。每个模块都有一个名字,保存在参数 UsedModules。 基于所使用的模块,生成了许可证管理器所需的密钥。get_modules通常是在一个程序结束后,用来检查使用的模块。
十四. reset_obj_db( : : DefaultImageWidth, DefaultImageHeight, DefaultChannels : ) 用于初始化 HALCON 系统 五个关系(灰度数据,区域数据,xlds,图像对象和tuplets对象)是HALCON图像处理所需要将安装的(参见count_relation)。 如果启用了HALCON数据库(set_system('database','true'))和关系已经存在,所有在关系里的数据项都被释放! 参数defaultimagewidth和defaultimageheight提供全局最大图像尺寸的初始值。 如果第一次创建的对象是一个图像,(例如,read_image),设定值不被使用,如果是小于所创建的对象的大小。 另外,如果要创建的第一个对象是一个区域,新图像大于设置值时,才调整值。 这不是创建或读取的第一个图像的唯一情况:如果创建较大的图像,则全局图像大小将始终被放大。 全局图像大小用于随后打开的窗户(open_window)和内存评估,裁剪区域。 每当剪辑模式启动,会根据全局图像大小(set_system('clip_region'TRUE'))进行区域剪辑。 如果使用不同大小的图像,这可能会导致问题。在这种情况下,只有一个区域小于或等于最大图像大小时才有效; 参数defaultchannels返回一个图像对象通道最频繁的数。 如果使用大部分区域,则该值可设置为0。 如果在一个图像中需要设置比初始设置的更多的信道,则该图像将动态地放大该数字。如果在初始化时设置的通道少于图像所必需的通道,则多余的通道将被设置为未定义。对于用户来说,这似乎是不存在的,但是,内存分配是不必要的。 参数值可通过 get_system.获取; 十四. get_check( : : : Check) 执行get_check用户可以查询什么样的控制方式当前使用与否。Check给出的数组包含控制模式的名称(参见set_check),如果相应的控制无效 前面加一个波浪号(~,例如,“~数据)。 十五. get_error_text( : : ErrorCode : ErrorMessage) 返回相应的HALCON的错误代码错误信息。 这与抛出异常提示文本相同。 如果错误处理是由用户自己编写的操作,函数get_error_text特别有用(参见set_check(::“~give_error”:))。 运行代码查看效果: get_check (Check) dev_set_check ('give_error') dev_error_var (ErrorNum, 0) read_image(image,'fabrik') dev_error_var (ErrorNum, 1) get_error_text (ErrorNum, ErrorMessage)
在C++环境中可这么写 Herror err; char message[MAX_STRING];
set_check("~give_error"); err = send_region(region,socket_id); set_check("give_error"); if (err != H_MSG_TRUE) { get_error_text((Hlong)err,message); fprintf(stderr,"my error message: %s\n",message); exit(1); }
十六. get_extended_error_info( : : : OperatorName, ErrorCode, ErrorMessage) 返回当前线程最新的扩展错误信息 operatorname包含了halcon发送错误代码算子的名称。 ErrorCode 含有实际错误代码和ErrorMessage对应含有错误信息。 如果没有错误代码被设置,或HALCON的错误来自没有扩展的错误信息,OperatorName包含空字符串和ErrorCode设置为0。 请参考指定运算符引用的返回值,来确定函数是否提供和在何种场合提供扩展错误信息。 十七. get_spy( : : Class : Value) 获得HALCON调试工具当前配制信息; 对应的函数还有query_spy.,set_spy,参阅获得更多信息; 十八. query_spy( : : : Classes, Values) 获得HALCON调试工具存在的设置; 十九. set_check( : : Check : ) 开关HALCON的控制模式; 二十. set_spy( : : Class, Value : ) 开关HALCON调试工具的某一功能;
二十一到三十五函数为 HALCON 对Advantech(研华)数字I/O产品的支持,实现应用可选择自己熟悉语言使用研华产品
二十一. control_io_interface( : : IOInterfaceName, Action, Argument : Result) 在 I/O接口执行一个动作。 所支持的参数是特定于接口的,并在相应的I/O接口的文档中列出,这些文档可以在目录'doc/html/reference/io'中找到。 特定值keep_open '在接口卸载时使用。 如果参数Argument设置为“true”,接口保持加载直至HALCON进程终止。如果设置为“false”,一旦设备实例关闭,该接口将被卸载。这是默认行为。 二十二。query_io_interface( : : IOInterfaceName, Query : Result) 获取指定IO设备接口信息; 想要获取的信息通过Query.指定,如果参数传递正确, Result 返回一系列支持值; 一般来说,向参数Query传递interface_name”进行查询,返回所有可用的I/O接口。在这种情况下参数iointerfacename的值被忽略。 请检查目录'doc/html/reference/io' 中关于特定I/O设备接口的文档,其中列出了所有支持的接口特定参数 二十三. open_io_device( : : IOInterfaceName, IODeviceName, GenParamName,GenParamValue : IODeviceHandle) 为指定的设备打开与配制一个IO接口; 设备接口的底层库的库名称指定给iointerfacename。 当配置该设备接口的第一个特定设备时,将动态加载接口库。 具体设备参数IODeviceName自己定义。 可用的名字可以通过query_io_interface查询。 该设备可以通过genparamvalue ,genparamname配置参数。 设备实例通过IODeviceHandle返回。 如果该设备的实例再需要,它应该通过close_io_device被释放和关闭。 打开一个特定的设备后,其传输通道可以通过调用open_io_channel打开。 随后IO通道的值就可以通过函数 read_io_channel和write_io_channel 进行读取或写入; 打开设备实例可以重新用set_io_device_param和get_io_device_param进行设置。 查看目录doc/html/reference/io' 中有关特定I/O设备接口的文档,其中列出了所有支持的设备特定参数。 二十四. close_io_device( : : IODeviceHandle : ) 关闭指定IO设备 二十五.query_io_device( : : IODeviceHandle, IOChannelName, Query : Result) 获取指定IO设备的通道信息 二十六.get_io_device_param( : : IODeviceHandle, ParamName : ParamValue) 获取一IO设备实例的设置; 二十七.set_io_device_param( : : IODeviceHandle, ParamName, ParamValue : ) 设置IO设备实例参数 二十八.control_io_device( : : IODeviceHandle, Action, Argument : Result) 在IO设备上执行一个动作 二十九.open_io_channel( : : IODeviceHandle, IOChannelName, GenParamName,GenParamValue : IOChannelHandle) 打开与配制一个已经打开的IO设备的传输通道; 设备实例必须事先通过open_io_device打开,通过参数iodevicehandle传递进来。 通过传递到IOChannelName的名称,通道自动确认。 可用调用函数query_io_device,传递参数io_channel_name,查询有效的通道名。 通道可以通过参数 GenParamName andGenParamValue配置; 每个传输通道返回保存在参数IOChannelHandle。 如果通道实例不再需要,应该被释放和关闭,通过函数close_io_channel。 此外,通过调用close_io_device关闭设备实例时,它会自动关闭时,。 三十。close_io_channel( : : IOChannelHandle : ) 关闭IO通道 三十一.control_io_channel( : : IOChannelHandle, ParamAction, ParamArgument aramValue) 在传输通道上执行一个动作 三十二.get_io_channel_param( : : IOChannelHandle, ParamName : ParamValue) 获取IO通道的指定参数 三十三.read_io_channel( : : IOChannelHandle : Value, Status) 从指定IO通道读取一个值 ; 通道通过IOChannelHandle指定,可通过open_io_channel打开与配置。 返回值保存在Value; 参数Status返回值信息中的状态。值0表示可以读取相应的值。任何其他状态值都取决于接口。 三十四. set_io_channel_param( : : IOChannelHandle, ParamName, ParamValue : ) 设置IO通道指定的值; 三十五。write_io_channel( : : IOChannelHandle, Value : Status) 向指定IO通道写入一个值 ;
三十六.get_chapter_info( : : Chapter : Info) 给出关于章节算子的相关信息。例如get_chapter_info ('Legacy', Info) 三十七.get_keywords( : : OperatorName : Keywords) 获取参数OperatorName的关键字 三十八.get_operator_info( : : OperatorName, Slot : Information) 获取HALCON算子的相关信息 三十九.get_operator_name( : : Pattern : OperatorNames) 搜索含有参数Pattern指定关键字的算子,如果输入一个空字符串,将返回所有可用算子的名称。 四十. get_param_info(: : OperatorName, ParamName, Slot : Information) 获取算子参数相关的信息 有效的信息形式(槽),可用算子query_param_info获取。 四十一. get_param_names(: : OperatorName : InpObjPar, OutpObjPar, InpCtrlPar,OutpCtrlPar) 获取HALCON算子的参数名 四十二. get_param_num( : : OperatorName : CName, InpObjPar, OutpObjPar, InpCtrlPar,OutpCtrlPar, Type) 返回指定函数的输入和输出对象参数的数量,以及为说明halcon算子的输入和输出控制参数。 以及C函数形式的函数名称(CNAME),和输出参数类型指示操作员是系统操作员还是用户程序。 四十三. get_param_types(: : OperatorName : InpCtrlParType, OutpCtrlParType) 获取HALCON算子控制参数的缺省数据类型 四十四. query_operator_info( : : : Slots) 获取算子slots相关的信息 四十五.query_param_info( : : : Slots) 获取算子slots的在线信息 四十六。search_operator( : : Keyword : OperatorNames) 搜索含有Keyword 的算子 四十七.count_seconds( : : : Seconds) 函数用于测量时间。 每调用返回一个时间值。 两个连续调用的值的差表示时间间隔,单位s。测量时间的方式可以通过set_system('clock_mode ',…)设置 四十八. get_system_time(: : : MSecond, Second, Minute, Hour, Day, YDay, Month,Year) 获取系统当前时间 四十九.system_call( : : Command : ) 执行系统指令 在Windows操作系统上,系统命令可以带前缀“start / B避免等待启动的应用程序。 在类Unix操作系统,如果命令包含空字符串,交互式shell('csh -i)将开始执行,。 五十.wait_seconds( : : Seconds : ) 指定等待Seconds 时间再执行程序,单位s; 五十一.get_aop_info( : : OperatorName, IndexName, IndexValue, InfoName : InfoValue) 返回算子的automatic operatorparallelization (AOP)信息 五十二.optimize_aop( : : OperatorName, IconicType, FileName, ParamName, ParamValue: ) 检查硬件相关自动操作并行化的能力 五十三.query_aop_info( : : OperatorName, IndexName, IndexValue : Name, Value) 获取算子AOP信息的索引结构 五十四. read_aop_knowledge( : : FileName, ParamName, ParamValue : Attributes,OperatorNames) 根据AOP的行为加载硬件知识 五十五.set_aop_info( : : OperatorName, IndexName, IndexValue, InfoName, InfoValue : ) 设置算子AOP信息 五十六. write_aop_knowledge( : : FileName, ParamName, ParamValue : ) 将AOP的硬件相关知识写入文件。 五十七.get_system( : : Query : Information) 获取HALCON系统的当前参数 五十八.set_system( : : SystemParameter, Value : ) 设置系统参数 五十九.open_serial( : : PortName : SerialHandle) 打开一个串口设备 该设备的名称是由参数 PortName确定,由操作系统管理。 在Windows电脑上,常使用“com1到'com4”,而Unix系统的串行设备通常被称为“/dev/tty *”。 串行设备的参数,例如其速度或数据位的数量,在设备打开后被设置为相应设备的系统默认值。可通过set_serial_param改变。 六十.close_serial( : : SerialHandle : ) 关闭一个串行设备 六十一.clear_serial( : : SerialHandle, Channel : ) 清空串口的输入,输出缓存区; 六十二.get_serial_param( : : SerialHandle : BaudRate, DataBits, FlowControl,Parity, StopBits, TotalTimeOut, InterCharTimeOut) 获取串口通讯相关参数 六十三.read_serial( : : SerialHandle, NumCharacters : Data) 从串口读取数据 六十四.set_serial_param( : : SerialHandle, BaudRate, DataBits, FlowControl, Parity,StopBits, TotalTimeOut, InterCharTimeOut : ) 设置串口参数 六十五.write_serial( : : SerialHandle, Data : ) 向串口写入数据 六十六.create_serialized_item_ptr( : : Pointer, Size, Copy : SerializedItemHandle) 创建一个串行化通讯用数据缓存块 六十七.get_serialized_item_ptr( : : SerializedItemHandle : Pointer, Size) 访问串口数据块指针 六十八.fwrite_serialized_item( : : FileHandle, SerializedItemHandle : ) 保存串口数据到文件 六十九.fread_serialized_item( : : FileHandle : SerializedItemHandle) 从文件读取串口数据 七十.clear_serialized_item( : : SerializedItemHandle : ) 删除一个串口数据项
multithreading多线程与sockets套接字多借助自己熟悉的平台完成,HALCON内对应的 函数可参阅菜单栏 算子->system->multithreading或sockets下函数
|