工控编程吧
标题:
上位机HALCON视觉 system系统相关函数介绍
[打印本页]
作者:
qq263946146
时间:
2017-6-13 17:55
标题:
上位机HALCON视觉 system系统相关函数介绍
上位机HALCON视觉 system系统相关函数介绍
(, 下载次数: 2)
上传
点击文件名下载附件
一.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图像对象。
一系列兼容NVIDIA卡可以在这里找到:
http://www.nvidia.com/object/cuda_learn_products.html
。
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下函数
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4