halcon中tuple变量定义

By 笑口常开 at 2018-03-25 • 0人收藏 • 3561人看过
typedef   void*   VOIDP;

/*****************************************************************************/
/* Parameter passing (Control parameters)                                    */
/*****************************************************************************/
#define UNDEF_PAR        0       /* Parameter type: no defined type          */
#define LONG_PAR         1       /* Parameter type: long                     */
#define HANDLE_PAR       LONG_PAR /* Parameter type: long                     */
#define FLOAT_PAR        2       /* Parameter type: float                    */
#define STRING_PAR       4       /* Parameter type: string                   */
/* Possible parameter types for a single element: */
#define ANY_ELEM    (LONG_PAR|FLOAT_PAR|STRING_PAR)
#define INT_PAR      LONG_PAR    /* Parameter type: int                      */
#define DOUBLE_PAR  FLOAT_PAR    /* Parameter type: double                   */
#define MIXED_PAR        8       /* Parameter type: Hcpar                    */
#define MAX_TUPLE_TYPE   MIXED_PAR/* maximum type number                     */
/* Possible parameter types for a tuple: */
#define ANY_TUPLE   (LONG_PAR|FLOAT_PAR|STRING_PAR|MIXED_PAR)
/*                      16          reserved */
/*                      32          reserved */
#define POINTER_PAR     64       /* Parameter type: pointer to any type      */
#define TUPLE_PAR      128       /* Parameter type: pointer to tuple         */
#define MAX_PAR     MIXED_PAR


/*****************************************************************************/
/* Constants and basic types                                                 */
/*****************************************************************************/
#define MAX_TUPLE_LENGTH 1000000   /* max. length of a tuple                 */
#define MAX_STRING       1024      /* max. length of a string                */

typedef UINT4            Herror;   /* Type function values (error messages)  */

typedef  long *Hkey;               /* primary key in DB (for iconic objects) */
#define  UNDEF_KEY   (Hkey)(0)     /* Undefined iconic object                */


/*****************************************************************************/
/* Structures for passing parameters between language interface and core     */
/*****************************************************************************/
#ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
/* sets the struct member alignment to avoid problems if
 * the settings of the user differ to those of the HALCON
 * version. (8 is the default alignment, generally) */
# pragma pack(push,8)
#endif
typedef union
{
  INT4_8  l;              /* 4/8 byte integer                       (input)  */
  double  d;              /* 8 byte real                            (input)  */
  char    *s;             /* pointer to strings                     (input)  */
  double  f;              /* 8 byte real (legacy 11.0)              (input)  */
} Hpar;                   /* parameter passing for the C interface           */

typedef union
{
  INT4_8  *l;             /* 4/8 byte integer                       (output) */
  double  *d;             /* 8 byte real,                           (output) */
  char    *s;             /* pointer to strings                     (output) */
  VOIDP   p;              /* pointer to var. of any type (e.g. tuple)(output)*/
  double  *f;             /* 8 byte real, (legacy 11.0)             (output) */
} Hvar;                   /* parameter passing for the C interface           */

typedef struct
{
  Hpar   par;             /* values                                          */
  HINT   type;            /* type flag                                       */
} Hcpar;                  /* parameter passing for the C interface           */

typedef struct
{
  Hvar   var;             /* values                                          */
  HINT   type;            /* type flag                                       */
} Hcvar;                  /* parameter passing for the C interface           */

typedef union {
  INT4_8 *l;
  double *d;
  char   **s;
  Hcpar  *cpar;
} Hcelem; /* pure type array */


typedef struct HCTUPLE
{
  Hpar  val;
  HINT  type;
  char  pad[sizeof(Hcpar)-sizeof(Hpar)-sizeof(HINT)]; /* padding for data
                                * structure alignement to enable val and type
                                * to get used as Hcpar structure */
  INT4_8 num;                   /* number of set array elements */
  INT4_8 capacity;              /* allocated array length */
  HINT  free;                   /* free array elem when destroying tuple? */
  Hcelem elem;                  /* the actual array */
} Hctuple;
#define HCTUPLE_INITIALIZER {{0},UNDEF_PAR,{0},0,0,0,{NULL}}

typedef struct
{
  Hcvar   *variables;     /* variables (of application) to write back values */
  Hcpar   *element;       /* tuple element(s)                                */
  INT4_8  num_el;         /* number of used elements                         */
  INT4_8  length;         /* total length of array (incl. unused elements)   */
} Hcvtuple;               /* for passing control parameter variables from    */
    
typedef struct                /* Tuple representation           */
{
  Hcpar   *tuple;
  INT_PTR length;
} Htuple;


11 个回复 | 最后更新于 2018-04-02
2018-03-26   #1

http://www.mvtec.com/doc/halcon/13/en/tuple_type.html

2018-03-28   #2
/* INT4_8 is 4 bytes on all 32-bit and 8 bytes on all 64-bit platforms */
#ifndef _WIN64  /* LP64 data model */
#  if !defined(_TMS320C6X)
#    define HINT4_8       long      /* workaround for preprocessor bug */
#    define INT4_8        HINT4_8
#    define INT4_8_FORMAT "l"
#    define INT4_8_MIN    LONG_MIN
#    define INT4_8_MAX    LONG_MAX
#    define UINT4_8_MIN   0UL
#    define UINT4_8_MAX   ULONG_MAX
#  else         /* _TMS320C6X long is really 40Bit, but sizeof(long)=8 */
#    define INT4_8        int
#    define INT4_8_FORMAT ""
#    define INT4_8_MIN    INT_MIN
#    define INT4_8_MAX    INT_MAX
#    define UINT4_8_MIN   0
#    define UINT4_8_MAX   UINT_MAX
#  endif
#else          /* LLP64 data model */
#  define INT4_8        __int64
#  define INT4_8_FORMAT "I64"
#  define INT4_8_MIN    _I64_MIN
#  define INT4_8_MAX    _I64_MAX
#  define UINT4_8_MIN   0UL
#  define UINT4_8_MAX   _UI64_MAX
#endif


2018-03-28   #3

Hlong* for integer arrays (HALCON type LONG_PAR),

double* for floating point arrays (DOUBLE_PAR) or

char** for string arrays (strings, STRING_PAR)


2018-03-28   #4
void create_tuple(tuple,length)     or     macro CT(tuple,length)
       Htuple    *tuple;
       Hlong      length;
       /* creates a MIXED_PAR tuple that can hold 'length' entries h  */

  void create_tuple_type(tuple,length,type)    
       Htuple    *tuple;
       Hlong      length;
       Hlong      type
       /* creates a tuple of 'type' that can hold 'length' entries. 
        * 'type' can hold either LONG_PAR, DOUBLE_PAR, STRING_PAR,  
        * or MIXED_PAR.                                              */

  void destroy_tuple(tuple)           or     macro DT(tuple)
       Htuple    tuple;
       /* deletes a tuple (if the tuple contains string entries,     */
       /* the memory allocated by the strings is freed, too)         */

  Hlong length_tuple(tuple)            or     macro LT(tuple)
       Htuple    tuple;
       /* returns the length of a tuple (number of entries)           */

  void copy_tuple(input,output)      or     macro CPT(input,output)
       Htuple    input;
       Htuple    *output;
       /* creates a tuple and copies the entries of the input tuple  */

  void resize_tuple(htuple,new_length) or   macro RT(htuple,new_length)
       Htuple    *htuple;
       Hlong      new_length;
       /* creates a tuple with the new size and copies the previous entries */
Figure 21.2: HALCON/C Htuple procedures (part one).

   void create_tuple_i(tuple,value)
       Htuple    *tuple;
       Hlong      val;
       /* creates a tuple with specifified integer value             */

  void create_tuple_d(tuple,value)
       Htuple    *tuple;
       double    val;
       /* creates a tuple with specifified double value              */

  void create_tuple_d(tuple,value)
       Htuple    *tuple;
       char      *val;
       /* creates a tuple with specifified string value              */

  void reuse_tuple_i(tuple,val)
       Htuple    *tuple;
       Hlong      val;
       /* reuses a tuple with specifified integer value              */

  void reuse_tuple_d(tuple,val)
       Htuple    *tuple;
       double    val;
       /* reuses a tuple with specifified double value               */

  void reuse_tuple_s(tuple,val)
       Htuple    *tuple;
       char      *val;
       /* reuses a tuple with specifified string value               */
Figure 21.3: HALCON/C Htuple procedures (part two).


2018-03-28   #5
void set_i(tuple,val,index)         or     macro SI(tuple,val,index)
       Htuple    tuple;
       Hlong      val;
       Hlong      index;
       /* inserts an integer with value 'val' into a tuple at        */
       /* position 'index' ('index' in [0,length_tuple(tuple) - 1])  */

  void set_d(tuple,val,index)         or     macro SD(tuple,val,index) 
       Htuple    tuple;
       double    val;
       Hlong      index;
       /* inserts a double with value 'val' into a tuple at          */
       /* position 'index' ('index' in [0,length_tuple(tuple) - 1])  */

  void set_s(tuple,val,index)         or     macro SS(tuple,val,index)
       Htuple    tuple;
       char      *val;
       Hlong      index;
       /* inserts a copy of string 'val' into a tuple at             */
       /* position 'index' ('index' in [0,length_tuple(tuple) - 1]). */
       /* The memory necessary for the string is allocated by set_s. */

   int get_type(tuple,index)           or     macro GT(tuple,index)
       Htuple    tuple;
       Hlong      index;
       /* returns the type of the value at position 'index' in the     */
       /* tuple. Possible values: LONG_PAR, DOUBLE_PAR or STRING_PAR   */

   Hlong get_i(tuple,index)             or     macro GI(tuple,index)
       Htuple    tuple;
       Hlong      index;
       /* returns the integer at position 'index' in the tuple          */
       /* (a type error results in a run time error)                    */

   double get_d(tuple,index)           or     macro GD(tuple,index)
          Htuple    tuple;
          Hlong      index;
       /* returns the floating point number at position 'index' in the  */
       /* tuple. (a type error results in a run time error)             */

   char *get_s(tuple,index)            or     macro GS(tuple,index)
        Htuple    tuple;
        Hlong      index;
       /* returns the pointer(!) to the string at position 'index' in   */
       /* the tuple. (a type error results in a run time error)         */
       /* Attention: all indices must be in [0,length_tuple(tuple) - 1] */
Figure 21.4: HALCON/C Htuple procedures (part three).


2018-03-29   #6

搞定:

原来dll中是有这么个函数可以操作tuple的,包含了创建/设置/销毁.....

import console
console.open()

dll = ..raw.loadDll("\res\halconc.dll","AArHalconC","cdecl");
F_create_tuple= dll.api("F_create_tuple","void(pointer& T, int length)");
F_create_tuple_i= dll.api("F_create_tuple_i","void(pointer T, int val)");
F_create_tuple_s=dll.api("F_create_tuple_s","void(pointer T, string val)");
F_get_s=dll.api("F_get_s","string(pointer T, int index)");
F_set_s=dll.api("F_set_s","void(pointer T, string val,int index)");
F_get_i=dll.api("F_get_i","int(pointer T, int index)");
var ctup = raw.buffer(1000);

F_create_tuple(ctup,5);
//console.varDump(ctup)
//F_create_tuple_i(ctup,5);
//F_create_tuple_s(ctup,"abcde");
console.varDump(ctup)
F_set_s(ctup,"abc",0);
F_set_s(ctup,"def",1);
F_set_s(ctup,"ghi",2);
F_set_s(ctup,"jkl",3);
F_set_s(ctup,"mnu",4);
var ret = F_get_s(ctup,2);
console.varDump(ret)
var ret = F_get_s(ctup,1);
console.varDump(ret)
F_set_s(ctup,"hahabb",1);
var ret = F_get_s(ctup,1);
console.varDump(ret)
var ret = F_get_s(ctup,4);
console.varDump(ret)
console.pause(true);


2018-04-01   #7

blob.png

2018-04-01   #8

QQ图片20180401171743.png

2018-04-01   #9
import console
console.open()

import com;
var HsystemX = com.CreateObject("{6ebd90de-d219-11d2-ade5-0000c00f4ef9}") 

var que = com.Variant("processor_num");
var ret = HsystemX.GetSystem( que );
console.varDump(ret)

var que = com.Variant("version");
var ret = HsystemX.GetSystem( que );
console.varDump(ret)

var info //= com.Variant();
var que = com.Variant("processor_num");
var HOperatorSetX = com.CreateObject("{6ebd90e2-d219-11d2-ade5-0000c00f4ef9}")
var ret2 = HOperatorSetX.GetSystem( que ,null);
console.varDump(ret2)


console.pause(true);


2018-04-02   #10
import com.activeX;
//注册控件
com.activeX.regsvr32("\res\halconx.dll")
//调用控件
mainForm.button4.oncommand = function(id,event){
	var filepath = com.Variant("res/double_circle.png");
	var Image = HOperatorSetX.ReadImage(null,filepath);
	console.varDump(Image)
	var ww,ll = HOperatorSetX.GetImageSize(Image,null,null);
	console.varDump(ww)
	console.varDump(ll)
}


2018-04-02   #11

halcon的com控件必须要注册才能使用, 用com.lite()不行.

import console
console.open()
//import com.activeX;
import com.lite;
import com;

var comdll = com.lite("\res\halconx.dll");
comdll.registerServer();
//注册控件
//com.activeX.regsvr32("\res\halconx.dll")
//调用控件
mainForm.button.oncommand = function(id,event){
    HOperatorSetX = com.CreateObject("{6ebd90e2-d219-11d2-ade5-0000c00f4ef9}")
    console.varDump(HOperatorSetX)
    var filepath = com.Variant("res/double_circle.png");
    var Image = HOperatorSetX.ReadImage(filepath);
    //console.varDump(Image)
    var ww,ll = HOperatorSetX.GetImageSize(Image);
    console.varDump(ww)
    console.varDump(ll)
}

mainForm.button2.oncommand = function(id,event){
	HImageX = com.CreateObject("{6EBD90E7-D219-11D2-ADE5-0000C00F4EF9}")
    var filepath = com.Variant("res/double_circle.png");
    HImageX.ReadImage(filepath);
    var ww,ll = HImageX.GetImageSize(null,null);
    console.varDump(ww)
    console.varDump(ll)
}


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...