Hex Artifact Content
Not logged in

Artifact 265ee1b5459cd2cbac01d957a787d508383ea86f:

Wiki page [topcua] by chw 2022-11-12 05:48:14.
0000: 44 20 32 30 32 32 2d 31 31 2d 31 32 54 30 35 3a  D 2022-11-12T05:
0010: 34 38 3a 31 34 2e 34 35 33 0a 4c 20 74 6f 70 63  48:14.453.L topc
0020: 75 61 0a 50 20 63 32 32 65 65 36 35 36 33 65 63  ua.P c22ee6563ec
0030: 33 64 38 61 31 31 36 34 39 62 64 62 64 66 35 65  3d8a11649bdbdf5e
0040: 35 66 63 66 32 35 64 35 63 61 32 34 65 0a 55 20  5fcf25d5ca24e.U 
0050: 63 68 77 0a 57 20 36 32 38 35 33 0a 3c 68 32 3e  chw.W 62853.<h2>
0060: 6f 70 63 75 61 20 63 6f 6d 6d 61 6e 64 3c 2f 68  opcua command</h
0070: 32 3e 0d 0a 0d 0a 3c 68 33 3e 4e 61 6d 65 3c 2f  2>....<h3>Name</
0080: 68 33 3e 0d 0a 0d 0a 3c 62 3e 6f 70 63 75 61 3c  h3>....<b>opcua<
0090: 2f 62 3e 20 2d 20 54 63 6c 20 62 69 6e 64 69 6e  /b> - Tcl bindin
00a0: 67 20 74 6f 20 74 68 65 20 4f 50 43 2f 55 41 20  g to the OPC/UA 
00b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
00c0: 66 20 3c 62 3e 68 74 74 70 3a 2f 2f 77 77 77 2e  f <b>http://www.
00d0: 6f 70 65 6e 36 32 35 34 31 2e 6f 72 67 3c 2f 62  open62541.org</b
00e0: 3e 0d 0a 0d 0a 3c 68 33 3e 53 79 6e 6f 70 73 69  >....<h3>Synopsi
00f0: 73 3c 2f 68 33 3e 0d 0a 0d 0a 3c 74 74 3e 70 61  s</h3>....<tt>pa
0100: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 74 6f  ckage require to
0110: 70 63 75 61 3c 2f 74 74 3e 3c 62 72 3e 0d 0a 3c  pcua</tt><br>..<
0120: 74 74 3e 6f 70 63 75 61 20 3c 69 3e 63 6d 64 3c  tt>opcua <i>cmd<
0130: 2f 69 3e 20 3f 3c 69 3e 61 72 67 3c 2f 69 3e 3f  /i> ?<i>arg</i>?
0140: 3c 2f 74 74 3e 3c 62 72 3e 0d 0a 0d 0a 3c 68 33  </tt><br>....<h3
0150: 3e 44 65 73 63 72 69 70 74 69 6f 6e 3c 2f 68 33  >Description</h3
0160: 3e 0d 0a 0d 0a 54 68 69 73 20 63 6f 6d 6d 61 6e  >....This comman
0170: 64 20 70 72 6f 76 69 64 65 73 20 73 65 76 65 72  d provides sever
0180: 61 6c 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 6f  al operations to
0190: 20 6d 61 6e 61 67 65 20 61 6e 64 20 63 6f 6d 6d   manage and comm
01a0: 75 6e 69 63 61 74 65 20 75 73 69 6e 67 20 74 68  unicate using th
01b0: 65 20 4f 50 43 2f 55 41 20 69 6d 70 6c 65 6d 65  e OPC/UA impleme
01c0: 6e 74 61 74 69 6f 6e 20 6f 66 20 3c 62 3e 68 74  ntation of <b>ht
01d0: 74 70 3a 2f 2f 77 77 77 2e 6f 70 65 6e 36 32 35  tp://www.open625
01e0: 34 31 2e 6f 72 67 3c 2f 62 3e 2e 20 49 74 20 69  41.org</b>. It i
01f0: 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 63  s available on c
0200: 6f 6d 6d 6f 6e 20 50 4f 53 49 58 20 61 6e 64 20  ommon POSIX and 
0210: 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
0220: 73 2e 20 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f 69  s. <tt><i>cmd</i
0230: 3e 3c 2f 74 74 3e 20 69 6e 64 69 63 61 74 65 73  ></tt> indicates
0240: 20 77 68 69 63 68 20 6f 70 65 72 61 74 69 6f 6e   which operation
0250: 20 20 74 6f 20 63 61 72 72 79 20 6f 75 74 2e 20    to carry out. 
0260: 41 6e 79 20 75 6e 69 71 75 65 20 61 62 62 72 65  Any unique abbre
0270: 76 69 61 74 69 6f 6e 20 66 6f 72 20 3c 74 74 3e  viation for <tt>
0280: 3c 69 3e 63 6d 64 3c 2f 69 3e 3c 2f 74 74 3e 20  <i>cmd</i></tt> 
0290: 69 73 20 61 63 63 65 70 74 61 62 6c 65 2e 20 54  is acceptable. T
02a0: 68 65 20 76 61 6c 69 64 20 63 6f 6d 6d 61 6e 64  he valid command
02b0: 73 20 61 72 65 3a 0d 0a 0d 0a 3c 74 74 3e 6f 70  s are:....<tt>op
02c0: 63 75 61 20 61 63 6c 20 3c 69 3e 68 61 6e 64 6c  cua acl <i>handl
02d0: 65 20 3f 75 73 65 72 20 70 61 73 73 20 2e 2e 2e  e ?user pass ...
02e0: 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20  ?</i></tt>....  
02f0: 20 20 4d 6f 64 69 66 69 65 73 20 74 68 65 20 75    Modifies the u
0300: 73 65 72 2f 70 61 73 73 77 6f 72 64 20 62 61 73  ser/password bas
0310: 65 64 20 61 63 63 65 73 73 20 63 6f 6e 74 72 6f  ed access contro
0320: 6c 20 6c 69 73 74 20 6f 66 20 74 68 65 20 73 65  l list of the se
0330: 72 76 65 72 20 6f 62 6a 65 63 74 20 20 3c 74 74  rver object  <tt
0340: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
0350: 74 74 3e 2e 20 54 68 69 73 20 63 6f 6d 6d 61 6e  tt>. This comman
0360: 64 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  d must be called
0370: 20 61 66 74 65 72 20 74 68 65 20 73 65 72 76 65   after the serve
0380: 72 20 6f 62 6a 65 63 74 20 68 61 73 20 62 65 65  r object has bee
0390: 6e 20 63 72 65 61 74 65 64 20 28 73 65 65 20 3c  n created (see <
03a0: 74 74 3e 6f 70 63 75 61 20 6e 65 77 20 73 65 72  tt>opcua new ser
03b0: 76 65 72 3c 2f 74 74 3e 29 20 61 6e 64 20 62 65  ver</tt>) and be
03c0: 66 6f 72 65 20 69 74 20 69 73 20 70 75 74 20 69  fore it is put i
03d0: 6e 74 6f 20 6f 70 65 72 61 74 69 6f 6e 20 28 73  nto operation (s
03e0: 65 65 20 3c 74 74 3e 6f 70 63 75 61 20 73 74 61  ee <tt>opcua sta
03f0: 72 74 3c 2f 74 74 3e 29 2e 0d 0a 0d 0a 3c 74 74  rt</tt>).....<tt
0400: 3e 6f 70 63 75 61 20 61 64 64 20 3c 69 3e 68 61  >opcua add <i>ha
0410: 6e 64 6c 65 3c 2f 69 3e 20 44 61 74 61 54 79 70  ndle</i> DataTyp
0420: 65 20 3c 69 3e 6e 6f 64 65 69 64 20 70 61 72 65  e <i>nodeid pare
0430: 6e 74 20 72 65 66 74 79 70 65 20 62 72 6e 61 6d  nt reftype brnam
0440: 65 20 3f 61 74 74 72 73 3f 3c 2f 69 3e 3c 2f 74  e ?attrs?</i></t
0450: 74 3e 0d 0a 0d 0a 20 20 20 20 41 64 64 73 20 61  t>....    Adds a
0460: 6e 20 6e 65 77 20 6e 6f 64 65 20 6f 66 20 6e 6f  n new node of no
0470: 64 65 20 63 6c 61 73 73 20 3c 74 74 3e 44 61 74  de class <tt>Dat
0480: 61 54 79 70 65 3c 2f 74 74 3e 20 69 6e 20 74 68  aType</tt> in th
0490: 65 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e  e object <tt><i>
04a0: 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20  handle</i></tt> 
04b0: 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
04c0: 6e 6f 64 65 20 69 64 65 6e 74 69 66 65 72 2e 20  node identifer. 
04d0: 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74  The parameter <t
04e0: 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f 69 3e 3c  t><i>nodeid</i><
04f0: 2f 74 74 3e 20 69 73 20 74 68 65 20 72 65 71 75  /tt> is the requ
0500: 65 73 74 65 64 20 6e 65 77 20 6e 6f 64 65 20 69  ested new node i
0510: 64 65 6e 74 69 66 69 65 72 20 6f 66 20 74 68 65  dentifier of the
0520: 20 20 6e 6f 64 65 20 20 74 6f 20 20 62 65 20 20    node  to  be  
0530: 63 72 65 61 74 65 64 2e 20 3c 74 74 3e 3c 69 3e  created. <tt><i>
0540: 70 61 72 65 6e 74 3c 2f 69 3e 3c 2f 74 74 3e 20  parent</i></tt> 
0550: 69 73 20 74 68 65 20 70 61 72 65 6e 74 20 6e 6f  is the parent no
0560: 64 65 20 69 64 65 6e 74 69 66 69 65 72 20 61 6e  de identifier an
0570: 64 20 3c 74 74 3e 3c 69 3e 72 65 66 74 79 70 65  d <tt><i>reftype
0580: 3c 2f 69 3e 3c 2f 74 74 3e 20 74 68 65 20 72 65  </i></tt> the re
0590: 66 65 72 65 6e 63 65 20 74 79 70 65 20 6f 72 20  ference type or 
05a0: 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 20  node identifier 
05b0: 6f 66 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  of the reference
05c0: 20 62 65 74 77 65 65 6e 20 74 68 65 20 70 61 72   between the par
05d0: 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 77 20  ent and the new 
05e0: 6e 6f 64 65 2e 20 3c 74 74 3e 3c 69 3e 62 72 6e  node. <tt><i>brn
05f0: 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20  ame</i></tt> is 
0600: 74 68 65 20 62 72 6f 77 73 65 20 6e 61 6d 65 20  the browse name 
0610: 28 73 65 65 20 73 65 63 74 69 6f 6e 20 3c 62 3e  (see section <b>
0620: 51 75 61 6c 69 66 69 65 64 20 4e 61 6d 65 73 3c  Qualified Names<
0630: 2f 62 3e 29 20 6f 66 20 74 68 65 20 6e 65 77 20  /b>) of the new 
0640: 6e 6f 64 65 2e 20 54 68 65 20 6f 70 74 69 6f 6e  node. The option
0650: 61 6c 20 3c 74 74 3e 3c 69 3e 61 74 74 72 73 3c  al <tt><i>attrs<
0660: 2f 69 3e 3c 2f 74 74 3e 20 70 61 72 61 6d 65 74  /i></tt> paramet
0670: 65 72 20 73 70 65 63 69 66 69 65 73 20 61 74 74  er specifies att
0680: 72 69 62 75 74 65 73 20 66 6f 72 20 74 68 65 20  ributes for the 
0690: 6e 65 77 20 6e 6f 64 65 20 69 6e 20 66 6f 72 6d  new node in form
06a0: 20 6f 66 20 61 20 64 69 63 74 69 6f 6e 61 72 79   of a dictionary
06b0: 20 28 73 65 65 20 3c 74 74 3e 6f 70 63 75 61 20   (see <tt>opcua 
06c0: 61 74 74 72 20 64 65 66 61 75 6c 74 3c 2f 74 74  attr default</tt
06d0: 3e 29 2e 20 49 66 20 69 74 20 69 73 20 6f 6d 69  >). If it is omi
06e0: 74 74 65 64 2c 20 64 65 66 61 75 6c 74 20 76 61  tted, default va
06f0: 6c 75 65 73 20 20 61 72 65 20 75 73 65 64 2e 20  lues  are used. 
0700: 54 68 65 20 3c 74 74 3e 3c 69 3e 44 69 73 70 6c  The <tt><i>Displ
0710: 61 79 4e 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e 20  ayName</i></tt> 
0720: 61 74 74 72 69 62 75 74 65 20 69 66 20 6c 65 66  attribute if lef
0730: 74 20 65 6d 70 74 79 20 69 73 20 70 72 65 73 65  t empty is prese
0740: 74 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 70 61  t to the name pa
0750: 72 74 20 6f 66 20 74 68 65 20 62 72 6f 77 73 65  rt of the browse
0760: 20 6e 61 6d 65 20 70 61 72 61 6d 65 74 65 72 2e   name parameter.
0770: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 61 64  ....<tt>opcua ad
0780: 64 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20  d <i>handle</i> 
0790: 4d 65 74 68 6f 64 7c 53 69 6d 70 6c 65 4d 65 74  Method|SimpleMet
07a0: 68 6f 64 20 3c 69 3e 6e 6f 64 65 69 64 20 70 61  hod <i>nodeid pa
07b0: 72 65 6e 74 20 72 65 66 74 79 70 65 20 6f 75 74  rent reftype out
07c0: 61 72 67 73 20 62 72 6e 61 6d 65 20 69 6e 61 72  args brname inar
07d0: 67 73 20 63 6d 64 20 3f 61 74 74 72 73 3f 3c 2f  gs cmd ?attrs?</
07e0: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 41  i></tt>....    A
07f0: 64 64 73 20 61 6e 20 6e 65 77 20 6e 6f 64 65 20  dds an new node 
0800: 6f 66 20 6e 6f 64 65 20 63 6c 61 73 73 20 3c 74  of node class <t
0810: 74 3e 4d 65 74 68 6f 64 3c 2f 74 74 3e 20 69 6e  t>Method</tt> in
0820: 20 74 68 65 20 6f 62 6a 65 63 74 20 3c 74 74 3e   the object <tt>
0830: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
0840: 74 3e 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  t> and returns t
0850: 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 65  he node identife
0860: 72 2e 20 49 6e 20 74 68 65 20 3c 74 74 3e 53 69  r. In the <tt>Si
0870: 6d 70 6c 65 4d 65 74 68 6f 64 3c 2f 74 74 3e 20  mpleMethod</tt> 
0880: 63 6f 6d 6d 61 6e 64 20 66 6f 72 6d 20 74 68 65  command form the
0890: 20 70 61 72 61 6d 65 74 65 72 20 3c 74 74 3e 3c   parameter <tt><
08a0: 69 3e 6f 75 74 61 72 67 73 3c 2f 69 3e 3c 2f 74  i>outargs</i></t
08b0: 74 3e 20 64 65 73 63 72 69 62 65 73 20 74 68 65  t> describes the
08c0: 20 6f 75 74 70 75 74 20 61 72 67 75 6d 65 6e 74   output argument
08d0: 73 20 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 20  s of the method 
08e0: 61 73 20 61 20 6c 69 73 74 20 6f 66 20 7a 65 72  as a list of zer
08f0: 6f 20 6f 72 20 6d 6f 72 65 20 70 61 69 72 73 20  o or more pairs 
0900: 6f 66 20 64 61 74 61 20 74 79 70 65 20 61 6e 64  of data type and
0910: 20 61 72 67 75 6d 65 6e 74 20 6e 61 6d 65 73 2e   argument names.
0920: 20 54 6f 20 66 6f 72 63 65 20 61 6e 20 61 72 67   To force an arg
0930: 75 6d 65 6e 74 20 74 6f 20 62 65 20 61 20 73 63  ument to be a sc
0940: 61 6c 61 72 2c 20 74 68 65 20 61 72 67 75 6d 65  alar, the argume
0950: 6e 74 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 20  nt name must be 
0960: 70 72 65 66 69 78 65 64 20 77 69 74 68 20 61 6e  prefixed with an
0970: 20 65 78 63 6c 61 6d 61 74 69 6f 6e 20 6d 61 72   exclamation mar
0980: 6b 2e 20 54 6f 20 66 6f 72 63 65 20 61 6e 20 61  k. To force an a
0990: 72 67 75 6d 65 6e 74 20 74 6f 20 62 65 20 61 6e  rgument to be an
09a0: 20 61 72 72 61 79 2c 20 74 68 65 20 61 72 67 75   array, the argu
09b0: 6d 65 6e 74 20 6e 61 6d 65 20 6d 75 73 74 20 62  ment name must b
09c0: 65 20 70 72 65 66 69 78 65 64 20 77 69 74 68 20  e prefixed with 
09d0: 61 6e 20 61 73 74 65 72 69 73 6b 2e 20 4c 69 6b  an asterisk. Lik
09e0: 65 77 69 73 65 2c 20 3c 74 74 3e 3c 69 3e 69 6e  ewise, <tt><i>in
09f0: 61 72 67 73 3c 2f 69 3e 3c 2f 74 74 3e 20 64 65  args</i></tt> de
0a00: 73 63 72 69 62 65 73 20 74 68 65 20 69 6e 70 75  scribes the inpu
0a10: 74 20 61 72 67 75 6d 65 6e 74 73 20 6f 66 20 74  t arguments of t
0a20: 68 65 20 6d 65 74 68 6f 64 20 77 69 74 68 20 69  he method with i
0a30: 64 65 6e 74 69 63 61 6c 20 70 72 65 66 69 78 20  dentical prefix 
0a40: 72 75 6c 65 73 2e 20 49 6e 20 74 68 65 20 3c 74  rules. In the <t
0a50: 74 3e 4d 65 74 68 6f 64 3c 2f 74 74 3e 20 63 6f  t>Method</tt> co
0a60: 6d 6d 61 6e 64 20 66 6f 72 6d 2c 20 62 6f 74 68  mmand form, both
0a70: 20 3c 74 74 3e 3c 69 3e 6f 75 74 61 72 67 73 3c   <tt><i>outargs<
0a80: 2f 69 3e 3c 2f 74 74 3e 20 61 6e 64 20 3c 74 74  /i></tt> and <tt
0a90: 3e 3c 69 3e 69 6e 61 72 67 73 3c 2f 69 3e 3c 2f  ><i>inargs</i></
0aa0: 74 74 3e 20 6d 75 73 74 20 62 65 20 70 72 6f 76  tt> must be prov
0ab0: 69 64 65 64 20 61 73 20 6c 69 73 74 73 20 6f 66  ided as lists of
0ac0: 20 64 69 63 74 73 20 77 69 74 68 20 74 68 65 20   dicts with the 
0ad0: 74 65 6d 70 6c 61 74 65 20 6f 62 74 61 69 6e 65  template obtaine
0ae0: 64 20 66 72 6f 6d 20 3c 74 74 3e 6f 70 63 75 61  d from <tt>opcua
0af0: 20 74 79 70 65 73 20 65 6d 70 74 79 20 3c 69 3e   types empty <i>
0b00: 41 72 67 75 6d 65 6e 74 3c 2f 69 3e 3c 2f 74 74  Argument</i></tt
0b10: 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72  >. The parameter
0b20: 20 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f 69 3e 3c   <tt><i>cmd</i><
0b30: 2f 74 74 3e 20 69 73 20 74 68 65 20 54 63 6c 20  /tt> is the Tcl 
0b40: 63 61 6c 6c 62 61 63 6b 20 74 6f 20 68 61 6e 64  callback to hand
0b50: 6c 65 20 74 68 65 20 6d 65 74 68 6f 64 20 69 6e  le the method in
0b60: 76 6f 63 61 74 69 6f 6e 2c 20 73 65 65 20 73 65  vocation, see se
0b70: 63 74 69 6f 6e 20 3c 62 3e 4d 65 74 68 6f 64 20  ction <b>Method 
0b80: 43 61 6c 6c 62 61 63 6b 73 3c 2f 62 3e 20 66 6f  Callbacks</b> fo
0b90: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
0ba0: 6f 6e 2e 20 46 6f 72 20 74 68 65 20 6f 74 68 65  on. For the othe
0bb0: 72 20 70 61 72 61 6d 65 74 65 72 73 2c 20 72 65  r parameters, re
0bc0: 66 65 72 20 74 6f 20 3c 74 74 3e 6f 70 63 75 61  fer to <tt>opcua
0bd0: 20 61 64 64 20 44 61 74 61 54 79 70 65 3c 2f 74   add DataType</t
0be0: 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61  t>.....<tt>opcua
0bf0: 20 61 64 64 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f   add <i>handle</
0c00: 69 3e 20 4e 61 6d 65 73 70 61 63 65 20 3c 69 3e  i> Namespace <i>
0c10: 6e 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d  name</i></tt>...
0c20: 0a 20 20 20 20 41 64 64 73 20 74 68 65 20 6e 65  .    Adds the ne
0c30: 77 20 6e 61 6d 65 73 70 61 63 65 20 3c 74 74 3e  w namespace <tt>
0c40: 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e  <i>name</i></tt>
0c50: 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 20 6f   to the server o
0c60: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
0c70: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e 64  dle</i></tt> and
0c80: 20 72 65 74 75 72 6e 73 20 61 20 6e 75 6d 65 72   returns a numer
0c90: 69 63 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f  ic identifier fo
0ca0: 72 20 74 68 69 73 20 6e 61 6d 65 73 70 61 63 65  r this namespace
0cb0: 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 61  .....<tt>opcua a
0cc0: 64 64 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e  dd <i>handle</i>
0cd0: 20 4f 62 6a 65 63 74 20 3c 69 3e 6e 6f 64 65 69   Object <i>nodei
0ce0: 64 20 70 61 72 65 6e 74 20 72 65 66 74 79 70 65  d parent reftype
0cf0: 20 62 72 6e 61 6d 65 20 3f 74 79 70 65 69 64 20   brname ?typeid 
0d00: 61 74 74 72 73 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d  attrs?</i></tt>.
0d10: 0a 0d 0a 20 20 20 20 41 64 64 73 20 61 6e 20 6e  ...    Adds an n
0d20: 65 77 20 6e 6f 64 65 20 6f 66 20 6e 6f 64 65 20  ew node of node 
0d30: 63 6c 61 73 73 20 3c 74 74 3e 4f 62 6a 65 63 74  class <tt>Object
0d40: 3c 2f 74 74 3e 20 69 6e 20 74 68 65 20 6f 62 6a  </tt> in the obj
0d50: 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c  ect <tt><i>handl
0d60: 65 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e 64 20 72  e</i></tt> and r
0d70: 65 74 75 72 6e 73 20 74 68 65 20 6e 6f 64 65 20  eturns the node 
0d80: 69 64 65 6e 74 69 66 65 72 2e 20 54 68 65 20 6f  identifer. The o
0d90: 70 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  ptional paramete
0da0: 72 20 3c 74 74 3e 3c 69 3e 74 79 70 65 69 64 3c  r <tt><i>typeid<
0db0: 2f 69 3e 3c 2f 74 74 3e 20 6d 75 73 74 20 62 65  /i></tt> must be
0dc0: 20 61 20 6b 6e 6f 77 6e 20 64 61 74 61 20 74 79   a known data ty
0dd0: 70 65 20 6e 61 6d 65 20 28 73 65 65 20 20 3c 74  pe name (see  <t
0de0: 74 3e 6f 70 63 75 61 20 20 74 79 70 65 73 3c 2f  t>opcua  types</
0df0: 74 74 3e 29 20 6f 72 20 61 20 6e 6f 64 65 20 20  tt>) or a node  
0e00: 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 61 20  identifier of a 
0e10: 64 61 74 61 20 74 79 70 65 2e 20 46 6f 72 20 74  data type. For t
0e20: 68 65 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74  he other paramet
0e30: 65 72 73 2c 20 72 65 66 65 72 20 74 6f 20 3c 74  ers, refer to <t
0e40: 74 3e 6f 70 63 75 61 20 61 64 64 20 44 61 74 61  t>opcua add Data
0e50: 54 79 70 65 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 74  Type</tt>.....<t
0e60: 74 3e 6f 70 63 75 61 20 61 64 64 20 3c 69 3e 68  t>opcua add <i>h
0e70: 61 6e 64 6c 65 3c 2f 69 3e 20 4f 62 6a 65 63 74  andle</i> Object
0e80: 54 79 70 65 20 3c 69 3e 6e 6f 64 65 69 64 20 70  Type <i>nodeid p
0e90: 61 72 65 6e 74 20 72 65 66 74 79 70 65 20 62 72  arent reftype br
0ea0: 6e 61 6d 65 20 3f 61 74 74 72 73 3f 3c 2f 69 3e  name ?attrs?</i>
0eb0: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 41 64 64  </tt>....    Add
0ec0: 73 20 61 6e 20 6e 65 77 20 6e 6f 64 65 20 6f 66  s an new node of
0ed0: 20 6e 6f 64 65 20 63 6c 61 73 73 20 3c 74 74 3e   node class <tt>
0ee0: 4f 62 6a 65 63 74 54 79 70 65 3c 2f 74 74 3e 20  ObjectType</tt> 
0ef0: 69 6e 20 74 68 65 20 6f 62 6a 65 63 74 20 3c 74  in the object <t
0f00: 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c  t><i>handle</i><
0f10: 2f 74 74 3e 20 61 6e 64 20 72 65 74 75 72 6e 73  /tt> and returns
0f20: 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69   the node identi
0f30: 66 65 72 2e 20 46 6f 72 20 74 68 65 20 6f 74 68  fer. For the oth
0f40: 65 72 20 70 61 72 61 6d 65 74 65 72 73 2c 20 72  er parameters, r
0f50: 65 66 65 72 20 74 6f 20 3c 74 74 3e 6f 70 63 75  efer to <tt>opcu
0f60: 61 20 61 64 64 20 44 61 74 61 54 79 70 65 3c 2f  a add DataType</
0f70: 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75  tt>.....<tt>opcu
0f80: 61 20 61 64 64 20 3c 69 3e 68 61 6e 64 6c 65 3c  a add <i>handle<
0f90: 2f 69 3e 20 52 65 66 65 72 65 6e 63 65 20 3c 69  /i> Reference <i
0fa0: 3e 73 72 63 69 64 20 72 65 66 74 79 70 65 20 74  >srcid reftype t
0fb0: 61 72 67 65 74 20 3f 66 6f 72 77 61 72 64 3f 3c  arget ?forward?<
0fc0: 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20  /i></tt>....    
0fd0: 41 64 64 73 20 61 20 72 65 66 65 72 65 6e 63 65  Adds a reference
0fe0: 20 6f 66 20 74 79 70 65 20 3c 74 74 3e 3c 69 3e   of type <tt><i>
0ff0: 72 65 66 74 79 70 65 3c 2f 69 3e 3c 2f 74 74 3e  reftype</i></tt>
1000: 20 28 73 65 65 20 3c 74 74 3e 6f 70 63 75 61 20   (see <tt>opcua 
1010: 72 65 66 74 79 70 65 3c 2f 74 74 3e 29 20 62 65  reftype</tt>) be
1020: 74 77 65 65 6e 20 74 68 65 20 6e 6f 64 65 20 69  tween the node i
1030: 64 65 6e 74 69 66 69 65 72 73 20 3c 74 74 3e 3c  dentifiers <tt><
1040: 69 3e 73 72 63 69 64 3c 2f 69 3e 3c 2f 74 74 3e  i>srcid</i></tt>
1050: 20 61 6e 64 20 3c 74 74 3e 3c 3c 69 3e 74 61 72   and <tt><<i>tar
1060: 67 65 74 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 6e 20  get</i></tt> on 
1070: 74 68 65 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c  the object <tt><
1080: 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74  i>handle</i></tt
1090: 3e 2e 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  >. The optional 
10a0: 70 61 72 61 6d 65 74 65 72 20 3c 74 74 3e 3c 69  parameter <tt><i
10b0: 3e 66 6f 72 77 61 72 64 3c 2f 69 3e 3c 2f 74 74  >forward</i></tt
10c0: 3e 20 6d 75 73 74 20 62 65 20 61 20 62 6f 6f 6c  > must be a bool
10d0: 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ean indicating t
10e0: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 6f 66 20  he direction of 
10f0: 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 28 74  the reference (t
1100: 72 75 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74  rue, the default
1110: 2c 20 69 73 20 66 6f 72 77 61 72 64 2c 20 66 61  , is forward, fa
1120: 6c 73 65 20 69 73 20 69 6e 76 65 72 73 65 29 2e  lse is inverse).
1130: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 61 64  ....<tt>opcua ad
1140: 64 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20  d <i>handle</i> 
1150: 52 65 66 65 72 65 6e 63 65 54 79 70 65 20 3c 69  ReferenceType <i
1160: 3e 6e 6f 64 65 69 64 20 70 61 72 65 6e 74 20 72  >nodeid parent r
1170: 65 66 74 79 70 65 20 62 72 6e 61 6d 65 20 3f 61  eftype brname ?a
1180: 74 74 72 73 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a  ttrs?</i></tt>..
1190: 0d 0a 20 20 20 20 41 64 64 73 20 61 6e 20 6e 65  ..    Adds an ne
11a0: 77 20 6e 6f 64 65 20 6f 66 20 6e 6f 64 65 20 63  w node of node c
11b0: 6c 61 73 73 20 3c 74 74 3e 52 65 66 65 72 65 6e  lass <tt>Referen
11c0: 63 65 54 79 70 65 3c 2f 74 74 3e 20 69 6e 20 74  ceType</tt> in t
11d0: 68 65 20 6f 62 6a 65 63 74 20 20 3c 74 74 3e 3c  he object  <tt><
11e0: 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74  i>handle</i></tt
11f0: 3e 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  > and returns th
1200: 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 65 72  e node identifer
1210: 2e 20 46 6f 72 20 74 68 65 20 6f 74 68 65 72 20  . For the other 
1220: 70 61 72 61 6d 65 74 65 72 73 2c 20 72 65 66 65  parameters, refe
1230: 72 20 74 6f 20 3c 74 74 3e 6f 70 63 75 61 20 61  r to <tt>opcua a
1240: 64 64 20 44 61 74 61 54 79 70 65 3c 2f 74 74 3e  dd DataType</tt>
1250: 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 61  .....<tt>opcua a
1260: 64 64 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e  dd <i>handle</i>
1270: 20 56 61 72 69 61 62 6c 65 20 3c 69 3e 6e 6f 64   Variable <i>nod
1280: 65 69 64 20 70 61 72 65 6e 74 20 72 65 66 74 79  eid parent refty
1290: 70 65 20 62 72 6e 61 6d 65 20 3f 74 79 70 65 69  pe brname ?typei
12a0: 64 20 20 61 74 74 72 73 20 63 6d 64 3f 3c 2f 69  d  attrs cmd?</i
12b0: 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 41 64  ></tt>....    Ad
12c0: 64 73 20 61 6e 20 6e 65 77 20 6e 6f 64 65 20 6f  ds an new node o
12d0: 66 20 6e 6f 64 65 20 63 6c 61 73 73 20 3c 74 74  f node class <tt
12e0: 3e 56 61 72 69 61 62 6c 65 3c 2f 74 74 3e 20 69  >Variable</tt> i
12f0: 6e 20 74 68 65 20 6f 62 6a 65 63 74 20 3c 74 74  n the object <tt
1300: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
1310: 74 74 3e 20 61 6e 64 20 72 65 74 75 72 6e 73 20  tt> and returns 
1320: 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  the node identif
1330: 65 72 2e 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c  er. The optional
1340: 20 70 61 72 61 6d 65 74 65 72 20 3c 74 74 3e 3c   parameter <tt><
1350: 69 3e 74 79 70 65 69 64 3c 2f 69 3e 3c 2f 74 74  i>typeid</i></tt
1360: 3e 20 6d 75 73 74 20 62 65 20 61 20 6b 6e 6f 77  > must be a know
1370: 6e 20 64 61 74 61 20 74 79 70 65 20 6e 61 6d 65  n data type name
1380: 20 28 73 65 65 20 3c 74 74 3e 6f 70 63 75 61 20   (see <tt>opcua 
1390: 74 79 70 65 73 3c 2f 74 74 3e 29 20 20 6f 72 20  types</tt>)  or 
13a0: 61 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65  a node identifie
13b0: 72 20 6f 66 20 61 20 64 61 74 61 20 74 79 70 65  r of a data type
13c0: 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72   or an empty str
13d0: 69 6e 67 20 66 6f 72 20 61 20 64 65 66 61 75 6c  ing for a defaul
13e0: 74 20 76 61 6c 75 65 2e 20 50 61 72 61 6d 65 74  t value. Paramet
13f0: 65 72 20 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f 69  er <tt><i>cmd</i
1400: 3e 3c 2f 74 74 3e 20 69 73 20 61 6e 20 6f 70 74  ></tt> is an opt
1410: 69 6f 6e 61 6c 20 64 61 74 61 20 73 6f 75 72 63  ional data sourc
1420: 65 20 63 61 6c 6c 62 61 63 6b 20 77 68 69 63 68  e callback which
1430: 20 70 72 6f 64 75 63 65 73 20 20 28 72 65 61 64   produces  (read
1440: 20 6f 70 65 72 61 74 69 6f 6e 29 20 6f 72 20 63   operation) or c
1450: 6f 6e 73 75 6d 65 73 20 28 77 72 69 74 65 20 6f  onsumes (write o
1460: 70 65 72 61 74 69 6f 6e 29 20 74 68 65 20 76 61  peration) the va
1470: 72 69 61 62 6c 65 27 73 20 76 61 6c 75 65 2e 20  riable's value. 
1480: 53 65 65 20 73 65 63 74 69 6f 6e 20 3c 62 3e 44  See section <b>D
1490: 61 74 61 20 53 6f 75 72 63 65 20 43 61 6c 6c 62  ata Source Callb
14a0: 61 63 6b 73 3c 2f 62 3e 20 66 6f 72 20 20 6d 6f  acks</b> for  mo
14b0: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  re information. 
14c0: 46 6f 72 20 74 68 65 20 6f 74 68 65 72 20 70 61  For the other pa
14d0: 72 61 6d 65 74 65 72 73 2c 20 72 65 66 65 72 20  rameters, refer 
14e0: 74 6f 20 3c 74 74 3e 6f 70 63 75 61 20 61 64 64  to <tt>opcua add
14f0: 20 44 61 74 61 54 79 70 65 3c 2f 74 74 3e 2e 0d   DataType</tt>..
1500: 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 61 64 64  ...<tt>opcua add
1510: 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20 56   <i>handle</i> V
1520: 61 72 69 61 62 6c 65 54 79 70 65 20 3c 69 3e 6e  ariableType <i>n
1530: 6f 64 65 69 64 20 70 61 72 65 6e 74 20 72 65 66  odeid parent ref
1540: 74 79 70 65 20 62 72 6e 61 6d 65 20 3f 74 79 70  type brname ?typ
1550: 65 69 64 20 61 74 74 72 73 3f 3c 2f 69 3e 3c 2f  eid attrs?</i></
1560: 74 74 3e 0d 0a 0d 0a 20 20 20 20 41 64 64 73 20  tt>....    Adds 
1570: 61 6e 20 6e 65 77 20 6e 6f 64 65 20 6f 66 20 6e  an new node of n
1580: 6f 64 65 20 63 6c 61 73 73 20 3c 74 74 3e 56 61  ode class <tt>Va
1590: 72 69 61 62 6c 65 54 79 70 65 3c 2f 74 74 3e 20  riableType</tt> 
15a0: 69 6e 20 74 68 65 20 6f 62 6a 65 63 74 20 3c 74  in the object <t
15b0: 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c  t><i>handle</i><
15c0: 2f 74 74 3e 20 61 6e 64 20 72 65 74 75 72 6e 73  /tt> and returns
15d0: 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69   the node identi
15e0: 66 65 72 2e 20 54 68 65 20 6f 70 74 69 6f 6e 61  fer. The optiona
15f0: 6c 20 70 61 72 61 6d 65 74 65 72 20 3c 74 74 3e  l parameter <tt>
1600: 3c 69 3e 74 79 70 65 69 64 3c 2f 69 3e 3c 2f 74  <i>typeid</i></t
1610: 74 3e 20 6d 75 73 74 20 62 65 20 61 20 6b 6e 6f  t> must be a kno
1620: 77 6e 20 64 61 74 61 20 74 79 70 65 20 6e 61 6d  wn data type nam
1630: 65 20 28 73 65 65 20 3c 74 74 3e 6f 70 63 75 61  e (see <tt>opcua
1640: 20 74 79 70 65 73 3c 2f 74 74 3e 29 20 6f 72 20   types</tt>) or 
1650: 61 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65  a node identifie
1660: 72 20 6f 66 20 61 20 64 61 74 61 20 74 79 70 65  r of a data type
1670: 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72   or an empty str
1680: 69 6e 67 20 66 6f 72 20 61 20 64 65 66 61 75 6c  ing for a defaul
1690: 74 20 76 61 6c 75 65 2e 20 46 6f 72 20 74 68 65  t value. For the
16a0: 20 6f 74 68 65 72 20 70 61 72 61 6d 65 74 65 72   other parameter
16b0: 73 2c 20 72 65 66 65 72 20 74 6f 20 3c 74 74 3e  s, refer to <tt>
16c0: 6f 70 63 75 61 20 61 64 64 20 44 61 74 61 54 79  opcua add DataTy
16d0: 70 65 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e  pe</tt>.....<tt>
16e0: 6f 70 63 75 61 20 61 64 64 20 3c 69 3e 68 61 6e  opcua add <i>han
16f0: 64 6c 65 3c 2f 69 3e 20 56 69 65 77 20 3c 69 3e  dle</i> View <i>
1700: 6e 6f 64 65 69 64 20 70 61 72 65 6e 74 20 72 65  nodeid parent re
1710: 66 74 79 70 65 20 62 72 6e 61 6d 65 20 3f 61 74  ftype brname ?at
1720: 74 72 73 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d  trs?</i></tt>...
1730: 0a 20 20 20 20 41 64 64 73 20 61 6e 20 6e 65 77  .    Adds an new
1740: 20 6e 6f 64 65 20 6f 66 20 6e 6f 64 65 20 63 6c   node of node cl
1750: 61 73 73 20 3c 74 74 3e 56 69 65 77 3c 2f 74 74  ass <tt>View</tt
1760: 3e 20 69 6e 20 74 68 65 20 6f 62 6a 65 63 74 20  > in the object 
1770: 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69  <tt><i>handle</i
1780: 3e 3c 2f 74 74 3e 20 61 6e 64 20 72 65 74 75 72  ></tt> and retur
1790: 6e 73 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e  ns the node iden
17a0: 74 69 66 65 72 2e 20 46 6f 72 20 74 68 65 20 6f  tifer. For the o
17b0: 74 68 65 72 20 70 61 72 61 6d 65 74 65 72 73 2c  ther parameters,
17c0: 20 72 65 66 65 72 20 74 6f 20 3c 74 74 3e 6f 70   refer to <tt>op
17d0: 63 75 61 20 61 64 64 20 44 61 74 61 54 79 70 65  cua add DataType
17e0: 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70  </tt>.....<tt>op
17f0: 63 75 61 20 61 70 70 64 65 73 63 20 3c 69 3e 68  cua appdesc <i>h
1800: 61 6e 64 6c 65 20 3f 64 65 73 63 72 69 70 74 69  andle ?descripti
1810: 6f 6e 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a  on?</i></tt>....
1820: 20 20 20 20 51 75 65 72 69 65 73 20 6f 72 20 73      Queries or s
1830: 65 74 73 20 74 68 65 20 61 70 70 6c 69 63 61 74  ets the applicat
1840: 69 6f 6e 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ion description 
1850: 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 3c 74  of the object <t
1860: 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c  t><i>handle</i><
1870: 2f 74 74 3e 2e 20 46 6f 72 20 61 20 71 75 65 72  /tt>. For a quer
1880: 79 2c 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  y, the current a
1890: 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 63 72  pplication descr
18a0: 69 70 74 69 6f 6e 20 69 73 20 72 65 74 75 72 6e  iption is return
18b0: 65 64 20 61 73 20 61 20 61 20 64 69 63 74 69 6f  ed as a a dictio
18c0: 6e 61 72 79 2e 20 54 68 69 73 20 64 69 63 74 69  nary. This dicti
18d0: 6f 6e 61 72 79 20 63 61 6e 20 62 65 20 75 73 65  onary can be use
18e0: 64 20 61 73 20 62 61 73 69 73 20 66 6f 72 20 6d  d as basis for m
18f0: 6f 64 69 66 69 63 61 74 69 6f 6e 20 61 6e 64 20  odification and 
1900: 66 75 72 74 68 65 72 20 74 6f 20 73 65 74 20 61  further to set a
1910: 20 6e 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   new application
1920: 20 3c 74 74 3e 3c 69 3e 64 65 73 63 72 69 70 74   <tt><i>descript
1930: 69 6f 6e 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68  ion</i></tt>. Th
1940: 65 20 73 65 74 20 6f 70 65 72 61 74 69 6f 6e 0d  e set operation.
1950: 0a 63 61 6e 20 62 65 20 70 65 72 66 6f 72 6d 65  .can be performe
1960: 64 20 6f 6e 6c 79 20 6f 6e 20 73 74 6f 70 70 65  d only on stoppe
1970: 64 20 73 65 72 76 65 72 20 6f 62 6a 65 63 74 73  d server objects
1980: 20 61 6e 64 20 75 6e 63 6f 6e 6e 65 63 74 65 64   and unconnected
1990: 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63 74 73 2e   client objects.
19a0: 20 4e 6f 74 65 2c 20 74 68 61 74 20 74 68 65 20   Note, that the 
19b0: 3c 74 74 3e 41 70 70 6c 69 63 61 74 69 6f 6e 55  <tt>ApplicationU
19c0: 72 69 3c 2f 74 74 3e 20 63 6f 6d 70 6f 6e 65 6e  ri</tt> componen
19d0: 74 20 6f 66 20 74 68 65 20 61 70 70 6c 69 63 61  t of the applica
19e0: 74 69 6f 6e 20 64 65 73 63 72 69 70 74 69 6f 6e  tion description
19f0: 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20   must match the 
1a00: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e  corresponding in
1a10: 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 65 72  formation in cer
1a20: 74 69 66 69 63 61 74 65 73 2e 0d 0a 0d 0a 3c 74  tificates.....<t
1a30: 74 3e 6f 70 63 75 61 20 61 74 74 72 73 20 3f 6c  t>opcua attrs ?l
1a40: 69 73 74 7c 64 65 66 61 75 6c 74 7c 6e 75 6d 65  ist|default|nume
1a50: 72 69 63 3f 20 3c 69 3e 3f 6e 61 6d 65 3f 3c 2f  ric? <i>?name?</
1a60: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 57  i></tt>....    W
1a70: 69 74 68 6f 75 74 20 66 75 72 74 68 65 72 20 70  ithout further p
1a80: 61 72 61 6d 65 74 65 72 73 20 72 65 74 75 72 6e  arameters return
1a90: 73 20 61 20 6c 69 73 74 20 6f 66 20 61 74 74 72  s a list of attr
1aa0: 69 62 75 74 65 20 6e 61 6d 65 73 20 74 68 65 20  ibute names the 
1ab0: 3c 74 74 3e 6f 70 63 75 61 20 72 65 61 64 3c 2f  <tt>opcua read</
1ac0: 74 74 3e 20 61 6e 64 20 3c 74 74 3e 6f 70 63 75  tt> and <tt>opcu
1ad0: 61 20 77 72 69 74 65 3c 2f 74 74 3e 20 63 6f 6d  a write</tt> com
1ae0: 6d 61 6e 64 73 20 73 75 70 70 6f 72 74 2c 20 65  mands support, e
1af0: 2e 67 2e 20 3c 74 74 3e 56 61 6c 75 65 3c 2f 74  .g. <tt>Value</t
1b00: 74 3e 2c 20 3c 74 74 3e 4e 6f 64 65 43 6c 61 73  t>, <tt>NodeClas
1b10: 73 3c 2f 74 74 3e 2c 20 65 74 63 2e 20 57 69 74  s</tt>, etc. Wit
1b20: 68 20 74 68 65 20 3c 74 74 3e 6c 69 73 74 3c 2f  h the <tt>list</
1b30: 74 74 3e 20 6b 65 79 77 6f 72 64 20 61 20 6c 69  tt> keyword a li
1b40: 73 74 20 6f 66 20 74 68 65 20 64 61 74 61 20 74  st of the data t
1b50: 79 70 65 73 20 20 75 73 65 64 20 61 73 20 61 74  ypes  used as at
1b60: 74 72 69 62 75 74 65 73 20 66 6f 72 20 63 72 65  tributes for cre
1b70: 61 74 69 6f 6e 20 6f 66 20 6e 6f 64 65 73 20 77  ation of nodes w
1b80: 69 74 68 20 74 68 65 20 3c 74 74 3e 6f 70 63 75  ith the <tt>opcu
1b90: 61 20 61 64 64 3c 2f 74 74 3e 20 63 6f 6d 6d 61  a add</tt> comma
1ba0: 6e 64 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  nd is returned. 
1bb0: 57 69 74 68 20 74 68 65 20 3c 74 74 3e 64 65 66  With the <tt>def
1bc0: 61 75 6c 74 3c 2f 74 74 3e 20 6b 65 79 77 6f 72  ault</tt> keywor
1bd0: 64 20 63 6f 6d 62 69 6e 65 64 20 77 69 74 68 20  d combined with 
1be0: 74 68 65 20 3c 74 74 3e 3c 69 3e 6e 61 6d 65 3c  the <tt><i>name<
1bf0: 2f 69 3e 3c 2f 74 74 3e 20 6f 66 20 74 68 65 20  /i></tt> of the 
1c00: 64 61 74 61 20 74 79 70 65 20 61 20 64 69 63 74  data type a dict
1c10: 69 6f 6e 61 72 79 20 64 65 73 63 72 69 62 69 6e  ionary describin
1c20: 67 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 74  g the default at
1c30: 74 72 69 62 75 74 65 73 20 6f 66 20 74 68 69 73  tributes of this
1c40: 20 74 79 70 65 20 69 73 20 72 65 74 75 72 6e 65   type is returne
1c50: 64 2c 20 65 2e 67 20 3c 74 74 3e 6f 70 63 75 61  d, e.g <tt>opcua
1c60: 20 61 74 74 72 73 20 64 65 66 61 75 6c 74 20 3c   attrs default <
1c70: 69 3e 44 61 74 61 54 79 70 65 41 74 74 72 69 62  i>DataTypeAttrib
1c80: 75 74 65 73 3c 69 3e 3c 2f 74 74 3e 20 79 69 65  utes<i></tt> yie
1c90: 6c 64 73 20 61 20 64 65 66 61 75 6c 74 20 64 69  lds a default di
1ca0: 63 74 69 6f 6e 61 72 79 20 66 6f 72 20 63 72 65  ctionary for cre
1cb0: 61 74 69 6f 6e 20 6f 66 20 61 20 3c 74 74 3e 44  ation of a <tt>D
1cc0: 61 74 61 54 79 70 65 3c 2f 74 74 3e 20 6e 6f 64  ataType</tt> nod
1cd0: 65 2e 20 57 69 74 68 20 74 68 65 20 3c 74 74 3e  e. With the <tt>
1ce0: 3c 69 3e 6e 75 6d 65 72 69 63 3c 2f 69 3e 3c 2f  <i>numeric</i></
1cf0: 74 74 3e 20 6b 65 79 77 6f 72 64 20 63 6f 6d 62  tt> keyword comb
1d00: 69 6e 65 64 20 77 69 74 68 20 74 68 65 20 3c 74  ined with the <t
1d10: 74 3e 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 3c 2f 74  t><i>name</i></t
1d20: 74 3e 20 6f 66 20 74 68 65 20 64 61 74 61 20 74  t> of the data t
1d30: 79 70 65 2c 20 74 68 65 20 6e 75 6d 65 72 69 63  ype, the numeric
1d40: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 61 74   value of the at
1d50: 74 72 69 62 75 74 65 20 69 73 20 72 65 74 75 72  tribute is retur
1d60: 6e 65 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75  ned.....<tt>opcu
1d70: 61 20 61 74 74 72 5f 69 6e 69 74 20 3c 69 3e 6e  a attr_init <i>n
1d80: 61 6d 65 20 62 6f 64 79 20 2e 2e 2e 3c 2f 69 3e  ame body ...</i>
1d90: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 48 65 6c  </tt>....    Hel
1da0: 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  per function to 
1db0: 63 72 65 61 74 65 20 61 6e 64 20 72 65 74 75 72  create and retur
1dc0: 6e 20 61 20 64 69 63 74 69 6f 6e 61 72 79 20 66  n a dictionary f
1dd0: 6f 72 20 74 68 65 20 61 74 74 72 69 62 75 74 65  or the attribute
1de0: 20 74 79 70 65 20 3c 74 74 3e 3c 69 3e 6e 61 6d   type <tt><i>nam
1df0: 65 3c 2f 69 3e 3c 2f 74 74 3e 20 77 68 69 63 68  e</i></tt> which
1e00: 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 66 69   is initially fi
1e10: 6c 6c 65 64 20 77 69 74 68 20 64 65 66 61 75 6c  lled with defaul
1e20: 74 73 20 66 72 6f 6d 20 3c 74 74 3e 6f 70 63 75  ts from <tt>opcu
1e30: 61 20 61 74 74 72 73 20 64 65 66 61 75 6c 74 2e  a attrs default.
1e40: 2e 2e 3c 2f 74 74 3e 20 61 6e 64 20 66 69 6e 61  ..</tt> and fina
1e50: 6c 6c 79 20 6d 6f 64 69 66 69 65 64 20 62 79 20  lly modified by 
1e60: 74 68 65 20 54 63 6c 20 63 6f 64 65 0d 0a 69 6e  the Tcl code..in
1e70: 20 3c 74 74 3e 3c 69 3e 62 6f 64 79 3c 2f 69 3e   <tt><i>body</i>
1e80: 3c 2f 74 74 3e 20 77 69 74 68 20 74 68 65 20 73  </tt> with the s
1e90: 61 6d 65 20 72 75 6c 65 73 20 61 73 20 69 6e 20  ame rules as in 
1ea0: 74 68 65 20 3c 74 74 3e 64 69 63 74 20 77 69 74  the <tt>dict wit
1eb0: 68 3c 2f 74 74 3e 20 63 6f 6d 6d 61 6e 64 2e 20  h</tt> command. 
1ec0: 54 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 66  The parameters f
1ed0: 6f 6c 6c 6f 77 69 6e 67 20 3c 74 74 3e 3c 69 3e  ollowing <tt><i>
1ee0: 62 6f 64 79 3c 2f 69 3e 3c 2f 74 74 3e 20 61 72  body</i></tt> ar
1ef0: 65 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68  e assigned to th
1f00: 65 20 6c 69 73 74 20 3c 74 74 3e 3c 69 3e 61 72  e list <tt><i>ar
1f10: 67 73 3c 2f 69 3e 3c 2f 74 74 3e 20 61 73 20 69  gs</i></tt> as i
1f20: 6e 20 61 20 3c 74 74 3e 70 72 6f 63 3c 2f 74 74  n a <tt>proc</tt
1f30: 3e 2e 20 49 6e 20 63 6f 6e 74 72 61 73 74 20 74  >. In contrast t
1f40: 6f 20 3c 74 74 3e 64 69 63 74 20 77 69 74 68 3c  o <tt>dict with<
1f50: 2f 74 74 3e 2c 20 3c 74 74 3e 3c 69 3e 62 6f 64  /tt>, <tt><i>bod
1f60: 79 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20 65 78  y</i></tt> is ex
1f70: 65 63 75 74 65 64 20 69 6e 20 61 20 63 61 6c 6c  ecuted in a call
1f80: 20 66 72 61 6d 65 20 6f 66 20 69 74 73 20 6f 77   frame of its ow
1f90: 6e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20  n.....<tt>opcua 
1fa0: 62 72 6f 77 73 65 20 3c 69 3e 68 61 6e 64 6c 65  browse <i>handle
1fb0: 20 6e 6f 64 65 69 64 20 3f 64 69 72 20 72 65 66   nodeid ?dir ref
1fc0: 69 64 20 6d 61 73 6b 20 2e 2e 2e 3f 3c 2f 69 3e  id mask ...?</i>
1fd0: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 50 65 72  </tt>....    Per
1fe0: 66 6f 72 6d 73 20 61 20 62 72 6f 77 73 65 20 6f  forms a browse o
1ff0: 70 65 72 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  peration on the 
2000: 63 6c 69 65 6e 74 20 6f 72 20 73 65 72 76 65 72  client or server
2010: 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68   object <tt><i>h
2020: 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 73  andle</i></tt> s
2030: 74 61 72 74 69 6e 67 20 61 74 20 74 68 65 20 6e  tarting at the n
2040: 6f 64 65 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69  ode <tt><i>nodei
2050: 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68 65 20  d</i></tt>. The 
2060: 62 72 6f 77 73 65 20 64 69 72 65 63 74 69 6f 6e  browse direction
2070: 20 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65   can be specifie
2080: 64 20 77 69 74 68 20 74 68 65 20 3c 74 74 3e 3c  d with the <tt><
2090: 69 3e 64 69 72 3c 2f 69 3e 3c 2f 74 74 3e 20 70  i>dir</i></tt> p
20a0: 61 72 61 6d 65 74 65 72 20 61 73 20 3c 74 74 3e  arameter as <tt>
20b0: 46 6f 72 77 61 72 64 3c 2f 74 74 3e 2c 20 3c 74  Forward</tt>, <t
20c0: 74 3e 49 6e 76 65 72 73 65 3c 2f 74 74 3e 2c 20  t>Inverse</tt>, 
20d0: 6f 72 20 3c 74 74 3e 42 6f 74 68 3c 2f 74 74 3e  or <tt>Both</tt>
20e0: 2e 20 3c 74 74 3e 46 6f 72 77 61 72 64 3c 2f 74  . <tt>Forward</t
20f0: 74 3e 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  t> is the defaul
2100: 74 20 64 69 72 65 63 74 69 6f 6e 2e 20 54 68 65  t direction. The
2110: 20 6f 70 74 69 6f 6e 61 6c 20 3c 74 74 3e 3c 69   optional <tt><i
2120: 3e 6d 61 73 6b 3c 2f 69 3e 3c 2f 74 74 3e 20 61  >mask</i></tt> a
2130: 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72  nd following par
2140: 61 6d 65 74 65 72 73 20 73 65 6c 65 63 74 20 73  ameters select s
2150: 70 65 63 69 66 69 63 20 6e 6f 64 65 20 63 6c 61  pecific node cla
2160: 73 73 65 73 20 3c 74 74 3e 4f 62 6a 65 63 74 3c  sses <tt>Object<
2170: 2f 74 74 3e 2c 20 3c 74 74 3e 56 61 72 69 61 62  /tt>, <tt>Variab
2180: 6c 65 3c 2f 74 74 3e 2c 20 3c 74 74 3e 4d 65 74  le</tt>, <tt>Met
2190: 68 6f 64 3c 2f 74 74 3e 2c 20 3c 74 74 3e 4f 62  hod</tt>, <tt>Ob
21a0: 6a 65 63 74 54 79 70 65 3c 2f 74 74 3e 2c 20 3c  jectType</tt>, <
21b0: 74 74 3e 56 61 72 69 61 62 6c 65 54 79 70 65 3c  tt>VariableType<
21c0: 2f 74 74 3e 2c 20 3c 74 74 3e 52 65 66 65 72 65  /tt>, <tt>Refere
21d0: 6e 63 65 54 79 70 65 3c 2f 74 74 3e 2c 20 3c 74  nceType</tt>, <t
21e0: 74 3e 44 61 74 61 54 79 70 65 3c 2f 74 74 3e 2c  t>DataType</tt>,
21f0: 20 61 6e 64 20 3c 74 74 3e 56 69 65 77 3c 2f 74   and <tt>View</t
2200: 74 3e 2e 20 54 68 65 20 72 65 73 75 6c 74 20 6f  t>. The result o
2210: 66 20 74 68 65 20 62 72 6f 77 73 65 20 6f 70 65  f the browse ope
2220: 72 61 74 69 6f 6e 20 69 73 20 61 20 6c 69 73 74  ration is a list
2230: 20 77 68 65 72 65 20 65 61 63 68 20 69 74 65 6d   where each item
2240: 20 69 73 20 6d 61 64 65 20 75 70 20 6f 66 20 6e   is made up of n
2250: 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 2c 20  ode identifier, 
2260: 62 72 6f 77 73 65 20 6e 61 6d 65 20 28 71 75 61  browse name (qua
2270: 6c 69 66 69 65 64 20 6e 61 6d 65 29 2c 20 64 69  lified name), di
2280: 73 70 6c 61 79 20 6e 61 6d 65 20 28 6c 6f 63 61  splay name (loca
2290: 6c 65 20 61 6e 64 20 74 65 78 74 29 2c 20 6e 6f  le and text), no
22a0: 64 65 20 63 6c 61 73 73 2c 20 72 65 66 65 72 65  de class, refere
22b0: 6e 63 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  nce node identif
22c0: 69 65 72 2c 20 61 6e 64 20 74 79 70 65 20 6e 6f  ier, and type no
22d0: 64 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a  de identifier...
22e0: 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 63 61 6c 6c  ..<tt>opcua call
22f0: 20 3c 69 3e 68 61 6e 64 6c 65 20 6e 6f 64 65 69   <i>handle nodei
2300: 64 20 6d 65 74 68 6f 64 69 64 20 3f 74 79 70 65  d methodid ?type
2310: 20 76 61 6c 75 65 20 2e 2e 2e 3f 20 3f 3c 2f 69   value ...? ?</i
2320: 3e 2d 61 73 79 6e 63 20 3c 69 3e 63 6d 64 3f 3c  >-async <i>cmd?<
2330: 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20  /i></tt>....    
2340: 43 61 6c 6c 73 20 74 68 65 20 6d 65 74 68 6f 64  Calls the method
2350: 20 77 69 74 68 20 6e 6f 64 65 20 69 64 65 6e 74   with node ident
2360: 69 66 69 65 72 20 3c 74 74 3e 3c 69 3e 6d 65 74  ifier <tt><i>met
2370: 68 6f 64 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6f  hodid</i></tt> o
2380: 6e 20 74 68 65 20 6f 62 6a 65 63 74 20 77 69 74  n the object wit
2390: 68 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65  h node identifie
23a0: 72 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c  r <tt><i>nodeid<
23b0: 2f 69 3e 3c 2f 74 74 3e 20 6f 6e 20 74 68 65 20  /i></tt> on the 
23c0: 63 6c 69 65 6e 74 20 6f 72 20 73 65 72 76 65 72  client or server
23d0: 20 6f 62 6a 65 63 74 20 3c 74 74 3e 68 61 6e 64   object <tt>hand
23e0: 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 77 69 74 68  le</i></tt> with
23f0: 20 70 61 72 61 6d 65 74 65 72 73 20 64 65 73 63   parameters desc
2400: 72 69 62 65 64 20 62 79 20 70 61 69 72 73 20 6f  ribed by pairs o
2410: 66 20 3c 74 74 3e 3c 69 3e 74 79 70 65 3c 2f 69  f <tt><i>type</i
2420: 3e 3c 2f 74 74 3e 20 28 64 61 74 61 20 74 79 70  ></tt> (data typ
2430: 65 2c 20 65 2e 67 2e 20 3c 74 74 3e 49 6e 74 33  e, e.g. <tt>Int3
2440: 32 3c 2f 74 74 3e 20 6f 72 20 3c 74 74 3e 53 74  2</tt> or <tt>St
2450: 72 69 6e 67 3c 2f 74 74 3e 29 20 61 6e 64 20 76  ring</tt>) and v
2460: 61 6c 75 65 20 28 74 68 65 20 70 61 72 61 6d 65  alue (the parame
2470: 74 65 72 27 73 20 76 61 6c 75 65 29 2e 20 54 68  ter's value). Th
2480: 65 20 6d 65 74 68 6f 64 27 73 20 72 65 73 75 6c  e method's resul
2490: 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 54  t is returned. T
24a0: 68 65 20 6d 65 74 68 6f 64 20 69 73 20 63 61 72  he method is car
24b0: 72 69 65 64 20 6f 75 74 20 6f 6e 20 74 68 65 20  ried out on the 
24c0: 73 65 72 76 65 72 2c 20 69 2e 65 2e 20 77 68 65  server, i.e. whe
24d0: 6e 20 64 69 72 65 63 74 6c 79 20 75 73 65 64 20  n directly used 
24e0: 77 69 74 68 20 61 20 73 65 72 76 65 72 20 68 61  with a server ha
24f0: 6e 64 6c 65 20 74 68 65 72 65 27 73 20 6e 6f 20  ndle there's no 
2500: 6e 65 74 77 6f 72 6b 20 74 72 61 66 66 69 63 20  network traffic 
2510: 73 69 6e 63 65 20 74 68 65 20 6d 65 74 68 6f 64  since the method
2520: 20 69 73 20 72 75 6e 20 6c 6f 63 61 6c 6c 79 2e   is run locally.
2530: 20 54 68 65 20 3c 74 74 3e 3c 69 3e 74 79 70 65   The <tt><i>type
2540: 3c 2f 69 3e 3c 2f 74 74 3e 20 70 61 72 61 6d 65  </i></tt> parame
2550: 74 65 72 73 20 73 68 6f 75 6c 64 20 62 65 20 70  ters should be p
2560: 72 65 66 69 78 65 64 20 77 69 74 68 20 61 6e 20  refixed with an 
2570: 61 73 74 65 72 69 73 6b 20 6f 72 20 61 6e 20 65  asterisk or an e
2580: 78 63 6c 61 6d 61 74 69 6f 6e 20 6d 61 72 6b 20  xclamation mark 
2590: 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 63 68 69  in order to achi
25a0: 65 76 65 20 74 68 65 20 73 61 6d 65 20 73 65 6d  eve the same sem
25b0: 61 6e 74 69 63 20 61 73 20 69 6e 20 61 20 6d 65  antic as in a me
25c0: 74 68 6f 64 20 64 65 66 69 6e 69 74 69 6f 6e 20  thod definition 
25d0: 77 69 74 68 20 3c 74 74 3e 6f 70 63 75 61 20 61  with <tt>opcua a
25e0: 64 64 20 53 69 6d 70 6c 65 4d 65 74 68 6f 64 3c  dd SimpleMethod<
25f0: 2f 74 74 3e 2e 20 4f 74 68 65 72 77 69 73 65 2c  /tt>. Otherwise,
2600: 20 61 72 72 61 79 20 76 73 2e 20 73 63 61 6c 61   array vs. scala
2610: 72 20 69 6e 74 65 72 70 72 65 74 69 6f 6e 20 69  r interpretion i
2620: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
2630: 70 65 72 66 6f 72 6d 65 64 2c 20 69 2e 65 2e 20  performed, i.e. 
2640: 77 68 65 6e 20 74 68 65 20 63 6f 72 72 65 73 70  when the corresp
2650: 6f 6e 64 69 6e 67 20 3c 74 74 3e 3c 69 3e 76 61  onding <tt><i>va
2660: 6c 75 65 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20  lue</i></tt> is 
2670: 61 20 6c 69 73 74 2c 20 69 74 20 69 73 20 75 73  a list, it is us
2680: 65 64 20 61 73 20 61 6e 20 61 72 72 61 79 2e 20  ed as an array. 
2690: 46 6f 72 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63  For client objec
26a0: 74 73 2c 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73  ts, asynchronous
26b0: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 63 61   operation is ca
26c0: 72 72 69 65 64 20 6f 75 74 20 77 68 65 6e 20 74  rried out when t
26d0: 68 65 20 6c 61 73 74 20 74 77 6f 20 70 61 72 61  he last two para
26e0: 6d 65 74 65 72 73 20 61 72 65 20 3c 74 74 3e 2d  meters are <tt>-
26f0: 61 73 79 6e 63 3c 2f 74 74 3e 20 61 6e 64 20 61  async</tt> and a
2700: 20 28 70 6f 73 73 69 62 6c 79 20 65 6d 70 74 79   (possibly empty
2710: 29 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6d 6d 61  ) callback comma
2720: 6e 64 20 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f 69  nd <tt><i>cmd</i
2730: 3e 3c 2f 74 74 3e 2e 20 49 6e 20 63 61 73 65 20  ></tt>. In case 
2740: 6f 66 20 61 20 6e 6f 6e 2d 65 6d 70 74 79 20 63  of a non-empty c
2750: 61 6c 6c 62 61 63 6b 20 74 68 65 20 63 6f 6d 6d  allback the comm
2760: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 69  and returns an i
2770: 6e 74 65 67 65 72 20 72 65 71 75 65 73 74 20 69  nteger request i
2780: 64 65 6e 74 69 66 69 65 72 2c 20 77 68 69 63 68  dentifier, which
2790: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
27a0: 63 61 6e 63 65 6c 20 74 68 65 20 61 73 79 6e 63  cancel the async
27b0: 68 72 6f 6e 6f 75 73 20 6f 70 65 72 61 74 69 6f  hronous operatio
27c0: 6e 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68 65  n. Otherwise the
27d0: 20 63 61 6c 6c 20 69 73 20 70 65 72 66 6f 72 6d   call is perform
27e0: 65 64 20 62 75 74 20 74 68 65 20 72 65 73 75 6c  ed but the resul
27f0: 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 53 65  t is ignored. Se
2800: 65 20 73 65 63 74 69 6f 6e 20 3c 62 3e 41 73 79  e section <b>Asy
2810: 6e 63 68 72 6f 6e 6f 75 73 20 4f 70 65 72 61 74  nchronous Operat
2820: 69 6f 6e 73 3c 2f 62 3e 20 66 6f 72 20 6d 6f 72  ions</b> for mor
2830: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a  e information...
2840: 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 63 61 6e 63  ..<tt>opcua canc
2850: 65 6c 20 3c 69 3e 68 61 6e 64 6c 65 20 72 65 71  el <i>handle req
2860: 69 64 20 2e 2e 2e 3c 2f 69 3e 3c 2f 74 74 3e 0d  id ...</i></tt>.
2870: 0a 0d 0a 20 20 20 20 43 61 6e 63 65 6c 73 20 6f  ...    Cancels o
2880: 6e 65 20 6f 72 20 6d 6f 72 65 20 61 73 79 6e 63  ne or more async
2890: 68 72 6f 6e 6f 75 73 20 72 65 71 75 65 73 74 73  hronous requests
28a0: 20 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f   on the client o
28b0: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
28c0: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68  dle</i></tt>. Th
28d0: 65 20 72 65 71 75 65 73 74 73 20 74 6f 20 62 65  e requests to be
28e0: 20 63 61 6e 63 65 6c 6c 65 64 20 61 72 65 20 69   cancelled are i
28f0: 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
2900: 69 72 20 69 6e 74 65 67 65 72 20 69 64 65 6e 74  ir integer ident
2910: 69 66 69 65 72 73 20 3c 74 74 3e 3c 69 3e 72 65  ifiers <tt><i>re
2920: 71 69 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68  qid</i></tt>. Th
2930: 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 61 6c  e associated cal
2940: 6c 62 61 63 6b 73 20 61 72 65 20 65 76 61 6c 75  lbacks are evalu
2950: 61 74 65 64 20 77 69 74 68 20 61 20 74 69 6d 65  ated with a time
2960: 6f 75 74 20 73 74 61 74 75 73 20 63 6f 64 65 2e  out status code.
2970: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 63 65  ....<tt>opcua ce
2980: 72 74 20 3c 69 3e 68 61 6e 64 6c 65 20 63 65 72  rt <i>handle cer
2990: 74 20 70 6b 65 79 20 3f 74 72 75 73 74 20 2e 2e  t pkey ?trust ..
29a0: 2e 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20  .?</i></tt>.... 
29b0: 20 20 20 4c 6f 61 64 73 20 74 68 65 20 63 65 72     Loads the cer
29c0: 74 69 66 69 63 61 74 65 20 3c 74 74 3e 3c 69 3e  tificate <tt><i>
29d0: 63 65 72 74 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e  cert</i></tt> an
29e0: 64 20 70 75 62 6c 69 63 20 6b 65 79 20 3c 74 74  d public key <tt
29f0: 3e 3c 69 3e 70 6b 65 79 3c 2f 69 3e 3c 2f 74 74  ><i>pkey</i></tt
2a00: 3e 20 69 6e 74 6f 20 74 68 65 20 63 6c 69 65 6e  > into the clien
2a10: 74 20 6f 72 20 73 65 72 76 65 72 20 6f 62 6a 65  t or server obje
2a20: 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65  ct <tt><i>handle
2a30: 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 42 6f 74 68 20  </i></tt>. Both 
2a40: 6d 75 73 74 20 62 65 20 62 79 74 65 20 61 72 72  must be byte arr
2a50: 61 79 73 2e 20 54 68 65 20 6f 70 74 69 6f 6e 61  ays. The optiona
2a60: 6c 20 70 61 72 61 6d 65 74 65 72 73 20 3c 74 74  l parameters <tt
2a70: 3e 3c 69 3e 74 72 75 73 74 3c 2f 69 3e 3c 2f 74  ><i>trust</i></t
2a80: 74 3e 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d  t> are zero or m
2a90: 6f 72 65 20 62 79 74 65 20 61 72 72 61 79 73 0d  ore byte arrays.
2aa0: 0a 77 69 74 68 20 63 65 72 74 69 63 61 74 65 73  .with certicates
2ab0: 20 77 68 69 63 68 20 61 72 65 20 61 64 64 65 64   which are added
2ac0: 20 74 6f 20 74 68 65 20 6f 62 6a 65 63 74 27 73   to the object's
2ad0: 20 74 72 75 73 74 20 6c 69 73 74 2e 20 49 66 20   trust list. If 
2ae0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f  the underlying o
2af0: 70 65 6e 36 32 35 34 31 20 6c 69 62 72 61 72 79  pen62541 library
2b00: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
2b10: 74 20 65 6e 63 72 79 70 74 69 6f 6e 2c 20 74 68  t encryption, th
2b20: 69 73 20 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73  is command fails
2b30: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
2b40: 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61  iate error messa
2b50: 67 65 2e 20 49 66 20 69 74 20 73 75 63 63 65 65  ge. If it succee
2b60: 64 73 2c 20 69 74 20 66 6f 72 63 65 73 20 61 20  ds, it forces a 
2b70: 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20 74 6f  server object to
2b80: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 20 65 6e 63 72   only allow encr
2b90: 79 70 74 65 64 20 73 65 73 73 69 6f 6e 73 2e 20  ypted sessions. 
2ba0: 53 69 6d 69 6c 61 72 6c 79 2c 20 61 20 63 6c 69  Similarly, a cli
2bb0: 65 6e 74 20 6f 62 6a 65 63 74 20 74 72 69 65 73  ent object tries
2bc0: 20 74 6f 20 75 73 65 20 61 20 73 69 67 6e 2d 61   to use a sign-a
2bd0: 6e 64 2d 65 6e 63 72 79 70 74 20 65 6e 64 70 6f  nd-encrypt endpo
2be0: 69 6e 74 20 6f 66 20 61 20 73 65 72 76 65 72 2e  int of a server.
2bf0: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 63 68  ....<tt>opcua ch
2c00: 69 6c 64 72 65 6e 20 3c 69 3e 68 61 6e 64 6c 65  ildren <i>handle
2c10: 20 6e 6f 64 65 69 64 3c 2f 69 3e 3c 2f 74 74 3e   nodeid</i></tt>
2c20: 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 20  ....    Returns 
2c30: 74 68 65 20 63 68 69 6c 64 20 6e 6f 64 65 20 69  the child node i
2c40: 64 65 6e 74 69 66 69 65 72 73 20 6f 66 20 74 68  dentifiers of th
2c50: 65 20 67 69 76 65 6e 20 6e 6f 64 65 20 69 64 65  e given node ide
2c60: 6e 74 69 66 69 65 72 20 3c 74 74 3e 3c 69 3e 6e  ntifier <tt><i>n
2c70: 6f 64 65 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6f  odeid</i></tt> o
2c80: 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20  n the client or 
2c90: 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74  server object <t
2ca0: 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c  t><i>handle</i><
2cb0: 2f 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63  /tt>.....<tt>opc
2cc0: 75 61 20 63 6f 6e 6e 65 63 74 20 3c 69 3e 68 61  ua connect <i>ha
2cd0: 6e 64 6c 65 20 75 72 6c 20 3f 75 73 65 72 20 70  ndle url ?user p
2ce0: 61 73 73 77 6f 72 64 3f 3c 2f 69 3e 3c 2f 74 74  assword?</i></tt
2cf0: 3e 0d 0a 0d 0a 20 20 20 20 43 6f 6e 6e 65 63 74  >....    Connect
2d00: 73 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 62 6a  s the client obj
2d10: 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c  ect <tt><i>handl
2d20: 65 3c 2f 69 3e 3c 2f 74 74 3e 20 74 6f 20 74 68  e</i></tt> to th
2d30: 65 20 55 52 4c 20 3c 74 74 3e 3c 69 3e 75 72 6c  e URL <tt><i>url
2d40: 3c 2f 69 3e 3c 2f 74 74 3e 20 75 73 69 6e 67 20  </i></tt> using 
2d50: 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 72 65  the optional cre
2d60: 64 65 6e 74 69 61 6c 73 20 3c 74 74 3e 3c 69 3e  dentials <tt><i>
2d70: 75 73 65 72 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e  user</i></tt> an
2d80: 64 20 3c 74 74 3e 3c 69 3e 70 61 73 73 77 6f 72  d <tt><i>passwor
2d90: 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c  d</i></tt>.....<
2da0: 74 74 3e 6f 70 63 75 61 20 63 6f 6e 6e 65 63 74  tt>opcua connect
2db0: 20 3c 69 3e 68 61 6e 64 6c 65 20 75 72 6c 3c 2f   <i>handle url</
2dc0: 69 3e 20 2d 61 73 79 6e 63 3c 2f 74 74 3e 0d 0a  i> -async</tt>..
2dd0: 0d 0a 20 20 20 20 43 6f 6e 6e 65 63 74 73 20 74  ..    Connects t
2de0: 68 65 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63 74  he client object
2df0: 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f   <tt><i>handle</
2e00: 69 3e 3c 2f 74 74 3e 20 74 6f 20 74 68 65 20 55  i></tt> to the U
2e10: 52 4c 20 3c 74 74 3e 3c 69 3e 75 72 6c 3c 2f 69  RL <tt><i>url</i
2e20: 3e 3c 2f 74 74 3e 2e 20 54 68 65 20 6f 70 65 72  ></tt>. The oper
2e30: 61 74 69 6f 6e 20 69 73 20 61 73 79 6e 63 68 72  ation is asynchr
2e40: 6f 6e 6f 75 73 2c 20 69 2e 65 2e 20 74 68 65 20  onous, i.e. the 
2e50: 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 73 74 61 62  connection estab
2e60: 6c 69 73 68 6d 65 6e 74 20 74 61 6b 65 73 20 70  lishment takes p
2e70: 6c 61 63 65 20 69 6e 20 62 61 63 6b 67 72 6f 75  lace in backgrou
2e80: 6e 64 2e 20 49 74 20 63 61 6e 20 62 65 20 6f 62  nd. It can be ob
2e90: 73 65 72 76 65 64 20 77 69 74 68 20 74 68 65 20  served with the 
2ea0: 6f 70 74 69 6f 6e 61 6c 20 3c 74 74 3e 6f 6e 63  optional <tt>onc
2eb0: 6c 69 65 6e 74 73 74 61 74 65 3c 2f 74 74 3e 20  lientstate</tt> 
2ec0: 63 61 6c 6c 62 61 63 6b 20 6f 66 20 74 68 65 20  callback of the 
2ed0: 63 6c 69 65 6e 74 20 6f 62 6a 65 63 74 2e 0d 0a  client object...
2ee0: 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 63 6f 6e 73  ..<tt>opcua cons
2ef0: 74 20 3f 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20 2e  t ?<i>name</i> .
2f00: 2e 2e 3f 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20  ..?</tt>....    
2f10: 57 69 74 68 6f 75 74 20 6f 70 74 69 6f 6e 61 6c  Without optional
2f20: 20 70 61 72 61 6d 65 74 65 72 73 20 72 65 74 75   parameters retu
2f30: 72 6e 73 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  rns a list of na
2f40: 6d 65 73 20 66 6f 72 20 77 68 69 63 68 20 6d 61  mes for which ma
2f50: 70 70 69 6e 67 73 20 74 6f 20 6e 75 6d 65 72 69  ppings to numeri
2f60: 63 61 6c 20 76 61 6c 75 65 73 20 61 72 65 20 6b  cal values are k
2f70: 6e 6f 77 6e 2e 20 49 66 20 3c 74 74 3e 3c 69 3e  nown. If <tt><i>
2f80: 6e 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73  name</i></tt> is
2f90: 20 70 72 6f 76 69 64 65 64 2c 20 74 68 65 20 6e   provided, the n
2fa0: 75 6d 65 72 69 63 61 6c 20 76 61 6c 75 65 20 66  umerical value f
2fb0: 6f 72 20 74 68 65 20 6e 61 6d 65 20 69 73 20 72  or the name is r
2fc0: 65 74 75 72 6e 65 64 2e 20 57 68 65 6e 20 6d 6f  eturned. When mo
2fd0: 72 65 20 74 68 61 6e 20 6f 6e 65 20 3c 74 74 3e  re than one <tt>
2fe0: 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e  <i>name</i></tt>
2ff0: 20 69 73 20 67 69 76 65 6e 2c 20 61 20 62 69 74   is given, a bit
3000: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
3010: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 6e 61  alues for the na
3020: 6d 65 73 20 69 73 20 72 65 74 75 72 6e 65 64 2e  mes is returned.
3030: 20 3c 74 74 3e 3c 69 3e 6e 61 6d 65 3c 2f 69 3e   <tt><i>name</i>
3040: 3c 2f 74 74 3e 20 63 61 6e 20 62 65 20 6f 70 74  </tt> can be opt
3050: 69 6f 6e 61 6c 6c 79 20 70 72 65 66 69 78 65 64  ionally prefixed
3060: 20 77 69 74 68 20 3c 74 74 3e 55 41 5f 3c 2f 74   with <tt>UA_</t
3070: 74 3e 2c 20 69 2e 65 2e 20 3c 74 74 3e 41 43 43  t>, i.e. <tt>ACC
3080: 45 53 53 4c 45 56 45 4c 4d 41 53 4b 5f 52 45 41  ESSLEVELMASK_REA
3090: 44 3c 2f 74 74 3e 20 61 6e 64 20 3c 74 74 3e 55  D</tt> and <tt>U
30a0: 41 5f 41 43 43 45 53 53 4c 45 56 45 4c 4d 41 53  A_ACCESSLEVELMAS
30b0: 4b 5f 52 45 41 44 3c 2f 74 74 3e 20 61 72 65 20  K_READ</tt> are 
30c0: 6d 61 70 70 65 64 20 74 6f 20 74 68 65 20 73 61  mapped to the sa
30d0: 6d 65 20 6e 75 6d 65 72 69 63 61 6c 20 76 61 6c  me numerical val
30e0: 75 65 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61  ue.....<tt>opcua
30f0: 20 64 61 74 61 73 6f 75 72 63 65 73 20 3c 69 3e   datasources <i>
3100: 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 0d  handle</i></tt>.
3110: 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 20 69  ...    Returns i
3120: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 64 61  nformation on da
3130: 74 61 20 73 6f 75 72 63 65 73 20 28 76 61 72 69  ta sources (vari
3140: 61 62 6c 65 20 6e 6f 64 65 73 20 77 69 74 68 20  able nodes with 
3150: 63 61 6c 6c 62 61 63 6b 73 29 20 66 6f 72 20 74  callbacks) for t
3160: 68 65 20 73 65 72 76 65 72 20 6f 62 6a 65 63 74  he server object
3170: 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f   <tt><i>handle</
3180: 69 3e 3c 2f 74 74 3e 2e 20 46 6f 72 20 65 61 63  i></tt>. For eac
3190: 68 20 64 61 74 61 20 73 6f 75 72 63 65 20 74 77  h data source tw
31a0: 6f 20 6c 69 73 74 20 65 6c 65 6d 65 6e 74 73 20  o list elements 
31b0: 20 77 69 74 68 20 6e 6f 64 65 20 69 64 65 6e 74   with node ident
31c0: 69 66 69 65 72 20 61 6e 64 20 63 61 6c 6c 62 61  ifier and callba
31d0: 63 6b 20 63 6f 6d 6d 61 6e 64 20 61 72 65 20 61  ck command are a
31e0: 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 73 75  dded to the resu
31f0: 6c 74 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61  lt.....<tt>opcua
3200: 20 64 61 74 65 74 69 6d 65 20 3f 73 65 63 6f 6e   datetime ?secon
3210: 64 73 7c 2e 2e 2e 7c 75 74 63 20 3c 69 3e 3f 76  ds|...|utc <i>?v
3220: 61 6c 75 65 3f 3c 2f 69 3e 3f 3c 2f 74 74 3e 0d  alue?</i>?</tt>.
3230: 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 20 65  ...    Returns e
3240: 69 74 68 65 72 20 50 4f 53 49 58 20 6f 72 20 4f  ither POSIX or O
3250: 50 43 2f 55 41 20 74 69 6d 65 73 74 61 6d 70 73  PC/UA timestamps
3260: 20 61 73 20 3c 62 3e 54 63 6c 5f 57 69 64 65 49   as <b>Tcl_WideI
3270: 6e 74 3c 2f 62 3e 20 76 61 6c 75 65 73 2e 20 49  nt</b> values. I
3280: 66 20 20 63 61 6c 6c 65 64 20 77 69 74 68 6f 75  f  called withou
3290: 74 20 66 75 72 74 68 65 72 20 70 61 72 61 6d 65  t further parame
32a0: 74 65 72 73 20 74 68 65 20 63 75 72 72 65 6e 74  ters the current
32b0: 20 4f 50 43 2f 55 41 20 6c 6f 63 61 6c 20 3c 74   OPC/UA local <t
32c0: 74 3e 44 61 74 65 54 69 6d 65 3c 2f 74 74 3e 20  t>DateTime</tt> 
32d0: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 49 66 20  is returned. If 
32e0: 63 61 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20  called with the 
32f0: 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c  single keyword <
3300: 74 74 3e 75 74 63 3c 2f 74 74 3e 20 74 68 65 20  tt>utc</tt> the 
3310: 63 75 72 72 65 6e 74 20 4f 50 43 2f 55 41 20 20  current OPC/UA  
3320: 3c 74 74 3e 55 74 63 54 69 6d 65 3c 2f 74 74 3e  <tt>UtcTime</tt>
3330: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f 74   is returned. Ot
3340: 68 65 72 77 69 73 65 2c 20 3c 74 74 3e 3c 69 3e  herwise, <tt><i>
3350: 76 61 6c 75 65 3c 2f 69 3e 3c 2f 74 74 3e 20 69  value</i></tt> i
3360: 73 20 72 65 71 75 69 72 65 64 20 61 6e 64 20 63  s required and c
3370: 6f 6e 76 65 72 74 65 64 20 66 72 6f 6d 20 50 4f  onverted from PO
3380: 53 49 58 20 74 6f 20 4f 50 43 2f 55 41 20 3c 74  SIX to OPC/UA <t
3390: 74 3e 55 74 63 54 69 6d 65 3c 2f 74 74 3e 20 66  t>UtcTime</tt> f
33a0: 6f 72 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  or the keywords 
33b0: 3c 74 74 3e 73 65 63 6f 6e 64 73 3c 2f 74 74 3e  <tt>seconds</tt>
33c0: 2c 20 3c 74 74 3e 6d 69 6c 6c 69 73 65 63 6f 6e  , <tt>millisecon
33d0: 64 73 3c 2f 74 74 3e 2c 20 61 6e 64 20 3c 74 74  ds</tt>, and <tt
33e0: 3e 6d 69 63 72 6f 73 65 63 6f 6e 64 73 3c 2f 74  >microseconds</t
33f0: 74 3e 2c 20 61 6e 64 20 66 72 6f 6d 20 4f 50 43  t>, and from OPC
3400: 2f 55 41 20 3c 74 74 3e 55 74 63 54 69 6d 65 3c  /UA <tt>UtcTime<
3410: 2f 74 74 3e 20 74 6f 20 50 4f 53 49 58 20 66 6f  /tt> to POSIX fo
3420: 72 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 3c  r the keywords <
3430: 74 74 3e 75 6e 69 78 73 65 63 6f 6e 64 73 3c 2f  tt>unixseconds</
3440: 74 74 3e 2c 20 3c 74 74 3e 75 6e 69 78 6d 69 6c  tt>, <tt>unixmil
3450: 6c 69 73 3c 2f 74 74 3e 2c 20 61 6e 64 20 3c 74  lis</tt>, and <t
3460: 74 3e 75 6e 69 78 6d 69 63 72 6f 73 3c 2f 74 74  t>unixmicros</tt
3470: 3e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  >, respectively.
3480: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 64 65  ....<tt>opcua de
3490: 66 74 79 70 65 73 20 3c 69 3e 68 61 6e 64 6c 65  ftypes <i>handle
34a0: 20 6e 73 75 72 69 20 64 65 66 73 3c 2f 69 3e 3c   nsuri defs</i><
34b0: 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 44 65 66 69  /tt>....    Defi
34c0: 6e 65 73 20 63 75 73 74 6f 6d 20 64 61 74 61 74  nes custom datat
34d0: 79 70 65 73 20 28 63 75 72 72 65 6e 74 6c 79 20  ypes (currently 
34e0: 6f 6e 6c 79 20 73 74 72 75 63 74 75 72 65 73 29  only structures)
34f0: 20 69 6e 20 74 68 65 20 73 65 72 76 65 72 20 6f   in the server o
3500: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
3510: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e 64  dle</i></tt> and
3520: 20 6e 61 6d 65 73 70 61 63 65 20 55 52 49 20 3c   namespace URI <
3530: 74 74 3e 3c 69 3e 6e 73 75 72 69 3c 2f 69 3e 3c  tt><i>nsuri</i><
3540: 2f 74 74 3e 2e 20 54 68 65 20 6e 61 6d 65 73 70  /tt>. The namesp
3550: 61 63 65 20 69 73 20 63 72 65 61 74 65 64 20 77  ace is created w
3560: 69 74 68 20 74 68 65 20 3c 74 74 3e 6f 70 63 75  ith the <tt>opcu
3570: 61 20 61 64 64 20 4e 61 6d 65 73 70 61 63 65 3c  a add Namespace<
3580: 2f 74 74 3e 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  /tt> command and
3590: 20 6d 75 73 74 20 65 78 69 73 74 20 62 65 66 6f   must exist befo
35a0: 72 65 20 74 68 65 20 3c 74 74 3e 6f 70 63 75 61  re the <tt>opcua
35b0: 20 64 65 66 74 79 70 65 73 3c 2f 74 74 3e 20 63   deftypes</tt> c
35c0: 6f 6d 6d 61 6e 64 20 69 73 20 63 61 6c 6c 65 64  ommand is called
35d0: 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
35e0: 3c 74 74 3e 3c 69 3e 64 65 66 73 3c 2f 69 3e 3c  <tt><i>defs</i><
35f0: 2f 74 74 3e 20 64 65 73 63 72 69 62 65 73 20 74  /tt> describes t
3600: 68 65 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  he structures to
3610: 20 62 65 20 63 72 65 61 74 65 64 2e 20 54 68 65   be created. The
3620: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 61 6c   command does al
3630: 6c 20 6e 65 63 65 73 73 61 72 79 20 73 74 65 70  l necessary step
3640: 73 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  s to create the 
3650: 72 65 71 75 69 72 65 64 20 6e 6f 64 65 73 20 69  required nodes i
3660: 6e 20 74 68 65 20 73 65 72 76 65 72 20 6f 62 6a  n the server obj
3670: 65 63 74 27 73 20 61 64 64 72 65 73 73 20 73 70  ect's address sp
3680: 61 63 65 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  ace and to store
3690: 20 61 6e 20 58 4d 4c 20 62 79 74 65 73 74 72 69   an XML bytestri
36a0: 6e 67 20 64 65 73 63 72 69 62 69 6e 67 20 74 68  ng describing th
36b0: 65 20 28 64 65 29 73 65 72 69 61 6c 69 7a 61 74  e (de)serializat
36c0: 69 6f 6e 20 66 6f 72 20 74 68 65 20 73 74 72 75  ion for the stru
36d0: 63 74 75 72 65 73 20 61 73 20 65 78 74 65 6e 73  ctures as extens
36e0: 69 6f 6e 20 6f 62 6a 65 63 74 73 2e 20 54 68 61  ion objects. Tha
36f0: 74 20 58 4d 4c 20 69 73 20 6c 61 74 65 72 20 74  t XML is later t
3700: 6f 20 62 65 20 72 65 70 61 72 73 65 64 20 77 69  o be reparsed wi
3710: 74 68 20 74 68 65 20 3c 74 74 3e 6f 70 63 75 61  th the <tt>opcua
3720: 20 67 65 6e 74 79 70 65 73 3c 2f 74 74 3e 20 63   gentypes</tt> c
3730: 6f 6d 6d 61 6e 64 2e 20 46 6f 72 20 64 65 74 61  ommand. For deta
3740: 69 6c 73 20 72 65 66 65 72 20 74 6f 20 73 65 63  ils refer to sec
3750: 74 69 6f 6e 20 3c 62 3e 44 65 66 69 6e 69 6e 67  tion <b>Defining
3760: 20 43 75 73 74 6f 6d 20 44 61 74 61 20 53 74 72   Custom Data Str
3770: 75 63 74 75 72 65 73 3c 2f 62 3e 20 62 65 6c 6f  uctures</b> belo
3780: 77 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20  w.....<tt>opcua 
3790: 64 65 6c 65 74 65 20 3c 69 3e 68 61 6e 64 6c 65  delete <i>handle
37a0: 3c 2f 69 3e 20 4e 6f 64 65 20 3c 69 3e 6e 6f 64  </i> Node <i>nod
37b0: 65 69 64 20 3f 77 69 74 68 72 65 66 73 3f 3c 2f  eid ?withrefs?</
37c0: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 44  i></tt>....    D
37d0: 65 6c 65 74 65 73 20 74 68 65 20 6e 6f 64 65 20  eletes the node 
37e0: 77 69 74 68 20 69 64 65 6e 74 69 66 69 65 72 20  with identifier 
37f0: 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f 69  <tt><i>nodeid</i
3800: 3e 3c 2f 74 74 3e 20 6f 6e 20 74 68 65 20 73 65  ></tt> on the se
3810: 72 76 65 72 20 6f 62 6a 65 63 74 0d 0a 3c 74 74  rver object..<tt
3820: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
3830: 74 74 3e 2e 20 49 66 20 3c 74 74 3e 3c 69 3e 77  tt>. If <tt><i>w
3840: 69 74 68 72 65 66 73 3c 2f 69 3e 3c 2f 74 74 3e  ithrefs</i></tt>
3850: 20 69 73 20 74 72 75 65 2c 20 74 68 65 20 72 65   is true, the re
3860: 66 65 72 65 6e 63 65 73 20 6f 66 20 20 74 68 65  ferences of  the
3870: 20 6e 6f 64 65 20 61 72 65 20 64 65 6c 65 74 65   node are delete
3880: 64 2c 20 74 6f 6f 2e 0d 0a 0d 0a 3c 74 74 3e 6f  d, too.....<tt>o
3890: 70 63 75 61 20 64 65 6c 65 74 65 20 3c 69 3e 68  pcua delete <i>h
38a0: 61 6e 64 6c 65 3c 2f 69 3e 20 52 65 66 65 72 65  andle</i> Refere
38b0: 6e 63 65 20 3c 69 3e 73 72 63 69 64 20 72 65 66  nce <i>srcid ref
38c0: 74 79 70 65 69 64 20 74 61 72 67 65 74 69 64 20  typeid targetid 
38d0: 3f 66 6f 72 77 61 72 64 3f 20 3f 62 69 64 69 72  ?forward? ?bidir
38e0: 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20  ?</i></tt>....  
38f0: 20 20 44 65 6c 65 74 65 73 20 74 68 65 20 72 65    Deletes the re
3900: 66 65 72 65 6e 63 65 20 64 65 73 63 72 69 62 65  ference describe
3910: 64 20 62 79 20 3c 74 74 3e 3c 69 3e 73 72 63 69  d by <tt><i>srci
3920: 64 3c 2f 69 3e 3c 2f 74 74 3e 2c 20 3c 74 74 3e  d</i></tt>, <tt>
3930: 3c 69 3e 72 65 66 74 79 70 65 69 64 3c 2f 69 3e  <i>reftypeid</i>
3940: 3c 2f 74 74 3e 2c 20 61 6e 64 20 3c 74 74 3e 3c  </tt>, and <tt><
3950: 69 3e 74 61 72 67 65 74 69 64 3c 2f 69 3e 3c 2f  i>targetid</i></
3960: 74 74 3e 20 6f 6e 20 74 68 65 20 73 65 72 76 65  tt> on the serve
3970: 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e  r object <tt><i>
3980: 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e  handle</i></tt>.
3990: 20 54 68 65 20 20 62 6f 6f 6c 65 61 6e 20 66 6c   The  boolean fl
39a0: 61 67 20 3c 74 74 3e 3c 69 3e 66 6f 72 77 61 72  ag <tt><i>forwar
39b0: 64 3c 2f 69 3e 3c 2f 74 74 3e 20 73 65 6c 65 63  d</i></tt> selec
39c0: 74 73 20 20 66 6f 72 77 61 72 64 20 6f 72 20 69  ts  forward or i
39d0: 6e 76 65 72 73 65 20 64 69 72 65 63 74 69 6f 6e  nverse direction
39e0: 20 6f 66 20 74 68 65 20 72 65 66 65 72 65 6e 63   of the referenc
39f0: 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e  e to be deleted.
3a00: 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 66 6c 61   The boolean fla
3a10: 67 20 3c 74 74 3e 3c 69 3e 62 69 64 69 72 3c 2f  g <tt><i>bidir</
3a20: 69 3e 3c 2f 74 74 3e 20 72 65 71 75 65 73 74 73  i></tt> requests
3a30: 20 61 20 62 69 64 69 72 65 63 74 69 6f 6e 61 6c   a bidirectional
3a40: 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 65   reference to be
3a50: 20 64 65 6c 65 74 65 64 2e 20 54 68 65 20 64 65   deleted. The de
3a60: 66 61 75 6c 74 20 69 73 20 74 6f 20 64 65 6c 65  fault is to dele
3a70: 74 65 20 69 6e 20 66 6f 72 77 61 72 64 20 64 69  te in forward di
3a80: 72 65 63 74 69 6f 6e 20 6f 6e 6c 79 2e 0d 0a 0d  rection only....
3a90: 0a 3c 74 74 3e 6f 70 63 75 61 20 64 65 73 74 72  .<tt>opcua destr
3aa0: 6f 79 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e  oy <i>handle</i>
3ab0: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 44 65 73  </tt>....    Des
3ac0: 74 72 6f 79 73 20 74 68 65 20 63 6c 69 65 6e 74  troys the client
3ad0: 20 6f 72 20 73 65 72 76 65 72 20 6f 62 6a 65 63   or server objec
3ae0: 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c  t <tt><i>handle<
3af0: 2f 69 3e 3c 2f 74 74 3e 20 61 6e 64 20 72 65 6c  /i></tt> and rel
3b00: 65 61 73 65 73 20 20 69 74 73 20 72 65 73 6f 75  eases  its resou
3b10: 72 63 65 73 2c 20 65 2e 67 2e 20 63 6c 6f 73 65  rces, e.g. close
3b20: 73 20 6e 65 74 77 6f 72 6b 20 63 6f 6e 6e 65 63  s network connec
3b30: 74 69 6f 6e 73 2c 20 74 65 61 72 73 20 64 6f 77  tions, tears dow
3b40: 6e 20 74 68 65 20 68 61 6e 64 6c 65 20 73 70 65  n the handle spe
3b50: 63 69 66 69 63 20 6e 61 6d 65 73 70 61 63 65 2c  cific namespace,
3b60: 20 65 74 63 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63   etc.....<tt>opc
3b70: 75 61 20 64 69 63 74 5f 69 6e 69 74 20 3c 69 3e  ua dict_init <i>
3b80: 6e 61 6d 65 20 62 6f 64 79 20 2e 2e 2e 3c 2f 69  name body ...</i
3b90: 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 48 65  ></tt>....    He
3ba0: 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 6f  lper function to
3bb0: 20 63 72 65 61 74 65 20 61 6e 64 20 72 65 74 75   create and retu
3bc0: 72 6e 20 61 20 64 69 63 74 69 6f 6e 61 72 79 20  rn a dictionary 
3bd0: 66 6f 72 20 74 68 65 20 64 61 74 61 20 74 79 70  for the data typ
3be0: 65 20 3c 74 74 3e 3c 69 3e 6e 61 6d 65 3c 2f 69  e <tt><i>name</i
3bf0: 3e 3c 2f 74 74 3e 20 77 68 69 63 68 20 66 69 72  ></tt> which fir
3c00: 73 74 20 69 73 20 70 72 69 6d 65 64 20 77 69 74  st is primed wit
3c10: 68 20 3c 74 74 3e 6f 70 63 75 61 20 74 79 70 65  h <tt>opcua type
3c20: 73 20 65 6d 70 74 79 2e 2e 2e 3c 2f 74 74 3e 20  s empty...</tt> 
3c30: 61 6e 64 20 66 69 6e 61 6c 6c 79 20 6d 6f 64 69  and finally modi
3c40: 66 69 65 64 20 62 79 20 74 68 65 20 54 63 6c 20  fied by the Tcl 
3c50: 63 6f 64 65 20 69 6e 20 3c 74 74 3e 3c 69 3e 62  code in <tt><i>b
3c60: 6f 64 79 3c 2f 69 3e 3c 2f 74 74 3e 20 77 69 74  ody</i></tt> wit
3c70: 68 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73  h the same rules
3c80: 20 61 73 20 69 6e 20 74 68 65 20 3c 74 74 3e 64   as in the <tt>d
3c90: 69 63 74 20 77 69 74 68 3c 2f 74 74 3e 20 63 6f  ict with</tt> co
3ca0: 6d 6d 61 6e 64 2e 20 54 68 65 20 70 61 72 61 6d  mmand. The param
3cb0: 65 74 65 72 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  eters following 
3cc0: 3c 74 74 3e 3c 69 3e 62 6f 64 79 3c 2f 69 3e 3c  <tt><i>body</i><
3cd0: 2f 74 74 3e 20 61 72 65 20 61 73 73 69 67 6e 65  /tt> are assigne
3ce0: 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 3c 74  d to the list <t
3cf0: 74 3e 3c 69 3e 61 72 67 73 3c 2f 69 3e 3c 2f 74  t><i>args</i></t
3d00: 74 3e 20 61 73 20 69 6e 20 61 20 3c 74 74 3e 70  t> as in a <tt>p
3d10: 72 6f 63 3c 2f 74 74 3e 2e 20 49 6e 20 63 6f 6e  roc</tt>. In con
3d20: 74 72 61 73 74 20 74 6f 20 3c 74 74 3e 64 69 63  trast to <tt>dic
3d30: 74 20 77 69 74 68 3c 2f 74 74 3e 2c 20 3c 74 74  t with</tt>, <tt
3d40: 3e 3c 69 3e 62 6f 64 79 3c 2f 69 3e 3c 2f 74 74  ><i>body</i></tt
3d50: 3e 20 69 73 20 65 78 65 63 75 74 65 64 20 69 6e  > is executed in
3d60: 20 61 20 63 61 6c 6c 20 66 72 61 6d 65 20 6f 66   a call frame of
3d70: 20 69 74 73 20 6f 77 6e 2e 0d 0a 0d 0a 3c 74 74   its own.....<tt
3d80: 3e 6f 70 63 75 61 20 64 69 73 63 6f 6e 6e 65 63  >opcua disconnec
3d90: 74 20 3c 69 3e 68 61 6e 64 6c 65 20 3f 3c 2f 69  t <i>handle ?</i
3da0: 3e 2d 61 73 79 6e 63 3c 69 3e 3f 3c 2f 69 3e 3c  >-async<i>?</i><
3db0: 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 44 69 73 63  /tt>....    Disc
3dc0: 6f 6e 6e 65 63 74 73 20 74 68 65 20 63 6c 69 65  onnects the clie
3dd0: 6e 74 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69  nt object <tt><i
3de0: 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e  >handle</i></tt>
3df0: 2e 20 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61  . If the optiona
3e00: 6c 20 70 61 72 61 6d 65 74 65 72 20 3c 74 74 3e  l parameter <tt>
3e10: 2d 61 73 79 6e 63 3c 2f 74 74 3e 20 69 73 20 73  -async</tt> is s
3e20: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 6f 70  pecified, the op
3e30: 65 72 61 74 69 6f 6e 20 69 73 20 63 61 72 72 69  eration is carri
3e40: 65 64 20 6f 75 74 20 69 6e 20 61 73 79 6e 63 68  ed out in asynch
3e50: 72 6f 6e 6f 75 73 20 6d 6f 64 65 2e 0d 0a 0d 0a  ronous mode.....
3e60: 3c 74 74 3e 6f 70 63 75 61 20 65 6e 64 70 6f 69  <tt>opcua endpoi
3e70: 6e 74 73 20 3c 69 3e 3f 75 72 6c 3f 3c 2f 69 3e  nts <i>?url?</i>
3e80: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 51 75 65  </tt>....    Que
3e90: 72 69 65 73 20 74 68 65 20 6c 6f 63 61 6c 20 4f  ries the local O
3ea0: 50 43 2f 55 41 20 73 65 72 76 65 72 20 3c 74 74  PC/UA server <tt
3eb0: 3e 6f 70 63 2e 74 63 70 3a 2f 2f 6c 6f 63 61 6c  >opc.tcp://local
3ec0: 68 6f 73 74 3a 34 38 34 30 3c 2f 74 74 3e 20 6f  host:4840</tt> o
3ed0: 72 20 74 68 65 20 73 65 72 76 65 72 20 73 70 65  r the server spe
3ee0: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 3c 74  cified by the <t
3ef0: 74 3e 3c 69 3e 75 72 6c 3c 2f 69 3e 3c 2f 74 74  t><i>url</i></tt
3f00: 3e 20 70 61 72 61 6d 65 74 65 72 20 66 6f 72 20  > parameter for 
3f10: 65 6e 64 70 6f 69 6e 74 73 20 61 6e 64 20 72 65  endpoints and re
3f20: 74 75 72 6e 73 20 61 20 6c 69 73 74 20 6f 66 20  turns a list of 
3f30: 55 52 4c 73 20 64 65 73 63 72 69 62 69 6e 67 20  URLs describing 
3f40: 74 68 65 20 65 6e 64 70 6f 69 6e 74 73 20 66 6f  the endpoints fo
3f50: 75 6e 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75  und.....<tt>opcu
3f60: 61 20 67 65 6e 73 74 75 62 73 20 3c 69 3e 68 61  a genstubs <i>ha
3f70: 6e 64 6c 65 20 3f 73 74 72 69 70 20 73 74 75 62  ndle ?strip stub
3f80: 73 74 73 20 2e 2e 2e 3f 3c 2f 69 3e 3c 2f 74 74  sts ...?</i></tt
3f90: 3e 0d 0a 0d 0a 20 20 20 20 47 65 6e 65 72 61 74  >....    Generat
3fa0: 65 73 20 73 74 75 62 73 20 66 6f 72 20 6d 65 74  es stubs for met
3fb0: 68 6f 64 73 20 69 6e 20 74 68 65 20 68 61 6e 64  hods in the hand
3fc0: 6c 65 20 73 70 65 63 69 66 69 63 20 61 64 64 72  le specific addr
3fd0: 65 73 73 20 73 70 61 63 65 20 64 65 72 69 76 65  ess space derive
3fe0: 64 20 20 66 72 6f 6d 20 74 68 65 20 63 6c 69 65  d  from the clie
3ff0: 6e 74 20 6f 72 20 73 65 72 76 65 72 20 6f 62 6a  nt or server obj
4000: 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c  ect <tt><i>handl
4010: 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68 65 20  e</i></tt>. The 
4020: 61 64 64 72 65 73 73 20 73 70 61 63 65 20 69 73  address space is
4030: 20 74 72 61 76 65 72 73 65 64 20 61 6e 64 20 62   traversed and b
4040: 72 6f 77 73 65 20 70 61 74 68 73 20 61 6e 64 20  rowse paths and 
4050: 6e 6f 64 65 20 63 6c 61 73 73 20 70 61 74 68 73  node class paths
4060: 20 61 72 65 20 61 63 63 75 6d 75 6c 61 74 65 64   are accumulated
4070: 2e 20 54 68 65 20 72 65 73 75 6c 74 69 6e 67 20  . The resulting 
4080: 62 72 6f 77 73 65 20 70 61 74 68 73 20 6f 70 74  browse paths opt
4090: 69 6f 6e 61 6c 6c 79 20 67 65 74 20 74 68 65 20  ionally get the 
40a0: 70 72 65 66 69 78 20 3c 74 74 3e 3c 69 3e 73 74  prefix <tt><i>st
40b0: 72 69 70 3c 2f 69 3e 3c 2f 74 74 3e 20 73 74 72  rip</i></tt> str
40c0: 69 70 70 65 64 20 6f 66 66 20 66 72 6f 6d 20 74  ipped off from t
40d0: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
40e0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 69 6c 74   optionally filt
40f0: 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 67  ered using the g
4100: 6c 6f 62 20 70 61 74 74 65 72 6e 73 20 66 6f 6c  lob patterns fol
4110: 6c 6f 77 69 6e 67 20 74 68 65 20 3c 74 74 3e 3c  lowing the <tt><
4120: 69 3e 73 74 72 69 70 3c 2f 69 3e 3c 2f 74 74 3e  i>strip</i></tt>
4130: 20 70 61 72 61 6d 65 74 65 72 2e 20 49 66 20 3c   parameter. If <
4140: 74 74 3e 3c 69 3e 73 75 62 73 74 73 3c 2f 69 3e  tt><i>substs</i>
4150: 3c 2f 74 74 3e 20 69 73 20 6e 6f 74 20 65 6d 70  </tt> is not emp
4160: 74 79 20 69 74 0d 0a 73 70 65 63 69 66 69 65 73  ty it..specifies
4170: 20 70 61 69 72 77 69 73 65 20 72 65 67 65 78 70   pairwise regexp
4180: 73 20 61 6e 64 20 73 75 62 73 74 69 74 75 74 69  s and substituti
4190: 6f 6e 73 20 77 68 69 63 68 20 61 72 65 20 61 70  ons which are ap
41a0: 70 6c 69 65 64 20 6f 6e 20 74 68 65 20 62 72 6f  plied on the bro
41b0: 77 73 65 0d 0a 70 61 74 68 73 20 66 6f 72 20 74  wse..paths for t
41c0: 68 65 20 66 69 6e 61 6c 20 70 72 6f 63 65 64 75  he final procedu
41d0: 72 65 20 6e 61 6d 65 73 2e 20 46 6f 72 20 61 6c  re names. For al
41e0: 6c 20 6e 6f 64 65 73 20 6d 61 74 63 68 69 6e 67  l nodes matching
41f0: 20 74 68 65 20 6e 6f 64 65 20 63 6c 61 73 73 20   the node class 
4200: 70 61 74 68 20 70 61 74 74 65 72 6e 20 3c 74 74  path pattern <tt
4210: 3e 4f 62 6a 65 63 74 3c 2f 74 74 3e 2f 3c 74 74  >Object</tt>/<tt
4220: 3e 4d 65 74 68 6f 64 3c 2f 74 74 3e 20 74 68 65  >Method</tt> the
4230: 20 6f 70 74 69 6f 6e 61 6c 20 3c 74 74 3e 49 6e   optional <tt>In
4240: 70 75 74 41 72 67 75 6d 65 6e 74 73 3c 2f 74 74  putArguments</tt
4250: 3e 20 61 6e 64 20 20 3c 74 74 3e 4f 75 74 70 75  > and  <tt>Outpu
4260: 74 41 72 67 75 6d 65 6e 74 73 3c 2f 74 74 3e 20  tArguments</tt> 
4270: 63 68 69 6c 64 20 6e 6f 64 65 73 20 61 72 65 20  child nodes are 
4280: 72 65 74 72 69 65 76 65 64 20 61 6e 64 20 73 74  retrieved and st
4290: 75 62 20 70 72 6f 63 65 64 75 72 65 73 20 61 72  ub procedures ar
42a0: 65 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20  e written using 
42b0: 74 68 65 20 62 72 6f 77 73 65 20 70 61 74 68 20  the browse path 
42c0: 61 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 6e 66  and argument inf
42d0: 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 0d 0a 3c 74 74  ormation.....<tt
42e0: 3e 6f 70 63 75 61 20 67 65 6e 74 79 70 65 73 20  >opcua gentypes 
42f0: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
4300: 74 3e 0d 0a 0d 0a 20 20 20 20 47 65 6e 65 72 61  t>....    Genera
4310: 74 65 73 20 63 75 73 74 6f 6d 20 64 61 74 61 20  tes custom data 
4320: 74 79 70 65 20 6d 61 70 70 69 6e 67 73 20 75 73  type mappings us
4330: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
4340: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 61 6e  obtained from an
4350: 61 6c 79 7a 69 6e 67 20 74 68 65 20 61 64 64 72  alyzing the addr
4360: 65 73 73 20 73 70 61 63 65 20 64 65 72 69 76 65  ess space derive
4370: 64 20 66 72 6f 6d 20 74 68 65 20 63 6c 69 65 6e  d from the clien
4380: 74 20 6f 72 20 73 65 72 76 65 72 20 6f 62 6a 65  t or server obje
4390: 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65  ct <tt><i>handle
43a0: 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68 69 73 20  </i></tt>. This 
43b0: 66 65 61 74 75 72 65 20 69 73 20 68 69 67 68 6c  feature is highl
43c0: 79 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 61  y experimental a
43d0: 6e 64 20 72 65 71 75 69 72 65 73 20 74 68 65 20  nd requires the 
43e0: 20 74 44 4f 4d 20 70 61 63 6b 61 67 65 20 66 6f   tDOM package fo
43f0: 72 20 70 61 72 73 69 6e 67 20 58 4d 4c 2e 20 49  r parsing XML. I
4400: 74 20 63 61 6e 20 63 72 65 61 74 65 20 65 6e 63  t can create enc
4410: 6f 64 65 72 73 2f 64 65 63 6f 64 65 72 73 20 66  oders/decoders f
4420: 6f 72 20 73 69 6d 70 6c 65 20 73 74 72 75 63 74  or simple struct
4430: 75 72 65 20 64 61 74 61 20 74 79 70 65 73 20 64  ure data types d
4440: 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 61 64  efined in the ad
4450: 64 72 65 73 73 20 73 70 61 63 65 20 77 68 69 63  dress space whic
4460: 68 20 70 65 72 66 6f 72 6d 20 61 20 6d 61 70 70  h perform a mapp
4470: 69 6e 67 20 66 72 6f 6d 2f 74 6f 20 54 63 6c 20  ing from/to Tcl 
4480: 64 69 63 74 69 6f 6e 61 72 69 65 73 2e 20 46 6f  dictionaries. Fo
4490: 72 20 66 75 72 74 68 65 72 20 69 6e 66 6f 72 6d  r further inform
44a0: 61 74 69 6f 6e 2c 20 73 65 65 20 74 68 65 20 3c  ation, see the <
44b0: 62 3e 73 65 72 76 65 72 5f 74 79 70 65 73 2e 74  b>server_types.t
44c0: 63 6c 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 63 6c  cl</b> and <b>cl
44d0: 69 65 6e 74 5f 74 79 70 65 73 2e 74 63 6c 3c 2f  ient_types.tcl</
44e0: 62 3e 20 73 63 72 69 70 74 73 20 69 6e 20 74 68  b> scripts in th
44f0: 65 20 65 78 61 6d 70 6c 65 73 20 64 69 72 65 63  e examples direc
4500: 74 6f 72 79 2e 20 49 66 20 74 68 69 73 20 63 6f  tory. If this co
4510: 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 2c 20 69  mmand is used, i
4520: 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 76 6f  t should be invo
4530: 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 63 72 65  ked prior to cre
4540: 61 74 69 6e 67 20 6d 65 74 68 6f 64 20 73 74 75  ating method stu
4550: 62 73 2c 20 73 69 6e 63 65 20 6d 65 74 68 6f 64  bs, since method
4560: 73 20 6d 61 79 20 72 65 71 75 69 72 65 20 63 75  s may require cu
4570: 73 74 6f 6d 20 64 61 74 61 20 74 79 70 65 73 20  stom data types 
4580: 69 6e 20 74 68 65 69 72 20 61 72 67 75 6d 65 6e  in their argumen
4590: 74 73 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61  ts.....<tt>opcua
45a0: 20 69 6e 66 6f 20 3c 69 3e 3f 68 61 6e 64 6c 65   info <i>?handle
45b0: 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20  ?</i></tt>....  
45c0: 20 20 52 65 74 75 72 6e 73 20 74 68 65 20 6f 62    Returns the ob
45d0: 6a 65 63 74 20 74 79 70 65 20 6f 66 20 3c 74 74  ject type of <tt
45e0: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
45f0: 74 74 3e 2c 20 65 69 74 68 65 72 20 3c 74 74 3e  tt>, either <tt>
4600: 63 6c 69 65 6e 74 3c 2f 74 74 3e 20 6f 72 20 3c  client</tt> or <
4610: 74 74 3e 73 65 72 76 65 72 3c 2f 74 74 3e 2e 20  tt>server</tt>. 
4620: 49 66 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65  If <tt><i>handle
4630: 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20 6f 6d 69  </i></tt> is omi
4640: 74 74 65 64 2c 20 61 20 6c 69 73 74 20 6f 66 20  tted, a list of 
4650: 61 6c 6c 20 6b 6e 6f 77 6e 20 63 6c 69 65 6e 74  all known client
4660: 20 61 6e 64 20 73 65 72 76 65 72 20 6f 62 6a 65   and server obje
4670: 63 74 20 68 61 6e 64 6c 65 73 20 69 73 20 72 65  ct handles is re
4680: 74 75 72 6e 65 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f  turned.....<tt>o
4690: 70 63 75 61 20 6c 6f 61 64 65 72 20 3c 69 3e 68  pcua loader <i>h
46a0: 61 6e 64 6c 65 20 78 6d 6c 20 3f 65 76 61 72 20  andle xml ?evar 
46b0: 72 76 61 72 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a  rvar?</i></tt>..
46c0: 0d 0a 20 20 20 20 49 6d 70 6f 72 74 73 20 61 20  ..    Imports a 
46d0: 6e 6f 64 65 20 73 65 74 20 66 72 6f 6d 20 61 6e  node set from an
46e0: 20 58 4d 4c 20 73 74 72 69 6e 67 20 3c 74 74 3e   XML string <tt>
46f0: 3c 69 3e 78 6d 6c 3c 2f 69 3e 3c 2f 74 74 3e 20  <i>xml</i></tt> 
4700: 69 6e 74 6f 20 74 68 65 20 73 65 72 76 65 72 20  into the server 
4710: 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69  <tt><i>handle</i
4720: 3e 3c 2f 74 74 3e 2e 20 54 68 65 20 61 6d 6f 75  ></tt>. The amou
4730: 6e 74 20 6f 66 20 69 6d 70 6f 72 74 65 64 20 69  nt of imported i
4740: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 69 67 68 6c  nformation highl
4750: 79 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  y depends on the
4760: 20 62 75 69 6c 64 20 6f 70 74 69 6f 6e 73 20 6f   build options o
4770: 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  f the underlying
4780: 20 6f 70 65 6e 36 32 35 34 31 20 6c 69 62 72 61   open62541 libra
4790: 72 79 2e 20 4e 6f 64 65 20 64 65 73 63 72 69 70  ry. Node descrip
47a0: 74 69 6f 6e 73 20 77 68 69 63 68 20 63 61 6e 27  tions which can'
47b0: 74 20 62 65 20 73 75 70 70 6f 72 74 65 64 20 61  t be supported a
47c0: 72 65 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 69  re ignored and i
47d0: 6e 74 65 72 6e 61 6c 6c 79 20 61 63 63 75 6d 75  nternally accumu
47e0: 6c 61 74 65 64 2e 20 46 6f 72 20 61 6e 61 6c 79  lated. For analy
47f0: 73 69 73 2c 20 74 68 61 74 20 69 6e 66 6f 72 6d  sis, that inform
4800: 61 74 69 6f 6e 20 69 73 20 6d 61 64 65 20 61 76  ation is made av
4810: 61 69 6c 61 62 6c 65 20 62 79 20 74 68 65 20 3c  ailable by the <
4820: 74 74 3e 3c 69 3e 65 76 61 72 3c 2f 69 3e 3c 2f  tt><i>evar</i></
4830: 74 74 3e 20 61 6e 64 20 3c 74 74 3e 3c 69 3e 72  tt> and <tt><i>r
4840: 76 61 72 3c 2f 69 3e 3c 2f 74 74 3e 20 72 65 73  var</i></tt> res
4850: 75 6c 74 20 76 61 72 69 61 62 6c 65 73 2c 20 77  ult variables, w
4860: 68 69 63 68 20 72 65 63 65 69 76 65 20 61 20 6c  hich receive a l
4870: 69 73 74 20 69 6e 20 3c 74 74 3e 61 72 72 61 79  ist in <tt>array
4880: 20 73 65 74 3c 2f 74 74 3e 20 66 6f 72 6d 20 77   set</tt> form w
4890: 69 74 68 20 65 61 63 68 20 6b 65 79 20 62 65 69  ith each key bei
48a0: 6e 67 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e  ng the node iden
48b0: 74 69 66 69 65 72 20 61 6e 64 20 65 61 63 68 20  tifier and each 
48c0: 76 61 6c 75 65 20 61 20 64 69 63 74 69 6f 6e 61  value a dictiona
48d0: 72 79 20 77 69 74 68 20 6e 6f 64 65 20 69 6e 66  ry with node inf
48e0: 6f 72 6d 61 74 69 6f 6e 20 28 66 6f 72 20 3c 74  ormation (for <t
48f0: 74 3e 3c 69 3e 65 76 61 72 3c 2f 69 3e 3c 2f 74  t><i>evar</i></t
4900: 74 3e 29 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e  t>) including an
4910: 20 65 72 72 6f 72 20 64 65 73 63 72 69 70 74 69   error descripti
4920: 6f 6e 2c 20 61 6e 64 20 72 65 66 65 72 65 6e 63  on, and referenc
4930: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 28 66  e information (f
4940: 6f 72 20 3c 74 74 3e 3c 69 3e 72 76 61 72 3c 2f  or <tt><i>rvar</
4950: 69 3e 3c 2f 74 74 3e 29 2e 20 41 20 72 65 73 75  i></tt>). A resu
4960: 6c 74 20 69 73 20 72 65 74 75 72 6e 65 64 20 77  lt is returned w
4970: 68 69 63 68 20 69 73 20 61 20 6c 69 73 74 20 69  hich is a list i
4980: 6e 20 3c 74 74 3e 61 72 72 61 79 20 73 65 74 3c  n <tt>array set<
4990: 2f 74 74 3e 20 66 6f 72 6d 20 77 69 74 68 20 65  /tt> form with e
49a0: 61 63 68 20 6b 65 79 20 62 65 69 6e 67 20 74 68  ach key being th
49b0: 65 20 6d 65 74 68 6f 64 27 73 20 69 6d 70 6c 65  e method's imple
49c0: 6d 65 6e 74 61 74 69 6f 6e 20 70 72 6f 63 20 6e  mentation proc n
49d0: 61 6d 65 20 61 6e 64 20 65 61 63 68 20 76 61 6c  ame and each val
49e0: 75 65 20 61 20 6c 69 73 74 20 6f 66 20 6e 6f 64  ue a list of nod
49f0: 65 20 69 64 65 6e 74 69 66 69 65 72 73 20 77 68  e identifiers wh
4a00: 69 63 68 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20  ich will invoke 
4a10: 74 68 65 20 72 65 73 70 65 63 74 69 76 65 20 69  the respective i
4a20: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a  mplementation...
4a30: 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 6c 6f 67 20  ..<tt>opcua log 
4a40: 3c 69 3e 3f 63 6f 6d 6d 61 6e 64 3f 3c 2f 69 3e  <i>?command?</i>
4a50: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 74  </tt>....    Ret
4a60: 72 69 65 76 65 73 20 6f 72 20 73 65 74 73 20 74  rieves or sets t
4a70: 68 65 20 63 61 6c 6c 62 61 63 6b 20 3c 74 74 3e  he callback <tt>
4a80: 3c 69 3e 63 6f 6d 6d 61 6e 64 3c 2f 69 3e 3c 2f  <i>command</i></
4a90: 74 74 3e 20 66 6f 72 20 6f 70 65 6e 36 32 35 34  tt> for open6254
4aa0: 31 20 6c 6f 67 20 6d 65 73 73 61 67 65 73 2e 20  1 log messages. 
4ab0: 57 68 65 6e 20 61 20 6c 6f 67 20 6d 65 73 73 61  When a log messa
4ac0: 67 65 20 69 73 20 69 73 73 75 65 64 2c 20 3c 74  ge is issued, <t
4ad0: 74 3e 3c 69 3e 63 6f 6d 6d 61 6e 64 3c 2f 69 3e  t><i>command</i>
4ae0: 3c 2f 74 74 3e 20 69 73 20 69 6e 76 6f 6b 65 64  </tt> is invoked
4af0: 20 77 69 74 68 20 74 68 72 65 65 20 70 61 72 61   with three para
4b00: 6d 65 74 65 72 73 20 61 70 70 65 6e 64 65 64 3a  meters appended:
4b10: 20 74 68 65 20 6c 6f 67 20 6c 65 76 65 6c 2c 20   the log level, 
4b20: 65 2e 67 2e 20 3c 74 74 3e 69 6e 66 6f 3c 2f 74  e.g. <tt>info</t
4b30: 74 3e 2c 20 3c 74 74 3e 77 61 72 6e 69 6e 67 3c  t>, <tt>warning<
4b40: 2f 74 74 3e 2c 20 74 68 65 20 63 61 74 65 67 6f  /tt>, the catego
4b50: 72 79 2c 20 65 2e 67 2e 20 3c 74 74 3e 6e 65 74  ry, e.g. <tt>net
4b60: 77 6f 72 6b 3c 2f 74 74 3e 2c 20 3c 74 74 3e 63  work</tt>, <tt>c
4b70: 6c 69 65 6e 74 3c 2f 74 74 3e 2c 20 61 6e 64 20  lient</tt>, and 
4b80: 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  the text of the 
4b90: 6c 6f 67 20 6d 65 73 73 61 67 65 2e 0d 0a 0d 0a  log message.....
4ba0: 3c 74 74 3e 6f 70 63 75 61 20 6d 61 70 73 74 72  <tt>opcua mapstr
4bb0: 75 63 74 20 3c 69 3e 68 61 6e 64 6c 65 20 3f 6e  uct <i>handle ?n
4bc0: 6f 64 65 69 64 20 64 65 73 74 69 64 20 6d 65 6d  odeid destid mem
4bd0: 62 65 72 20 2e 2e 2e 3f 3c 2f 69 3e 3c 2f 74 74  ber ...?</i></tt
4be0: 3e 0d 0a 0d 0a 20 20 20 20 41 64 64 73 20 76 61  >....    Adds va
4bf0: 72 69 61 62 6c 65 20 6e 6f 64 65 73 20 77 69 74  riable nodes wit
4c00: 68 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 64 61  h an internal da
4c10: 74 61 20 73 6f 75 72 63 65 20 6d 61 70 70 69 6e  ta source mappin
4c20: 67 20 74 6f 20 74 68 65 20 6d 65 6d 62 65 72 73  g to the members
4c30: 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
4c40: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
4c50: 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f 69  <tt><i>nodeid</i
4c60: 3e 3c 2f 74 74 3e 20 69 6e 20 74 68 65 20 73 65  ></tt> in the se
4c70: 72 76 65 72 20 3c 74 74 3e 3c 69 3e 68 61 6e 64  rver <tt><i>hand
4c80: 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 49 74 20  le</i></tt>. It 
4c90: 61 6c 6c 6f 77 73 20 63 6c 69 65 6e 74 73 20 74  allows clients t
4ca0: 6f 20 72 65 61 64 20 74 68 65 20 73 74 72 75 63  o read the struc
4cb0: 74 75 72 65 20 65 6c 65 6d 65 6e 74 20 77 69 73  ture element wis
4cc0: 65 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72  e even when ther
4cd0: 65 27 73 20 6e 6f 20 63 6c 69 65 6e 74 20 73 75  e's no client su
4ce0: 70 70 6f 72 74 20 66 6f 72 20 64 65 73 65 72 69  pport for deseri
4cf0: 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65  alization of the
4d00: 20 77 68 6f 6c 65 20 73 74 72 75 63 74 75 72 65   whole structure
4d10: 2e 20 41 6c 74 65 72 6e 61 74 69 76 65 6c 79 2c  . Alternatively,
4d20: 20 69 66 20 70 61 69 72 73 20 6f 66 20 3c 74 74   if pairs of <tt
4d30: 3e 3c 69 3e 64 65 73 74 69 64 3c 2f 69 3e 3c 2f  ><i>destid</i></
4d40: 74 74 3e 20 61 6e 64 20 3c 74 74 3e 3c 69 3e 6d  tt> and <tt><i>m
4d50: 65 6d 62 65 72 3c 2f 69 3e 3c 2f 74 74 3e 20 61  ember</i></tt> a
4d60: 72 65 20 70 72 6f 76 69 64 65 64 2c 20 6e 6f 20  re provided, no 
4d70: 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 61  additional varia
4d80: 62 6c 65 20 6e 6f 64 65 73 20 61 72 65 20 63 72  ble nodes are cr
4d90: 65 61 74 65 64 20 62 75 74 20 74 68 65 20 6d 61  eated but the ma
4da0: 70 70 69 6e 67 20 69 73 20 65 73 74 61 62 6c 69  pping is establi
4db0: 73 68 65 64 20 62 65 74 77 65 65 6e 20 74 68 65  shed between the
4dc0: 20 76 61 72 69 61 62 6c 65 20 69 64 65 6e 74 69   variable identi
4dd0: 66 69 65 64 20 62 79 20 3c 74 74 3e 3c 69 3e 64  fied by <tt><i>d
4de0: 65 73 74 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 61  estid</i></tt> a
4df0: 6e 64 20 74 68 65 20 73 74 72 75 63 74 75 72 65  nd the structure
4e00: 20 66 69 65 6c 64 20 3c 74 74 3e 3c 69 3e 6d 65   field <tt><i>me
4e10: 6d 62 65 72 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 66  mber</i></tt> of
4e20: 20 73 74 72 75 63 74 75 72 65 20 3c 74 74 3e 3c   structure <tt><
4e30: 69 3e 6e 6f 64 65 69 64 3c 2f 69 3e 3c 2f 74 74  i>nodeid</i></tt
4e40: 3e 2e 20 49 66 20 3c 74 74 3e 3c 69 3e 6e 6f 64  >. If <tt><i>nod
4e50: 65 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e 64  eid</i></tt> and
4e60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72 61 6d   following param
4e70: 65 74 65 72 73 20 61 72 65 20 6c 65 66 74 20 6f  eters are left o
4e80: 75 74 2c 20 74 68 65 20 63 75 72 72 65 6e 74 20  ut, the current 
4e90: 6d 61 70 70 69 6e 67 73 20 61 72 65 20 72 65 74  mappings are ret
4ea0: 75 72 6e 65 64 20 61 73 20 61 20 6c 69 73 74 20  urned as a list 
4eb0: 77 68 65 72 65 20 65 61 63 68 20 74 68 72 65 65  where each three
4ec0: 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 6d 61   elements are ma
4ed0: 64 65 20 75 70 20 6f 66 20 64 65 73 74 69 6e 61  de up of destina
4ee0: 74 69 6f 6e 20 6e 6f 64 65 20 69 64 65 6e 74 69  tion node identi
4ef0: 66 69 65 72 2c 20 73 74 72 75 63 74 75 72 65 20  fier, structure 
4f00: 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 2c  node identifier,
4f10: 20 61 6e 64 20 73 74 72 75 63 74 75 72 65 20 6d   and structure m
4f20: 65 6d 62 65 72 20 6e 61 6d 65 2e 20 3c 62 3e 57  ember name. <b>W
4f30: 61 72 6e 69 6e 67 3a 3c 2f 62 3e 20 6e 6f 20 6c  arning:</b> no l
4f40: 6f 67 69 63 20 69 73 20 62 75 69 6c 74 20 69 6e  ogic is built in
4f50: 20 74 6f 20 70 72 65 76 65 6e 74 20 66 72 6f 6d   to prevent from
4f60: 20 63 72 65 61 74 69 6e 67 20 6d 75 6c 74 69 70   creating multip
4f70: 6c 65 20 6d 61 70 70 69 6e 67 73 2c 20 77 68 65  le mappings, whe
4f80: 6e 20 76 61 72 69 61 62 6c 65 20 6e 6f 64 65 73  n variable nodes
4f90: 20 61 72 65 20 74 6f 20 62 65 20 61 64 64 65 64   are to be added
4fa0: 2e 20 54 68 75 73 2c 20 74 68 65 20 75 73 65 72  . Thus, the user
4fb0: 20 73 68 6f 75 6c 64 20 65 6e 73 75 72 65 20 69   should ensure i
4fc0: 6e 20 74 68 69 73 20 63 61 73 65 20 74 6f 20 63  n this case to c
4fd0: 61 6c 6c 20 74 68 65 20 3c 74 74 3e 6d 61 70 73  all the <tt>maps
4fe0: 74 72 75 63 74 3c 2f 74 74 3e 20 73 75 62 63 6f  truct</tt> subco
4ff0: 6d 6d 61 6e 64 20 6f 6e 6c 79 20 6f 6e 63 65 20  mmand only once 
5000: 70 65 72 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69  per <tt><i>nodei
5010: 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 53 69 6e 63  d</i></tt>. Sinc
5020: 65 20 61 20 6e 6f 64 65 20 6f 6e 6c 79 20 73 75  e a node only su
5030: 70 70 6f 72 74 73 20 61 20 73 69 6e 67 6c 65 20  pports a single 
5040: 64 61 74 61 20 73 6f 75 72 63 65 2c 20 61 6e 20  data source, an 
5050: 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20  error is raised 
5060: 77 68 65 6e 20 61 20 6e 6f 64 65 20 61 6c 72 65  when a node alre
5070: 61 64 79 20 68 61 73 20 61 20 63 61 6c 6c 62 61  ady has a callba
5080: 63 6b 20 69 6e 73 74 61 6c 6c 65 64 20 66 72 6f  ck installed fro
5090: 6d 20 74 68 65 20 3c 74 74 3e 61 64 64 3c 2f 74  m the <tt>add</t
50a0: 74 3e 20 6f 72 20 3c 74 74 3e 64 61 74 61 73 6f  t> or <tt>dataso
50b0: 75 72 63 65 73 3c 2f 74 74 3e 20 73 75 62 63 6f  urces</tt> subco
50c0: 6d 6d 61 6e 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70  mmand.....<tt>op
50d0: 63 75 61 20 6d 65 74 68 6f 64 73 20 3c 69 3e 68  cua methods <i>h
50e0: 61 6e 64 6c 65 20 3f 6e 6f 64 65 69 64 20 6f 75  andle ?nodeid ou
50f0: 74 74 79 70 65 20 63 6d 64 3c 2f 69 3e 3c 2f 74  ttype cmd</i></t
5100: 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e  t>....    Return
5110: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e  s information on
5120: 20 6d 65 74 68 6f 64 73 20 66 6f 72 20 74 68 65   methods for the
5130: 20 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20 3c   server object <
5140: 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e  tt><i>handle</i>
5150: 3c 2f 74 74 3e 2e 20 57 69 74 68 6f 75 74 20 6f  </tt>. Without o
5160: 70 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  ptional paramete
5170: 72 73 2c 20 66 6f 72 20 65 61 63 68 20 6b 6e 6f  rs, for each kno
5180: 77 6e 20 6d 65 74 68 6f 64 20 74 68 72 65 65 20  wn method three 
5190: 6c 69 73 74 20 65 6c 65 6d 65 6e 74 73 20 77 69  list elements wi
51a0: 74 68 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69  th node identifi
51b0: 65 72 2c 20 72 65 73 75 6c 74 20 74 79 70 65 20  er, result type 
51c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6e 64  information, and
51d0: 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6d 6d 61 6e   callback comman
51e0: 64 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  d are added to t
51f0: 68 65 20 72 65 73 75 6c 74 2e 20 57 69 74 68 20  he result. With 
5200: 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f 69  <tt><i>nodeid</i
5210: 3e 3c 2f 74 74 3e 20 69 6e 66 6f 72 6d 61 74 69  ></tt> informati
5220: 6f 6e 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  on for the speci
5230: 66 69 65 64 20 6e 6f 64 65 20 69 73 20 72 65 74  fied node is ret
5240: 75 72 6e 65 64 2e 20 57 69 74 68 20 3c 74 74 3e  urned. With <tt>
5250: 3c 69 3e 6f 75 74 74 79 70 65 3c 2f 69 3e 3c 2f  <i>outtype</i></
5260: 74 74 3e 20 77 68 69 63 68 20 6d 75 73 74 20 62  tt> which must b
5270: 65 20 61 20 6c 69 73 74 20 6f 66 20 64 69 63 74  e a list of dict
5280: 73 20 6f 66 20 73 65 72 69 61 6c 69 7a 65 64 20  s of serialized 
5290: 3c 74 74 3e 3c 69 3e 41 72 67 75 6d 65 6e 74 3c  <tt><i>Argument<
52a0: 2f 69 3e 3c 2f 74 74 3e 20 73 74 72 75 63 74 73  /i></tt> structs
52b0: 20 74 68 65 20 6d 65 74 68 6f 64 27 73 20 6d 61   the method's ma
52c0: 70 70 69 6e 67 20 6f 66 20 72 65 73 75 6c 74 20  pping of result 
52d0: 76 61 6c 75 65 73 20 69 73 20 6d 6f 64 69 66 69  values is modifi
52e0: 65 64 2e 20 57 69 74 68 20 3c 74 74 3e 3c 69 3e  ed. With <tt><i>
52f0: 63 6d 64 3c 2f 69 3e 3c 2f 74 74 3e 2c 20 74 68  cmd</i></tt>, th
5300: 65 20 54 63 6c 20 63 61 6c 6c 62 61 63 6b 20 69  e Tcl callback i
5310: 73 20 63 68 61 6e 67 65 64 2e 20 49 66 20 3c 74  s changed. If <t
5320: 74 3e 3c 69 3e 63 6d 64 3c 2f 69 3e 3c 2f 74 74  t><i>cmd</i></tt
5330: 3e 20 69 73 20 67 69 76 65 6e 20 61 73 20 61 6e  > is given as an
5340: 20 65 6d 70 74 79 20 6c 69 73 74 2c 20 74 68 61   empty list, tha
5350: 74 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65  t callback is de
5360: 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 6d 65  leted and the me
5370: 74 68 6f 64 20 6e 6f 64 65 20 77 69 6c 6c 20 72  thod node will r
5380: 65 70 6f 72 74 20 61 6e 20 65 72 72 6f 72 20 75  eport an error u
5390: 70 6f 6e 20 63 61 6c 6c 20 66 72 6f 6d 20 74 68  pon call from th
53a0: 65 20 4f 50 43 2f 55 41 20 73 69 64 65 2e 0d 0a  e OPC/UA side...
53b0: 0d 0a 3c 74 74 3e 42 6f 70 63 75 61 20 6d 6f 6e  ..<tt>Bopcua mon
53c0: 69 74 6f 72 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f  itor <i>handle</
53d0: 69 3e 20 63 6f 6e 66 69 67 75 72 65 20 30 20 3c  i> configure 0 <
53e0: 69 3e 6d 6f 6e 69 64 20 3f 63 6d 64 3f 3c 2f 69  i>monid ?cmd?</i
53f0: 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 43 6f  ></tt>....    Co
5400: 6e 66 69 67 75 72 65 73 20 74 68 65 20 6d 6f 6e  nfigures the mon
5410: 69 74 6f 72 20 3c 74 74 3e 3c 69 3e 6d 6f 6e 69  itor <tt><i>moni
5420: 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 6e 20 74 68  d</i></tt> on th
5430: 65 20 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20  e server object 
5440: 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69  <tt><i>handle</i
5450: 3e 3c 2f 74 74 3e 20 77 69 74 68 20 74 68 65 20  ></tt> with the 
5460: 70 72 6f 76 69 64 65 64 20 70 61 72 61 6d 65 74  provided paramet
5470: 65 72 73 2c 20 73 65 65 20 3c 74 74 3e 6f 70 63  ers, see <tt>opc
5480: 75 61 20 6d 6f 6e 69 74 6f 72 20 6e 65 77 3c 2f  ua monitor new</
5490: 74 74 3e 20 66 6f 72 20 66 75 72 74 68 65 72 20  tt> for further 
54a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 0d 0a  information.....
54b0: 3c 74 74 3e 6f 70 63 75 61 20 6d 6f 6e 69 74 6f  <tt>opcua monito
54c0: 72 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20  r <i>handle</i> 
54d0: 63 6f 6e 66 69 67 75 72 65 20 3c 69 3e 73 75 62  configure <i>sub
54e0: 69 64 20 6d 6f 6e 69 64 20 3f 63 6d 64 20 6d 6f  id monid ?cmd mo
54f0: 64 65 20 69 6e 74 65 72 76 61 6c 3f 3c 2f 69 3e  de interval?</i>
5500: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 43 6f 6e  </tt>....    Con
5510: 66 69 67 75 72 65 73 20 74 68 65 20 6d 6f 6e 69  figures the moni
5520: 74 6f 72 20 3c 74 74 3e 3c 69 3e 6d 6f 6e 69 64  tor <tt><i>monid
5530: 3c 2f 69 3e 3c 2f 74 74 3e 20 69 6e 20 73 75 62  </i></tt> in sub
5540: 73 63 72 69 70 74 69 6f 6e 20 3c 74 74 3e 3c 69  scription <tt><i
5550: 3e 73 75 62 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20  >subid</i></tt> 
5560: 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 62  on the client ob
5570: 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64  ject <tt><i>hand
5580: 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 77 69 74 68  le</i></tt> with
5590: 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 70 61   the provided pa
55a0: 72 61 6d 65 74 65 72 73 2c 20 73 65 65 20 3c 74  rameters, see <t
55b0: 74 3e 6f 70 63 75 61 20 20 6d 6f 6e 69 74 6f 72  t>opcua  monitor
55c0: 20 6e 65 77 3c 2f 74 74 3e 20 66 6f 72 20 66 75   new</tt> for fu
55d0: 72 74 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  rther informatio
55e0: 6e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20  n.....<tt>opcua 
55f0: 6d 6f 6e 69 74 6f 72 20 3c 69 3e 68 61 6e 64 6c  monitor <i>handl
5600: 65 3c 2f 69 3e 20 64 65 73 74 72 6f 79 20 3c 69  e</i> destroy <i
5610: 3e 73 75 62 69 64 20 6d 6f 6e 69 64 3c 2f 69 3e  >subid monid</i>
5620: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 44 65 73  </tt>....    Des
5630: 74 72 6f 79 73 20 74 68 65 20 6d 6f 6e 69 74 6f  troys the monito
5640: 72 20 3c 74 74 3e 3c 69 3e 6d 6f 6e 69 64 3c 2f  r <tt><i>monid</
5650: 69 3e 3c 2f 74 74 3e 20 69 6e 20 73 75 62 73 63  i></tt> in subsc
5660: 72 69 70 74 69 6f 6e 20 3c 74 74 3e 3c 69 3e 73  ription <tt><i>s
5670: 75 62 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 6e  ubid</i></tt> on
5680: 20 74 68 65 20 6f 62 6a 65 63 74 20 3c 74 74 3e   the object <tt>
5690: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
56a0: 74 3e 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20  t> and releases 
56b0: 61 6c 6c 20 69 74 73 20 72 65 73 6f 75 72 63 65  all its resource
56c0: 73 2e 20 49 66 20 3c 74 74 3e 3c 69 3e 68 61 6e  s. If <tt><i>han
56d0: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20  dle</i></tt> is 
56e0: 61 20 73 65 72 76 65 72 20 6f 62 6a 65 63 74 2c  a server object,
56f0: 20 3c 74 74 3e 3c 69 3e 73 75 62 69 64 3c 2f 69   <tt><i>subid</i
5700: 3e 3c 2f 74 74 3e 20 6d 75 73 74 20 62 65 20 73  ></tt> must be s
5710: 70 65 63 69 66 69 65 64 20 61 73 20 7a 65 72 6f  pecified as zero
5720: 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 6d  .....<tt>opcua m
5730: 6f 6e 69 74 6f 72 20 3c 69 3e 68 61 6e 64 6c 65  onitor <i>handle
5740: 3c 2f 69 3e 20 69 6e 66 6f 20 3c 69 3e 73 75 62  </i> info <i>sub
5750: 69 64 20 3f 6d 6f 6e 69 64 3f 3c 2f 69 3e 3c 2f  id ?monid?</i></
5760: 74 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72  tt>....    Retur
5770: 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  ns information o
5780: 6e 20 6d 6f 6e 69 74 6f 72 20 3c 74 74 3e 3c 69  n monitor <tt><i
5790: 3e 6d 6f 6e 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20  >monid</i></tt> 
57a0: 69 6e 20 73 75 62 73 63 72 69 70 74 69 6f 6e 20  in subscription 
57b0: 3c 74 74 3e 3c 69 3e 73 75 62 69 64 3c 2f 69 3e  <tt><i>subid</i>
57c0: 3c 2f 74 74 3e 20 6f 6e 20 74 68 65 20 3c 74 74  </tt> on the <tt
57d0: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
57e0: 74 74 3e 2e 20 49 66 20 3c 74 74 3e 3c 69 3e 68  tt>. If <tt><i>h
57f0: 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 69  andle</i></tt> i
5800: 73 20 61 20 73 65 72 76 65 72 20 6f 62 6a 65 63  s a server objec
5810: 74 2c 20 3c 74 74 3e 3c 69 3e 73 75 62 69 64 3c  t, <tt><i>subid<
5820: 2f 69 3e 3c 2f 74 74 3e 20 6d 75 73 74 20 62 65  /i></tt> must be
5830: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 7a 65   specified as ze
5840: 72 6f 2e 20 54 68 65 20 72 65 73 75 6c 74 20 69  ro. The result i
5850: 73 20 61 20 6c 69 73 74 20 6f 66 20 6d 6f 6e 69  s a list of moni
5860: 74 6f 72 20 74 79 70 65 20 28 3c 74 74 3e 64 61  tor type (<tt>da
5870: 74 61 3c 2f 74 74 3e 20 6f 72 20 3c 74 74 3e 65  ta</tt> or <tt>e
5880: 76 65 6e 74 3c 2f 74 74 3e 29 20 77 68 65 6e 20  vent</tt>) when 
5890: 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69  <tt><i>handle</i
58a0: 3e 3c 2f 74 74 3e 20 72 65 66 65 72 73 20 74 6f  ></tt> refers to
58b0: 20 61 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63 74   a client object
58c0: 20 28 6f 74 68 65 72 77 69 73 65 20 74 68 65 20   (otherwise the 
58d0: 6c 69 73 74 20 65 6c 65 6d 65 6e 74 20 69 73 20  list element is 
58e0: 6c 65 66 74 20 6f 75 74 29 2c 20 74 68 65 20 6e  left out), the n
58f0: 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 2c 0d  ode identifier,.
5900: 0a 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f  .the callback co
5910: 6d 6d 61 6e 64 2c 20 74 68 65 20 61 74 74 72 69  mmand, the attri
5920: 62 75 74 65 2c 20 74 68 65 20 6d 6f 6e 69 74 6f  bute, the monito
5930: 72 27 73 20 6d 6f 64 65 20 28 6f 6e 6c 79 20 66  r's mode (only f
5940: 6f 72 20 63 6c 69 65 6e 74 20 68 61 6e 64 6c 65  or client handle
5950: 73 29 2c 20 61 6e 64 20 74 68 65 20 69 6e 74 65  s), and the inte
5960: 72 76 61 6c 2e 20 49 66 20 3c 74 74 3e 3c 69 3e  rval. If <tt><i>
5970: 6d 6f 6e 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 69  monid</i></tt> i
5980: 73 20 6f 6d 69 74 74 65 64 2c 20 61 20 6c 69 73  s omitted, a lis
5990: 74 20 6f 66 20 61 6c 6c 20 6d 6f 6e 69 74 6f 72  t of all monitor
59a0: 20 69 64 65 6e 74 69 66 65 72 73 20 72 65 67 69   identifers regi
59b0: 73 74 65 72 65 64 20 69 6e 20 74 68 65 20 73 75  stered in the su
59c0: 62 73 63 72 69 70 74 69 6f 6e 20 6f 72 20 69 6e  bscription or in
59d0: 20 74 68 65 20 73 65 72 76 65 72 20 6f 62 6a 65   the server obje
59e0: 63 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0d  ct is returned..
59f0: 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 6d 6f 6e  ...<tt>opcua mon
5a00: 69 74 6f 72 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f  itor <i>handle</
5a10: 69 3e 20 6e 65 77 20 30 20 3c 69 3e 63 6d 64 20  i> new 0 <i>cmd 
5a20: 6e 6f 64 65 69 64 20 3f 61 74 74 72 20 69 6e 74  nodeid ?attr int
5a30: 65 72 76 61 6c 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d  erval?</i></tt>.
5a40: 0a 0d 0a 20 20 20 20 43 72 65 61 74 65 73 20 61  ...    Creates a
5a50: 20 6d 6f 6e 69 74 6f 72 65 64 20 69 74 65 6d 20   monitored item 
5a60: 6f 66 20 74 68 65 20 64 61 74 61 20 76 61 6c 75  of the data valu
5a70: 65 20 66 6f 72 20 74 68 65 20 6e 6f 64 65 20 69  e for the node i
5a80: 64 65 6e 74 69 66 69 65 72 20 3c 74 74 3e 3c 69  dentifier <tt><i
5a90: 3e 6e 6f 64 65 69 64 3c 2f 69 3e 3c 2f 74 74 3e  >nodeid</i></tt>
5aa0: 20 6f 6e 20 74 68 65 20 73 65 72 76 65 72 20 6f   on the server o
5ab0: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
5ac0: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68  dle</i></tt>. Th
5ad0: 65 20 6f 70 74 69 6f 6e 61 6c 20 70 61 72 61 6d  e optional param
5ae0: 65 74 65 72 20 3c 74 74 3e 3c 69 3e 61 74 74 72  eter <tt><i>attr
5af0: 3c 2f 69 3e 3c 2f 74 74 3e 20 73 65 6c 65 63 74  </i></tt> select
5b00: 73 20 74 68 65 20 61 74 74 72 69 62 75 74 65 20  s the attribute 
5b10: 6f 66 20 74 68 65 20 6e 6f 64 65 20 74 6f 20 62  of the node to b
5b20: 65 20 6d 6f 6e 69 74 6f 72 65 64 20 28 3c 74 74  e monitored (<tt
5b30: 3e 56 61 6c 75 65 3c 2f 74 74 3e 20 69 73 20 74  >Value</tt> is t
5b40: 68 65 20 64 65 66 61 75 6c 74 29 2e 20 54 68 65  he default). The
5b50: 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 69 6e 74 65   monitoring inte
5b60: 72 76 61 6c 20 3c 74 74 3e 3c 69 3c 3e 69 6e 74  rval <tt><i<>int
5b70: 65 72 76 61 6c 3c 2f 69 3e 3c 2f 74 74 3e 20 6d  erval</i></tt> m
5b80: 75 73 74 20 62 65 20 67 69 76 65 6e 20 61 73 20  ust be given as 
5b90: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
5ba0: 65 63 6f 6e 64 73 2e 20 54 68 65 20 63 61 6c 6c  econds. The call
5bb0: 62 61 63 6b 20 63 6f 6d 6d 61 6e 64 20 70 61 72  back command par
5bc0: 61 6d 65 74 65 72 20 3c 74 74 3e 3c 69 3e 63 6d  ameter <tt><i>cm
5bd0: 64 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 64 69 73  d</i></tt> isdis
5be0: 63 75 73 73 65 64 20 69 6e 20 73 65 63 74 69 6f  cussed in sectio
5bf0: 6e 20 3c 62 3e 4d 6f 6e 69 74 6f 72 20 43 61 6c  n <b>Monitor Cal
5c00: 6c 62 61 63 6b 73 3c 2f 62 3e 20 62 65 6c 6f 77  lbacks</b> below
5c10: 2e 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 72 65  . The command re
5c20: 74 75 72 6e 73 20 61 20 6e 75 6d 65 72 69 63 20  turns a numeric 
5c30: 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 74 68  identifier of th
5c40: 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20  e newly created 
5c50: 6d 6f 6e 69 74 6f 72 2e 0d 0a 0d 0a 3c 74 74 3e  monitor.....<tt>
5c60: 6f 70 63 75 61 20 6d 6f 6e 69 74 6f 72 20 3c 69  opcua monitor <i
5c70: 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20 6e 65 77 20  >handle</i> new 
5c80: 3c 69 3e 73 75 62 69 64 20 74 79 70 65 20 63 6d  <i>subid type cm
5c90: 64 20 6e 6f 64 65 69 64 20 3f 66 69 6c 74 65 72  d nodeid ?filter
5ca0: 20 61 74 74 72 20 6d 6f 64 65 20 69 6e 74 65 72   attr mode inter
5cb0: 76 61 6c 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d  val?</i></tt>...
5cc0: 0a 20 20 20 20 43 72 65 61 74 65 73 20 61 20 6d  .    Creates a m
5cd0: 6f 6e 69 74 6f 72 65 64 20 69 74 65 6d 20 6f 66  onitored item of
5ce0: 20 3c 74 74 3e 3c 69 3e 74 79 70 65 3c 2f 69 3e   <tt><i>type</i>
5cf0: 3c 2f 74 74 3e 20 28 3c 74 74 3e 64 61 74 61 3c  </tt> (<tt>data<
5d00: 2f 74 74 3e 20 6f 72 20 3c 74 74 3e 65 76 65 6e  /tt> or <tt>even
5d10: 74 3c 2f 74 74 3e 29 20 66 6f 72 20 74 68 65 20  t</tt>) for the 
5d20: 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 20  node identifier 
5d30: 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f 69  <tt><i>nodeid</i
5d40: 3e 3c 2f 74 74 3e 20 69 6e 20 74 68 65 20 73 75  ></tt> in the su
5d50: 62 73 63 72 69 70 74 69 6f 6e 20 3c 74 74 3e 3c  bscription <tt><
5d60: 69 3e 73 75 62 69 64 3c 2f 69 3e 3c 2f 74 74 3e  i>subid</i></tt>
5d70: 20 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f   on the client o
5d80: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
5d90: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68  dle</i></tt>. Th
5da0: 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 74 3e  e parameter <tt>
5db0: 3c 69 3e 66 69 6c 74 65 72 3c 2f 69 3e 3c 2f 74  <i>filter</i></t
5dc0: 74 3e 20 6d 75 73 74 20 62 65 20 73 70 65 63 69  t> must be speci
5dd0: 66 69 65 64 20 66 6f 72 20 3c 74 74 3e 3c 69 3e  fied for <tt><i>
5de0: 65 76 65 6e 74 3c 2f 69 3e 3c 2f 74 74 3e 20 6d  event</i></tt> m
5df0: 6f 6e 69 74 6f 72 73 20 6f 6e 6c 79 20 61 6e 64  onitors only and
5e00: 20 6d 75 73 74 20 62 65 20 61 20 6c 69 73 74 20   must be a list 
5e10: 6d 61 64 65 20 75 70 20 6f 66 20 74 79 70 65 20  made up of type 
5e20: 69 64 65 6e 74 69 66 69 65 72 73 2c 20 71 75 61  identifiers, qua
5e30: 6c 69 66 69 65 64 20 6e 61 6d 65 73 2c 20 61 6e  lified names, an
5e40: 64 20 61 74 74 72 69 62 75 74 65 73 2c 20 65 2e  d attributes, e.
5e50: 67 2e 20 3c 74 74 3e 7b 3c 69 3e 42 61 73 65 45  g. <tt>{<i>BaseE
5e60: 76 65 6e 74 54 79 70 65 3c 2f 69 3e 20 4d 65 73  ventType</i> Mes
5e70: 73 61 67 65 20 56 61 6c 75 65 20 2e 2e 2e 7d 3c  sage Value ...}<
5e80: 2f 74 74 3e 2c 20 77 68 65 72 65 20 3c 74 74 3e  /tt>, where <tt>
5e90: 3c 69 3e 42 61 73 65 45 76 65 6e 74 54 79 70 65  <i>BaseEventType
5ea0: 3c 2f 69 3e 3c 2f 74 74 3e 20 6d 75 73 74 20 62  </i></tt> must b
5eb0: 65 20 67 69 76 65 6e 20 61 73 20 6e 6f 64 65 20  e given as node 
5ec0: 69 64 65 6e 74 69 66 69 65 72 20 62 79 20 6c 6f  identifier by lo
5ed0: 6f 6b 20 75 70 20 70 65 72 20 3c 74 74 3e 6f 70  ok up per <tt>op
5ee0: 63 75 61 20 74 72 61 6e 73 6c 61 74 65 3c 2f 74  cua translate</t
5ef0: 74 3e 2e 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c  t>. The optional
5f00: 20 70 61 72 61 6d 65 74 65 72 20 3c 74 74 3e 3c   parameter <tt><
5f10: 69 3e 61 74 74 72 3c 2f 69 3e 3c 2f 74 74 3e 20  i>attr</i></tt> 
5f20: 73 65 6c 65 63 74 73 20 74 68 65 20 61 74 74 72  selects the attr
5f30: 69 62 75 74 65 20 6f 66 20 74 68 65 20 6e 6f 64  ibute of the nod
5f40: 65 20 74 6f 20 62 65 20 6d 6f 6e 69 74 6f 72 65  e to be monitore
5f50: 64 20 28 3c 74 74 3e 56 61 6c 75 65 3c 2f 74 74  d (<tt>Value</tt
5f60: 3e 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  > is the default
5f70: 20 66 6f 72 20 3c 74 74 3e 64 61 74 61 3c 2f 74   for <tt>data</t
5f80: 74 3e 20 6d 6f 6e 69 74 6f 72 73 2c 20 3c 74 74  t> monitors, <tt
5f90: 3e 45 76 65 6e 74 4e 6f 74 69 66 69 65 72 3c 2f  >EventNotifier</
5fa0: 74 74 3e 20 66 6f 72 20 3c 74 74 3e 65 76 65 6e  tt> for <tt>even
5fb0: 74 3c 2f 74 74 3e 20 6d 6f 6e 69 74 6f 72 73 29  t</tt> monitors)
5fc0: 2e 20 54 68 65 20 6d 6f 6e 69 74 6f 72 20 6d 6f  . The monitor mo
5fd0: 64 65 20 3c 74 74 3e 3c 69 3e 6d 6f 64 65 3c 2f  de <tt><i>mode</
5fe0: 69 3e 3c 2f 74 74 3e 20 6d 75 73 74 20 62 65 20  i></tt> must be 
5ff0: 6f 6e 65 20 6f 66 20 3c 74 74 3e 44 69 73 61 62  one of <tt>Disab
6000: 6c 65 64 3c 2f 74 74 3e 2c 20 3c 74 74 3e 53 61  led</tt>, <tt>Sa
6010: 6d 70 6c 69 6e 67 3c 2f 74 74 3e 2c 20 61 6e 64  mpling</tt>, and
6020: 20 3c 74 74 3e 52 65 70 6f 72 74 69 6e 67 3c 2f   <tt>Reporting</
6030: 74 74 3e 2e 20 54 68 65 20 6d 6f 6e 69 74 6f 72  tt>. The monitor
6040: 69 6e 67 20 69 6e 74 65 72 76 61 6c 20 3c 74 74  ing interval <tt
6050: 3e 3c 69 3e 69 6e 74 65 72 76 61 6c 3c 2f 69 3e  ><i>interval</i>
6060: 3c 2f 74 74 3e 20 6d 75 73 74 20 62 65 20 67 69  </tt> must be gi
6070: 76 65 6e 20 61 73 20 6e 75 6d 62 65 72 20 6f 66  ven as number of
6080: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2c 20 69   milliseconds, i
6090: 66 20 6f 6d 69 74 74 65 64 20 69 74 73 20 76 61  f omitted its va
60a0: 6c 75 65 20 69 73 20 64 65 72 69 76 65 64 20 66  lue is derived f
60b0: 72 6f 6d 20 74 68 65 20 73 75 62 73 63 72 69 70  rom the subscrip
60c0: 74 69 6f 6e 2e 20 54 68 65 20 63 61 6c 6c 62 61  tion. The callba
60d0: 63 6b 20 63 6f 6d 6d 61 6e 64 20 70 61 72 61 6d  ck command param
60e0: 65 74 65 72 20 3c 74 74 3e 3c 69 3e 63 6d 64 3c  eter <tt><i>cmd<
60f0: 2f 69 3e 3c 2f 74 74 3e 20 69 73 20 64 69 73 63  /i></tt> is disc
6100: 75 73 73 65 64 20 69 6e 20 73 65 63 74 69 6f 6e  ussed in section
6110: 20 3c 62 3e 4d 6f 6e 69 74 6f 72 20 43 61 6c 6c   <b>Monitor Call
6120: 62 61 63 6b 73 3c 2f 62 3e 20 62 65 6c 6f 77 2e  backs</b> below.
6130: 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 72 65 74   The command ret
6140: 75 72 6e 73 20 61 20 6e 75 6d 65 72 69 63 20 69  urns a numeric i
6150: 64 65 6e 74 69 66 69 65 72 20 6f 66 20 74 68 65  dentifier of the
6160: 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 6d   newly created m
6170: 6f 6e 69 74 6f 72 2e 0d 0a 0d 0a 3c 74 74 3e 6f  onitor.....<tt>o
6180: 70 63 75 61 20 6d 72 65 61 64 20 3c 69 3e 68 61  pcua mread <i>ha
6190: 6e 64 6c 65 20 63 6d 64 20 6e 6f 64 65 69 64 20  ndle cmd nodeid 
61a0: 2e 2e 2e 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a  ...</i></tt>....
61b0: 20 20 20 20 53 69 6d 69 6c 61 72 20 74 6f 20 3c      Similar to <
61c0: 74 74 3e 6f 70 63 75 61 20 72 65 61 64 3c 2f 74  tt>opcua read</t
61d0: 74 3e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  t> this command 
61e0: 63 61 72 72 69 65 73 20 6f 75 74 20 61 20 6d 75  carries out a mu
61f0: 6c 74 69 20 72 65 61 64 20 6f 70 65 72 61 74 69  lti read operati
6200: 6f 6e 20 6f 66 20 76 61 6c 75 65 20 61 74 74 72  on of value attr
6210: 69 62 75 74 65 73 20 6f 6e 20 3c 74 74 3e 3c 69  ibutes on <tt><i
6220: 3e 6e 6f 64 65 69 64 3c 2f 69 3e 3c 2f 74 74 3e  >nodeid</i></tt>
6230: 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   and following n
6240: 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 73 2e  ode identifiers.
6250: 20 49 66 20 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f   If <tt><i>cmd</
6260: 69 3e 3c 2f 74 74 3e 20 69 73 20 67 69 76 65 6e  i></tt> is given
6270: 20 61 73 20 65 6d 70 74 79 20 73 74 72 69 6e 67   as empty string
6280: 2c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  , the operation 
6290: 69 73 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 61  is synchronous a
62a0: 6e 64 20 61 20 6c 69 73 74 20 6f 66 20 76 61 6c  nd a list of val
62b0: 75 65 20 61 74 74 72 69 62 75 74 65 73 20 69 73  ue attributes is
62c0: 20 72 65 74 75 72 6e 65 64 2e 20 46 6f 72 20 61   returned. For a
62d0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 70 65 72  synchronous oper
62e0: 61 74 69 6f 6e 20 73 65 65 20 3c 74 74 3e 6f 70  ation see <tt>op
62f0: 63 75 61 20 63 61 6c 6c 3c 2f 74 74 3e 20 61 6e  cua call</tt> an
6300: 64 20 73 65 63 74 69 6f 6e 20 3c 62 3e 41 79 6e  d section <b>Ayn
6310: 63 68 72 6f 6e 6f 75 73 20 4f 70 65 72 61 74 69  chronous Operati
6320: 6f 6e 73 3c 2f 62 3e 2e 0d 0a 0d 0a 3c 74 74 3e  ons</b>.....<tt>
6330: 6f 70 63 75 61 20 6d 72 65 61 64 78 20 3c 69 3e  opcua mreadx <i>
6340: 68 61 6e 64 6c 65 20 63 6d 64 20 6e 6f 64 65 69  handle cmd nodei
6350: 64 20 61 74 74 72 20 69 6e 64 65 78 20 2e 2e 2e  d attr index ...
6360: 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20  </i></tt>....   
6370: 20 53 69 6d 69 6c 61 72 20 74 6f 20 3c 74 74 3e   Similar to <tt>
6380: 6f 70 63 75 61 20 6d 72 65 61 64 3c 2f 74 74 3e  opcua mread</tt>
6390: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 63 61   this command ca
63a0: 72 72 69 65 73 20 6f 75 74 20 61 20 6d 75 6c 74  rries out a mult
63b0: 69 20 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e  i read operation
63c0: 20 6f 66 20 61 74 74 72 69 62 75 74 65 20 3c 74   of attribute <t
63d0: 74 3e 3c 69 3e 61 74 74 72 3c 2f 69 3e 3c 2f 74  t><i>attr</i></t
63e0: 74 3e 20 77 69 74 68 20 3c 74 74 3e 3c 69 3e 69  t> with <tt><i>i
63f0: 6e 64 65 78 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 6e  ndex</i></tt> on
6400: 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f   <tt><i>nodeid</
6410: 69 3e 3c 2f 74 74 3e 20 61 6e 64 20 66 6f 6c 6c  i></tt> and foll
6420: 6f 77 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73  owing parameters
6430: 2e 20 45 61 63 68 20 73 69 6e 67 6c 65 20 72 65  . Each single re
6440: 61 64 20 69 73 20 64 65 73 63 72 69 62 65 64 20  ad is described 
6450: 62 79 20 6e 6f 74 65 20 69 64 65 6e 74 69 66 69  by note identifi
6460: 65 72 2c 20 61 74 74 72 69 62 75 74 65 2c 20 61  er, attribute, a
6470: 6e 64 20 69 6e 64 65 78 2e 20 54 68 65 20 3c 74  nd index. The <t
6480: 74 3e 3c 69 3e 69 6e 64 65 78 3c 2f 69 3e 3c 2f  t><i>index</i></
6490: 74 74 3e 20 70 61 72 61 6d 65 74 65 72 20 6d 75  tt> parameter mu
64a0: 73 74 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73  st be an empty s
64b0: 74 72 69 6e 67 20 6f 72 20 61 20 76 61 6c 69 64  tring or a valid
64c0: 20 4f 50 43 2f 55 41 20 69 6e 64 65 78 20 72 61   OPC/UA index ra
64d0: 6e 67 65 2e 20 49 66 20 3c 74 74 3e 3c 69 3e 63  nge. If <tt><i>c
64e0: 6d 64 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20 67  md</i></tt> is g
64f0: 69 76 65 6e 20 61 73 20 65 6d 70 74 79 20 73 74  iven as empty st
6500: 72 69 6e 67 2c 20 74 68 65 20 6f 70 65 72 61 74  ring, the operat
6510: 69 6f 6e 20 69 73 20 73 79 6e 63 68 72 6f 6e 6f  ion is synchrono
6520: 75 73 20 61 6e 64 20 61 20 6c 69 73 74 20 6f 66  us and a list of
6530: 20 61 74 74 72 69 62 75 74 65 73 20 69 73 20 72   attributes is r
6540: 65 74 75 72 6e 65 64 2e 20 46 6f 72 20 61 73 79  eturned. For asy
6550: 6e 63 68 72 6f 6e 6f 75 73 20 6f 70 65 72 61 74  nchronous operat
6560: 69 6f 6e 20 73 65 65 20 3c 74 74 3e 6f 70 63 75  ion see <tt>opcu
6570: 61 20 63 61 6c 6c 3c 2f 74 74 3e 20 61 6e 64 20  a call</tt> and 
6580: 73 65 63 74 69 6f 6e 20 3c 62 3e 41 79 6e 63 68  section <b>Aynch
6590: 72 6f 6e 6f 75 73 20 4f 70 65 72 61 74 69 6f 6e  ronous Operation
65a0: 73 3c 2f 62 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70  s</b>.....<tt>op
65b0: 63 75 61 20 6d 77 72 69 74 65 20 3c 69 3e 68 61  cua mwrite <i>ha
65c0: 6e 64 6c 65 20 63 6d 64 20 6e 6f 64 65 69 64 20  ndle cmd nodeid 
65d0: 74 79 70 65 20 76 61 6c 75 65 20 2e 2e 2e 3c 2f  type value ...</
65e0: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 53  i></tt>....    S
65f0: 69 6d 69 6c 61 72 20 74 6f 20 3c 74 74 3e 6f 70  imilar to <tt>op
6600: 63 75 61 20 77 72 69 74 65 3c 2f 74 74 3e 20 74  cua write</tt> t
6610: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 63 61 72 72  his command carr
6620: 69 65 73 20 6f 75 74 20 61 20 6d 75 6c 74 69 20  ies out a multi 
6630: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20  write operation 
6640: 6f 66 20 76 61 6c 75 65 20 61 74 74 72 69 62 75  of value attribu
6650: 74 65 73 20 6f 6e 20 3c 74 74 3e 3c 69 3e 6e 6f  tes on <tt><i>no
6660: 64 65 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e  deid</i></tt> an
6670: 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 6f 64 65  d following node
6680: 20 69 64 65 6e 74 69 66 69 65 72 73 2e 20 45 61   identifiers. Ea
6690: 63 68 20 73 69 6e 67 6c 65 20 77 72 69 74 65 20  ch single write 
66a0: 69 73 20 64 65 73 63 72 69 62 65 64 20 62 79 20  is described by 
66b0: 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 2c  node identifier,
66c0: 20 64 61 74 61 20 74 79 70 65 2c 20 61 6e 64 20   data type, and 
66d0: 76 61 6c 75 65 2e 20 49 66 20 3c 74 74 3e 3c 69  value. If <tt><i
66e0: 3e 63 6d 64 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73  >cmd</i></tt> is
66f0: 20 67 69 76 65 6e 20 61 73 20 65 6d 70 74 79 20   given as empty 
6700: 73 74 72 69 6e 67 2c 20 74 68 65 20 6f 70 65 72  string, the oper
6710: 61 74 69 6f 6e 20 69 73 20 73 79 6e 63 68 72 6f  ation is synchro
6720: 6e 6f 75 73 2e 20 46 6f 72 20 61 73 79 6e 63 68  nous. For asynch
6730: 72 6f 6e 6f 75 73 20 6f 70 65 72 61 74 69 6f 6e  ronous operation
6740: 20 73 65 65 20 3c 74 74 3e 6f 70 63 75 61 20 63   see <tt>opcua c
6750: 61 6c 6c 3c 2f 74 74 3e 20 61 6e 64 20 73 65 63  all</tt> and sec
6760: 74 69 6f 6e 20 3c 62 3e 41 73 79 6e 63 68 72 6f  tion <b>Asynchro
6770: 6e 6f 75 73 20 4f 70 65 72 61 74 69 6f 6e 73 3c  nous Operations<
6780: 2f 62 3e 2e 20 49 6e 20 63 6f 6e 74 72 61 73 74  /b>. In contrast
6790: 20 74 6f 20 74 68 65 20 3c 74 74 3e 6f 70 63 75   to the <tt>opcu
67a0: 61 20 77 72 69 74 65 3c 2f 74 74 3e 20 63 6f 6d  a write</tt> com
67b0: 6d 61 6e 64 20 74 68 69 73 20 6f 70 65 72 61 74  mand this operat
67c0: 69 6f 6e 20 74 72 61 6e 73 66 65 72 73 20 61 6c  ion transfers al
67d0: 6c 20 76 61 6c 75 65 73 20 77 69 74 68 20 74 68  l values with th
67e0: 65 69 72 20 73 6f 75 72 63 65 20 74 69 6d 65 73  eir source times
67f0: 74 61 6d 70 20 73 65 74 20 74 6f 20 74 68 65 20  tamp set to the 
6800: 63 75 72 72 65 6e 74 20 74 69 6d 65 2e 0d 0a 0d  current time....
6810: 0a 3c 74 74 3e 6f 70 63 75 61 20 6d 77 72 69 74  .<tt>opcua mwrit
6820: 65 78 20 3c 69 3e 68 61 6e 64 6c 65 20 63 6d 64  ex <i>handle cmd
6830: 20 6e 6f 64 65 69 64 20 61 74 74 72 20 69 6e 64   nodeid attr ind
6840: 65 78 20 74 79 70 65 20 76 61 6c 75 65 20 2e 2e  ex type value ..
6850: 2e 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20  .</i></tt>....  
6860: 20 20 53 69 6d 69 6c 61 72 20 74 6f 20 3c 74 74    Similar to <tt
6870: 3e 6f 70 63 75 61 20 6d 77 72 69 74 65 3c 2f 74  >opcua mwrite</t
6880: 74 3e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  t> this command 
6890: 63 61 72 72 69 65 73 20 6f 75 74 20 61 20 6d 75  carries out a mu
68a0: 6c 74 69 20 77 72 69 74 65 20 6f 70 65 72 61 74  lti write operat
68b0: 69 6f 6e 20 6f 66 20 61 74 74 72 69 62 75 74 65  ion of attribute
68c0: 20 3c 74 74 3e 3c 69 3e 61 74 74 72 3c 2f 69 3e   <tt><i>attr</i>
68d0: 3c 2f 74 74 3e 20 77 69 74 68 20 3c 74 74 3e 3c  </tt> with <tt><
68e0: 69 3e 69 6e 64 65 78 3c 2f 69 3e 3c 2f 74 74 3e  i>index</i></tt>
68f0: 20 6f 6e 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69   on <tt><i>nodei
6900: 64 3c 2f 69 3e 3c 2f 74 74 3e 20 67 69 76 65 6e  d</i></tt> given
6910: 20 3c 74 74 3e 3c 69 3e 74 79 70 65 3c 2f 69 3e   <tt><i>type</i>
6920: 3c 2f 74 74 3e 20 61 6e 64 20 3c 74 74 3e 3c 69  </tt> and <tt><i
6930: 3e 76 61 6c 75 65 3c 2f 69 3e 3c 2f 74 74 3e 2e  >value</i></tt>.
6940: 20 45 61 63 68 20 73 69 6e 67 6c 65 20 77 72 69   Each single wri
6950: 74 65 20 69 73 20 64 65 73 63 72 69 62 65 64 20  te is described 
6960: 62 79 20 6e 6f 74 65 20 69 64 65 6e 74 69 66 69  by note identifi
6970: 65 72 2c 20 61 74 74 72 69 62 75 74 65 2c 20 69  er, attribute, i
6980: 6e 64 65 78 2c 20 64 61 74 61 20 74 79 70 65 20  ndex, data type 
6990: 61 6e 64 20 76 61 6c 75 65 2e 20 54 68 65 20 3c  and value. The <
69a0: 74 74 3e 3c 69 3e 69 6e 64 65 78 3c 2f 69 3e 3c  tt><i>index</i><
69b0: 2f 74 74 3e 20 70 61 72 61 6d 65 74 65 72 20 6d  /tt> parameter m
69c0: 75 73 74 20 62 65 20 61 6e 20 65 6d 70 74 79 20  ust be an empty 
69d0: 73 74 72 69 6e 67 20 6f 72 20 61 20 76 61 6c 69  string or a vali
69e0: 64 20 4f 50 43 2f 55 41 20 69 6e 64 65 78 20 72  d OPC/UA index r
69f0: 61 6e 67 65 2e 20 49 66 20 3c 74 74 3e 3c 69 3e  ange. If <tt><i>
6a00: 63 6d 64 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20  cmd</i></tt> is 
6a10: 67 69 76 65 6e 20 61 73 20 65 6d 70 74 79 20 73  given as empty s
6a20: 74 72 69 6e 67 2c 20 74 68 65 20 6f 70 65 72 61  tring, the opera
6a30: 74 69 6f 6e 20 69 73 20 73 79 6e 63 68 72 6f 6e  tion is synchron
6a40: 6f 75 73 2e 20 46 6f 72 20 61 73 79 6e 63 68 72  ous. For asynchr
6a50: 6f 6e 6f 75 73 20 6f 70 65 72 61 74 69 6f 6e 20  onous operation 
6a60: 73 65 65 20 3c 74 74 3e 6f 70 63 75 61 20 63 61  see <tt>opcua ca
6a70: 6c 6c 3c 2f 74 74 3e 20 61 6e 64 20 73 65 63 74  ll</tt> and sect
6a80: 69 6f 6e 20 3c 62 3e 41 79 6e 63 68 72 6f 6e 6f  ion <b>Aynchrono
6a90: 75 73 20 4f 70 65 72 61 74 69 6f 6e 73 3c 2f 62  us Operations</b
6aa0: 3e 2e 20 49 6e 20 63 6f 6e 74 72 61 73 74 20 74  >. In contrast t
6ab0: 6f 20 74 68 65 20 3c 74 74 3e 6f 70 63 75 61 20  o the <tt>opcua 
6ac0: 77 72 69 74 65 3c 2f 74 74 3e 20 63 6f 6d 6d 61  write</tt> comma
6ad0: 6e 64 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  nd this operatio
6ae0: 6e 20 74 72 61 6e 73 66 65 72 73 20 61 6c 6c 20  n transfers all 
6af0: 76 61 6c 75 65 73 20 77 69 74 68 20 74 68 65 69  values with thei
6b00: 72 20 73 6f 75 72 63 65 20 74 69 6d 65 73 74 61  r source timesta
6b10: 6d 70 20 73 65 74 20 74 6f 20 74 68 65 20 63 75  mp set to the cu
6b20: 72 72 65 6e 74 20 74 69 6d 65 2e 0d 0a 0d 0a 3c  rrent time.....<
6b30: 74 74 3e 6f 70 63 75 61 20 6e 61 6d 65 73 70 61  tt>opcua namespa
6b40: 63 65 20 3c 69 3e 68 61 6e 64 6c 65 20 3f 75 72  ce <i>handle ?ur
6b50: 69 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20  i?</i></tt>.... 
6b60: 20 20 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e     Returns the n
6b70: 61 6d 65 73 70 61 63 65 20 69 6e 64 65 78 20 66  amespace index f
6b80: 6f 72 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65  or the namespace
6b90: 20 3c 74 74 3e 3c 69 3e 75 72 69 3c 2f 69 3e 3c   <tt><i>uri</i><
6ba0: 2f 74 74 3e 20 6f 66 20 74 68 65 20 63 6c 69 65  /tt> of the clie
6bb0: 6e 74 20 6f 72 20 73 65 72 76 65 72 20 6f 62 6a  nt or server obj
6bc0: 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c  ect <tt><i>handl
6bd0: 65 3c 2f 69 3e 3c 2f 74 74 3e 20 28 6f 72 20 74  e</i></tt> (or t
6be0: 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 65  hrows an error e
6bf0: 2e 67 2e 20 77 68 65 6e 20 74 68 65 20 6e 61 6d  .g. when the nam
6c00: 65 73 70 61 63 65 20 64 6f 65 73 6e 27 74 20 65  espace doesn't e
6c10: 78 69 73 74 29 2e 20 49 66 20 3c 74 74 3e 3c 69  xist). If <tt><i
6c20: 3e 75 72 69 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73  >uri</i></tt> is
6c30: 20 6f 6d 69 74 74 65 64 2c 20 61 20 6c 69 73 74   omitted, a list
6c40: 20 6f 66 20 61 6c 6c 20 6b 6e 6f 77 6e 20 6e 61   of all known na
6c50: 6d 65 73 70 61 63 65 20 69 6e 64 69 63 65 73 20  mespace indices 
6c60: 61 6e 64 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  and correspondin
6c70: 67 20 55 52 49 73 20 69 73 20 72 65 74 75 72 6e  g URIs is return
6c80: 65 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61  ed.....<tt>opcua
6c90: 20 6e 65 77 20 3f 63 6c 69 65 6e 74 3f 20 3c 69   new ?client? <i
6ca0: 3e 3f 6e 61 6d 65 3f 3c 2f 69 3e 3c 2f 74 74 3e  >?name?</i></tt>
6cb0: 3c 62 72 3e 0d 0a 3c 74 74 3e 6f 70 63 75 61 20  <br>..<tt>opcua 
6cc0: 6e 65 77 20 73 65 72 76 65 72 20 3c 69 3e 70 6f  new server <i>po
6cd0: 72 74 20 6e 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e  rt name</i></tt>
6ce0: 0d 0a 0d 0a 20 20 20 20 43 72 65 61 74 65 73 20  ....    Creates 
6cf0: 61 20 6e 65 77 20 63 6c 69 65 6e 74 20 6f 72 20  a new client or 
6d00: 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20 61 6e  server object an
6d10: 64 20 72 65 74 75 72 6e 73 20 69 74 73 20 68 61  d returns its ha
6d20: 6e 64 6c 65 2e 20 54 68 65 20 3c 74 74 3e 3c 69  ndle. The <tt><i
6d30: 3e 70 6f 72 74 3c 2f 69 3e 3c 2f 74 74 3e 20 70  >port</i></tt> p
6d40: 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65  arameter must be
6d50: 20 70 72 65 73 65 6e 74 20 66 6f 72 20 73 65 72   present for ser
6d60: 76 65 72 20 6f 62 6a 65 63 74 73 20 61 6e 64 20  ver objects and 
6d70: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 73 65  specifies the se
6d80: 72 76 65 72 27 73 20 54 43 50 20 70 6f 72 74 2e  rver's TCP port.
6d90: 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 3c 74   The optional <t
6da0: 74 3e 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 3c 2f 74  t><i>name</i></t
6db0: 74 3e 20 69 73 20 74 68 65 20 6f 62 6a 65 63 74  t> is the object
6dc0: 20 6e 61 6d 65 20 28 74 68 65 20 20 68 61 6e 64   name (the  hand
6dd0: 6c 65 29 2e 20 49 66 20 6e 6f 20 70 61 72 61 6d  le). If no param
6de0: 65 74 65 72 73 20 61 72 65 20 67 69 76 65 6e 20  eters are given 
6df0: 74 6f 20 3c 74 74 3e 6f 70 63 75 61 20 6e 65 77  to <tt>opcua new
6e00: 3c 2f 74 74 3e 20 61 20 63 6c 69 65 6e 74 20 6f  </tt> a client o
6e10: 62 6a 65 63 74 20 77 69 74 68 20 61 6e 20 61 75  bject with an au
6e20: 74 6f 6d 61 74 69 63 20 6e 61 6d 65 20 69 73 20  tomatic name is 
6e30: 63 72 65 61 74 65 64 2e 20 44 75 72 69 6e 67 20  created. During 
6e40: 74 68 61 74 20 70 72 6f 63 65 73 73 20 74 68 65  that process the
6e50: 20 54 63 6c 20 6e 61 6d 65 73 70 61 63 65 20 3c   Tcl namespace <
6e60: 74 74 3e 3a 3a 6f 70 63 75 61 3a 3a 3c 69 3e 6e  tt>::opcua::<i>n
6e70: 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20  ame</i></tt> is 
6e80: 63 72 65 61 74 65 64 20 77 68 69 63 68 20 6c 61  created which la
6e90: 74 65 72 20 69 73 20 75 73 65 64 20 74 6f 20 68  ter is used to h
6ea0: 6f 6c 64 20 6d 65 74 68 6f 64 20 73 74 75 62 20  old method stub 
6eb0: 70 72 6f 63 65 64 75 72 65 73 20 20 61 6e 64 20  procedures  and 
6ec0: 6f 74 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  other informatio
6ed0: 6e 2e 20 54 68 61 74 20 6e 61 6d 65 73 70 61 63  n. That namespac
6ee0: 65 20 69 73 20 74 69 65 64 20 74 6f 20 74 68 65  e is tied to the
6ef0: 20 6c 69 66 65 20 74 69 6d 65 20 6f 66 20 74 68   life time of th
6f00: 65 20 63 6c 69 65 6e 74 20 6f 72 20 73 65 72 76  e client or serv
6f10: 65 72 20 6f 62 6a 65 63 74 2e 20 54 68 65 20 69  er object. The i
6f20: 6e 69 74 69 61 6c 20 61 63 63 65 73 73 20 63 6f  nitial access co
6f30: 6e 74 72 6f 6c 20 6c 69 73 74 20 6f 66 20 61 20  ntrol list of a 
6f40: 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20 69 73  server object is
6f50: 20 65 6d 70 74 79 2e 0d 0a 0d 0a 3c 74 74 3e 6f   empty.....<tt>o
6f60: 70 63 75 61 20 6f 6e 63 6c 69 65 6e 74 73 74 61  pcua onclientsta
6f70: 74 65 20 3c 69 3e 68 61 6e 64 6c 65 20 3f 63 6d  te <i>handle ?cm
6f80: 64 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20  d?</i></tt>.... 
6f90: 20 20 20 52 65 74 75 72 6e 73 20 6f 72 20 73 65     Returns or se
6fa0: 74 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ts the callback 
6fb0: 66 6f 72 20 63 6c 69 65 6e 74 20 63 6f 6e 6e 65  for client conne
6fc0: 63 74 69 6f 6e 20 73 74 61 74 65 20 63 68 61 6e  ction state chan
6fd0: 67 65 73 20 66 6f 72 20 74 68 65 20 63 6c 69 65  ges for the clie
6fe0: 6e 74 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69  nt object <tt><i
6ff0: 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e  >handle</i></tt>
7000: 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
7010: 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f 69 3e 3c 2f  <tt><i>cmd</i></
7020: 74 74 3e 20 69 73 20 74 68 65 20 54 63 6c 20 63  tt> is the Tcl c
7030: 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65 63 65 69  allback to recei
7040: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  ve connection st
7050: 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3b  ate information;
7060: 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 77   it is invoked w
7070: 69 74 68 20 74 68 72 65 65 20 61 64 64 65 64 20  ith three added 
7080: 70 61 72 61 6d 65 74 65 72 73 3a 20 31 2e 20 74  parameters: 1. t
7090: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
70a0: 61 74 65 20 61 73 20 6e 75 6d 65 72 69 63 20 4f  ate as numeric O
70b0: 50 43 2f 55 41 20 73 74 61 74 75 73 20 63 6f 64  PC/UA status cod
70c0: 65 2c 20 32 2e 20 74 68 65 20 73 65 63 75 72 65  e, 2. the secure
70d0: 20 63 68 61 6e 6e 65 6c 20 73 74 61 74 65 20 61   channel state a
70e0: 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64 20  s a string, and 
70f0: 33 2e 20 74 68 65 20 73 65 73 73 69 6f 6e 20 73  3. the session s
7100: 74 61 74 65 20 61 73 20 61 20 73 74 72 69 6e 67  tate as a string
7110: 2e 20 50 6f 73 73 69 62 6c 65 20 73 65 63 75 72  . Possible secur
7120: 65 20 63 68 61 6e 6e 65 6c 20 73 74 61 74 65 73  e channel states
7130: 20 61 72 65 20 3c 74 74 3e 63 6c 6f 73 65 64 3c   are <tt>closed<
7140: 2f 74 74 3e 2c 20 3c 74 74 3e 68 65 6c 5f 73 65  /tt>, <tt>hel_se
7150: 6e 74 3c 2f 74 74 3e 2c 20 3c 74 74 3e 68 65 6c  nt</tt>, <tt>hel
7160: 5f 72 65 63 65 69 76 65 64 3c 2f 74 74 3e 2c 20  _received</tt>, 
7170: 3c 74 74 3e 61 63 6b 5f 73 65 6e 74 3c 2f 74 74  <tt>ack_sent</tt
7180: 3e 2c 20 3c 74 74 3e 61 63 6b 5f 72 65 63 65 69  >, <tt>ack_recei
7190: 76 65 64 3c 2f 74 74 3e 2c 20 3c 74 74 3e 6f 70  ved</tt>, <tt>op
71a0: 6e 5f 73 65 6e 74 3c 2f 74 74 3e 2c 20 3c 74 74  n_sent</tt>, <tt
71b0: 3e 6f 70 65 6e 3c 2f 74 74 3e 2c 20 61 6e 64 20  >open</tt>, and 
71c0: 3c 74 74 3e 63 6c 6f 73 69 6e 67 3c 2f 74 74 3e  <tt>closing</tt>
71d0: 2e 20 50 6f 73 73 69 62 6c 65 20 73 65 73 73 69  . Possible sessi
71e0: 6f 6e 20 73 74 61 74 65 73 20 61 72 65 20 3c 74  on states are <t
71f0: 74 3e 63 6c 6f 73 65 64 3c 2f 74 74 3e 2c 20 3c  t>closed</tt>, <
7200: 74 74 3e 63 72 65 61 74 65 5f 72 65 71 75 65 73  tt>create_reques
7210: 74 65 64 3c 2f 74 74 3e 2c 20 3c 74 74 3e 63 72  ted</tt>, <tt>cr
7220: 65 61 74 65 64 3c 2f 74 74 3e 2c 20 3c 74 74 3e  eated</tt>, <tt>
7230: 61 63 74 69 76 61 74 65 5f 72 65 71 75 65 73 74  activate_request
7240: 65 64 3c 2f 74 74 3e 2c 20 3c 74 74 3e 61 63 74  ed</tt>, <tt>act
7250: 69 76 61 74 65 64 3c 2f 74 74 3e 2c 20 61 6e 64  ivated</tt>, and
7260: 20 3c 74 74 3e 63 6c 6f 73 69 6e 67 3c 2f 74 74   <tt>closing</tt
7270: 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20  >.....<tt>opcua 
7280: 6f 6e 66 69 6e 61 6c 69 7a 65 20 3c 69 3e 68 61  onfinalize <i>ha
7290: 6e 64 6c 65 20 3f 63 6d 64 3f 3c 2f 69 3e 3c 2f  ndle ?cmd?</i></
72a0: 74 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72  tt>....    Retur
72b0: 6e 73 20 6f 72 20 73 65 74 73 20 74 68 65 20 63  ns or sets the c
72c0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 6e 6f 64 65  allback for node
72d0: 20 66 69 6e 61 6c 69 7a 61 74 69 6f 6e 20 65 76   finalization ev
72e0: 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 65 72 76  ents on the serv
72f0: 65 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69  er object <tt><i
7300: 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e  >handle</i></tt>
7310: 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
7320: 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f 69 3e 3c 2f  <tt><i>cmd</i></
7330: 74 74 3e 20 69 73 20 74 68 65 20 54 63 6c 20 63  tt> is the Tcl c
7340: 61 6c 6c 62 61 63 6b 20 74 6f 20 68 61 6e 64 6c  allback to handl
7350: 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 61 74 69  e the finalizati
7360: 6f 6e 20 65 76 65 6e 74 3b 20 69 74 20 69 73 20  on event; it is 
7370: 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20 6e  invoked when a n
7380: 6f 64 65 20 69 6e 20 74 68 65 20 73 65 72 76 65  ode in the serve
7390: 72 27 73 20 61 64 64 72 65 73 73 20 73 70 61 63  r's address spac
73a0: 65 20 69 73 20 64 65 6c 65 74 65 64 20 77 69 74  e is deleted wit
73b0: 68 20 6f 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c  h one additional
73c0: 20 70 61 72 61 6d 65 74 65 72 20 77 68 69 63 68   parameter which
73d0: 20 69 73 20 74 68 65 20 6e 6f 64 65 20 69 64 65   is the node ide
73e0: 6e 74 69 66 69 65 72 20 6f 66 20 74 68 65 20 6e  ntifier of the n
73f0: 6f 64 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ode being delete
7400: 64 2e 20 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f 69  d. <tt><i>cmd</i
7410: 3e 3c 2f 74 74 3e 20 6d 75 73 74 20 68 61 76 65  ></tt> must have
7420: 20 70 72 6f 70 65 72 20 6c 69 73 74 20 66 6f 72   proper list for
7430: 6d 61 74 2e 20 49 66 20 73 70 65 63 69 66 69 65  mat. If specifie
7440: 64 20 61 73 20 61 6e 20 65 6d 70 74 79 20 6c 69  d as an empty li
7450: 73 74 2c 20 6e 6f 20 63 61 6c 6c 62 61 63 6b 20  st, no callback 
7460: 6f 6e 20 6e 6f 64 65 20 66 69 6e 61 6c 69 7a 61  on node finaliza
7470: 74 69 6f 6e 20 69 73 20 63 61 72 72 69 65 64 20  tion is carried 
7480: 6f 75 74 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75  out.....<tt>opcu
7490: 61 20 6f 6e 69 6e 69 74 69 61 6c 69 7a 65 20 3c  a oninitialize <
74a0: 69 3e 68 61 6e 64 6c 65 20 3f 63 6d 64 3f 3c 2f  i>handle ?cmd?</
74b0: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 52  i></tt>....    R
74c0: 65 74 75 72 6e 73 20 6f 72 20 73 65 74 73 20 74  eturns or sets t
74d0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  he callback for 
74e0: 6e 6f 64 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  node initializat
74f0: 69 6f 6e 20 65 76 65 6e 74 73 20 6f 6e 20 74 68  ion events on th
7500: 65 20 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20  e server object 
7510: 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69  <tt><i>handle</i
7520: 3e 3c 2f 74 74 3e 2e 20 54 68 65 20 70 61 72 61  ></tt>. The para
7530: 6d 65 74 65 72 20 3c 74 74 3e 3c 69 3e 63 6d 64  meter <tt><i>cmd
7540: 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20 74 68 65  </i></tt> is the
7550: 20 54 63 6c 20 63 61 6c 6c 62 61 63 6b 20 74 6f   Tcl callback to
7560: 20 68 61 6e 64 6c 65 20 74 68 65 20 69 6e 69 74   handle the init
7570: 69 61 6c 69 7a 61 74 69 6f 6e 20 65 76 65 6e 74  ialization event
7580: 3b 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20  ; it is invoked 
7590: 77 68 65 6e 20 61 20 6e 65 77 20 6e 6f 64 65 20  when a new node 
75a0: 69 73 20 61 64 64 65 64 20 69 6e 0d 0a 74 68 65  is added in..the
75b0: 20 73 65 72 76 65 72 27 73 20 61 64 64 72 65 73   server's addres
75c0: 73 20 73 70 61 63 65 20 77 69 74 68 20 74 77 6f  s space with two
75d0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
75e0: 6d 65 74 65 72 20 77 68 69 63 68 20 61 72 65 20  meter which are 
75f0: 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  the node identif
7600: 69 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 6e  ier of the new n
7610: 6f 64 65 20 61 6e 64 20 69 74 73 20 6e 6f 64 65  ode and its node
7620: 20 63 6c 61 73 73 2e 20 3c 74 74 3e 3c 69 3e 43   class. <tt><i>C
7630: 6d 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6d 75 73 74  md</i></tt> must
7640: 20 68 61 76 65 20 70 72 6f 70 65 72 20 6c 69 73   have proper lis
7650: 74 20 66 6f 72 6d 61 74 2e 20 49 66 20 73 70 65  t format. If spe
7660: 63 69 66 69 65 64 20 61 73 20 61 6e 20 65 6d 70  cified as an emp
7670: 74 79 20 6c 69 73 74 2c 20 6e 6f 20 63 61 6c 6c  ty list, no call
7680: 62 61 63 6b 20 6f 6e 20 6e 6f 64 65 20 69 6e 69  back on node ini
7690: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 73 20 63  tialization is c
76a0: 61 72 72 69 65 64 20 6f 75 74 2e 0d 0a 0d 0a 3c  arried out.....<
76b0: 74 74 3e 6f 70 63 75 61 20 70 61 72 65 6e 74 20  tt>opcua parent 
76c0: 3c 69 3e 68 61 6e 64 6c 65 20 6e 6f 64 65 69 64  <i>handle nodeid
76d0: 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20  </i></tt>....   
76e0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 70 61 72   Returns the par
76f0: 65 6e 74 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  ent node identif
7700: 69 65 72 20 6f 66 20 74 68 65 20 67 69 76 65 6e  ier of the given
7710: 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72   node identifier
7720: 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f   <tt><i>nodeid</
7730: 69 3e 3c 2f 74 74 3e 20 6f 6e 20 74 68 65 20 63  i></tt> on the c
7740: 6c 69 65 6e 74 20 6f 72 20 73 65 72 76 65 72 20  lient or server 
7750: 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61  object <tt><i>ha
7760: 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 0d 0a  ndle</i></tt>...
7770: 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 70 74 72 65  ..<tt>opcua ptre
7780: 65 20 3c 69 3e 68 61 6e 64 6c 65 20 3f 6e 6f 64  e <i>handle ?nod
7790: 65 69 64 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d  eid?</i></tt>...
77a0: 0a 20 20 20 20 52 65 74 75 72 6e 73 20 69 6e 66  .    Returns inf
77b0: 6f 72 6d 61 74 69 6f 6e 20 73 69 6d 69 6c 61 72  ormation similar
77c0: 20 74 6f 20 3c 74 74 3e 6f 70 63 75 61 20 74 72   to <tt>opcua tr
77d0: 65 65 3c 2f 74 74 3e 20 75 73 69 6e 67 20 74 68  ee</tt> using th
77e0: 65 20 63 6c 69 65 6e 74 20 6f 72 20 73 65 72 76  e client or serv
77f0: 65 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69  er object <tt><i
7800: 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e  >handle</i></tt>
7810: 2e 20 54 68 65 20 61 64 64 72 65 73 73 20 73 70  . The address sp
7820: 61 63 65 20 69 73 20 74 72 61 76 65 72 73 65 64  ace is traversed
7830: 20 73 74 61 72 74 69 6e 67 20 61 74 20 74 68 65   starting at the
7840: 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72   node identifier
7850: 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f   <tt><i>nodeid</
7860: 69 3e 3c 2f 74 74 3e 20 28 74 68 65 20 72 6f 6f  i></tt> (the roo
7870: 74 20 6e 6f 64 65 20 69 66 20 6f 6d 69 74 74 65  t node if omitte
7880: 64 29 2e 20 54 68 65 20 72 65 73 75 6c 74 20 6c  d). The result l
7890: 69 73 74 20 69 73 20 6d 61 64 65 20 75 70 20 6f  ist is made up o
78a0: 66 20 62 72 6f 77 73 65 20 70 61 74 68 20 6e 61  f browse path na
78b0: 6d 65 2c 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  me, node identif
78c0: 69 65 72 2c 20 6e 6f 64 65 20 63 6c 61 73 73 20  ier, node class 
78d0: 70 61 74 68 2c 20 72 65 66 65 72 65 6e 63 65 20  path, reference 
78e0: 6e 6f 64 65 20 69 64 65 6e 74 69 65 72 2c 20 74  node identier, t
78f0: 79 70 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  ype node identif
7900: 69 65 72 2c 20 61 6e 64 20 70 61 72 65 6e 74 20  ier, and parent 
7910: 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 2e  node identifier.
7920: 20 54 68 65 20 62 72 6f 77 73 65 20 70 61 74 68   The browse path
7930: 20 6e 61 6d 65 20 69 73 20 61 20 70 61 74 68 20   name is a path 
7940: 6e 61 6d 65 20 6c 69 6b 65 20 6e 6f 74 61 74 69  name like notati
7950: 6f 6e 20 6d 61 64 65 20 75 70 20 6f 66 20 74 68  on made up of th
7960: 65 20 62 72 6f 77 73 65 20 6e 61 6d 65 73 20 70  e browse names p
7970: 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 66  ointing to the f
7980: 69 6e 61 6c 20 6e 6f 64 65 20 61 73 20 73 65 65  inal node as see
7990: 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 72 74  n from the start
79a0: 69 6e 67 20 6e 6f 64 65 2e 20 42 72 6f 77 73 65  ing node. Browse
79b0: 20 6e 61 6d 65 73 20 61 72 65 20 77 72 69 74 74   names are writt
79c0: 65 6e 20 61 73 20 71 75 61 6c 69 66 69 65 64 20  en as qualified 
79d0: 6e 61 6d 65 73 2c 20 69 2e 65 2e 20 69 6e 63 6c  names, i.e. incl
79e0: 75 64 69 6e 67 20 74 68 65 20 6e 75 6d 65 72 69  uding the numeri
79f0: 63 20 6e 61 6d 65 73 70 61 63 65 20 69 6e 64 65  c namespace inde
7a00: 78 20 69 66 20 6e 6f 74 20 69 6e 20 72 6f 6f 74  x if not in root
7a10: 20 6e 61 6d 65 73 70 61 63 65 2e 20 53 69 6d 69   namespace. Simi
7a20: 6c 61 72 6c 79 2c 20 74 68 65 20 6e 6f 64 65 20  larly, the node 
7a30: 63 6c 61 73 73 20 70 61 74 68 20 69 73 20 61 20  class path is a 
7a40: 70 61 74 68 20 6e 61 6d 65 20 6c 69 6b 65 20 6e  path name like n
7a50: 6f 74 61 74 69 6f 6e 20 6d 61 64 65 20 75 70 20  otation made up 
7a60: 6f 66 20 74 68 65 20 6e 6f 64 65 20 63 6c 61 73  of the node clas
7a70: 73 65 73 20 6f 66 20 61 6c 6c 20 6e 6f 64 65 73  ses of all nodes
7a80: 20 61 6c 6f 6e 67 20 74 68 65 20 70 61 74 68 2e   along the path.
7a90: 20 54 68 65 20 3c 74 74 3e 6f 70 63 75 61 20 70   The <tt>opcua p
7aa0: 74 72 65 65 3c 2f 74 74 3e 20 63 6f 6d 6d 61 6e  tree</tt> comman
7ab0: 64 20 69 73 20 75 73 65 64 20 69 6e 74 65 72 6e  d is used intern
7ac0: 61 6c 6c 79 20 62 79 20 74 68 65 20 3c 74 74 3e  ally by the <tt>
7ad0: 6f 70 63 75 61 20 67 65 6e 73 74 75 62 73 3c 2f  opcua genstubs</
7ae0: 74 74 3e 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f  tt> command in o
7af0: 72 64 65 72 20 74 6f 20 66 69 6c 74 65 72 20 6f  rder to filter o
7b00: 75 74 20 6f 62 6a 65 63 74 73 20 61 6e 64 20 6d  ut objects and m
7b10: 65 74 68 6f 64 73 20 77 68 65 6e 20 63 72 65 61  ethods when crea
7b20: 74 69 6e 67 20 73 74 75 62 20 54 63 6c 20 63 6f  ting stub Tcl co
7b30: 6d 6d 61 6e 64 73 20 74 6f 20 69 6e 76 6f 6b 65  mmands to invoke
7b40: 20 6d 65 74 68 6f 64 73 20 6f 6e 20 6f 62 6a 65   methods on obje
7b50: 63 74 73 2e 0d 0a 0d 0a 3c 74 74 3e 42 6f 70 63  cts.....<tt>Bopc
7b60: 75 61 20 70 75 62 73 75 62 20 3c 69 3e 68 61 6e  ua pubsub <i>han
7b70: 64 6c 65 3c 2f 69 3e 20 41 64 64 43 6f 6e 6e 65  dle</i> AddConne
7b80: 63 74 69 6f 6e 20 3c 69 3e 63 6f 6e 66 69 67 3c  ction <i>config<
7b90: 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20  /i></tt>....    
7ba0: 41 64 64 73 20 61 20 6e 65 77 20 3c 74 74 3e 50  Adds a new <tt>P
7bb0: 75 62 53 75 62 43 6f 6e 6e 65 63 74 69 6f 6e 3c  ubSubConnection<
7bc0: 2f 74 74 3e 20 77 69 74 68 20 74 68 65 20 70 61  /tt> with the pa
7bd0: 72 61 6d 65 74 65 72 73 20 66 72 6f 6d 20 3c 74  rameters from <t
7be0: 74 3e 3c 69 3e 63 6f 6e 66 69 67 3c 2f 69 3e 3c  t><i>config</i><
7bf0: 2f 74 74 3e 2c 20 77 68 69 63 68 20 6d 75 73 74  /tt>, which must
7c00: 20 62 65 20 61 20 64 69 63 74 69 6f 6e 61 72 79   be a dictionary
7c10: 20 6f 66 20 74 79 70 65 20 3c 74 74 3e 50 75 62   of type <tt>Pub
7c20: 53 75 62 43 6f 6e 6e 65 63 74 69 6f 6e 44 61 74  SubConnectionDat
7c30: 61 54 79 70 65 3c 2f 74 74 3e 2e 20 54 68 65 20  aType</tt>. The 
7c40: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 63 61 72  operation is car
7c50: 72 69 65 64 20 6f 75 74 20 6f 6e 20 74 68 65 20  ried out on the 
7c60: 73 65 72 76 65 72 20 67 69 76 65 6e 20 74 68 65  server given the
7c70: 20 63 6c 69 65 6e 74 20 6f 72 20 73 65 72 76 65   client or serve
7c80: 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e  r object <tt><i>
7c90: 68 61 6e 64 6c 65 3c 69 3e 3c 2f 74 74 3e 2e 20  handle<i></tt>. 
7ca0: 54 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  The node identif
7cb0: 69 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 3c  ier of the new <
7cc0: 74 74 3e 50 75 62 53 75 62 43 6f 6e 6e 65 63 74  tt>PubSubConnect
7cd0: 69 6f 6e 3c 2f 74 74 3e 20 69 73 20 72 65 74 75  ion</tt> is retu
7ce0: 72 6e 65 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63  rned.....<tt>opc
7cf0: 75 61 20 70 75 62 73 75 62 20 3c 69 3e 68 61 6e  ua pubsub <i>han
7d00: 64 6c 65 3c 2f 69 3e 20 41 64 64 44 61 74 61 53  dle</i> AddDataS
7d10: 65 74 46 6f 6c 64 65 72 20 3c 69 3e 6e 61 6d 65  etFolder <i>name
7d20: 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20  </i></tt>....   
7d30: 20 41 64 64 73 20 61 20 6e 65 77 20 3c 74 74 3e   Adds a new <tt>
7d40: 44 61 74 61 53 65 74 46 6f 6c 64 65 72 3c 2f 74  DataSetFolder</t
7d50: 74 3e 20 6f 62 6a 65 63 74 20 77 69 74 68 20 6e  t> object with n
7d60: 61 6d 65 20 3c 74 74 3e 3c 69 3e 6e 61 6d 65 3c  ame <tt><i>name<
7d70: 2f 69 3e 3c 2f 74 74 3e 20 69 6e 20 74 68 65 20  /i></tt> in the 
7d80: 73 65 72 76 65 72 20 67 69 76 65 6e 20 74 68 65  server given the
7d90: 20 63 6c 69 65 6e 74 20 6f 72 20 73 65 72 76 65   client or serve
7da0: 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e  r object <tt><i>
7db0: 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e  handle</i></tt>.
7dc0: 20 54 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   The operation i
7dd0: 73 20 63 61 72 72 69 65 64 20 6f 75 74 20 6f 6e  s carried out on
7de0: 20 74 68 65 20 73 65 72 76 65 72 20 67 69 76 65   the server give
7df0: 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 0d  n the client or.
7e00: 0a 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20 3c  .server object <
7e10: 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e  tt><i>handle</i>
7e20: 3c 2f 74 74 3e 2e 20 54 68 65 20 6e 6f 64 65 20  </tt>. The node 
7e30: 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 74 68  identifier of th
7e40: 65 20 6e 65 77 20 3c 74 74 3e 44 61 74 61 53 65  e new <tt>DataSe
7e50: 74 46 6f 6c 64 65 72 3c 2f 74 74 3e 20 69 73 20  tFolder</tt> is 
7e60: 72 65 74 75 72 6e 65 64 2e 0d 0a 0d 0a 3c 74 74  returned.....<tt
7e70: 3e 6f 70 63 75 61 20 70 75 62 73 75 62 20 3c 69  >opcua pubsub <i
7e80: 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20 41 64 64 44  >handle</i> AddD
7e90: 61 74 61 53 65 74 52 65 61 64 65 72 20 3c 69 3e  ataSetReader <i>
7ea0: 67 72 6f 75 70 49 64 20 72 65 61 64 65 72 44 61  groupId readerDa
7eb0: 74 61 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20  ta</i></tt>.... 
7ec0: 20 20 20 41 64 64 73 20 61 20 6e 65 77 20 3c 74     Adds a new <t
7ed0: 74 3e 44 61 74 61 53 65 74 52 65 61 64 65 72 3c  t>DataSetReader<
7ee0: 2f 74 74 3e 20 6f 62 6a 65 63 74 20 77 69 74 68  /tt> object with
7ef0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
7f00: 6d 20 3c 74 74 3e 3c 69 3e 72 65 61 64 65 72 44  m <tt><i>readerD
7f10: 61 74 61 3c 2f 69 3e 3c 2f 74 74 3e 20 77 68 69  ata</i></tt> whi
7f20: 63 68 20 6d 75 73 74 20 62 65 20 61 20 64 69 63  ch must be a dic
7f30: 74 69 6f 6e 61 72 79 20 6f 66 20 74 79 70 65 20  tionary of type 
7f40: 3c 74 74 3e 44 61 74 61 53 65 74 52 65 61 64 65  <tt>DataSetReade
7f50: 72 44 61 74 61 54 79 70 65 3c 2f 74 74 3e 20 6f  rDataType</tt> o
7f60: 6e 20 74 68 65 20 3c 74 74 3e 52 65 61 64 65 72  n the <tt>Reader
7f70: 47 72 6f 75 70 3c 2f 74 74 3e 20 77 69 74 68 20  Group</tt> with 
7f80: 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 20  node identifier 
7f90: 3c 74 74 3e 3c 69 3e 67 72 6f 75 70 49 64 3c 2f  <tt><i>groupId</
7fa0: 69 3e 3c 2f 74 74 3e 2e 20 54 68 65 20 6f 70 65  i></tt>. The ope
7fb0: 72 61 74 69 6f 6e 20 69 73 20 63 61 72 72 69 65  ration is carrie
7fc0: 64 20 6f 75 74 20 6f 6e 20 74 68 65 20 73 65 72  d out on the ser
7fd0: 76 65 72 20 67 69 76 65 6e 20 74 68 65 20 63 6c  ver given the cl
7fe0: 69 65 6e 74 20 6f 72 20 73 65 72 76 65 72 20 6f  ient or server o
7ff0: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
8000: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68  dle</i></tt>. Th
8010: 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65  e node identifie
8020: 72 20 6f 66 20 74 68 65 20 6e 65 77 20 3c 74 74  r of the new <tt
8030: 3e 44 61 74 61 53 65 74 52 65 61 64 65 72 3c 2f  >DataSetReader</
8040: 74 74 3e 20 69 73 20 72 65 74 75 72 6e 65 64 2e  tt> is returned.
8050: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 70 75  ....<tt>opcua pu
8060: 62 73 75 62 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f  bsub <i>handle</
8070: 69 3e 20 41 64 64 44 61 74 61 53 65 74 57 72 69  i> AddDataSetWri
8080: 74 65 72 20 3c 69 3e 67 72 6f 75 70 49 64 20 77  ter <i>groupId w
8090: 72 69 74 65 72 44 61 74 61 3c 2f 69 3e 3c 2f 74  riterData</i></t
80a0: 74 3e 0d 0a 0d 0a 20 20 20 20 41 64 64 73 20 61  t>....    Adds a
80b0: 20 6e 65 77 20 3c 74 74 3e 44 61 74 61 53 65 74   new <tt>DataSet
80c0: 57 72 69 74 65 72 3c 2f 74 74 3e 20 6f 62 6a 65  Writer</tt> obje
80d0: 63 74 20 77 69 74 68 20 69 6e 66 6f 72 6d 61 74  ct with informat
80e0: 69 6f 6e 20 66 72 6f 6d 20 3c 74 74 3e 3c 69 3e  ion from <tt><i>
80f0: 77 72 69 74 65 72 44 61 74 61 3c 2f 69 3e 3c 2f  writerData</i></
8100: 74 74 3e 20 77 68 69 63 68 20 6d 75 73 74 20 62  tt> which must b
8110: 65 20 61 20 64 69 63 74 69 6f 6e 61 72 79 20 6f  e a dictionary o
8120: 66 20 74 79 70 65 20 3c 74 74 3e 44 61 74 61 53  f type <tt>DataS
8130: 65 74 57 72 69 74 65 72 44 61 74 61 54 79 70 65  etWriterDataType
8140: 3c 2f 74 74 3e 20 6f 6e 20 74 68 65 20 3c 74 74  </tt> on the <tt
8150: 3e 57 72 69 74 65 72 47 72 6f 75 70 3c 2f 74 74  >WriterGroup</tt
8160: 3e 20 77 69 74 68 20 6e 6f 64 65 20 69 64 65 6e  > with node iden
8170: 74 69 66 69 65 72 20 3c 74 74 3e 3c 69 3e 67 72  tifier <tt><i>gr
8180: 6f 75 70 49 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 20  oupId</i></tt>. 
8190: 54 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  The operation is
81a0: 20 63 61 72 72 69 65 64 20 6f 75 74 20 6f 6e 20   carried out on 
81b0: 74 68 65 20 73 65 72 76 65 72 20 67 69 76 65 6e  the server given
81c0: 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20 73   the client or s
81d0: 65 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74 74  erver object <tt
81e0: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
81f0: 74 74 3e 2e 20 54 68 65 20 6e 6f 64 65 20 69 64  tt>. The node id
8200: 65 6e 74 69 66 69 65 72 20 6f 66 20 74 68 65 20  entifier of the 
8210: 6e 65 77 20 3c 74 74 3e 44 61 74 61 53 65 74 57  new <tt>DataSetW
8220: 72 69 74 65 72 3c 2f 74 74 3e 20 69 73 20 72 65  riter</tt> is re
8230: 74 75 72 6e 65 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f  turned.....<tt>o
8240: 70 63 75 61 20 70 75 62 73 75 62 20 3c 69 3e 68  pcua pubsub <i>h
8250: 61 6e 64 6c 65 3c 2f 69 3e 20 41 64 64 50 75 62  andle</i> AddPub
8260: 6c 69 73 68 65 64 44 61 74 61 49 74 65 6d 73 20  lishedDataItems 
8270: 3c 69 3e 6e 61 6d 65 20 61 6c 69 61 73 65 73 20  <i>name aliases 
8280: 66 6c 61 67 73 20 76 61 72 73 3c 2f 69 3e 3c 2f  flags vars</i></
8290: 74 74 3e 0d 0a 0d 0a 20 20 20 20 41 64 64 73 20  tt>....    Adds 
82a0: 61 20 6e 65 77 20 3c 74 74 3e 50 75 62 6c 69 73  a new <tt>Publis
82b0: 68 65 64 44 61 74 61 53 65 74 3c 2f 74 74 3e 20  hedDataSet</tt> 
82c0: 77 69 74 68 20 6e 61 6d 65 20 3c 74 74 3e 3c 69  with name <tt><i
82d0: 3e 6e 61 6d 65 3c 2f 69 3e 3c 2f 74 74 3e 20 61  >name</i></tt> a
82e0: 6e 64 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  nd the informati
82f0: 6f 6e 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  on contained in 
8300: 74 68 65 20 74 68 72 65 65 20 70 61 72 61 6d 65  the three parame
8310: 74 65 72 73 20 3c 74 74 3e 3c 69 3e 61 6c 69 61  ters <tt><i>alia
8320: 73 65 73 3c 2f 69 3e 3c 2f 74 74 3e 20 28 6c 69  ses</i></tt> (li
8330: 73 74 20 6f 66 20 3c 74 74 3e 53 74 72 69 6e 67  st of <tt>String
8340: 3c 2f 74 74 3e 20 74 79 70 65 29 2c 20 3c 74 74  </tt> type), <tt
8350: 3e 3c 69 3e 66 6c 61 67 73 3c 2f 69 3e 3c 2f 74  ><i>flags</i></t
8360: 74 3e 20 28 6c 69 73 74 20 6f 66 20 3c 74 74 3e  t> (list of <tt>
8370: 55 49 6e 74 31 36 3c 2f 74 74 3e 20 74 79 70 65  UInt16</tt> type
8380: 29 2c 20 61 6e 64 20 3c 74 74 3e 3c 69 3e 76 61  ), and <tt><i>va
8390: 72 73 3c 2f 69 3e 3c 2f 74 74 3e 20 28 6c 69 73  rs</i></tt> (lis
83a0: 74 20 6f 66 20 3c 74 74 3e 50 75 62 6c 69 73 68  t of <tt>Publish
83b0: 65 64 56 61 72 69 61 62 6c 65 44 61 74 61 54 79  edVariableDataTy
83c0: 70 65 3c 2f 74 74 3e 29 2e 20 54 68 65 20 74 68  pe</tt>). The th
83d0: 72 65 65 20 6c 69 73 74 73 20 6d 75 73 74 20 68  ree lists must h
83e0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 75 6d  ave the same num
83f0: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 2e  ber of elements.
8400: 20 54 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   The operation i
8410: 73 20 63 61 72 72 69 65 64 20 6f 75 74 20 6f 6e  s carried out on
8420: 20 74 68 65 20 73 65 72 76 65 72 20 67 69 76 65   the server give
8430: 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20  n the client or 
8440: 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74  server object <t
8450: 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c  t><i>handle</i><
8460: 2f 74 74 3e 2e 20 54 68 65 20 6e 6f 64 65 20 69  /tt>. The node i
8470: 64 65 6e 74 69 66 69 65 72 20 6f 66 20 74 68 65  dentifier of the
8480: 20 6e 65 77 20 3c 74 74 3e 50 75 62 6c 69 73 68   new <tt>Publish
8490: 65 64 44 61 74 61 53 65 74 3c 2f 74 74 3e 20 69  edDataSet</tt> i
84a0: 73 20 72 65 74 75 72 6e 65 64 2e 0d 0a 0d 0a 3c  s returned.....<
84b0: 74 74 3e 6f 70 63 75 61 20 70 75 62 73 75 62 20  tt>opcua pubsub 
84c0: 3c 2f 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20 41  </i>handle</i> A
84d0: 64 64 52 65 61 64 65 72 47 72 6f 75 70 20 3c 69  ddReaderGroup <i
84e0: 3e 63 6f 6e 6e 49 64 20 72 65 61 64 65 72 47 72  >connId readerGr
84f0: 6f 75 70 44 61 74 61 3c 2f 69 3e 3c 2f 74 74 3e  oupData</i></tt>
8500: 0d 0a 0d 0a 20 20 20 20 41 64 64 73 20 61 20 6e  ....    Adds a n
8510: 65 77 20 3c 74 74 3e 52 65 61 64 65 72 47 72 6f  ew <tt>ReaderGro
8520: 75 70 3c 2f 74 74 3e 20 6f 62 6a 65 63 74 20 77  up</tt> object w
8530: 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ith information 
8540: 66 72 6f 6d 20 3c 74 74 3e 3c 69 3e 72 65 61 64  from <tt><i>read
8550: 65 72 47 72 6f 75 70 44 61 74 61 3c 2f 69 3e 3c  erGroupData</i><
8560: 2f 74 74 3e 20 77 68 69 63 68 20 6d 75 73 74 20  /tt> which must 
8570: 62 65 20 61 20 64 69 63 74 69 6f 6e 61 72 79 20  be a dictionary 
8580: 6f 66 20 74 79 70 65 20 3c 74 74 3e 52 65 61 64  of type <tt>Read
8590: 65 72 47 72 6f 75 70 44 61 74 61 54 79 70 65 3c  erGroupDataType<
85a0: 2f 74 74 3e 20 6f 6e 20 74 68 65 20 3c 74 74 3e  /tt> on the <tt>
85b0: 50 75 62 53 75 62 43 6f 6e 6e 65 63 74 69 6f 6e  PubSubConnection
85c0: 3c 2f 74 74 3e 20 77 69 74 68 20 6e 6f 64 65 20  </tt> with node 
85d0: 69 64 65 6e 74 69 66 69 65 72 20 3c 74 74 3e 3c  identifier <tt><
85e0: 69 3e 63 6f 6e 6e 49 64 3c 2f 69 3e 3c 2f 74 74  i>connId</i></tt
85f0: 3e 2e 20 54 68 65 20 6f 70 65 72 61 74 69 6f 6e  >. The operation
8600: 20 69 73 20 63 61 72 72 69 65 64 20 6f 75 74 20   is carried out 
8610: 6f 6e 20 74 68 65 20 73 65 72 76 65 72 20 67 69  on the server gi
8620: 76 65 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f  ven the client o
8630: 72 20 73 65 72 76 65 72 20 6f 62 6a 65 63 74 20  r server object 
8640: 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69  <tt><i>handle</i
8650: 3e 3c 2f 74 74 3e 2e 20 54 68 65 20 6e 6f 64 65  ></tt>. The node
8660: 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 74   identifier of t
8670: 68 65 20 6e 65 77 20 3c 74 74 3e 52 65 61 64 65  he new <tt>Reade
8680: 72 47 72 6f 75 70 3c 2f 74 74 3e 20 69 73 20 72  rGroup</tt> is r
8690: 65 74 75 72 6e 65 64 2e 0d 0a 0d 0a 3c 74 74 3e  eturned.....<tt>
86a0: 6f 70 63 75 61 20 70 75 62 73 75 62 20 3c 69 3e  opcua pubsub <i>
86b0: 68 61 6e 64 6c 65 3c 2f 69 3e 20 41 64 64 57 72  handle</i> AddWr
86c0: 69 74 65 72 47 72 6f 75 70 20 3c 69 3e 63 6f 6e  iterGroup <i>con
86d0: 6e 49 64 20 77 72 69 74 65 72 47 72 6f 75 70 44  nId writerGroupD
86e0: 61 74 61 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a  ata</i></tt>....
86f0: 20 20 20 20 41 64 64 73 20 61 20 6e 65 77 20 3c      Adds a new <
8700: 74 74 3e 57 72 69 74 65 72 47 72 6f 75 70 3c 2f  tt>WriterGroup</
8710: 74 74 3e 20 6f 62 6a 65 63 74 20 77 69 74 68 20  tt> object with 
8720: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
8730: 20 3c 74 74 3e 3c 69 3e 77 72 69 74 65 72 47 72   <tt><i>writerGr
8740: 6f 75 70 44 61 74 61 3c 2f 69 3e 3c 2f 74 74 3e  oupData</i></tt>
8750: 20 77 68 69 63 68 20 6d 75 73 74 20 62 65 20 61   which must be a
8760: 20 64 69 63 74 69 6f 6e 61 72 79 20 6f 66 20 74   dictionary of t
8770: 79 70 65 20 3c 74 74 3e 57 72 69 74 65 72 47 72  ype <tt>WriterGr
8780: 6f 75 70 44 61 74 61 54 79 70 65 3c 2f 74 74 3e  oupDataType</tt>
8790: 20 6f 6e 20 74 68 65 20 3c 74 74 3e 50 75 62 53   on the <tt>PubS
87a0: 75 62 43 6f 6e 6e 65 63 74 69 6f 6e 3c 2f 74 74  ubConnection</tt
87b0: 3e 20 77 69 74 68 20 6e 6f 64 65 20 69 64 65 6e  > with node iden
87c0: 74 69 66 69 65 72 20 3c 74 74 3e 3c 69 3e 63 6f  tifier <tt><i>co
87d0: 6e 6e 49 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54  nnId</i></tt>. T
87e0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  he operation is 
87f0: 63 61 72 72 69 65 64 20 6f 75 74 20 6f 6e 20 74  carried out on t
8800: 68 65 20 73 65 72 76 65 72 20 67 69 76 65 6e 20  he server given 
8810: 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20 73 65  the client or se
8820: 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e  rver object <tt>
8830: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
8840: 74 3e 2e 20 54 68 65 20 6e 6f 64 65 20 69 64 65  t>. The node ide
8850: 6e 74 69 66 69 65 72 20 6f 66 20 74 68 65 20 6e  ntifier of the n
8860: 65 77 20 3c 74 74 3e 57 72 69 74 65 72 47 72 6f  ew <tt>WriterGro
8870: 75 70 3c 2f 74 74 3e 20 69 73 20 72 65 74 75 72  up</tt> is retur
8880: 6e 65 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75  ned.....<tt>opcu
8890: 61 20 70 75 62 73 75 62 20 3c 69 3e 68 61 6e 64  a pubsub <i>hand
88a0: 6c 65 3c 2f 69 3e 20 44 65 6c 65 74 65 50 75 62  le</i> DeletePub
88b0: 53 75 62 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  SubConfiguration
88c0: 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 6d  </tt>....    Rem
88d0: 6f 76 65 73 20 61 6c 6c 20 63 75 72 72 65 6e 74  oves all current
88e0: 6c 79 20 63 6f 6e 66 69 67 75 72 65 64 20 50 75  ly configured Pu
88f0: 62 53 75 62 20 63 6f 6d 70 6f 6e 65 6e 74 73 20  bSub components 
8900: 28 3c 74 74 3e 50 75 62 53 75 62 43 6f 6e 6e 65  (<tt>PubSubConne
8910: 63 74 69 6f 6e 73 3c 2f 74 74 3e 2c 20 3c 74 74  ctions</tt>, <tt
8920: 3e 52 65 61 64 65 72 47 72 6f 75 70 73 3c 2f 74  >ReaderGroups</t
8930: 74 3e 2c 20 3c 74 74 3e 57 72 69 74 65 72 47 72  t>, <tt>WriterGr
8940: 6f 75 70 73 3c 2f 74 74 3e 2c 20 3c 74 74 3e 50  oups</tt>, <tt>P
8950: 75 62 6c 69 73 68 65 64 44 61 74 61 53 65 74 73  ublishedDataSets
8960: 3c 2f 74 74 3e 2c 20 3c 74 74 3e 44 61 74 61 53  </tt>, <tt>DataS
8970: 65 74 52 65 61 64 65 72 73 3c 2f 74 74 3e 2c 20  etReaders</tt>, 
8980: 61 6e 64 20 3c 74 74 3e 44 61 74 61 53 65 74 57  and <tt>DataSetW
8990: 72 69 74 65 72 73 3c 2f 74 74 3e 29 20 69 6e 20  riters</tt>) in 
89a0: 74 68 65 20 73 65 72 76 65 72 20 67 69 76 65 6e  the server given
89b0: 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20 73   the client or s
89c0: 65 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74 74  erver object <tt
89d0: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
89e0: 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75  tt>.....<tt>opcu
89f0: 61 20 70 75 62 73 75 62 20 3c 69 3e 68 61 6e 64  a pubsub <i>hand
8a00: 6c 65 3c 2f 69 3e 20 4c 6f 61 64 50 75 62 53 75  le</i> LoadPubSu
8a10: 62 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 46 69  bConfigurationFi
8a20: 6c 65 20 3c 69 3e 62 79 74 65 73 3c 2f 69 3e 3c  le <i>bytes</i><
8a30: 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 54 68 69 73  /tt>....    This
8a40: 20 73 75 62 63 6f 6d 6d 61 6e 64 20 69 73 20 69   subcommand is i
8a50: 64 65 6e 74 69 63 61 6c 20 74 6f 20 3c 74 74 3e  dentical to <tt>
8a60: 6f 70 63 75 61 20 70 75 62 73 75 62 63 66 67 20  opcua pubsubcfg 
8a70: 6c 6f 61 64 3c 2f 74 74 3e 20 62 75 74 20 63 61  load</tt> but ca
8a80: 6e 20 62 65 20 69 6e 76 6f 6b 65 64 20 66 72 6f  n be invoked fro
8a90: 6d 20 61 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63  m a client objec
8aa0: 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c  t <tt><i>handle<
8ab0: 2f 69 3e 3c 2f 74 74 3e 2c 20 74 6f 6f 2e 0d 0a  /i></tt>, too...
8ac0: 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 70 75 62 73  ..<tt>opcua pubs
8ad0: 75 62 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e  ub <i>handle</i>
8ae0: 20 52 65 6d 6f 76 65 43 6f 6e 6e 65 63 74 69 6f   RemoveConnectio
8af0: 6e 20 3c 69 3e 63 6f 6e 6e 49 64 3c 2f 69 3e 3c  n <i>connId</i><
8b00: 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 6d 6f  /tt>....    Remo
8b10: 76 65 73 20 74 68 65 20 3c 74 74 3e 50 75 62 53  ves the <tt>PubS
8b20: 75 62 43 6f 6e 6e 65 63 74 69 6f 6e 3c 2f 74 74  ubConnection</tt
8b30: 3e 20 77 69 74 68 20 6e 6f 64 65 20 69 64 65 6e  > with node iden
8b40: 74 69 66 69 65 72 20 3c 74 74 3e 3c 69 3e 63 6f  tifier <tt><i>co
8b50: 6e 6e 49 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54  nnId</i></tt>. T
8b60: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  he operation is 
8b70: 63 61 72 72 69 65 64 20 6f 75 74 20 6f 6e 20 74  carried out on t
8b80: 68 65 20 73 65 72 76 65 72 20 67 69 76 65 6e 20  he server given 
8b90: 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20 73 65  the client or se
8ba0: 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e  rver object <tt>
8bb0: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
8bc0: 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61  t>.....<tt>opcua
8bd0: 20 70 75 62 73 75 62 20 3c 69 3e 68 61 6e 64 6c   pubsub <i>handl
8be0: 65 3c 2f 69 3e 20 52 65 6d 6f 76 65 44 61 74 61  e</i> RemoveData
8bf0: 53 65 74 46 6f 6c 64 65 72 20 3c 69 3e 66 6f 6c  SetFolder <i>fol
8c00: 64 65 72 49 64 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a  derId</i></tt>..
8c10: 0d 0a 20 20 20 20 52 65 6d 6f 76 65 73 20 74 68  ..    Removes th
8c20: 65 20 3c 74 74 3e 44 61 74 61 53 65 74 46 6f 6c  e <tt>DataSetFol
8c30: 64 65 72 3c 2f 74 74 3e 20 6f 62 6a 65 63 74 20  der</tt> object 
8c40: 77 69 74 68 20 6e 6f 64 65 20 69 64 65 6e 74 69  with node identi
8c50: 66 69 65 72 20 3c 74 74 3e 3c 69 3e 66 6f 6c 64  fier <tt><i>fold
8c60: 65 72 49 64 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e  erId</i></tt> an
8c70: 64 20 61 6c 6c 20 63 6f 6e 74 61 69 6e 65 64 20  d all contained 
8c80: 3c 74 74 3e 50 75 62 6c 69 73 68 65 64 44 61 74  <tt>PublishedDat
8c90: 61 53 65 74 73 3c 2f 74 74 3e 2e 20 54 68 65 20  aSets</tt>. The 
8ca0: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 63 61 72  operation is car
8cb0: 72 69 65 64 20 6f 75 74 20 6f 6e 20 74 68 65 20  ried out on the 
8cc0: 73 65 72 76 65 72 20 67 69 76 65 6e 20 74 68 65  server given the
8cd0: 20 63 6c 69 65 6e 74 20 6f 72 20 73 65 72 76 65   client or serve
8ce0: 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e  r object <tt><i>
8cf0: 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e  handle</i></tt>.
8d00: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 70 75  ....<tt>opcua pu
8d10: 62 73 75 62 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f  bsub <i>handle</
8d20: 69 3e 20 52 65 6d 6f 76 65 44 61 74 61 53 65 74  i> RemoveDataSet
8d30: 52 65 61 64 65 72 20 3c 69 3e 67 72 6f 75 70 49  Reader <i>groupI
8d40: 64 20 72 65 61 64 65 72 49 64 3c 2f 69 3e 3c 2f  d readerId</i></
8d50: 74 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 6d 6f 76  tt>....    Remov
8d60: 65 73 20 74 68 65 20 3c 74 74 3e 44 61 74 61 53  es the <tt>DataS
8d70: 65 74 52 65 61 64 65 72 3c 2f 74 74 3e 20 77 69  etReader</tt> wi
8d80: 74 68 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69  th node identifi
8d90: 65 72 20 3c 74 74 3e 3c 69 3e 72 65 61 64 65 72  er <tt><i>reader
8da0: 49 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 6e 20 74  Id</i></tt> on t
8db0: 68 65 20 3c 74 74 3e 52 65 61 64 65 72 47 72 6f  he <tt>ReaderGro
8dc0: 75 70 3c 2f 74 74 3e 20 77 69 74 68 20 6e 6f 64  up</tt> with nod
8dd0: 65 20 69 64 65 6e 74 69 66 69 65 72 20 3c 74 74  e identifier <tt
8de0: 3e 3c 69 3e 67 72 6f 75 70 49 64 3c 2f 69 3e 3c  ><i>groupId</i><
8df0: 2f 74 74 3e 2e 20 54 68 65 20 6f 70 65 72 61 74  /tt>. The operat
8e00: 69 6f 6e 20 69 73 20 63 61 72 72 69 65 64 20 6f  ion is carried o
8e10: 75 74 20 6f 6e 20 74 68 65 20 73 65 72 76 65 72  ut on the server
8e20: 20 67 69 76 65 6e 20 74 68 65 20 63 6c 69 65 6e   given the clien
8e30: 74 20 6f 72 20 73 65 72 76 65 72 20 6f 62 6a 65  t or server obje
8e40: 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65  ct <tt><i>handle
8e50: 3c 2f 69 3e 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 74  </i></tt>.....<t
8e60: 74 3e 6f 70 63 75 61 20 70 75 62 73 75 62 20 3c  t>opcua pubsub <
8e70: 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20 52 65 6d  i>handle</i> Rem
8e80: 6f 76 65 44 61 74 61 53 65 74 57 72 69 74 65 72  oveDataSetWriter
8e90: 20 3c 69 3e 67 72 6f 75 70 49 64 20 77 72 69 74   <i>groupId writ
8ea0: 65 72 49 64 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d  erId</i></tt>...
8eb0: 0a 20 20 20 20 52 65 6d 6f 76 65 73 20 74 68 65  .    Removes the
8ec0: 20 3c 74 74 3e 44 61 74 61 53 65 74 57 72 69 74   <tt>DataSetWrit
8ed0: 65 72 3c 2f 74 74 3e 20 77 69 74 68 20 6e 6f 64  er</tt> with nod
8ee0: 65 20 69 64 65 6e 74 69 66 69 65 72 20 3c 74 74  e identifier <tt
8ef0: 3e 3c 69 3e 77 72 69 74 65 72 49 64 3c 2f 69 3e  ><i>writerId</i>
8f00: 3c 2f 74 74 3e 20 6f 6e 20 74 68 65 20 3c 74 74  </tt> on the <tt
8f10: 3e 57 72 69 74 65 72 47 72 6f 75 70 3c 2f 74 74  >WriterGroup</tt
8f20: 3e 20 77 69 74 68 20 6e 6f 64 65 20 69 64 65 6e  > with node iden
8f30: 74 69 66 69 65 72 20 3c 74 74 3e 3c 69 3e 67 72  tifier <tt><i>gr
8f40: 6f 75 70 49 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 20  oupId</i></tt>. 
8f50: 54 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  The operation is
8f60: 20 63 61 72 72 69 65 64 20 6f 75 74 20 6f 6e 20   carried out on 
8f70: 74 68 65 20 73 65 72 76 65 72 20 67 69 76 65 6e  the server given
8f80: 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20 73   the client or s
8f90: 65 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74 74  erver object <tt
8fa0: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
8fb0: 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75  tt>.....<tt>opcu
8fc0: 61 20 70 75 62 73 75 62 20 3c 69 3e 68 61 6e 64  a pubsub <i>hand
8fd0: 6c 65 3c 2f 69 3e 20 52 65 6d 6f 76 65 47 72 6f  le</i> RemoveGro
8fe0: 75 70 20 3c 69 3e 63 6f 6e 6e 49 64 20 67 72 6f  up <i>connId gro
8ff0: 75 70 49 64 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d  upId</i></tt>...
9000: 0a 20 20 20 20 52 65 6d 6f 76 65 73 20 74 68 65  .    Removes the
9010: 20 3c 74 74 3e 52 65 61 64 65 72 47 72 6f 75 70   <tt>ReaderGroup
9020: 3c 2f 74 74 3e 20 6f 72 20 3c 74 74 3e 57 72 69  </tt> or <tt>Wri
9030: 74 65 72 47 72 6f 75 70 3c 2f 74 74 3e 20 77 69  terGroup</tt> wi
9040: 74 68 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69  th node identifi
9050: 65 72 20 3c 74 74 3e 3c 69 3e 67 72 6f 75 70 49  er <tt><i>groupI
9060: 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 6e 20 74 68  d</i></tt> on th
9070: 65 20 3c 74 74 3e 50 75 62 53 75 62 43 6f 6e 6e  e <tt>PubSubConn
9080: 65 63 74 69 6f 6e 3c 2f 74 74 3e 20 77 69 74 68  ection</tt> with
9090: 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72   node identifier
90a0: 20 3c 74 74 3e 3c 69 3e 63 6f 6e 6e 49 64 3c 2f   <tt><i>connId</
90b0: 69 3e 3c 2f 74 74 3e 2e 20 54 68 65 20 6f 70 65  i></tt>. The ope
90c0: 72 61 74 69 6f 6e 20 69 73 20 63 61 72 72 69 65  ration is carrie
90d0: 64 20 6f 75 74 20 6f 6e 20 74 68 65 20 73 65 72  d out on the ser
90e0: 76 65 72 20 67 69 76 65 6e 20 74 68 65 20 63 6c  ver given the cl
90f0: 69 65 6e 74 20 6f 72 20 73 65 72 76 65 72 20 6f  ient or server o
9100: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
9110: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 0d 0a 0d  dle</i></tt>....
9120: 0a 3c 74 74 3e 6f 70 63 75 61 20 70 75 62 73 75  .<tt>opcua pubsu
9130: 62 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 20  b <i>handle</i> 
9140: 52 65 6d 6f 76 65 50 75 62 6c 69 73 68 65 64 44  RemovePublishedD
9150: 61 74 61 53 65 74 20 3c 69 3e 70 64 73 49 64 3c  ataSet <i>pdsId<
9160: 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20  /i></tt>....    
9170: 52 65 6d 6f 76 65 73 20 74 68 65 20 3c 74 74 3e  Removes the <tt>
9180: 50 75 62 6c 69 73 68 65 64 44 61 74 61 53 65 74  PublishedDataSet
9190: 3c 2f 74 74 3e 20 6f 62 6a 65 63 74 20 77 69 74  </tt> object wit
91a0: 68 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65  h node identifie
91b0: 72 20 3c 74 74 3e 3c 69 3e 70 64 73 49 64 3c 2f  r <tt><i>pdsId</
91c0: 69 3e 3c 2f 74 74 3e 2e 20 54 68 65 20 6f 70 65  i></tt>. The ope
91d0: 72 61 74 69 6f 6e 20 69 73 20 63 61 72 72 69 65  ration is carrie
91e0: 64 20 6f 75 74 20 6f 6e 20 74 68 65 20 73 65 72  d out on the ser
91f0: 76 65 72 20 67 69 76 65 6e 20 74 68 65 20 63 6c  ver given the cl
9200: 69 65 6e 74 20 6f 72 20 73 65 72 76 65 72 20 6f  ient or server o
9210: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
9220: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 0d 0a 0d  dle</i></tt>....
9230: 0a 3c 74 74 3e 6f 70 63 75 61 20 70 75 62 73 75  .<tt>opcua pubsu
9240: 62 63 66 67 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f  bcfg <i>handle</
9250: 69 3e 20 6c 6f 61 64 7c 73 61 76 65 20 3c 69 3e  i> load|save <i>
9260: 3f 62 79 74 65 73 3c 2f 69 3e 3f 3c 2f 69 3e 3c  ?bytes</i>?</i><
9270: 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 50 65 72 66  /tt>....    Perf
9280: 6f 72 6d 73 20 61 20 73 65 72 69 61 6c 69 7a 61  orms a serializa
9290: 74 69 6f 6e 20 28 3c 74 74 3e 73 61 76 65 3c 2f  tion (<tt>save</
92a0: 74 74 3e 29 20 6f 72 20 64 65 73 65 72 69 61 6c  tt>) or deserial
92b0: 69 7a 61 74 69 6f 6e 20 28 3c 74 74 3e 6c 6f 61  ization (<tt>loa
92c0: 64 3c 2f 74 74 3e 29 20 6f 66 20 74 68 65 20 50  d</tt>) of the P
92d0: 75 62 53 75 62 20 63 6f 6e 66 69 67 75 72 61 74  ubSub configurat
92e0: 69 6f 6e 20 6f 66 20 74 68 65 20 73 65 72 76 65  ion of the serve
92f0: 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e  r object <tt><i>
9300: 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e  handle</i></tt>.
9310: 20 46 6f 72 20 74 68 65 20 3c 74 74 3e 6c 6f 61   For the <tt>loa
9320: 64 3c 2f 74 74 3e 20 6f 70 65 72 61 74 69 6f 6e  d</tt> operation
9330: 2c 20 3c 74 74 3e 3c 69 3e 62 79 74 65 73 3c 2f  , <tt><i>bytes</
9340: 69 3e 3c 2f 74 74 3e 20 6d 75 73 74 20 63 6f 6e  i></tt> must con
9350: 74 61 69 6e 20 61 20 62 79 74 65 20 61 72 72 61  tain a byte arra
9360: 79 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69  y of the seriali
9370: 7a 61 74 69 6f 6e 2c 20 66 6f 72 20 3c 74 74 3e  zation, for <tt>
9380: 73 61 76 65 3c 2f 74 74 3e 20 61 20 73 65 72 69  save</tt> a seri
9390: 61 6c 69 7a 61 74 69 6f 6e 20 69 73 20 72 65 74  alization is ret
93a0: 75 72 6e 65 64 20 61 73 20 72 65 73 75 6c 74 2e  urned as result.
93b0: 20 54 68 65 20 64 65 73 65 72 69 61 6c 69 7a 61   The deserializa
93c0: 74 69 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20 72  tion operation r
93d0: 65 63 6f 6e 73 74 72 75 63 74 73 20 74 68 65 20  econstructs the 
93e0: 50 75 62 53 75 62 20 63 6f 6d 70 6f 6e 65 6e 74  PubSub component
93f0: 73 20 69 6e 20 74 68 65 20 73 65 72 76 65 72 20  s in the server 
9400: 64 65 73 63 72 69 62 65 64 20 62 79 20 3c 74 74  described by <tt
9410: 3e 3c 69 3e 62 79 74 65 73 3c 2f 69 3e 3c 2f 74  ><i>bytes</i></t
9420: 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61  t>.....<tt>opcua
9430: 20 72 65 61 64 20 3c 69 3e 68 61 6e 64 6c 65 20   read <i>handle 
9440: 6e 6f 64 65 69 64 20 3f 61 74 74 72 20 63 6d 64  nodeid ?attr cmd
9450: 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20  ?</i></tt>....  
9460: 20 20 50 65 72 66 6f 72 6d 73 20 61 20 72 65 61    Performs a rea
9470: 64 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 74  d operation on t
9480: 68 65 20 63 6c 69 65 6e 74 20 6f 72 20 73 65 72  he client or ser
9490: 76 65 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c  ver object <tt><
94a0: 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74  i>handle</i></tt
94b0: 3e 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  > and returns th
94c0: 65 20 76 61 6c 75 65 20 6f 66 20 61 74 74 72 69  e value of attri
94d0: 62 75 74 65 20 3c 74 74 3e 3c 69 3e 61 74 74 72  bute <tt><i>attr
94e0: 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 66 20 74 68 65  </i></tt> of the
94f0: 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72   node identifier
9500: 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f   <tt><i>nodeid</
9510: 69 3e 3c 2f 74 74 3e 2e 20 49 66 20 3c 74 74 3e  i></tt>. If <tt>
9520: 3c 69 3e 61 74 74 72 3c 2f 69 3e 3c 2f 74 74 3e  <i>attr</i></tt>
9530: 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 69 74 20   is omitted, it 
9540: 64 65 66 61 75 6c 74 73 20 74 6f 20 74 68 65 20  defaults to the 
9550: 3c 74 74 3e 56 61 6c 75 65 3c 2f 74 74 3e 20 61  <tt>Value</tt> a
9560: 74 74 72 69 62 75 74 65 2e 20 54 68 65 20 6f 70  ttribute. The op
9570: 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
9580: 20 3c 74 74 3e 3c 69 3e 63 6d 64 3c 2f 69 3e 3c   <tt><i>cmd</i><
9590: 2f 74 74 3e 20 63 61 6e 20 62 65 20 73 70 65 63  /tt> can be spec
95a0: 69 66 69 65 64 20 6f 6e 20 63 6c 69 65 6e 74 20  ified on client 
95b0: 6f 62 6a 65 63 74 73 20 69 6e 20 6f 72 64 65 72  objects in order
95c0: 20 74 6f 20 63 61 72 72 79 20 6f 75 74 20 74 68   to carry out th
95d0: 65 20 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e  e read operation
95e0: 20 69 6e 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73   in asynchronous
95f0: 20 6d 6f 64 65 2e 20 53 65 65 20 3c 74 74 3e 6f   mode. See <tt>o
9600: 70 63 75 61 20 63 61 6c 6c 3c 2f 74 74 3e 20 61  pcua call</tt> a
9610: 6e 64 20 73 65 63 74 69 6f 6e 20 3c 62 3e 41 73  nd section <b>As
9620: 79 6e 63 68 72 6f 6e 6f 75 73 20 4f 70 65 72 61  ynchronous Opera
9630: 74 69 6f 6e 73 3c 2f 62 3e 20 66 6f 72 20 6d 6f  tions</b> for mo
9640: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d  re information..
9650: 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 72 65 66  ...<tt>opcua ref
9660: 74 79 70 65 20 3c 69 3e 3f 6e 61 6d 65 3f 3c 2f  type <i>?name?</
9670: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 52  i></tt>....    R
9680: 65 74 75 72 6e 73 20 74 68 65 20 6e 6f 64 65 20  eturns the node 
9690: 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74  identifier for t
96a0: 68 65 20 72 65 66 65 72 65 6e 63 65 20 74 79 70  he reference typ
96b0: 65 20 3c 74 74 3e 3c 69 3e 6e 61 6d 65 3c 2f 69  e <tt><i>name</i
96c0: 3e 3c 2f 74 74 3e 2e 20 57 68 65 6e 20 3c 74 74  ></tt>. When <tt
96d0: 3e 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 3c 2f 74 74  ><i>name</i></tt
96e0: 3e 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 61 20  > is omitted, a 
96f0: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 72 65 66 65  list of all refe
9700: 72 65 6e 63 65 20 74 79 70 65 20 6e 61 6d 65 73  rence type names
9710: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0d 0a 0d   is returned....
9720: 0a 3c 74 74 3e 6f 70 63 75 61 20 72 65 67 69 73  .<tt>opcua regis
9730: 74 65 72 20 3c 69 3e 68 61 6e 64 6c 65 20 6e 6f  ter <i>handle no
9740: 64 65 6c 69 73 74 3c 2f 69 3e 3c 2f 74 74 3e 0d  delist</i></tt>.
9750: 0a 0d 0a 20 20 20 20 52 65 67 69 73 74 65 72 73  ...    Registers
9760: 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69   the node identi
9770: 66 69 65 72 73 20 66 72 6f 6d 20 3c 74 74 3e 3c  fiers from <tt><
9780: 69 3e 6e 6f 64 65 6c 69 73 74 3c 2f 69 3e 3c 2f  i>nodelist</i></
9790: 74 74 3e 20 69 6e 20 74 68 65 20 73 65 72 76 65  tt> in the serve
97a0: 72 20 74 6f 20 77 68 69 63 68 20 3c 74 74 3e 3c  r to which <tt><
97b0: 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74  i>handle</i></tt
97c0: 3e 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 2e 20  > is connected. 
97d0: 49 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  If the operation
97e0: 20 73 75 63 63 65 65 64 73 2c 20 61 6e 6f 74 68   succeeds, anoth
97f0: 65 72 20 6c 69 73 74 20 6f 66 20 6e 6f 64 65 20  er list of node 
9800: 69 64 65 6e 74 69 66 69 65 72 73 20 69 73 20 72  identifiers is r
9810: 65 74 75 72 6e 65 64 20 77 68 69 63 68 20 70 72  eturned which pr
9820: 6f 76 69 64 65 73 20 61 6c 69 61 73 65 73 20 74  ovides aliases t
9830: 6f 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74  o the node ident
9840: 69 66 69 65 72 73 20 70 61 73 73 65 64 20 74 6f  ifiers passed to
9850: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 64 75 72   the command dur
9860: 69 6e 67 20 74 68 65 20 6c 69 66 65 20 74 69 6d  ing the life tim
9870: 65 20 6f 66 20 74 68 65 20 73 65 73 73 69 6f 6e  e of the session
9880: 2e 20 55 73 69 6e 67 20 74 68 65 20 61 6c 69 61  . Using the alia
9890: 73 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74  ses instead of t
98a0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 6f 64 65  he original node
98b0: 20 69 64 65 6e 74 69 66 69 65 72 73 20 63 61 6e   identifiers can
98c0: 20 69 6d 70 72 6f 76 65 20 70 65 72 66 6f 72 6d   improve perform
98d0: 61 6e 63 65 20 6f 66 20 73 75 62 73 65 71 75 65  ance of subseque
98e0: 6e 74 20 3c 74 74 3e 72 65 61 64 3c 2f 74 74 3e  nt <tt>read</tt>
98f0: 20 61 6e 64 20 3c 74 74 3e 77 72 69 74 65 3c 2f   and <tt>write</
9900: 74 74 3e 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0d  tt> operations..
9910: 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 72 65 71  ...<tt>opcua req
9920: 75 65 73 74 20 3c 69 3e 68 61 6e 64 6c 65 20 3f  uest <i>handle ?
9930: 72 65 71 69 64 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d  reqid?</i></tt>.
9940: 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 20 69  ...    Returns i
9950: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 70 65  nformation on pe
9960: 6e 64 69 6e 67 20 61 73 79 6e 63 68 72 6f 6e 6f  nding asynchrono
9970: 75 73 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 66  us operations of
9980: 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 62 6a 65   the client obje
9990: 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65  ct <tt><i>handle
99a0: 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 49 66 20 61 20  </i></tt>. If a 
99b0: 6e 75 6d 65 72 69 63 20 72 65 71 75 65 73 74 20  numeric request 
99c0: 69 64 65 6e 74 69 66 69 65 72 20 3c 74 74 3e 3c  identifier <tt><
99d0: 69 3e 72 65 71 69 64 3c 2f 69 3e 3c 2f 74 74 3e  i>reqid</i></tt>
99e0: 20 69 73 20 67 69 76 65 6e 2c 20 61 20 74 77 6f   is given, a two
99f0: 20 65 6c 65 6d 65 6e 74 20 6c 69 73 74 20 66 6f   element list fo
9a00: 72 20 74 68 69 73 20 72 65 71 75 65 73 74 20 69  r this request i
9a10: 73 20 72 65 74 75 72 6e 65 64 20 6d 61 64 65 20  s returned made 
9a20: 75 70 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74  up of the operat
9a30: 69 6f 6e 20 74 79 70 65 20 28 3c 74 74 3e 63 61  ion type (<tt>ca
9a40: 6c 6c 3c 2f 74 74 3e 2c 20 3c 74 74 3e 72 65 61  ll</tt>, <tt>rea
9a50: 64 3c 2f 74 74 3e 2c 20 6f 72 20 3c 74 74 3e 77  d</tt>, or <tt>w
9a60: 72 69 74 65 3c 2f 74 74 3e 29 20 61 6e 64 20 74  rite</tt>) and t
9a70: 68 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6d 6d  he callback comm
9a80: 61 6e 64 20 77 68 69 63 68 20 72 65 63 65 69 76  and which receiv
9a90: 65 73 20 74 68 65 20 72 65 73 70 6f 6e 73 65 2e  es the response.
9aa0: 20 49 66 20 3c 74 74 3e 3c 69 3e 72 65 71 69 64   If <tt><i>reqid
9ab0: 3c 2f 69 3e 3c 2f 74 74 3e 20 69 73 20 6f 6d 69  </i></tt> is omi
9ac0: 74 74 65 64 2c 20 61 20 6c 69 73 74 20 6f 66 20  tted, a list of 
9ad0: 61 6c 6c 20 6b 6e 6f 77 6e 20 70 65 6e 64 69 6e  all known pendin
9ae0: 67 20 72 65 71 75 65 73 74 20 69 64 65 6e 74 69  g request identi
9af0: 66 69 65 72 73 20 69 73 20 72 65 74 75 72 6e 65  fiers is returne
9b00: 64 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20  d.....<tt>opcua 
9b10: 72 6f 6f 74 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20  root</tt>....   
9b20: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 6f 64   Returns the nod
9b30: 65 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  e identifier of 
9b40: 74 68 65 20 72 6f 6f 74 20 6e 6f 64 65 2e 0d 0a  the root node...
9b50: 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 72 75 6e 20  ..<tt>opcua run 
9b60: 3c 69 3e 68 61 6e 64 6c 65 20 3f 6d 73 3f 3c 2f  <i>handle ?ms?</
9b70: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 52  i></tt>....    R
9b80: 75 6e 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73  uns asynchronous
9b90: 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 73 75 62   operations (sub
9ba0: 73 63 72 69 70 74 69 6f 6e 73 2c 20 6d 6f 6e 69  scriptions, moni
9bb0: 74 6f 72 65 64 20 69 74 65 6d 73 29 20 6f 6e 20  tored items) on 
9bc0: 74 68 65 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63  the client objec
9bd0: 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c  t <tt><i>handle<
9be0: 2f 69 3e 3c 2f 74 74 3e 20 66 6f 72 20 3c 74 74  /i></tt> for <tt
9bf0: 3e 3c 69 3e 6d 73 3c 2f 69 3e 3c 2f 74 74 3e 20  ><i>ms</i></tt> 
9c00: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2e 20 49 66  milliseconds. If
9c10: 20 3c 74 74 3e 3c 69 3e 6d 73 3c 2f 69 3e 3c 2f   <tt><i>ms</i></
9c20: 74 74 3e 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  tt> is omitted, 
9c30: 74 68 61 74 20 64 75 72 61 74 69 6f 6e 20 64 65  that duration de
9c40: 66 61 75 6c 74 73 20 74 6f 20 7a 65 72 6f 2e 20  faults to zero. 
9c50: 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 6f  Normally, this o
9c60: 70 65 72 61 74 69 6f 6e 20 69 73 20 63 61 72 72  peration is carr
9c70: 69 65 64 20 6f 75 74 20 62 79 20 74 68 65 20 54  ied out by the T
9c80: 63 6c 20 65 76 65 6e 74 20 6c 6f 6f 70 2e 20 20  cl event loop.  
9c90: 53 74 69 6c 6c 2c 20 74 68 69 73 20 63 6f 6d 6d  Still, this comm
9ca0: 61 6e 64 20 63 61 6e 20 62 65 20 75 73 65 64 20  and can be used 
9cb0: 74 6f 20 74 65 73 74 20 69 66 20 74 68 65 20 63  to test if the c
9cc0: 6c 69 65 6e 74 20 6f 62 6a 65 63 74 20 69 73 20  lient object is 
9cd0: 69 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 65 64  in the connected
9ce0: 20 73 74 61 74 65 2e 0d 0a 0d 0a 3c 74 74 3e 6f   state.....<tt>o
9cf0: 70 63 75 61 20 73 63 32 73 74 72 20 3c 69 3e 3f  pcua sc2str <i>?
9d00: 3c 2f 69 3e 2d 73 68 6f 72 74 3c 69 3e 3f 20 63  </i>-short<i>? c
9d10: 6f 64 65 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a  ode</i></tt>....
9d20: 20 20 20 20 54 72 61 6e 73 6c 61 74 65 73 20 74      Translates t
9d30: 68 65 20 6e 75 6d 65 72 69 63 20 73 74 61 74 75  he numeric statu
9d40: 73 20 63 6f 64 65 20 3c 74 74 3e 3c 69 3e 63 6f  s code <tt><i>co
9d50: 64 65 3c 2f 69 3e 3c 2f 74 74 3e 20 74 6f 20 61  de</i></tt> to a
9d60: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
9d70: 73 74 72 69 6e 67 2e 20 41 20 73 69 6e 67 6c 65  string. A single
9d80: 20 77 6f 72 64 20 65 72 72 6f 72 20 73 74 72 69   word error stri
9d90: 6e 67 20 73 75 63 68 20 61 73 20 3c 74 74 3e 42  ng such as <tt>B
9da0: 61 64 54 69 6d 65 6f 75 74 3c 2f 74 74 3e 20 69  adTimeout</tt> i
9db0: 73 20 70 72 6f 64 75 63 65 64 20 77 68 65 6e 20  s produced when 
9dc0: 74 68 65 20 3c 74 74 3e 2d 73 68 6f 72 74 3c 2f  the <tt>-short</
9dd0: 74 74 3e 20 6f 70 74 69 6f 6e 20 69 73 20 73 70  tt> option is sp
9de0: 65 63 69 66 69 65 64 2e 0d 0a 0d 0a 3c 74 74 3e  ecified.....<tt>
9df0: 6f 70 63 75 61 20 73 65 72 76 65 72 73 20 3c 69  opcua servers <i
9e00: 3e 3f 75 72 6c 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d  >?url?</i></tt>.
9e10: 0a 0d 0a 20 20 20 20 51 75 65 72 69 65 73 20 74  ...    Queries t
9e20: 68 65 20 6c 6f 63 61 6c 20 4f 50 43 2f 55 41 20  he local OPC/UA 
9e30: 73 65 72 76 65 72 20 3c 74 74 3e 6f 70 63 2e 74  server <tt>opc.t
9e40: 63 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 34  cp://localhost:4
9e50: 38 34 30 3c 2f 74 74 3e 20 6f 72 20 74 68 65 20  840</tt> or the 
9e60: 73 65 72 76 65 72 20 73 70 65 63 69 66 69 65 64  server specified
9e70: 20 62 79 20 74 68 65 20 3c 74 74 3e 3c 69 3e 75   by the <tt><i>u
9e80: 72 6c 3c 2f 69 3e 3c 2f 74 74 3e 20 70 61 72 61  rl</i></tt> para
9e90: 6d 65 74 65 72 20 66 6f 72 20 73 65 72 76 65 72  meter for server
9ea0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64   information and
9eb0: 20 72 65 74 75 72 6e 73 20 61 20 6c 69 73 74 20   returns a list 
9ec0: 6d 61 64 65 20 75 70 20 6f 66 20 64 65 73 65 72  made up of deser
9ed0: 69 61 6c 69 7a 65 64 20 64 69 63 74 69 6f 6e 61  ialized dictiona
9ee0: 72 69 65 73 20 62 61 73 65 64 20 6f 6e 20 74 68  ries based on th
9ef0: 65 20 3c 74 74 3e 55 41 5f 53 65 72 76 65 72 4f  e <tt>UA_ServerO
9f00: 6e 4e 65 74 77 6f 72 6b 3c 2f 74 74 3e 20 73 74  nNetwork</tt> st
9f10: 72 75 63 74 75 72 65 2e 20 43 6f 6e 73 75 6c 74  ructure. Consult
9f20: 20 74 68 65 20 6f 70 65 6e 36 32 35 34 31 20 64   the open62541 d
9f30: 6f 63 75 6d 65 6e 74 69 6f 6e 20 66 6f 72 20 6d  ocumention for m
9f40: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ore information.
9f50: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 73 74  ....<tt>opcua st
9f60: 61 72 74 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69  art <i>handle</i
9f70: 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 53 74  ></tt>....    St
9f80: 61 72 74 73 20 74 68 65 20 73 65 72 76 65 72 20  arts the server 
9f90: 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61  object <tt><i>ha
9fa0: 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 53  ndle</i></tt>. S
9fb0: 65 65 20 73 65 63 74 69 6f 6e 20 3c 62 3e 53 65  ee section <b>Se
9fc0: 72 76 65 72 20 4f 62 6a 65 63 74 20 41 6e 64 20  rver Object And 
9fd0: 45 76 65 6e 74 20 4c 6f 6f 70 3c 2f 62 3e 20 62  Event Loop</b> b
9fe0: 65 6c 6f 77 20 66 6f 72 20 66 75 72 74 68 65 72  elow for further
9ff0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 0d   information....
a000: 0a 3c 74 74 3e 6f 70 63 75 61 20 73 74 61 74 65  .<tt>opcua state
a010: 20 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f   <i>handle</i></
a020: 74 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 70 6f 72  tt>....    Repor
a030: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
a040: 74 61 74 65 20 6f 66 20 3c 74 74 3e 3c 69 3e 68  tate of <tt><i>h
a050: 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20  andle</i></tt>. 
a060: 49 66 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65  If <tt><i>handle
a070: 3c 2f 69 3e 3c 2f 74 74 3e 20 72 65 66 65 72 73  </i></tt> refers
a080: 20 74 6f 20 61 20 63 6c 69 65 6e 74 2c 20 74 68   to a client, th
a090: 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 74 68  e result is a th
a0a0: 72 65 65 20 65 6c 65 6d 65 6e 74 20 6c 69 73 74  ree element list
a0b0: 20 77 69 74 68 20 74 68 65 20 69 64 65 6e 74 69   with the identi
a0c0: 63 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  cal information 
a0d0: 61 73 20 70 61 73 73 65 64 20 69 6e 20 74 68 65  as passed in the
a0e0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
a0f0: 6d 65 74 65 72 73 20 74 6f 20 20 74 68 65 20 3c  meters to  the <
a100: 74 74 3e 6f 6e 63 6c 69 65 6e 74 73 74 61 74 65  tt>onclientstate
a110: 3c 2f 74 74 3e 20 63 61 6c 6c 62 61 63 6b 2e 20  </tt> callback. 
a120: 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 72  Otherwise, the r
a130: 65 73 75 6c 74 20 69 73 20 61 20 74 77 6f 20 65  esult is a two e
a140: 6c 65 6d 65 6e 74 20 6c 69 73 74 2e 20 54 68 65  lement list. The
a150: 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
a160: 73 20 65 69 74 68 65 72 20 3c 74 74 3e 73 74 6f  s either <tt>sto
a170: 70 70 65 64 3c 2f 74 74 3e 20 6f 72 20 3c 74 74  pped</tt> or <tt
a180: 3e 72 75 6e 6e 69 6e 67 3c 2f 74 74 3e 20 69 6e  >running</tt> in
a190: 64 69 63 61 74 69 6e 67 20 74 68 65 20 73 65 72  dicating the ser
a1a0: 76 65 72 20 73 74 61 74 65 2e 20 54 68 65 20 73  ver state. The s
a1b0: 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 69 73  econd element is
a1c0: 20 61 20 64 69 63 74 69 6f 6e 61 72 79 20 77 69   a dictionary wi
a1d0: 74 68 20 73 74 61 74 69 73 74 69 63 20 63 6f 75  th statistic cou
a1e0: 6e 74 65 72 73 20 66 6f 72 20 63 6f 6e 6e 65 63  nters for connec
a1f0: 74 69 6f 6e 73 2c 20 73 65 63 75 72 65 20 63 68  tions, secure ch
a200: 61 6e 6e 65 6c 73 2c 20 61 6e 64 20 73 65 73 73  annels, and sess
a210: 69 6f 6e 73 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63  ions.....<tt>opc
a220: 75 61 20 73 74 6f 70 20 3c 69 3e 68 61 6e 64 6c  ua stop <i>handl
a230: 65 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20  e</i></tt>....  
a240: 20 20 53 74 6f 70 73 20 74 68 65 20 73 65 72 76    Stops the serv
a250: 65 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e 3c 69  er object <tt><i
a260: 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e  >handle</i></tt>
a270: 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 73  .....<tt>opcua s
a280: 75 62 73 63 72 69 70 74 69 6f 6e 20 3c 69 3e 68  ubscription <i>h
a290: 61 6e 64 6c 65 3c 2f 69 3e 20 63 6f 6e 66 69 67  andle</i> config
a2a0: 75 72 65 20 3c 69 3e 69 64 20 3f 69 6e 74 65 72  ure <i>id ?inter
a2b0: 76 61 6c 20 6c 69 66 65 74 69 6d 65 20 6b 65 65  val lifetime kee
a2c0: 70 61 6c 69 76 65 20 6d 61 78 20 70 72 69 6f 3f  palive max prio?
a2d0: 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20  </i></tt>....   
a2e0: 20 43 6f 6e 66 69 67 75 72 65 73 20 74 68 65 20   Configures the 
a2f0: 73 75 62 73 63 72 69 70 74 69 6f 6e 20 3c 74 74  subscription <tt
a300: 3e 3c 69 3e 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20  ><i>id</i></tt> 
a310: 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f 62  on the client ob
a320: 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64  ject <tt><i>hand
a330: 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 53 65 65  le</i></tt>. See
a340: 20 3c 74 74 3e 6f 70 63 75 61 20 73 75 62 73 63   <tt>opcua subsc
a350: 72 69 70 74 69 6f 6e 20 6e 65 77 3c 2f 74 74 3e  ription new</tt>
a360: 20 66 6f 72 20 74 68 65 20 6f 70 74 69 6f 6e 61   for the optiona
a370: 6c 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 0d  l parameters....
a380: 0a 3c 74 74 3e 6f 70 63 75 61 20 73 75 62 73 63  .<tt>opcua subsc
a390: 72 69 70 74 69 6f 6e 20 3c 69 3e 68 61 6e 64 6c  ription <i>handl
a3a0: 65 3c 2f 69 3e 20 64 65 73 74 72 6f 79 20 3c 69  e</i> destroy <i
a3b0: 3e 69 64 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a  >id</i></tt>....
a3c0: 20 20 20 20 44 65 73 74 72 6f 79 73 20 74 68 65      Destroys the
a3d0: 20 73 75 62 73 63 72 69 70 74 69 6f 6e 20 3c 74   subscription <t
a3e0: 74 3e 3c 69 3e 69 64 3c 2f 69 3e 3c 2f 74 74 3e  t><i>id</i></tt>
a3f0: 20 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f   on the client o
a400: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
a410: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 0d 0a 0d  dle</i></tt>....
a420: 0a 3c 74 74 3e 6f 70 63 75 61 20 73 75 62 73 63  .<tt>opcua subsc
a430: 72 69 70 74 69 6f 6e 20 3c 69 3e 68 61 6e 64 6c  ription <i>handl
a440: 65 3c 2f 69 3e 20 69 6e 66 6f 20 3c 69 3e 3f 69  e</i> info <i>?i
a450: 64 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20  d?</i></tt>.... 
a460: 20 20 20 52 65 74 75 72 6e 73 20 69 6e 66 6f 72     Returns infor
a470: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 73 75 62  mation about sub
a480: 73 63 72 69 70 74 69 6f 6e 20 3c 74 74 3e 3c 69  scription <tt><i
a490: 3e 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 6e 20  >id</i></tt> on 
a4a0: 74 68 65 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63  the client objec
a4b0: 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c  t <tt><i>handle<
a4c0: 2f 69 3e 3c 2f 74 74 3e 20 61 73 20 61 20 6c 69  /i></tt> as a li
a4d0: 73 74 20 6f 66 20 65 6e 61 62 6c 65 20 66 6c 61  st of enable fla
a4e0: 67 2c 20 69 6e 74 65 72 76 61 6c 2c 20 6c 69 66  g, interval, lif
a4f0: 65 74 69 6d 65 2c 20 20 6b 65 65 70 61 6c 69 76  etime,  keepaliv
a500: 65 2c 20 61 6e 64 20 20 6d 61 78 69 6d 75 6d 20  e, and  maximum 
a510: 63 6f 75 6e 74 65 72 73 2c 20 61 6e 64 20 74 68  counters, and th
a520: 65 20 70 72 69 6f 72 69 74 79 20 76 61 6c 75 65  e priority value
a530: 2e 20 49 66 20 3c 74 74 3e 3c 69 3e 69 64 3c 2f  . If <tt><i>id</
a540: 69 3e 3c 2f 74 74 3e 20 69 73 20 6f 6d 69 74 74  i></tt> is omitt
a550: 65 64 2c 20 61 20 6c 69 73 74 20 6f 66 20 61 6c  ed, a list of al
a560: 6c 20 73 75 62 73 63 72 69 70 74 69 6f 6e 20 69  l subscription i
a570: 64 65 6e 74 69 66 69 65 72 73 20 6f 66 20 74 68  dentifiers of th
a580: 65 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63 74 20  e client object 
a590: 69 73 20 72 65 74 75 72 6e 65 64 2e 0d 0a 0d 0a  is returned.....
a5a0: 3c 74 74 3e 6f 70 63 75 61 20 73 75 62 73 63 72  <tt>opcua subscr
a5b0: 69 70 74 69 6f 6e 20 3c 69 3e 68 61 6e 64 6c 65  iption <i>handle
a5c0: 3c 2f 69 3e 20 6e 65 77 20 3c 69 3e 3f 66 6c 61  </i> new <i>?fla
a5d0: 67 20 69 6e 74 65 72 76 61 6c 20 6c 69 66 65 74  g interval lifet
a5e0: 69 6d 65 20 6b 65 65 70 61 6c 69 76 65 20 6d 61  ime keepalive ma
a5f0: 78 20 70 72 69 6f 3f 3c 2f 69 3e 3c 2f 74 74 3e  x prio?</i></tt>
a600: 0d 0a 0d 0a 20 20 20 20 43 72 65 61 74 65 73 20  ....    Creates 
a610: 61 20 6e 65 77 20 73 75 62 73 63 72 69 70 74 69  a new subscripti
a620: 6f 6e 20 28 61 20 63 6f 6e 74 61 69 6e 65 72 20  on (a container 
a630: 66 6f 72 20 6d 6f 6e 69 74 6f 72 65 64 20 69 74  for monitored it
a640: 65 6d 73 2c 20 73 65 65 20 3c 74 74 3e 6f 70 63  ems, see <tt>opc
a650: 75 61 20 6d 6f 6e 69 74 6f 72 3c 2f 74 74 3e 29  ua monitor</tt>)
a660: 20 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f   on the client o
a670: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
a680: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 61 6e 64  dle</i></tt> and
a690: 20 72 65 74 75 72 6e 73 20 61 20 6e 75 6d 65 72   returns a numer
a6a0: 69 63 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  ic identifier of
a6b0: 20 69 74 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69   it. The followi
a6c0: 6e 67 20 6f 70 74 69 6f 6e 61 6c 20 70 61 72 61  ng optional para
a6d0: 6d 65 74 65 72 73 20 63 6f 6e 74 72 6f 6c 20 70  meters control p
a6e0: 72 6f 70 65 72 74 69 65 73 20 6f 66 20 74 68 65  roperties of the
a6f0: 20 73 75 62 73 63 72 69 70 74 69 6f 6e 3a 20 3c   subscription: <
a700: 74 74 3e 3c 69 3e 66 6c 61 67 3c 2f 69 3e 3c 2f  tt><i>flag</i></
a710: 74 74 3e 20 69 73 20 74 68 65 20 69 6e 69 74 69  tt> is the initi
a720: 61 6c 20 65 6e 61 62 6c 65 20 73 74 61 74 65 20  al enable state 
a730: 28 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 29 2c  (on by default),
a740: 20 20 3c 74 74 3e 3c 69 3e 69 6e 74 65 72 76 61    <tt><i>interva
a750: 6c 3c 2f 69 3e 3c 2f 74 74 3e 2c 20 3c 74 74 3e  l</i></tt>, <tt>
a760: 3c 69 3e 6c 69 66 65 74 69 6d 65 3c 2f 69 3e 3c  <i>lifetime</i><
a770: 2f 74 74 3e 2c 20 3c 74 74 3e 3c 69 3e 6b 65 65  /tt>, <tt><i>kee
a780: 70 61 6c 69 76 65 3c 2f 69 3e 3c 2f 74 74 3e 2c  palive</i></tt>,
a790: 20 61 6e 64 20 3c 74 74 3e 3c 69 3e 6d 61 78 3c   and <tt><i>max<
a7a0: 2f 69 3e 3c 2f 74 74 3e 20 74 68 65 20 74 69 6d  /i></tt> the tim
a7b0: 69 6e 67 20 61 6e 64 20 71 75 65 75 69 6e 67 20  ing and queuing 
a7c0: 70 61 72 61 6d 65 74 65 72 73 2c 20 61 6e 64 20  parameters, and 
a7d0: 3c 74 74 3e 3c 69 3e 70 72 69 6f 3c 2f 69 3e 3c  <tt><i>prio</i><
a7e0: 2f 74 74 3e 20 74 68 65 20 73 75 62 73 63 72 69  /tt> the subscri
a7f0: 70 74 69 6f 6e 27 73 20 70 72 69 6f 72 69 74 79  ption's priority
a800: 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 73  .....<tt>opcua s
a810: 75 62 73 63 72 69 70 74 69 6f 6e 20 3c 69 3e 68  ubscription <i>h
a820: 61 6e 64 6c 65 3c 2f 69 3e 20 6f 66 66 20 3c 69  andle</i> off <i
a830: 3e 69 64 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a  >id</i></tt>....
a840: 20 20 20 20 44 69 73 61 62 6c 65 73 20 74 68 65      Disables the
a850: 20 73 75 62 73 63 72 69 70 74 69 6f 6e 20 3c 74   subscription <t
a860: 74 3e 3c 69 3e 69 64 3c 2f 69 3e 3c 2f 74 74 3e  t><i>id</i></tt>
a870: 20 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20 6f   on the client o
a880: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
a890: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 0d 0a 0d  dle</i></tt>....
a8a0: 0a 3c 74 74 3e 6f 70 63 75 61 20 73 75 62 73 63  .<tt>opcua subsc
a8b0: 72 69 70 74 69 6f 6e 20 3c 69 3e 68 61 6e 64 6c  ription <i>handl
a8c0: 65 3c 2f 69 3e 20 6f 6e 20 3c 69 3e 69 64 3c 2f  e</i> on <i>id</
a8d0: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 45  i></tt>....    E
a8e0: 6e 61 62 6c 65 73 20 74 68 65 20 73 75 62 73 63  nables the subsc
a8f0: 72 69 70 74 69 6f 6e 20 3c 74 74 3e 3c 69 3e 69  ription <tt><i>i
a900: 64 3c 2f 69 3e 3c 2f 74 74 3e 20 6f 6e 20 74 68  d</i></tt> on th
a910: 65 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63 74 20  e client object 
a920: 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69  <tt><i>handle</i
a930: 3e 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f  ></tt>.....<tt>o
a940: 70 63 75 61 20 74 72 61 6e 73 6c 61 74 65 20 3c  pcua translate <
a950: 69 3e 68 61 6e 64 6c 65 20 6e 6f 64 65 69 64 20  i>handle nodeid 
a960: 72 65 66 74 79 70 65 20 74 61 72 67 65 74 20 2e  reftype target .
a970: 2e 2e 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20  ..</i></tt>.... 
a980: 20 20 20 50 65 72 66 6f 72 6d 73 20 61 20 74 72     Performs a tr
a990: 61 6e 73 6c 61 74 65 20 6f 70 65 72 61 74 69 6f  anslate operatio
a9a0: 6e 20 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74 20  n on the client 
a9b0: 6f 72 20 73 65 72 76 65 72 20 6f 62 6a 65 63 74  or server object
a9c0: 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f   <tt><i>handle</
a9d0: 69 3e 3c 2f 74 74 3e 2e 20 54 68 65 20 6f 70 65  i></tt>. The ope
a9e0: 72 61 74 69 6f 6e 20 73 74 61 72 74 73 20 61 74  ration starts at
a9f0: 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72   node identifier
aa00: 20 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f   <tt><i>nodeid</
aa10: 69 3e 3c 2f 74 74 3e 20 61 6e 64 20 74 72 61 76  i></tt> and trav
aa20: 65 72 73 65 73 20 74 68 65 20 6f 62 6a 65 63 74  erses the object
aa30: 20 74 72 65 65 20 61 6c 6f 6e 67 20 74 68 65 20   tree along the 
aa40: 72 65 66 65 72 65 6e 63 65 73 20 3c 74 74 3e 3c  references <tt><
aa50: 69 3e 72 65 66 74 79 70 65 3c 2f 69 3e 3c 2f 74  i>reftype</i></t
aa60: 74 3e 20 61 6e 64 20 62 72 6f 77 73 65 20 6e 61  t> and browse na
aa70: 6d 65 20 3c 74 74 3e 3c 69 3e 74 61 72 67 65 74  me <tt><i>target
aa80: 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 41 20 6c 69 73  </i></tt>. A lis
aa90: 74 20 6d 61 64 65 20 75 70 20 6f 66 20 74 68 65  t made up of the
aaa0: 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72   node identifier
aab0: 2c 20 6e 61 6d 65 73 70 61 63 65 20 55 52 49 2c  , namespace URI,
aac0: 20 61 6e 64 20 73 65 72 76 65 72 20 69 6e 64 65   and server inde
aad0: 78 20 6f 66 20 74 68 65 20 66 69 6e 61 6c 20 74  x of the final t
aae0: 61 72 67 65 74 20 69 73 20 72 65 74 75 72 6e 65  arget is returne
aaf0: 64 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 2e  d as the result.
ab00: 20 52 65 66 65 72 65 6e 63 65 73 20 63 61 6e 20   References can 
ab10: 62 65 20 70 72 65 63 65 65 64 65 64 20 77 69 74  be preceeded wit
ab20: 68 20 61 6e 20 65 78 63 6c 61 6d 61 74 69 6f 6e  h an exclamation
ab30: 20 6d 61 72 6b 20 69 6e 20 6f 72 64 65 72 20 74   mark in order t
ab40: 6f 20 72 65 76 65 72 73 65 20 74 68 65 69 72 20  o reverse their 
ab50: 64 69 72 65 63 74 69 6f 6e 2e 20 41 20 72 65 66  direction. A ref
ab60: 65 72 65 6e 63 65 20 6d 61 79 20 62 65 20 61 62  erence may be ab
ab70: 62 72 65 76 69 61 74 65 64 20 61 73 20 73 6c 61  breviated as sla
ab80: 73 68 20 66 6f 72 20 3c 74 74 3e 48 69 65 72 61  sh for <tt>Hiera
ab90: 72 63 68 69 63 61 6c 52 65 66 65 72 65 6e 63 65  rchicalReference
aba0: 73 3c 2f 74 74 3e 20 6f 72 20 61 73 20 64 6f 74  s</tt> or as dot
abb0: 20 66 6f 72 20 3c 74 74 3e 41 67 67 72 65 67 61   for <tt>Aggrega
abc0: 74 65 73 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 74 74  tes</tt>.....<tt
abd0: 3e 6f 70 63 75 61 20 74 72 65 65 20 3c 69 3e 68  >opcua tree <i>h
abe0: 61 6e 64 6c 65 20 3f 6e 6f 64 65 69 64 3f 3c 2f  andle ?nodeid?</
abf0: 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 52  i></tt>....    R
ac00: 65 74 75 72 6e 73 20 69 6e 66 6f 72 6d 61 74 69  eturns informati
ac10: 6f 6e 20 73 69 6d 69 6c 61 72 20 74 6f 20 3c 74  on similar to <t
ac20: 74 3e 6f 70 63 75 61 20 62 72 6f 77 73 65 3c 2f  t>opcua browse</
ac30: 74 74 3e 20 75 73 69 6e 67 20 74 68 65 20 63 6c  tt> using the cl
ac40: 69 65 6e 74 20 6f 72 20 73 65 72 76 65 72 20 6f  ient or server o
ac50: 62 6a 65 63 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  bject <tt><i>han
ac60: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 54 68  dle</i></tt>. Th
ac70: 65 20 61 64 64 72 65 73 73 20 73 70 61 63 65 20  e address space 
ac80: 69 73 20 74 72 61 76 65 72 73 65 64 20 73 74 61  is traversed sta
ac90: 72 74 69 6e 67 20 61 74 20 74 68 65 20 6e 6f 64  rting at the nod
aca0: 65 20 69 64 65 6e 74 69 66 69 65 72 20 3c 74 74  e identifier <tt
acb0: 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f 69 3e 3c 2f  ><i>nodeid</i></
acc0: 74 74 3e 20 28 74 68 65 20 72 6f 6f 74 20 6e 6f  tt> (the root no
acd0: 64 65 20 69 66 20 6f 6d 69 74 74 65 64 29 2e 20  de if omitted). 
ace0: 54 68 65 20 72 65 73 75 6c 74 20 6c 69 73 74 20  The result list 
acf0: 69 73 20 6d 61 64 65 20 75 70 20 6f 66 20 74 72  is made up of tr
ad00: 65 65 20 6c 65 76 65 6c 20 28 30 2d 62 61 73 65  ee level (0-base
ad10: 64 29 2c 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  d), node identif
ad20: 69 65 72 2c 20 62 72 6f 77 73 65 20 6e 61 6d 65  ier, browse name
ad30: 20 28 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65   (qualified name
ad40: 29 2c 20 64 69 73 70 6c 61 79 20 6e 61 6d 65 20  ), display name 
ad50: 20 28 6c 6f 63 61 6c 65 20 20 61 6e 64 20 20 74   (locale  and  t
ad60: 65 78 74 29 2c 20 6e 6f 64 65 20 63 6c 61 73 73  ext), node class
ad70: 2c 20 72 65 66 65 72 65 6e 63 65 20 6e 6f 64 65  , reference node
ad80: 20 69 64 65 6e 74 69 66 69 65 72 2c 20 74 79 70   identifier, typ
ad90: 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65  e node identifie
ada0: 72 2c 20 61 6e 64 20 70 61 72 65 6e 74 20 6e 6f  r, and parent no
adb0: 64 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a  de identifier...
adc0: 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 74 79 70 65  ..<tt>opcua type
add0: 20 3c 69 3e 68 61 6e 64 6c 65 20 6e 6f 64 65 69   <i>handle nodei
ade0: 64 20 3f 61 74 74 72 3f 3c 2f 69 3e 3c 2f 74 74  d ?attr?</i></tt
adf0: 3e 0d 0a 0d 0a 20 20 20 20 50 65 72 66 6f 72 6d  >....    Perform
ae00: 73 20 61 20 72 65 61 64 20 6f 70 65 72 61 74 69  s a read operati
ae10: 6f 6e 20 6f 6e 20 74 68 65 20 63 6c 69 65 6e 74  on on the client
ae20: 20 6f 72 20 73 65 72 76 65 72 20 6f 62 6a 65 63   or server objec
ae30: 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c  t <tt><i>handle<
ae40: 2f 69 3e 3c 2f 74 74 3e 20 6c 69 6b 65 20 3c 74  /i></tt> like <t
ae50: 74 3e 6f 70 63 75 61 20 72 65 61 64 3c 2f 74 74  t>opcua read</tt
ae60: 3e 20 62 75 74 20 69 6e 73 74 65 61 64 20 6f 66  > but instead of
ae70: 20 74 68 65 20 61 74 74 72 69 62 75 74 65 27 73   the attribute's
ae80: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 73 20 74   value returns t
ae90: 68 65 20 74 79 70 65 20 6e 61 6d 65 20 6f 66 20  he type name of 
aea0: 61 74 74 72 69 62 75 74 65 20 3c 74 74 3e 3c 69  attribute <tt><i
aeb0: 3e 61 74 74 72 3c 2f 69 3e 3c 2f 74 74 3e 20 6f  >attr</i></tt> o
aec0: 66 20 74 68 65 20 6e 6f 64 65 20 20 69 64 65 6e  f the node  iden
aed0: 74 69 66 69 65 72 20 3c 74 74 3e 3c 69 3e 6e 6f  tifier <tt><i>no
aee0: 64 65 69 64 3c 2f 69 3e 3c 2f 74 74 3e 2e 20 20  deid</i></tt>.  
aef0: 49 66 20 3c 74 74 3e 3c 69 3e 61 74 74 72 3c 2f  If <tt><i>attr</
af00: 69 3e 3c 2f 74 74 3e 20 69 73 20 6f 6d 69 74 74  i></tt> is omitt
af10: 65 64 2c 20 69 74 20 64 65 66 61 75 6c 74 73 20  ed, it defaults 
af20: 74 6f 20 74 68 65 20 3c 74 74 3e 56 61 6c 75 65  to the <tt>Value
af30: 3c 2f 74 74 3e 20 61 74 74 72 69 62 75 74 65 2e  </tt> attribute.
af40: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 74 79  ....<tt>opcua ty
af50: 70 65 73 20 62 61 73 69 63 7c 62 75 69 6c 74 69  pes basic|builti
af60: 6e 7c 65 6d 70 74 79 7c 6c 69 73 74 7c 6e 61 6d  n|empty|list|nam
af70: 65 7c 6e 6f 64 65 69 64 20 3c 69 3e 3f 68 61 6e  e|nodeid <i>?han
af80: 64 6c 65 20 6e 61 6d 65 3f 3c 2f 69 3e 3c 2f 74  dle name?</i></t
af90: 74 3e 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e  t>....    Return
afa0: 73 20 61 20 6c 69 73 74 20 6f 66 20 4f 50 43 2f  s a list of OPC/
afb0: 55 41 20 74 79 70 65 20 6e 61 6d 65 73 20 66 6f  UA type names fo
afc0: 72 20 74 68 65 20 3c 74 74 3e 62 61 73 69 63 3c  r the <tt>basic<
afd0: 2f 74 74 3e 20 61 6e 64 20 3c 74 74 3e 6c 69 73  /tt> and <tt>lis
afe0: 74 3c 2f 74 74 3e 20 73 75 62 63 6f 6d 6d 61 6e  t</tt> subcomman
aff0: 64 73 2e 20 42 61 73 69 63 20 74 79 70 65 73 20  ds. Basic types 
b000: 61 72 65 20 70 72 69 6d 69 74 69 76 65 73 20 28  are primitives (
b010: 65 2e 67 2e 20 69 6e 74 65 67 65 72 20 6e 75 6d  e.g. integer num
b020: 62 65 72 73 29 20 66 6f 72 20 77 68 69 63 68 20  bers) for which 
b030: 61 20 6d 61 70 70 69 6e 67 20 74 6f 20 54 63 6c  a mapping to Tcl
b040: 20 6f 62 6a 65 63 74 73 20 69 73 20 70 72 6f 76   objects is prov
b050: 69 64 65 64 2e 20 54 68 65 20 3c 74 74 3e 3c 69  ided. The <tt><i
b060: 3e 65 6d 70 74 79 3c 2f 69 3e 3c 2f 74 74 3e 20  >empty</i></tt> 
b070: 73 75 62 63 6f 6d 6d 61 6e 64 20 72 65 71 75 69  subcommand requi
b080: 72 65 73 20 3c 74 74 3e 3c 69 3e 6e 61 6d 65 3c  res <tt><i>name<
b090: 2f 69 3e 3c 2f 74 74 3e 20 74 6f 20 62 65 20 61  /i></tt> to be a
b0a0: 20 6b 6e 6f 77 6e 20 4f 50 43 2f 55 41 20 74 79   known OPC/UA ty
b0b0: 70 65 20 6e 61 6d 65 20 61 6e 64 20 70 72 6f 64  pe name and prod
b0c0: 75 63 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73  uces and returns
b0d0: 20 61 6e 20 65 6d 70 74 79 20 76 61 6c 75 65 20   an empty value 
b0e0: 6f 66 20 74 68 69 73 20 74 79 70 65 2c 20 65 2e  of this type, e.
b0f0: 67 2e 20 30 2e 30 20 66 6f 72 20 61 20 66 6c 6f  g. 0.0 for a flo
b100: 61 74 69 6e 67 20 70 6f 69 6e 74 20 74 79 70 65  ating point type
b110: 2e 20 54 68 65 20 3c 74 74 3e 3c 69 3e 6e 6f 64  . The <tt><i>nod
b120: 65 69 64 3c 2f 69 3e 3c 2f 74 74 3e 20 73 75 62  eid</i></tt> sub
b130: 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73 20  command returns 
b140: 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74 69 66  the node identif
b150: 69 65 72 20 66 6f 72 20 74 68 65 20 74 79 70 65  ier for the type
b160: 20 6e 61 6d 65 2e 20 54 68 65 20 3c 74 74 3e 6e   name. The <tt>n
b170: 61 6d 65 3c 2f 74 74 3e 20 73 75 62 63 6f 6d 6d  ame</tt> subcomm
b180: 61 6e 64 20 69 73 20 74 68 65 20 72 65 76 65 72  and is the rever
b190: 73 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  se operation of 
b1a0: 74 68 65 20 3c 74 74 3e 6e 6f 64 65 69 64 3c 2f  the <tt>nodeid</
b1b0: 74 74 3e 20 73 75 62 63 6f 6d 6d 61 6e 64 20 61  tt> subcommand a
b1c0: 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 20 74  nd reports the t
b1d0: 79 70 65 20 6e 61 6d 65 20 66 6f 72 20 6e 6f 64  ype name for nod
b1e0: 65 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 20  e identifier in 
b1f0: 3c 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f 69  <tt><i>nodeid</i
b200: 3e 3c 2f 74 74 3e 2e 20 46 6f 72 20 74 68 65 20  ></tt>. For the 
b210: 63 6f 6d 6d 61 6e 64 20 66 6f 72 6d 73 20 77 68  command forms wh
b220: 65 72 65 20 61 20 3c 74 74 3e 3c 69 3e 68 61 6e  ere a <tt><i>han
b230: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 63 61 6e  dle</i></tt> can
b240: 20 62 65 20 73 70 65 63 69 66 69 65 64 2c 20 74   be specified, t
b250: 68 69 73 20 61 6c 6c 6f 77 73 20 74 6f 20 64 65  his allows to de
b260: 61 6c 20 77 69 74 68 20 61 64 64 69 74 69 6f 6e  al with addition
b270: 61 6c 20 63 75 73 74 6f 6d 20 64 61 74 61 20 74  al custom data t
b280: 79 70 65 73 20 28 73 65 65 20 65 2e 67 2e 20 3c  ypes (see e.g. <
b290: 74 74 3e 6f 70 63 75 61 20 64 65 66 74 79 70 65  tt>opcua deftype
b2a0: 73 3c 2f 74 74 3e 29 20 77 68 69 63 68 20 77 68  s</tt>) which wh
b2b0: 65 72 65 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20  ere loaded into 
b2c0: 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20 73 65  the client or se
b2d0: 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e  rver object <tt>
b2e0: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
b2f0: 74 3e 2e 20 54 68 65 20 3c 74 74 3e 62 75 69 6c  t>. The <tt>buil
b300: 74 69 6e 3c 2f 74 74 3e 20 73 75 62 63 6f 6d 6d  tin</tt> subcomm
b310: 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
b320: 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66  numeric value of
b330: 20 74 68 65 20 64 61 74 61 20 74 79 70 65 20 3c   the data type <
b340: 74 74 3e 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 3c 2f  tt><i>name</i></
b350: 74 74 3e 20 66 6f 72 20 70 72 69 6d 69 74 69 76  tt> for primitiv
b360: 65 20 74 79 70 65 73 20 6f 66 20 6e 61 6d 65 73  e types of names
b370: 70 61 63 65 20 7a 65 72 6f 2e 0d 0a 0d 0a 3c 74  pace zero.....<t
b380: 74 3e 6f 70 63 75 61 20 75 6e 72 65 67 69 73 74  t>opcua unregist
b390: 65 72 20 3c 69 3e 68 61 6e 64 6c 65 20 6e 6f 64  er <i>handle nod
b3a0: 65 6c 69 73 74 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a  elist</i></tt>..
b3b0: 0d 0a 20 20 20 20 55 6e 72 65 67 69 73 74 65 72  ..    Unregister
b3c0: 73 20 74 68 65 20 6e 6f 64 65 20 69 64 65 6e 74  s the node ident
b3d0: 69 66 69 65 72 73 20 66 72 6f 6d 20 3c 74 74 3e  ifiers from <tt>
b3e0: 3c 69 3e 6e 6f 64 65 6c 69 73 74 3c 2f 69 3e 3c  <i>nodelist</i><
b3f0: 2f 74 74 3e 20 69 6e 20 74 68 65 20 73 65 72 76  /tt> in the serv
b400: 65 72 20 74 6f 20 77 68 69 63 68 20 3c 74 74 3e  er to which <tt>
b410: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
b420: 74 3e 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 2e  t> is connected.
b430: 20 54 68 69 73 20 69 73 20 74 68 65 20 72 65 76   This is the rev
b440: 65 72 73 65 20 6f 66 20 74 68 65 20 3c 74 74 3e  erse of the <tt>
b450: 72 65 67 69 73 74 65 72 3c 2f 74 74 3e 20 73 75  register</tt> su
b460: 62 63 6f 6d 6d 61 6e 64 20 77 68 69 63 68 20 72  bcommand which r
b470: 65 6d 6f 76 65 73 20 74 68 65 20 61 6c 69 61 73  emoves the alias
b480: 65 73 20 74 6f 20 74 68 65 20 6e 6f 64 65 20 69  es to the node i
b490: 64 65 6e 74 69 66 69 65 72 73 20 69 6e 20 3c 74  dentifiers in <t
b4a0: 74 3e 3c 69 3e 6e 6f 64 65 6c 69 73 74 3c 2f 69  t><i>nodelist</i
b4b0: 3e 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f  ></tt>.....<tt>o
b4c0: 70 63 75 61 20 76 65 72 73 69 6f 6e 3c 2f 74 74  pcua version</tt
b4d0: 3e 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73  >....    Returns
b4e0: 20 74 68 65 20 6d 61 6a 6f 72 20 61 6e 64 20 6d   the major and m
b4f0: 69 6e 6f 72 20 76 65 72 73 69 6f 6e 20 6e 75 6d  inor version num
b500: 62 65 72 73 20 6f 66 20 74 68 65 20 69 6e 74 65  bers of the inte
b510: 67 72 61 74 65 64 20 6f 70 65 6e 36 32 35 34 31  grated open62541
b520: 20 6c 69 62 72 61 72 79 2c 20 65 2e 67 2e 20 22   library, e.g. "
b530: 31 2e 30 22 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63  1.0".....<tt>opc
b540: 75 61 20 77 72 69 74 65 20 3c 69 3e 68 61 6e 64  ua write <i>hand
b550: 6c 65 20 6e 6f 64 65 69 64 20 3f 61 74 74 72 3f  le nodeid ?attr?
b560: 20 74 79 70 65 20 76 61 6c 75 65 20 3f 63 6d 64   type value ?cmd
b570: 3f 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20  ?</i></tt>....  
b580: 20 20 50 65 72 66 6f 72 6d 73 20 61 20 77 72 69    Performs a wri
b590: 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  te operation on 
b5a0: 74 68 65 20 63 6c 69 65 6e 74 20 6f 72 20 73 65  the client or se
b5b0: 72 76 65 72 20 6f 62 6a 65 63 74 20 3c 74 74 3e  rver object <tt>
b5c0: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
b5d0: 74 3e 20 77 72 69 74 69 6e 67 20 3c 74 74 3e 3c  t> writing <tt><
b5e0: 69 3e 76 61 6c 75 65 3c 2f 69 3e 3c 2f 74 74 3e  i>value</i></tt>
b5f0: 20 77 69 74 68 20 74 79 70 65 20 3c 74 74 3e 3c   with type <tt><
b600: 69 3e 74 79 70 65 3c 2f 69 3e 3c 2f 74 74 3e 20  i>type</i></tt> 
b610: 69 6e 74 6f 20 74 68 65 20 61 74 74 72 69 62 75  into the attribu
b620: 74 65 20 3c 74 74 3e 3c 69 3e 61 74 74 72 3c 2f  te <tt><i>attr</
b630: 69 3e 3c 2f 74 74 3e 20 6f 66 20 74 68 65 20 6e  i></tt> of the n
b640: 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 20 3c  ode identifier <
b650: 74 74 3e 3c 69 3e 6e 6f 64 65 69 64 3c 2f 69 3e  tt><i>nodeid</i>
b660: 3c 2f 74 74 3e 2e 20 49 66 20 3c 74 74 3e 3c 69  </tt>. If <tt><i
b670: 3e 61 74 74 72 3c 2f 69 3e 3c 2f 74 74 3e 20 69  >attr</i></tt> i
b680: 73 20 6f 6d 69 74 74 65 64 2c 20 69 74 20 64 65  s omitted, it de
b690: 66 61 75 6c 74 73 20 74 6f 20 3c 74 74 3e 56 61  faults to <tt>Va
b6a0: 6c 75 65 3c 2f 74 74 3e 2e 20 54 68 65 20 6f 70  lue</tt>. The op
b6b0: 65 72 61 74 69 6f 6e 20 69 73 20 70 65 72 66 6f  eration is perfo
b6c0: 72 6d 65 64 20 77 69 74 68 6f 75 74 20 73 65 74  rmed without set
b6d0: 74 69 6e 67 20 61 6e 20 65 78 70 6c 69 63 69 74  ting an explicit
b6e0: 20 73 6f 75 72 63 65 20 74 69 6d 65 73 74 61 6d   source timestam
b6f0: 70 2e 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p. The optional 
b700: 70 61 72 61 6d 65 74 65 72 20 3c 74 74 3e 3c 69  parameter <tt><i
b710: 3e 63 6d 64 3c 2f 69 3e 3c 2f 74 74 3e 20 63 61  >cmd</i></tt> ca
b720: 6e 20 62 65 20 73 70 65 63 69 66 69 65 64 20 6f  n be specified o
b730: 6e 20 63 6c 69 65 6e 74 20 6f 62 6a 65 63 74 73  n client objects
b740: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 61 72   in order to car
b750: 72 79 20 6f 75 74 20 74 68 65 20 77 72 69 74 65  ry out the write
b760: 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 61 73   operation in as
b770: 79 6e 63 68 72 6f 6e 6f 75 73 20 6d 6f 64 65 2e  ynchronous mode.
b780: 20 53 65 65 20 3c 74 74 3e 6f 70 63 75 61 20 63   See <tt>opcua c
b790: 61 6c 6c 3c 2f 74 74 3e 20 61 6e 64 20 73 65 63  all</tt> and sec
b7a0: 74 69 6f 6e 20 3c 62 3e 41 73 79 6e 63 68 72 6f  tion <b>Asynchro
b7b0: 6e 6f 75 73 20 4f 70 65 72 61 74 69 6f 6e 73 3c  nous Operations<
b7c0: 2f 62 3e 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66  /b> for more inf
b7d0: 6f 72 6d 61 74 69 6f 6e 2e 0d 0a 0d 0a 3c 74 74  ormation.....<tt
b7e0: 3e 6f 70 63 75 61 20 78 63 61 6c 6c 20 3c 69 3e  >opcua xcall <i>
b7f0: 68 61 6e 64 6c 65 20 6e 6f 64 65 69 64 20 6d 65  handle nodeid me
b800: 74 68 6f 64 69 64 20 3f 74 79 70 65 20 76 61 6c  thodid ?type val
b810: 75 65 20 2e 2e 2e 3f 3c 2f 69 3e 3c 2f 74 74 3e  ue ...?</i></tt>
b820: 0d 0a 0d 0a 20 20 20 20 54 68 69 73 20 69 73 20  ....    This is 
b830: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 61 77  the coroutine aw
b840: 61 72 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 3c  are version of <
b850: 74 74 3e 6f 70 63 75 61 20 63 61 6c 6c 3c 2f 74  tt>opcua call</t
b860: 74 3e 2e 20 49 66 20 63 61 6c 6c 65 64 20 77 69  t>. If called wi
b870: 74 68 20 61 20 63 6c 69 65 6e 74 20 3c 74 74 3e  th a client <tt>
b880: 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74  <i>handle</i></t
b890: 74 3e 20 69 6e 20 61 20 63 6f 72 6f 75 74 69 6e  t> in a coroutin
b8a0: 65 20 63 6f 6e 74 65 78 74 20 69 74 20 75 73 65  e context it use
b8b0: 73 20 61 6e 20 61 73 79 6e 63 68 72 6f 6e 6f 75  s an asynchronou
b8c0: 73 20 63 61 6c 6c 20 6f 70 65 72 61 74 69 6f 6e  s call operation
b8d0: 20 77 69 74 68 20 3c 74 74 3e 79 69 65 6c 64 3c   with <tt>yield<
b8e0: 2f 74 74 3e 20 61 73 20 63 61 6c 6c 62 61 63 6b  /tt> as callback
b8f0: 2c 20 69 2e 65 2e 20 61 75 74 6f 6d 61 74 69 63  , i.e. automatic
b900: 61 6c 6c 79 20 73 75 73 70 65 6e 64 73 20 74 68  ally suspends th
b910: 65 20 63 6f 72 6f 75 74 69 6e 65 20 61 6e 64 20  e coroutine and 
b920: 72 65 73 75 6d 65 73 20 69 74 20 61 67 61 69 6e  resumes it again
b930: 20 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   when the result
b940: 20 62 65 63 6f 6d 65 73 20 61 76 61 69 6c 61 62   becomes availab
b950: 6c 65 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61  le.....<tt>opcua
b960: 20 78 67 65 6e 73 74 75 62 73 20 3c 69 3e 68 61   xgenstubs <i>ha
b970: 6e 64 6c 65 20 3f 73 74 72 69 70 20 73 75 62 73  ndle ?strip subs
b980: 74 73 20 2e 2e 2e 3f 3c 2f 69 3e 3c 2f 74 74 3e  ts ...?</i></tt>
b990: 0d 0a 0d 0a 20 20 20 20 54 68 69 73 20 69 73 20  ....    This is 
b9a0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 61 77  the coroutine aw
b9b0: 61 72 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 3c  are version of <
b9c0: 74 74 3e 6f 70 63 75 61 20 67 65 6e 73 74 75 62  tt>opcua genstub
b9d0: 73 3c 2f 74 74 3e 2e 20 49 6e 73 74 65 61 64 20  s</tt>. Instead 
b9e0: 6f 66 20 70 72 6f 63 65 64 75 72 65 20 62 6f 64  of procedure bod
b9f0: 69 65 73 20 75 73 69 6e 67 20 3c 74 74 3e 6f 70  ies using <tt>op
ba00: 63 75 61 20 63 61 6c 6c 3c 2f 74 74 3e 20 69 74  cua call</tt> it
ba10: 20 77 72 69 74 65 73 20 63 6f 72 6f 75 74 69 6e   writes coroutin
ba20: 65 20 61 77 61 72 65 20 70 72 6f 63 65 64 75 72  e aware procedur
ba30: 65 20 62 6f 64 69 65 73 20 75 73 69 6e 67 20 3c  e bodies using <
ba40: 74 74 3e 6f 70 63 75 61 20 78 63 61 6c 6c 3c 2f  tt>opcua xcall</
ba50: 74 74 3e 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75  tt>.....<tt>opcu
ba60: 61 20 78 6d 72 65 61 64 20 3c 69 3e 68 61 6e 64  a xmread <i>hand
ba70: 6c 65 20 6e 6f 64 65 69 64 20 2e 2e 2e 3c 2f 69  le nodeid ...</i
ba80: 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 54 68  ></tt>....    Th
ba90: 69 73 20 69 73 20 74 68 65 20 63 6f 72 6f 75 74  is is the corout
baa0: 69 6e 65 20 61 77 61 72 65 20 76 65 72 73 69 6f  ine aware versio
bab0: 6e 20 6f 66 20 3c 74 74 3e 6f 70 63 75 61 20 6d  n of <tt>opcua m
bac0: 72 65 61 64 3c 2f 74 74 3e 2e 20 49 66 20 63 61  read</tt>. If ca
bad0: 6c 6c 65 64 20 77 69 74 68 20 61 20 63 6c 69 65  lled with a clie
bae0: 6e 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65  nt <tt><i>handle
baf0: 3c 2f 69 3e 3c 2f 74 74 3e 20 69 6e 20 61 20 63  </i></tt> in a c
bb00: 6f 72 6f 75 74 69 6e 65 20 63 6f 6e 74 65 78 74  oroutine context
bb10: 20 69 74 20 75 73 65 73 20 61 6e 20 61 73 79 6e   it uses an asyn
bb20: 63 68 72 6f 6e 6f 75 73 20 72 65 61 64 20 6f 70  chronous read op
bb30: 65 72 61 74 69 6f 6e 20 77 69 74 68 20 3c 74 74  eration with <tt
bb40: 3e 79 69 65 6c 64 3c 2f 74 74 3e 20 61 73 20 63  >yield</tt> as c
bb50: 61 6c 6c 62 61 63 6b 2c 20 69 2e 65 2e 20 61 75  allback, i.e. au
bb60: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 75 73 70  tomatically susp
bb70: 65 6e 64 73 20 74 68 65 20 63 6f 72 6f 75 74 69  ends the corouti
bb80: 6e 65 20 61 6e 64 20 72 65 73 75 6d 65 73 20 69  ne and resumes i
bb90: 74 20 61 67 61 69 6e 20 77 68 65 6e 20 74 68 65  t again when the
bba0: 20 72 65 73 75 6c 74 20 62 65 63 6f 6d 65 73 20   result becomes 
bbb0: 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 0d 0a 3c 74  available.....<t
bbc0: 74 3e 6f 70 63 75 61 20 78 6d 72 65 61 64 78 20  t>opcua xmreadx 
bbd0: 3c 69 3e 68 61 6e 64 6c 65 20 6e 6f 64 65 69 64  <i>handle nodeid
bbe0: 20 61 74 74 72 20 69 6e 64 65 78 20 2e 2e 2e 3c   attr index ...<
bbf0: 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20  /i></tt>....    
bc00: 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 6f  This is the coro
bc10: 75 74 69 6e 65 20 61 77 61 72 65 20 76 65 72 73  utine aware vers
bc20: 69 6f 6e 20 6f 66 20 3c 74 74 3e 6f 70 63 75 61  ion of <tt>opcua
bc30: 20 6d 72 65 61 64 78 3c 2f 74 74 3e 2e 20 49 66   mreadx</tt>. If
bc40: 20 63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 63   called with a c
bc50: 6c 69 65 6e 74 20 3c 74 74 3e 3c 69 3e 68 61 6e  lient <tt><i>han
bc60: 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20 69 6e 20  dle</i></tt> in 
bc70: 61 20 63 6f 72 6f 75 74 69 6e 65 20 63 6f 6e 74  a coroutine cont
bc80: 65 78 74 20 69 74 20 75 73 65 73 20 61 6e 20 61  ext it uses an a
bc90: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 72 65 61 64  synchronous read
bca0: 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 74 68 20   operation with 
bcb0: 3c 74 74 3e 79 69 65 6c 64 3c 2f 74 74 3e 20 61  <tt>yield</tt> a
bcc0: 73 20 63 61 6c 6c 62 61 63 6b 2c 20 69 2e 65 2e  s callback, i.e.
bcd0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73   automatically s
bce0: 75 73 70 65 6e 64 73 20 74 68 65 20 63 6f 72 6f  uspends the coro
bcf0: 75 74 69 6e 65 20 61 6e 64 20 72 65 73 75 6d 65  utine and resume
bd00: 73 20 69 74 20 61 67 61 69 6e 20 77 68 65 6e 20  s it again when 
bd10: 74 68 65 20 72 65 73 75 6c 74 20 62 65 63 6f 6d  the result becom
bd20: 65 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 0d  es available....
bd30: 0a 3c 74 74 3e 6f 70 63 75 61 20 78 6d 77 72 69  .<tt>opcua xmwri
bd40: 74 65 20 3c 69 3e 68 61 6e 64 6c 65 20 6e 6f 64  te <i>handle nod
bd50: 65 69 64 20 74 79 70 65 20 76 61 6c 75 65 20 2e  eid type value .
bd60: 2e 2e 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20  ..</i></tt>.... 
bd70: 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20 63     This is the c
bd80: 6f 72 6f 75 74 69 6e 65 20 61 77 61 72 65 20 76  oroutine aware v
bd90: 65 72 73 69 6f 6e 20 6f 66 20 3c 74 74 3e 6f 70  ersion of <tt>op
bda0: 63 75 61 20 6d 77 72 69 74 65 3c 2f 74 74 3e 2e  cua mwrite</tt>.
bdb0: 20 49 66 20 63 61 6c 6c 65 64 20 77 69 74 68 20   If called with 
bdc0: 61 20 63 6c 69 65 6e 74 20 3c 74 74 3e 3c 69 3e  a client <tt><i>
bdd0: 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e 20  handle</i></tt> 
bde0: 69 6e 20 61 20 63 6f 72 6f 75 74 69 6e 65 20 63  in a coroutine c
bdf0: 6f 6e 74 65 78 74 20 69 74 20 75 73 65 73 20 61  ontext it uses a
be00: 6e 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 77  n asynchronous w
be10: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 77  rite operation w
be20: 69 74 68 20 3c 74 74 3e 79 69 65 6c 64 3c 2f 74  ith <tt>yield</t
be30: 74 3e 20 61 73 20 63 61 6c 6c 62 61 63 6b 2c 20  t> as callback, 
be40: 69 2e 65 2e 20 61 75 74 6f 6d 61 74 69 63 61 6c  i.e. automatical
be50: 6c 79 20 73 75 73 70 65 6e 64 73 20 74 68 65 20  ly suspends the 
be60: 63 6f 72 6f 75 74 69 6e 65 20 61 6e 64 20 72 65  coroutine and re
be70: 73 75 6d 65 73 20 69 74 20 61 67 61 69 6e 20 77  sumes it again w
be80: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 62  hen the result b
be90: 65 63 6f 6d 65 73 20 61 76 61 69 6c 61 62 6c 65  ecomes available
bea0: 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 78  .....<tt>opcua x
beb0: 6d 77 72 69 74 65 78 20 3c 69 3e 68 61 6e 64 6c  mwritex <i>handl
bec0: 65 20 6e 6f 64 65 69 64 20 61 74 74 72 20 69 6e  e nodeid attr in
bed0: 64 65 78 20 74 79 70 65 20 76 61 6c 75 65 20 2e  dex type value .
bee0: 2e 2e 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20  ..</i></tt>.... 
bef0: 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20 63     This is the c
bf00: 6f 72 6f 75 74 69 6e 65 20 61 77 61 72 65 20 76  oroutine aware v
bf10: 65 72 73 69 6f 6e 20 6f 66 20 3c 74 74 3e 6f 70  ersion of <tt>op
bf20: 63 75 61 20 6d 77 72 69 74 65 78 3c 2f 74 74 3e  cua mwritex</tt>
bf30: 2e 20 49 66 20 63 61 6c 6c 65 64 20 77 69 74 68  . If called with
bf40: 20 61 20 63 6c 69 65 6e 74 20 3c 74 74 3e 3c 69   a client <tt><i
bf50: 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f 74 74 3e  >handle</i></tt>
bf60: 20 69 6e 20 61 20 63 6f 72 6f 75 74 69 6e 65 20   in a coroutine 
bf70: 63 6f 6e 74 65 78 74 20 69 74 20 75 73 65 73 20  context it uses 
bf80: 61 6e 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20  an asynchronous 
bf90: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20  write operation 
bfa0: 77 69 74 68 20 3c 74 74 3e 79 69 65 6c 64 3c 2f  with <tt>yield</
bfb0: 74 74 3e 20 61 73 20 63 61 6c 6c 62 61 63 6b 2c  tt> as callback,
bfc0: 20 69 2e 65 2e 20 61 75 74 6f 6d 61 74 69 63 61   i.e. automatica
bfd0: 6c 6c 79 20 73 75 73 70 65 6e 64 73 20 74 68 65  lly suspends the
bfe0: 20 63 6f 72 6f 75 74 69 6e 65 20 61 6e 64 20 72   coroutine and r
bff0: 65 73 75 6d 65 73 20 69 74 20 61 67 61 69 6e 20  esumes it again 
c000: 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  when the result 
c010: 62 65 63 6f 6d 65 73 20 61 76 61 69 6c 61 62 6c  becomes availabl
c020: 65 2e 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20  e.....<tt>opcua 
c030: 78 72 65 61 64 20 3c 69 3e 68 61 6e 64 6c 65 20  xread <i>handle 
c040: 6e 6f 64 65 69 64 20 3f 61 74 74 72 3f 3c 2f 69  nodeid ?attr?</i
c050: 3e 3c 2f 74 74 3e 0d 0a 0d 0a 20 20 20 20 54 68  ></tt>....    Th
c060: 69 73 20 69 73 20 74 68 65 20 63 6f 72 6f 75 74  is is the corout
c070: 69 6e 65 20 61 77 61 72 65 20 76 65 72 73 69 6f  ine aware versio
c080: 6e 20 6f 66 20 3c 74 74 3e 6f 70 63 75 61 20 72  n of <tt>opcua r
c090: 65 61 64 3c 2f 74 74 3e 2e 20 49 66 20 63 61 6c  ead</tt>. If cal
c0a0: 6c 65 64 20 77 69 74 68 20 61 20 63 6c 69 65 6e  led with a clien
c0b0: 74 20 3c 74 74 3e 3c 69 3e 68 61 6e 64 6c 65 3c  t <tt><i>handle<
c0c0: 2f 69 3e 3c 2f 74 74 3e 20 69 6e 20 61 20 63 6f  /i></tt> in a co
c0d0: 72 6f 75 74 69 6e 65 20 63 6f 6e 74 65 78 74 20  routine context 
c0e0: 69 74 20 75 73 65 73 20 61 6e 20 61 73 79 6e 63  it uses an async
c0f0: 68 72 6f 6e 6f 75 73 20 72 65 61 64 20 6f 70 65  hronous read ope
c100: 72 61 74 69 6f 6e 20 77 69 74 68 20 3c 74 74 3e  ration with <tt>
c110: 79 69 65 6c 64 3c 2f 74 74 3e 20 61 73 20 63 61  yield</tt> as ca
c120: 6c 6c 62 61 63 6b 2c 20 69 2e 65 2e 20 61 75 74  llback, i.e. aut
c130: 6f 6d 61 74 69 63 61 6c 6c 79 20 73 75 73 70 65  omatically suspe
c140: 6e 64 73 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  nds the coroutin
c150: 65 20 61 6e 64 20 72 65 73 75 6d 65 73 20 69 74  e and resumes it
c160: 20 61 67 61 69 6e 20 77 68 65 6e 20 74 68 65 20   again when the 
c170: 72 65 73 75 6c 74 20 62 65 63 6f 6d 65 73 20 61  result becomes a
c180: 76 61 69 6c 61 62 6c 65 2e 0d 0a 0d 0a 3c 74 74  vailable.....<tt
c190: 3e 6f 70 63 75 61 20 78 73 6c 65 65 70 20 3c 69  >opcua xsleep <i
c1a0: 3e 6d 73 3c 2f 69 3e 3c 2f 74 74 3e 0d 0a 0d 0a  >ms</i></tt>....
c1b0: 20 20 20 20 54 68 69 73 20 69 73 20 61 20 63 6f      This is a co
c1c0: 72 6f 75 74 69 6e 65 20 61 77 61 72 65 20 63 6f  routine aware co
c1d0: 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e 63 74 69  nvenience functi
c1e0: 6f 6e 20 77 68 69 63 68 20 64 65 6c 61 79 73 20  on which delays 
c1f0: 65 78 65 63 75 74 69 6f 6e 20 66 6f 72 20 3c 74  execution for <t
c200: 74 3e 3c 69 3e 6d 73 3c 2f 69 3e 3c 2f 74 74 3e  t><i>ms</i></tt>
c210: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 62 79   milliseconds by
c220: 20 75 73 69 6e 67 20 74 68 65 20 3c 74 74 3e 61   using the <tt>a
c230: 66 74 65 72 3c 2f 74 74 3e 20 63 6f 6d 6d 61 6e  fter</tt> comman
c240: 64 20 77 69 74 68 20 61 20 63 61 6c 6c 62 61 63  d with a callbac
c250: 6b 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 65  k in order to se
c260: 72 76 69 63 65 20 65 76 65 6e 74 73 2c 20 69 66  rvice events, if
c270: 20 69 6e 76 6f 6b 65 64 20 69 6e 20 61 20 63 6f   invoked in a co
c280: 72 6f 75 74 69 6e 65 20 63 6f 6e 74 65 78 74 2e  routine context.
c290: 0d 0a 0d 0a 3c 74 74 3e 6f 70 63 75 61 20 78 77  ....<tt>opcua xw
c2a0: 72 69 74 65 20 3c 69 3e 68 61 6e 64 6c 65 20 6e  rite <i>handle n
c2b0: 6f 64 65 69 64 20 3f 61 74 74 72 3f 20 74 79 70  odeid ?attr? typ
c2c0: 65 20 76 61 6c 75 65 3c 2f 69 3e 3c 2f 74 74 3e  e value</i></tt>
c2d0: 0d 0a 0d 0a 20 20 20 20 54 68 69 73 20 69 73 20  ....    This is 
c2e0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 61 77  the coroutine aw
c2f0: 61 72 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 3c  are version of <
c300: 74 74 3e 6f 70 63 75 61 20 77 72 69 74 65 3c 2f  tt>opcua write</
c310: 74 74 3e 2e 20 49 66 20 63 61 6c 6c 65 64 20 77  tt>. If called w
c320: 69 74 68 20 61 20 63 6c 69 65 6e 74 20 3c 74 74  ith a client <tt
c330: 3e 3c 69 3e 68 61 6e 64 6c 65 3c 2f 69 3e 3c 2f  ><i>handle</i></
c340: 74 74 3e 20 69 6e 20 61 20 63 6f 72 6f 75 74 69  tt> in a corouti
c350: 6e 65 20 63 6f 6e 74 65 78 74 20 69 74 20 75 73  ne context it us
c360: 65 73 20 61 6e 20 61 73 79 6e 63 68 72 6f 6e 6f  es an asynchrono
c370: 75 73 20 77 72 69 74 65 20 6f 70 65 72 61 74 69  us write operati
c380: 6f 6e 20 77 69 74 68 20 3c 74 74 3e 79 69 65 6c  on with <tt>yiel
c390: 64 3c 2f 74 74 3e 20 61 73 20 63 61 6c 6c 62 61  d</tt> as callba
c3a0: 63 6b 2c 20 69 2e 65 2e 20 61 75 74 6f 6d 61 74  ck, i.e. automat
c3b0: 69 63 61 6c 6c 79 20 73 75 73 70 65 6e 64 73 20  ically suspends 
c3c0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 61 6e  the coroutine an
c3d0: 64 20 72 65 73 75 6d 65 73 20 69 74 20 61 67 61  d resumes it aga
c3e0: 69 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 75  in when the resu
c3f0: 6c 74 20 62 65 63 6f 6d 65 73 20 61 76 61 69 6c  lt becomes avail
c400: 61 62 6c 65 2e 0d 0a 0d 0a 3c 68 33 3e 4f 50 43  able.....<h3>OPC
c410: 2f 55 41 20 45 6e 73 65 6d 62 6c 65 3c 2f 68 33  /UA Ensemble</h3
c420: 3e 0d 0a 0d 0a 54 68 65 20 63 75 72 72 65 6e 74  >....The current
c430: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
c440: 75 73 65 73 20 61 6e 20 65 6e 73 65 6d 62 6c 65  uses an ensemble
c450: 20 61 6e 64 20 6e 61 6d 65 73 70 61 63 65 20 3c   and namespace <
c460: 74 74 3e 6f 70 63 75 61 3c 2f 74 74 3e 2c 20 69  tt>opcua</tt>, i
c470: 2e 65 2e 0d 0a 74 68 65 20 63 6f 6d 6d 61 6e 64  .e...the command
c480: 20 3c 74 74 3e 6f 70 63 75 61 20 69 6e 66 6f 3c   <tt>opcua info<
c490: 2f 74 74 3e 20 63 61 6e 20 62 65 20 61 6c 74 65  /tt> can be alte
c4a0: 72 6e 61 74 69 76 65 6c 79 20 77 72 69 74 74 65  rnatively writte
c4b0: 6e 20 61 73 20 3c 74 74 3e 6f 70 63 75 61 3a 3a  n as <tt>opcua::
c4c0: 69 6e 66 6f 3c 2f 74 74 3e 2e 20 53 6f 6d 65 20  info</tt>. Some 
c4d0: 6d 6f 72 65 20 63 6f 6d 70 6c 65 78 20 73 75 62  more complex sub
c4e0: 63 6f 6d 6d 61 6e 64 73 20 6f 66 20 74 68 65 20  commands of the 
c4f0: 3c 74 74 3e 6f 70 63 75 61 3c 2f 74 74 3e 20 6e  <tt>opcua</tt> n
c500: 61 6d 65 73 70 61 63 65 20 61 72 65 20 69 6d 70  amespace are imp
c510: 6c 65 6d 65 6e 74 65 64 20 69 6e 20 54 63 6c 2c  lemented in Tcl,
c520: 20 6e 61 6d 65 6c 79 20 74 68 65 20 3c 74 74 3e   namely the <tt>
c530: 6f 70 63 75 61 20 74 72 65 65 3c 2f 74 74 3e 20  opcua tree</tt> 
c540: 61 6e 64 20 3c 74 74 3e 6f 70 63 75 61 20 67 65  and <tt>opcua ge
c550: 6e 73 74 75 62 73 3c 2f 74 74 3e 20 70 72 6f 63  nstubs</tt> proc
c560: 65 64 75 72 65 73 2e 0d 0a 0d 0a 3c 68 33 3e 4e  edures.....<h3>N
c570: 6f 64 65 20 49 64 65 6e 74 69 66 69 65 72 73 3c  ode Identifiers<
c580: 2f 68 33 3e 0d 0a 0d 0a 4e 75 6d 65 72 69 63 20  /h3>....Numeric 
c590: 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72 73  node identifiers
c5a0: 20 63 61 6e 20 62 65 20 77 72 69 74 74 65 6e 20   can be written 
c5b0: 61 73 20 3c 74 74 3e 6e 73 3d 4e 3b 69 3d 49 3c  as <tt>ns=N;i=I<
c5c0: 2f 74 74 3e 20 77 68 65 72 65 20 3c 74 74 3e 4e  /tt> where <tt>N
c5d0: 3c 2f 74 74 3e 20 69 73 20 20 74 68 65 20 6e 75  </tt> is  the nu
c5e0: 6d 65 72 69 63 20 6e 61 6d 65 73 70 61 63 65 2c  meric namespace,
c5f0: 20 61 6e 64 20 3c 74 74 3e 49 3c 2f 74 74 3e 20   and <tt>I</tt> 
c600: 74 68 65 20 6e 75 6d 65 72 69 63 20 69 64 65 6e  the numeric iden
c610: 74 69 66 69 65 72 2e 20 4c 69 6b 65 77 69 73 65  tifier. Likewise
c620: 2c 20 73 74 72 69 6e 67 20 6e 6f 64 65 20 69 64  , string node id
c630: 65 6e 74 69 66 69 65 72 73 20 61 72 65 20 77 72  entifiers are wr
c640: 69 74 74 65 6e 20 61 73 20 3c 74 74 3e 6e 73 3d  itten as <tt>ns=
c650: 4e 3b 73 3d 53 3c 2f 74 74 3e 20 77 69 74 68 20  N;s=S</tt> with 
c660: 3c 74 74 3e 53 3c 2f 74 74 3e 20 62 65 69 6e 67  <tt>S</tt> being
c670: 20 74 68 65 20 73 74 72 69 6e 67 20 69 64 65 6e   the string iden
c680: 74 69 66 69 65 72 2e 20 47 55 49 44 20 6e 6f 64  tifier. GUID nod
c690: 65 20 69 64 65 6e 74 69 66 69 65 72 73 20 61 72  e identifiers ar
c6a0: 65 20 77 72 69 74 74 65 6e 20 61 73 20 3c 74 74  e written as <tt
c6b0: 3e 6e 73 3d 4e 3b 67 3d 47 3c 2f 74 74 3e 20 77  >ns=N;g=G</tt> w
c6c0: 68 65 72 65 20 74 68 65 20 47 55 49 44 20 69 73  here the GUID is
c6d0: 20 3c 74 74 3e 47 3c 2f 74 74 3e 20 77 69 74 68   <tt>G</tt> with
c6e0: 20 74 68 65 20 75 73 75 61 6c 20 66 6f 72 6d 61   the usual forma
c6f0: 74 20 61 73 20 73 65 71 75 65 6e 63 65 20 6f 66  t as sequence of
c700: 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6e 75 6d   hexadecimal num
c710: 62 65 72 73 20 20 61 6e 64 20 64 61 73 68 65 73  bers  and dashes
c720: 2e 20 54 68 65 20 6e 61 6d 65 73 70 61 63 65 20  . The namespace 
c730: 70 61 72 74 20 63 61 6e 20 62 65 20 6c 65 66 74  part can be left
c740: 20 6f 75 74 20 77 68 65 6e 20 6e 61 6d 65 73 70   out when namesp
c750: 61 63 65 20 7a 65 72 6f 20 69 73 20 61 64 64 72  ace zero is addr
c760: 65 73 73 65 64 2e 20 43 75 72 72 65 6e 74 6c 79  essed. Currently
c770: 2c 20 62 79 74 65 20 73 74 72 69 6e 67 20 6e 6f  , byte string no
c780: 64 65 20 69 64 65 6e 74 69 66 69 65 72 73 20 61  de identifiers a
c790: 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  re not supported
c7a0: 2e 20 49 66 20 74 68 65 20 66 6f 72 6d 61 74 20  . If the format 
c7b0: 63 61 6e 6e 6f 74 20 20 62 65 20 64 65 74 65 72  cannot  be deter
c7c0: 6d 69 6e 65 64 20 28 65 2e 67 2e 20 73 69 6e 63  mined (e.g. sinc
c7d0: 65 20 74 68 65 20 65 71 75 61 6c 20 73 69 67 6e  e the equal sign
c7e0: 20 69 73 20 6d 69 73 73 69 6e 67 29 20 74 68 65   is missing) the
c7f0: 20 66 61 6c 6c 62 61 63 6b 20 63 68 6f 73 65 6e   fallback chosen
c800: 20 69 73 20 73 74 72 69 6e 67 20 6e 6f 64 65 20   is string node 
c810: 69 64 65 6e 74 69 66 69 65 72 20 69 6e 20 6e 61  identifier in na
c820: 6d 65 73 70 61 63 65 20 7a 65 72 6f 2e 20 53 74  mespace zero. St
c830: 72 69 6e 67 20 6e 61 6d 65 64 20 6e 61 6d 65 73  ring named names
c840: 70 61 63 65 73 20 61 72 65 20 6e 6f 74 20 73 75  paces are not su
c850: 70 70 6f 72 74 65 64 2e 0d 0a 0d 0a 3c 68 33 3e  pported.....<h3>
c860: 51 75 61 6c 69 66 69 65 64 20 4e 61 6d 65 73 3c  Qualified Names<
c870: 2f 68 33 3e 0d 0a 0d 0a 51 75 61 6c 69 66 69 65  /h3>....Qualifie
c880: 64 20 6e 61 6d 65 73 20 61 72 65 20 75 73 65 64  d names are used
c890: 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 69 6e 20   for example in 
c8a0: 74 68 65 20 3c 74 74 3e 6f 70 63 75 61 20 62 72  the <tt>opcua br
c8b0: 6f 77 73 65 3c 2f 74 74 3e 20 61 6e 64 20 3c 74  owse</tt> and <t
c8c0: 74 3e 6f 70 63 75 61 20 74 72 61 6e 73 6c 61 74  t>opcua translat
c8d0: 65 3c 2f 74 74 3e 20 6f 70 65 72 61 74 69 6f 6e  e</tt> operation
c8e0: 73 20 61 73 20 73 6f 20 63 61 6c 6c 65 64 20 62  s as so called b
c8f0: 72 6f 77 73 65 20 6e 61 6d 65 73 2e 20 54 68 65  rowse names. The
c900: 73 65 20 61 72 65 20 6d 61 64 65 20 75 70 20 6f  se are made up o
c910: 66 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 6e 75  f an optional nu
c920: 6d 65 72 69 63 20 6e 61 6d 65 73 70 61 63 65 20  meric namespace 
c930: 70 72 65 66 69 78 20 28 61 20 6e 75 6d 62 65 72  prefix (a number
c940: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
c950: 6f 6c 6f 6e 29 20 61 6e 64 20 61 20 6e 61 6d 65  olon) and a name
c960: 2c 20 65 2e 67 2e 20 3c 74 74 3e 3c 69 3e 32 3a  , e.g. <tt><i>2:
c970: 4d 79 4f 62 6a 65 63 74 3c 2f 69 3e 3c 2f 74 74  MyObject</i></tt
c980: 3e 2e 20 54 68 65 20 6e 61 6d 65 73 70 61 63 65  >. The namespace
c990: 20 70 72 65 66 69 78 20 69 73 20 6c 65 66 74 20   prefix is left 
c9a0: 6f 75 74 20 69 66 20 74 68 65 20 6e 61 6d 65 20  out if the name 
c9b0: 72 65 66 65 72 73 20 74 6f 20 6e 61 6d 65 73 70  refers to namesp
c9c0: 61 63 65 20 7a 65 72 6f 2e 0d 0a 0d 0a 3c 68 33  ace zero.....<h3
c9d0: 3e 4c 6f 63 61 6c 69 7a 65 64 20 54 65 78 74 3c  >Localized Text<
c9e0: 2f 68 33 3e 0d 0a 0d 0a 54 68 65 20 64 61 74 61  /h3>....The data
c9f0: 20 74 79 70 65 20 3c 74 74 3e 4c 6f 63 61 6c 69   type <tt>Locali
ca00: 7a 65 64 54 65 78 74 3c 2f 74 74 3e 20 69 73 20  zedText</tt> is 
ca10: 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  represented as a
ca20: 20 64 69 63 74 20 77 69 74 68 20 74 68 65 20 6b   dict with the k
ca30: 65 79 73 20 3c 74 74 3e 6c 6f 63 61 6c 65 3c 2f  eys <tt>locale</
ca40: 74 74 3e 20 61 6e 64 20 3c 74 74 3e 74 65 78 74  tt> and <tt>text
ca50: 3c 2f 74 74 3e 2e 20 57 68 65 6e 20 63 6f 6e 76  </tt>. When conv
ca60: 65 72 74 69 6e 67 20 61 20 54 63 6c 20 76 61 6c  erting a Tcl val
ca70: 75 65 20 74 6f 20 61 20 3c 74 74 3e 4c 6f 63 61  ue to a <tt>Loca
ca80: 6c 69 7a 65 64 54 65 78 74 3c 2f 74 74 3e 20 69  lizedText</tt> i
ca90: 74 65 6d 2c 20 74 68 65 73 65 20 6b 65 79 73 20  tem, these keys 
caa0: 61 72 65 20 74 72 69 65 64 20 74 6f 20 62 65 20  are tried to be 
cab0: 61 73 73 6f 63 69 61 74 65 64 2e 20 49 66 20 74  associated. If t
cac0: 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 66 61  his operation fa
cad0: 69 6c 73 2c 20 74 68 65 20 54 63 6c 20 76 61 6c  ils, the Tcl val
cae0: 75 65 20 69 73 20 75 73 65 64 20 61 73 20 74 68  ue is used as th
caf0: 65 20 3c 74 74 3e 74 65 78 74 3c 2f 74 74 3e 20  e <tt>text</tt> 
cb00: 70 61 72 74 20 6f 66 20 74 68 65 20 3c 74 74 3e  part of the <tt>
cb10: 4c 6f 63 61 6c 69 7a 65 64 54 65 78 74 3c 2f 74  LocalizedText</t
cb20: 74 3e 20 69 74 65 6d 20 61 6e 64 20 74 68 65 20  t> item and the 
cb30: 3c 74 74 3e 6c 6f 63 61 6c 65 3c 2f 74 74 3e 20  <tt>locale</tt> 
cb40: 70 61 72 74 20 69 73 20 6c 65 66 74 20 65 6d 70  part is left emp
cb50: 74 79 2e 0d 0a 0d 0a 3c 68 33 3e 53 75 70 70 6f  ty.....<h3>Suppo
cb60: 72 74 65 64 20 44 61 74 61 20 54 79 70 65 73 3c  rted Data Types<
cb70: 2f 68 33 3e 0d 0a 0d 0a 43 75 72 72 65 6e 74 6c  /h3>....Currentl
cb80: 79 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 64  y, most of the d
cb90: 61 74 61 20 74 79 70 65 73 20 6f 66 20 6e 61 6d  ata types of nam
cba0: 65 73 70 61 63 65 20 7a 65 72 6f 20 61 72 65 20  espace zero are 
cbb0: 73 75 70 70 6f 72 74 65 64 20 61 6e 64 20 63 61  supported and ca
cbc0: 6e 20 62 65 20 6d 61 70 70 65 64 20 74 6f 2f 66  n be mapped to/f
cbd0: 72 6f 6d 20 54 63 6c 2c 20 69 2e 65 2e 20 69 6e  rom Tcl, i.e. in
cbe0: 74 65 67 72 61 6c 20 61 6e 64 20 66 6c 6f 61 74  tegral and float
cbf0: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
cc00: 73 2c 20 73 74 72 69 6e 67 73 2c 20 47 55 49 44  s, strings, GUID
cc10: 73 2c 20 61 6e 64 20 69 6e 74 65 72 61 6c 20 65  s, and interal e
cc20: 78 74 65 6e 73 69 6f 6e 20 6f 62 6a 65 63 74 73  xtension objects
cc30: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 73 74 72   (similar to str
cc40: 75 63 74 75 72 65 73 29 2e 20 46 6f 72 20 74 68  uctures). For th
cc50: 65 20 6c 61 74 74 65 72 2c 20 64 69 63 74 69 6f  e latter, dictio
cc60: 6e 61 72 69 65 73 20 61 72 65 20 75 73 65 64 20  naries are used 
cc70: 69 6e 20 62 6f 74 68 20 64 69 72 65 63 74 69 6f  in both directio
cc80: 6e 73 2c 20 69 2e 65 2e 20 66 6f 72 20 65 6e 63  ns, i.e. for enc
cc90: 6f 64 69 6e 67 2c 20 61 20 64 69 63 74 69 6f 6e  oding, a diction
cca0: 61 72 79 20 69 73 20 73 65 61 72 63 68 65 64 20  ary is searched 
ccb0: 66 6f 72 20 74 68 65 20 72 65 73 70 65 63 74 69  for the respecti
ccc0: 76 65 20 6d 65 6d 62 65 72 20 6e 61 6d 65 73 2c  ve member names,
ccd0: 20 66 6f 72 20 64 65 63 6f 64 69 6e 67 2c 20 61   for decoding, a
cce0: 20 64 69 63 74 69 6f 6e 61 72 79 20 69 73 20 63   dictionary is c
ccf0: 72 65 61 74 65 64 20 66 72 6f 6d 20 74 68 65 20  reated from the 
cd00: 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
cd10: 6e 74 61 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ntation using th
cd20: 65 20 6d 65 6d 62 65 72 20 6e 61 6d 65 73 20 6f  e member names o
cd30: 66 20 74 68 65 20 64 61 74 61 20 74 79 70 65 2c  f the data type,
cd40: 20 73 65 65 20 3c 74 74 3e 6f 70 63 75 61 20 61   see <tt>opcua a
cd50: 74 74 72 73 20 64 65 66 61 75 6c 74 3c 2f 74 74  ttrs default</tt
cd60: 3e 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 20 53  > for example. S
cd70: 75 70 70 6f 72 74 20 66 6f 72 20 63 75 73 74 6f  upport for custo
cd80: 6d 20 20 64 61 74 61 20 20 74 79 70 65 73 20 20  m  data  types  
cd90: 69 73 20 20 68 69 67 68 6c 79 20 65 78 70 65 72  is  highly exper
cda0: 69 6d 65 6e 74 61 6c 20 61 6e 64 20 75 6e 64 65  imental and unde
cdb0: 72 64 6f 63 75 6d 65 6e 74 65 64 20 28 73 65 65  rdocumented (see
cdc0: 20 3c 74 74 3e 6f 70 63 75 61 20 67 65 6e 74 79   <tt>opcua genty
cdd0: 70 65 73 3c 2f 74 74 3e 29 2e 0d 0a 0d 0a 3c 68  pes</tt>).....<h
cde0: 33 3e 4d 6f 6e 69 74 6f 72 20 43 61 6c 6c 62 61  3>Monitor Callba
cdf0: 63 6b 73 3c 2f 68 33 3e 0d 0a 0d 0a 4d 6f 6e 69  cks</h3>....Moni
ce00: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 73 20 61 72  tor callbacks ar
ce10: 65 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61  e invoked when a
ce20: 20 6d 6f 6e 69 74 6f 72 65 64 20 69 74 65 6d 20   monitored item 
ce30: 28 64 61 74 61 20 6f 72 20 65 76 65 6e 74 29 20  (data or event) 
ce40: 69 73 20 72 65 63 65 69 76 65 64 2e 20 54 68 65  is received. The
ce50: 20 63 61 6c 6c 62 61 63 6b 20 70 61 72 61 6d 65   callback parame
ce60: 74 65 72 20 67 69 76 65 6e 20 69 6e 20 3c 74 74  ter given in <tt
ce70: 3e 6f 70 63 75 61 20 6d 6f 6e 69 74 6f 72 20 6e  >opcua monitor n
ce80: 65 77 3c 2f 74 74 3e 20 6d 75 73 74 20 68 61 76  ew</tt> must hav
ce90: 65 20 70 72 6f 70 65 72 20 20 6c 69 73 74 20 66  e proper  list f
cea0: 6f 72 6d 61 74 20 61 6e 64 20 67 65 74 73 20 61  ormat and gets a
ceb0: 20 73 69 6e 67 6c 65 20 76 61 6c 75 65 20 28 64   single value (d
cec0: 61 74 61 29 20 6f 72 20 61 20 6c 69 73 74 20 6f  ata) or a list o
ced0: 66 20 76 61 6c 75 65 73 20 28 65 76 65 6e 74 29  f values (event)
cee0: 20 61 70 70 65 6e 64 65 64 20 70 72 69 6f 72 20   appended prior 
cef0: 74 6f 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0d 0a  to invocation...
cf00: 0d 0a 3c 68 33 3e 44 61 74 61 20 53 6f 75 72 63  ..<h3>Data Sourc
cf10: 65 20 43 61 6c 6c 62 61 63 6b 73 3c 2f 68 33 3e  e Callbacks</h3>
cf20: 0d 0a 0d 0a 44 61 74 61 20 73 6f 75 72 63 65 20  ....Data source 
cf30: 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 20 69 6e  callbacks are in
cf40: 76 6f 6b 65 64 20 77 68 65 6e 20 61 20 3c 74 74  voked when a <tt
cf50: 3e 3c 69 3e 44 61 74 61 56 61 6c 75 65 3c 2f 69  ><i>DataValue</i
cf60: 3e 3c 2f 74 74 3e 20 69 73 20 72 65 61 64 20 6f  ></tt> is read o
cf70: 72 20 20 77 72 69 74 74 65 6e 20 74 6f 2e 20 54  r  written to. T
cf80: 68 65 20 63 61 6c 6c 62 61 63 6b 20 70 61 72 61  he callback para
cf90: 6d 65 74 65 72 20 67 69 76 65 6e 20 69 6e 20 74  meter given in t
cfa0: 68 65 20 6e 6f 64 65 20 63 72 65 61 74 69 6f 6e  he node creation
cfb0: 20 28 3c 74 74 3e 6f 70 63 75 61 20 61 64 64 20   (<tt>opcua add 
cfc0: 56 61 72 69 61 62 6c 65 3c 2f 74 74 3e 29 20 6d  Variable</tt>) m
cfd0: 75 73 74 20 68 61 76 65 20 70 72 6f 70 65 72 20  ust have proper 
cfe0: 6c 69 73 74 20 66 6f 72 6d 61 74 20 61 6e 64 20  list format and 
cff0: 67 65 74 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69  gets the followi
d000: 6e 67 20 20 70 61 72 61 6d 65 74 65 72 73 20 61  ng  parameters a
d010: 70 70 65 6e 64 65 64 20 70 72 69 6f 72 20 74 6f  ppended prior to
d020: 20 69 6e 76 6f 63 61 74 69 6f 6e 3a 20 74 68 65   invocation: the
d030: 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72   node identifier
d040: 20 6f 66 20 74 68 65 20 3c 74 74 3e 44 61 74 61   of the <tt>Data
d050: 56 61 6c 75 65 3c 2f 74 74 3e 2c 20 74 68 65 20  Value</tt>, the 
d060: 6f 70 65 72 61 74 69 6f 6e 20 28 65 69 74 68 65  operation (eithe
d070: 72 20 3c 74 74 3e 72 65 61 64 3c 2f 74 74 3e 20  r <tt>read</tt> 
d080: 6f 72 20 3c 74 74 3e 77 72 69 74 65 3c 2f 74 74  or <tt>write</tt
d090: 3e 29 2c 20 61 6e 64 20 74 68 65 20 76 61 6c 75  >), and the valu
d0a0: 65 20 61 74 74 72 69 62 75 74 65 20 66 6f 72 20  e attribute for 
d0b0: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 73  write operations
d0c0: 2e 20 49 66 20 74 68 65 20 72 65 61 64 20 6f 72  . If the read or
d0d0: 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e   write operation
d0e0: 20 73 70 65 63 69 66 69 65 73 20 61 20 6e 75 6d   specifies a num
d0f0: 65 72 69 63 20 72 61 6e 67 65 2c 20 74 68 65 20  eric range, the 
d100: 72 61 6e 67 65 20 64 65 73 63 72 69 70 74 69 6f  range descriptio
d110: 6e 20 69 73 20 61 64 64 65 64 20 61 73 20 74 68  n is added as th
d120: 65 20 6c 61 73 74 20 70 61 72 61 6d 65 74 65 72  e last parameter
d130: 2e 20 49 74 20 69 73 20 65 78 70 72 65 73 73 65  . It is expresse
d140: 64 20 61 73 20 61 20 54 63 6c 20 6c 69 73 74 20  d as a Tcl list 
d150: 77 69 74 68 20 65 76 65 6e 20 6e 75 6d 62 65 72  with even number
d160: 20 6f 66 20 69 6e 74 65 67 65 72 20 65 6c 65 6d   of integer elem
d170: 65 6e 74 73 2e 20 45 61 63 68 20 70 61 69 72 20  ents. Each pair 
d180: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 73 74  describes the st
d190: 61 72 74 20 61 6e 64 20 65 6e 64 20 65 6c 65 6d  art and end elem
d1a0: 65 6e 74 73 20 6f 66 20 61 20 64 69 6d 65 6e 73  ents of a dimens
d1b0: 69 6f 6e 2e 20 46 6f 72 20 72 65 61 64 20 6f 70  ion. For read op
d1c0: 65 72 61 74 69 6f 6e 73 20 74 68 65 20 63 61 6c  erations the cal
d1d0: 6c 62 61 63 6b 20 6d 75 73 74 20 72 65 74 75 72  lback must retur
d1e0: 6e 20 61 20 74 77 6f 20 65 6c 65 6d 65 6e 74 20  n a two element 
d1f0: 6c 69 73 74 20 6f 66 20 74 68 65 20 64 61 74 61  list of the data
d200: 20 74 79 70 65 20 28 65 2e 67 2e 20 3c 74 74 3e   type (e.g. <tt>
d210: 53 74 72 69 6e 67 3c 2f 74 74 3e 20 6f 72 20 3c  String</tt> or <
d220: 74 74 3e 49 6e 74 33 32 3c 2f 74 74 3e 29 20 61  tt>Int32</tt>) a
d230: 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 74 73  nd the value its
d240: 65 6c 66 2e 20 49 66 20 74 68 65 20 63 61 6c 6c  elf. If the call
d250: 62 61 63 6b 20 72 65 74 75 72 6e 73 20 74 68 65  back returns the
d260: 20 3c 62 3e 54 43 4c 5f 42 52 45 41 4b 3c 2f 62   <b>TCL_BREAK</b
d270: 3e 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74  > return code, t
d280: 68 65 20 76 61 6c 75 65 20 69 73 20 61 73 73 75  he value is assu
d290: 6d 65 64 20 74 6f 20 62 65 20 61 6e 20 61 72 72  med to be an arr
d2a0: 61 79 20 61 6e 64 20 73 70 6c 69 74 74 65 64 20  ay and splitted 
d2b0: 69 6e 74 6f 20 6c 69 73 74 20 65 6c 65 6d 65 6e  into list elemen
d2c0: 74 73 20 77 68 69 63 68 20 74 68 65 6e 20 61 72  ts which then ar
d2d0: 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 4f  e converted to O
d2e0: 50 43 2f 55 41 20 64 61 74 61 20 69 6e 20 61 6e  PC/UA data in an
d2f0: 20 4f 50 43 2f 55 41 20 61 72 72 61 79 2e 0d 0a   OPC/UA array...
d300: 0d 0a 3c 68 33 3e 4d 65 74 68 6f 64 20 43 61 6c  ..<h3>Method Cal
d310: 6c 62 61 63 6b 73 3c 2f 68 33 3e 0d 0a 0d 0a 4d  lbacks</h3>....M
d320: 65 74 68 6f 64 20 63 61 6c 6c 62 61 63 6b 73 20  ethod callbacks 
d330: 61 72 65 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e  are invoked when
d340: 20 61 20 3c 74 74 3e 3c 69 3e 4d 65 74 68 6f 64   a <tt><i>Method
d350: 3c 2f 69 3e 3c 2f 74 74 3e 20 6e 6f 64 65 20 69  </i></tt> node i
d360: 73 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 63 61  s called. The ca
d370: 6c 6c 62 61 63 6b 20 70 61 72 61 6d 65 74 65 72  llback parameter
d380: 20 67 69 76 65 6e 20 69 6e 20 74 68 65 20 6e 6f   given in the no
d390: 64 65 20 63 72 65 61 74 69 6f 6e 20 28 3c 74 74  de creation (<tt
d3a0: 3e 6f 70 63 75 61 20 61 64 64 20 4d 65 74 68 6f  >opcua add Metho
d3b0: 64 3c 2f 74 74 3e 29 20 6d 75 73 74 20 20 68 61  d</tt>) must  ha
d3c0: 76 65 20 70 72 6f 70 65 72 20 6c 69 73 74 20 66  ve proper list f
d3d0: 6f 72 6d 61 74 20 61 6e 64 20 67 65 74 73 20 74  ormat and gets t
d3e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72  he following par
d3f0: 61 6d 65 74 65 72 73 20 61 70 70 65 6e 64 65 64  ameters appended
d400: 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 63 61   prior to invoca
d410: 74 69 6f 6e 3a 20 74 68 65 20 6f 62 6a 65 63 74  tion: the object
d420: 20 6e 6f 64 65 20 69 64 65 6e 74 69 66 69 65 72   node identifier
d430: 2c 20 74 68 65 20 6d 65 74 68 6f 64 20 6e 6f 64  , the method nod
d440: 65 20 69 64 65 6e 74 69 66 69 65 72 2c 20 61 6e  e identifier, an
d450: 64 20 61 20 6c 69 73 74 20 6f 66 20 74 79 70 65  d a list of type
d460: 20 6e 61 6d 65 73 20 64 65 72 69 76 65 64 20 66   names derived f
d470: 72 6f 6d 20 74 68 65 20 6d 65 74 68 6f 64 27 73  rom the method's
d480: 20 6f 75 74 70 75 74 20 61 72 67 75 6d 65 6e 74   output argument
d490: 73 2e 20 54 68 69 73 20 6c 69 73 74 20 6d 61 79  s. This list may
d4a0: 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
d4b0: 6d 65 74 68 6f 64 27 73 20 69 6d 70 6c 65 6d 65  method's impleme
d4c0: 6e 74 61 74 69 6f 6e 20 74 6f 20 66 6f 72 6d 20  ntation to form 
d4d0: 74 68 65 20 72 65 73 75 6c 74 2e 20 54 68 65 20  the result. The 
d4e0: 63 61 6c 6c 62 61 63 6b 20 6d 75 73 74 20 72 65  callback must re
d4f0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 76 61  turn a single va
d500: 6c 75 65 20 77 68 69 63 68 20 6d 75 73 74 20 62  lue which must b
d510: 65 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68  e a list with th
d520: 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66  e same number of
d530: 20 69 74 65 6d 73 20 6f 66 20 74 68 65 20 6f 75   items of the ou
d540: 74 70 75 74 20 61 72 67 75 6d 65 6e 74 27 73 0d  tput argument's.
d550: 0a 74 79 70 65 20 6c 69 73 74 2e 20 45 61 63 68  .type list. Each
d560: 20 69 74 65 6d 20 67 65 74 73 20 63 6f 6e 76 65   item gets conve
d570: 72 74 65 64 20 74 6f 20 74 68 65 20 72 65 73 70  rted to the resp
d580: 65 63 74 69 76 65 20 4f 50 43 2f 55 41 20 64 61  ective OPC/UA da
d590: 74 61 20 76 61 6c 75 65 20 61 63 63 6f 72 64 69  ta value accordi
d5a0: 6e 67 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  ng to the output
d5b0: 20 61 72 67 75 6d 65 6e 74 20 69 6e 66 6f 72 6d   argument inform
d5c0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c 74 74  ation of the <tt
d5d0: 3e 4d 65 74 68 6f 64 3c 2f 74 74 3e 20 6e 6f 64  >Method</tt> nod
d5e0: 65 2e 20 49 2e 65 2e 20 66 6f 72 20 73 69 6d 70  e. I.e. for simp
d5f0: 6c 65 20 74 79 70 65 73 2c 20 61 20 6c 69 73 74  le types, a list
d600: 20 69 74 65 6d 20 6d 61 79 20 62 65 20 61 20 73   item may be a s
d610: 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 65 2e  ingle integer e.
d620: 67 2e 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  g. for a single 
d630: 3c 74 74 3e 55 49 6e 74 31 36 3c 2f 74 74 3e 2c  <tt>UInt16</tt>,
d640: 20 61 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67   a list of integ
d650: 65 72 73 20 66 6f 72 20 61 6e 20 61 72 72 61 79  ers for an array
d660: 20 6f 66 20 3c 74 74 3e 55 49 6e 74 31 36 3c 2f   of <tt>UInt16</
d670: 74 74 3e 27 73 2c 20 61 20 73 69 6e 67 6c 65 20  tt>'s, a single 
d680: 64 69 63 74 20 66 6f 72 20 61 20 73 74 72 75 63  dict for a struc
d690: 74 75 72 65 20 74 79 70 65 2c 20 6f 72 20 61 20  ture type, or a 
d6a0: 6c 69 73 74 20 6f 66 20 64 69 63 74 73 20 66 6f  list of dicts fo
d6b0: 72 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  r an array of st
d6c0: 72 75 63 74 75 72 65 64 20 74 79 70 65 73 2e 0d  ructured types..
d6d0: 0a 0d 0a 3c 68 33 3e 43 6c 69 65 6e 74 20 4f 62  ...<h3>Client Ob
d6e0: 6a 65 63 74 20 41 6e 64 20 45 76 65 6e 74 20 4c  ject And Event L
d6f0: 6f 6f 70 3c 2f 68 33 3e 0d 0a 0d 0a 41 20 63 6c  oop</h3>....A cl
d700: 69 65 6e 74 20 6f 62 6a 65 63 74 20 6f 62 74 61  ient object obta
d710: 69 6e 65 64 20 77 69 74 68 20 3c 74 74 3e 6f 70  ined with <tt>op
d720: 63 75 61 20 6e 65 77 20 63 6c 69 65 6e 74 3c 2f  cua new client</
d730: 74 74 3e 20 72 65 71 75 69 72 65 73 20 61 20 72  tt> requires a r
d740: 75 6e 6e 69 6e 67 0d 0a 65 76 65 6e 74 20 6c 6f  unning..event lo
d750: 6f 70 20 6f 6e 6c 79 20 77 68 65 6e 20 73 75 62  op only when sub
d760: 73 63 72 69 70 74 69 6f 6e 73 2f 6d 6f 6e 69 74  scriptions/monit
d770: 6f 72 65 64 20 69 74 65 6d 73 20 61 72 65 20 69  ored items are i
d780: 6e 76 6f 6c 76 65 64 2e 20 4d 6f 73 74 0d 0a 6f  nvolved. Most..o
d790: 74 68 65 72 20 6f 70 65 72 61 74 69 6f 6e 73 20  ther operations 
d7a0: 61 72 65 20 70 65 72 66 6f 72 6d 65 64 20 73 79  are performed sy
d7b0: 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 28 61 6e 64  nchronously (and
d7c0: 20 74 68 75 73 20 62 6c 6f 63 6b 69 6e 67 29 2e   thus blocking).
d7d0: 0d 0a 0d 0a 3c 68 33 3e 41 73 79 6e 63 68 72 6f  ....<h3>Asynchro
d7e0: 6e 6f 75 73 20 4f 70 65 72 61 74 69 6f 6e 73 3c  nous Operations<
d7f0: 2f 68 33 3e 0d 0a 0d 0a 41 73 79 6e 63 68 72 6f  /h3>....Asynchro
d800: 6e 6f 75 73 20 6d 6f 64 65 20 6f 66 20 6f 70 65  nous mode of ope
d810: 72 61 74 69 6f 6e 20 69 73 20 73 75 70 70 6f 72  ration is suppor
d820: 74 65 64 20 66 6f 72 20 63 6c 69 65 6e 74 20 6f  ted for client o
d830: 62 6a 65 63 74 73 20 61 6e 64 20 74 68 65 69 72  bjects and their
d840: 20 3c 74 74 3e 6f 70 63 75 61 20 63 61 6c 6c 3c   <tt>opcua call<
d850: 2f 74 74 3e 2c 20 3c 74 74 3e 6f 70 63 75 61 20  /tt>, <tt>opcua 
d860: 72 65 61 64 3c 2f 74 74 3e 2c 20 61 6e 64 20 3c  read</tt>, and <
d870: 74 74 3e 6f 70 63 75 61 20 77 72 69 74 65 3c 2f  tt>opcua write</
d880: 74 74 3e 20 73 75 62 63 6f 6d 6d 61 6e 64 73 2e  tt> subcommands.
d890: 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 70 61   The callback pa
d8a0: 72 61 6d 65 74 65 72 20 6d 75 73 74 20 68 61 76  rameter must hav
d8b0: 65 20 70 72 6f 70 65 72 20 6c 69 73 74 20 66 6f  e proper list fo
d8c0: 72 6d 61 74 20 61 6e 64 20 67 65 74 73 20 61 20  rmat and gets a 
d8d0: 73 69 6e 67 6c 65 20 76 61 6c 75 65 20 61 70 70  single value app
d8e0: 65 6e 64 65 64 20 70 72 69 6f 72 20 74 6f 20 69  ended prior to i
d8f0: 6e 76 6f 63 61 74 69 6f 6e 20 77 68 69 63 68 20  nvocation which 
d900: 63 61 72 72 69 65 73 20 74 68 65 20 64 65 73 65  carries the dese
d910: 72 69 61 6c 69 7a 65 64 20 72 65 73 70 6f 6e 73  rialized respons
d920: 65 20 6d 65 73 73 61 67 65 20 63 6f 72 72 65 73  e message corres
d930: 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 6f  ponding to the o
d940: 70 65 72 61 74 69 6f 6e 2e 20 49 74 20 69 73 20  peration. It is 
d950: 6d 61 64 65 20 75 70 20 61 73 20 61 20 6e 65 73  made up as a nes
d960: 74 65 64 20 3c 74 74 3e 64 69 63 74 3c 2f 74 74  ted <tt>dict</tt
d970: 3e 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73  > which contains
d980: 20 61 20 3c 74 74 3e 52 65 73 70 6f 6e 73 65 48   a <tt>ResponseH
d990: 65 61 64 65 72 3c 2f 74 74 3e 20 77 69 74 68 20  eader</tt> with 
d9a0: 74 68 65 20 73 74 61 74 75 73 20 63 6f 64 65 20  the status code 
d9b0: 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  of the operation
d9c0: 20 61 6e 64 20 64 65 70 65 6e 64 69 6e 67 20 6f   and depending o
d9d0: 6e 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  n the operation 
d9e0: 74 68 65 20 6d 65 74 68 6f 64 20 63 61 6c 6c 20  the method call 
d9f0: 72 65 73 75 6c 74 28 73 29 20 6f 72 20 74 68 65  result(s) or the
da00: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 61 74   value of the at
da10: 74 72 69 62 75 74 65 20 72 65 61 64 20 70 6c 75  tribute read plu
da20: 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 69 61  s additional dia
da30: 67 6e 6f 73 74 69 63 20 69 6e 66 6f 72 6d 61 74  gnostic informat
da40: 69 6f 6e 2e 20 54 68 61 74 20 3c 74 74 3e 64 69  ion. That <tt>di
da50: 63 74 3c 2f 74 74 3e 20 67 65 74 73 20 61 6e 20  ct</tt> gets an 
da60: 65 78 74 72 61 20 6b 65 79 20 6e 61 6d 65 64 20  extra key named 
da70: 3c 74 74 3e 52 65 71 75 65 73 74 49 64 3c 2f 74  <tt>RequestId</t
da80: 74 3e 20 61 70 70 65 6e 64 65 64 20 77 68 69 63  t> appended whic
da90: 68 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  h is the integer
daa0: 20 72 65 71 75 65 73 74 20 69 64 65 6e 74 69 66   request identif
dab0: 69 65 72 20 6f 66 20 74 68 65 20 6f 70 65 72 61  ier of the opera
dac0: 74 69 6f 6e 20 77 68 69 63 68 20 77 61 73 20 72  tion which was r
dad0: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 63  eturned by the c
dae0: 6f 6d 6d 61 6e 64 20 69 6e 69 74 69 61 74 69 6e  ommand initiatin
daf0: 67 20 74 68 65 20 72 65 71 75 65 73 74 2e 20 49  g the request. I
db00: 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 70  f the callback p
db10: 61 72 61 6d 65 74 65 72 20 69 73 20 73 70 65 63  arameter is spec
db20: 69 66 69 65 64 20 61 73 20 65 6d 70 74 79 20 6c  ified as empty l
db30: 69 73 74 2c 20 74 68 65 20 72 65 73 70 6f 6e 73  ist, the respons
db40: 65 20 69 73 20 64 69 73 63 61 72 64 65 64 2c 20  e is discarded, 
db50: 69 2e 65 2e 20 6e 6f 20 54 63 6c 20 63 6f 64 65  i.e. no Tcl code
db60: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   is evaluated an
db70: 64 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  d the operation 
db80: 61 70 70 65 61 72 73 20 61 73 20 61 20 6f 6e 65  appears as a one
db90: 20 77 61 79 20 72 65 71 75 65 73 74 2e 0d 0a 0d   way request....
dba0: 0a 3c 68 33 3e 43 6c 69 65 6e 74 20 45 78 61 6d  .<h3>Client Exam
dbb0: 70 6c 65 3c 2f 68 33 3e 0d 0a 0d 0a 3c 76 65 72  ple</h3>....<ver
dbc0: 62 61 74 69 6d 3e 0d 0a 0d 0a 20 20 20 20 70 61  batim>....    pa
dbd0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 74 6f  ckage require to
dbe0: 70 63 75 61 0d 0a 0d 0a 20 20 20 20 23 20 63 72  pcua....    # cr
dbf0: 65 61 74 65 20 63 6c 69 65 6e 74 0d 0a 20 20 20  eate client..   
dc00: 20 6f 70 63 75 61 20 6e 65 77 20 63 6c 69 65 6e   opcua new clien
dc10: 74 20 43 0d 0a 0d 0a 20 20 20 20 23 20 63 6f 6e  t C....    # con
dc20: 6e 65 63 74 20 74 6f 20 73 65 72 76 65 72 0d 0a  nect to server..
dc30: 20 20 20 20 6f 70 63 75 61 20 63 6f 6e 6e 65 63      opcua connec
dc40: 74 20 43 20 6f 70 63 2e 74 63 70 3a 2f 2f 6c 6f  t C opc.tcp://lo
dc50: 63 61 6c 68 6f 73 74 3a 34 38 34 30 20 75 73 65  calhost:4840 use
dc60: 72 20 70 61 73 73 0d 0a 0d 0a 20 20 20 20 23 20  r pass....    # 
dc70: 67 65 74 20 4d 79 4e 61 6d 65 73 70 61 63 65 0d  get MyNamespace.
dc80: 0a 20 20 20 20 73 65 74 20 6e 73 20 5b 6f 70 63  .    set ns [opc
dc90: 75 61 20 6e 61 6d 65 73 70 61 63 65 20 43 20 4d  ua namespace C M
dca0: 79 4e 61 6d 65 73 70 61 63 65 5d 0d 0a 0d 0a 20  yNamespace].... 
dcb0: 20 20 20 23 20 67 65 6e 65 72 61 74 65 20 73 74     # generate st
dcc0: 75 62 20 70 72 6f 63 73 20 74 6f 20 6d 65 74 68  ub procs to meth
dcd0: 6f 64 73 20 69 6e 20 73 65 72 76 65 72 0d 0a 20  ods in server.. 
dce0: 20 20 20 23 20 74 68 65 73 65 20 61 72 65 20 63     # these are c
dcf0: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 63 6c  reated in the cl
dd00: 69 65 6e 74 20 73 70 65 63 69 66 69 63 20 3a 3a  ient specific ::
dd10: 6f 70 63 75 61 3a 3a 43 20 6e 61 6d 65 73 70 61  opcua::C namespa
dd20: 63 65 0d 0a 20 20 20 20 6f 70 63 75 61 20 67 65  ce..    opcua ge
dd30: 6e 73 74 75 62 73 20 43 20 2f 52 6f 6f 74 2f 4f  nstubs C /Root/O
dd40: 62 6a 65 63 74 73 2f 24 7b 6e 73 7d 3a 4d 79 4f  bjects/${ns}:MyO
dd50: 62 6a 65 63 74 2f 24 7b 6e 73 7d 3a 0d 0a 0d 0a  bject/${ns}:....
dd60: 20 20 20 20 23 20 6c 69 73 74 20 61 6c 6c 20 70      # list all p
dd70: 72 6f 63 73 20 69 6e 20 63 6c 69 65 6e 74 20 73  rocs in client s
dd80: 70 65 63 69 66 69 63 20 6e 61 6d 65 73 70 61 63  pecific namespac
dd90: 65 0d 0a 20 20 20 20 70 75 74 73 20 73 74 64 65  e..    puts stde
dda0: 72 72 20 5b 69 6e 66 6f 20 70 72 6f 63 73 20 3a  rr [info procs :
ddb0: 3a 6f 70 63 75 61 3a 3a 43 3a 3a 2a 5d 0d 0a 0d  :opcua::C::*]...
ddc0: 0a 20 20 20 20 23 20 63 61 6c 6c 20 73 74 75 62  .    # call stub
ddd0: 73 0d 0a 20 20 20 20 70 75 74 73 20 73 74 64 65  s..    puts stde
dde0: 72 72 20 5b 3a 3a 6f 70 63 75 61 3a 3a 43 3a 3a  rr [::opcua::C::
ddf0: 52 65 76 65 72 73 65 20 65 73 72 65 76 65 52 5d  Reverse esreveR]
de00: 0d 0a 20 20 20 20 70 75 74 73 20 73 74 64 65 72  ..    puts stder
de10: 72 20 5b 3a 3a 6f 70 63 75 61 3a 3a 43 3a 3a 57  r [::opcua::C::W
de20: 6f 72 64 53 70 6c 69 74 20 22 77 6f 72 64 5c 6e  ordSplit "word\n
de30: 5c 6e 73 70 6c 69 74 22 5d 0d 0a 0d 0a 20 20 20  \nsplit"]....   
de40: 20 23 20 72 65 61 64 20 61 20 76 61 72 69 61 62   # read a variab
de50: 6c 65 0d 0a 20 20 20 20 70 75 74 73 20 73 74 64  le..    puts std
de60: 65 72 72 20 5b 6f 70 63 75 61 20 72 65 61 64 20  err [opcua read 
de70: 43 20 22 6e 73 3d 24 7b 6e 73 7d 3b 49 74 73 54  C "ns=${ns};ItsT
de80: 63 6c 54 69 6d 65 22 5d 0d 0a 0d 0a 20 20 20 20  clTime"]....    
de90: 23 20 6d 6f 6e 69 74 6f 72 20 63 61 6c 6c 62 61  # monitor callba
dea0: 63 6b 20 70 72 6f 63 0d 0a 20 20 20 20 70 72 6f  ck proc..    pro
deb0: 63 20 6d 6f 6e 69 74 6f 72 20 7b 64 61 74 61 7d  c monitor {data}
dec0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73   {..        puts
ded0: 20 73 74 64 65 72 72 20 22 4d 6f 6e 69 74 6f 72   stderr "Monitor
dee0: 3a 20 24 64 61 74 61 22 0d 0a 20 20 20 20 7d 0d  : $data"..    }.
def0: 0a 0d 0a 20 20 20 20 23 20 6d 61 6b 65 20 61 20  ...    # make a 
df00: 73 75 62 73 63 72 69 70 74 69 6f 6e 0d 0a 20 20  subscription..  
df10: 20 20 73 65 74 20 73 75 62 20 5b 6f 70 63 75 61    set sub [opcua
df20: 20 73 75 62 73 63 72 69 70 74 69 6f 6e 20 43 20   subscription C 
df30: 6e 65 77 20 31 20 31 30 30 30 2e 30 5d 0d 0a 0d  new 1 1000.0]...
df40: 0a 20 20 20 20 23 20 6d 61 6b 65 20 61 20 6d 6f  .    # make a mo
df50: 6e 69 74 6f 72 0d 0a 20 20 20 20 73 65 74 20 6d  nitor..    set m
df60: 6f 6e 20 5b 6f 70 63 75 61 20 6d 6f 6e 69 74 6f  on [opcua monito
df70: 72 20 43 20 6e 65 77 20 24 73 75 62 20 64 61 74  r C new $sub dat
df80: 61 20 6d 6f 6e 69 74 6f 72 20 22 6e 73 3d 24 7b  a monitor "ns=${
df90: 6e 73 7d 3b 49 74 73 54 63 6c 54 69 6d 65 22 5d  ns};ItsTclTime"]
dfa0: 0d 0a 20 20 20 20 70 75 74 73 20 73 74 64 65 72  ..    puts stder
dfb0: 72 20 22 53 75 62 73 63 72 69 70 74 69 6f 6e 3a  r "Subscription:
dfc0: 20 24 73 75 62 22 0d 0a 20 20 20 20 70 75 74 73   $sub"..    puts
dfd0: 20 73 74 64 65 72 72 20 22 4d 6f 6e 69 74 6f 72   stderr "Monitor
dfe0: 3a 20 24 6d 6f 6e 22 0d 0a 0d 0a 20 20 20 20 23  : $mon"....    #
dff0: 20 68 61 6e 64 6c 65 20 6d 6f 6e 69 74 6f 72 73   handle monitors
e000: 20 66 6f 72 20 61 20 66 65 77 20 73 65 63 6f 6e   for a few secon
e010: 64 73 0d 0a 20 20 20 20 73 65 74 20 64 6f 6e 65  ds..    set done
e020: 20 30 0d 0a 20 20 20 20 61 66 74 65 72 20 31 30   0..    after 10
e030: 30 30 30 20 7b 73 65 74 20 64 6f 6e 65 20 31 7d  000 {set done 1}
e040: 0d 0a 20 20 20 20 76 77 61 69 74 20 64 6f 6e 65  ..    vwait done
e050: 0d 0a 0d 0a 20 20 20 20 23 20 64 65 6c 65 74 65  ....    # delete
e060: 20 6d 6f 6e 69 74 6f 72 20 61 6e 64 20 73 75 62   monitor and sub
e070: 73 63 72 69 70 74 69 6f 6e 0d 0a 20 20 20 20 6f  scription..    o
e080: 70 63 75 61 20 6d 6f 6e 69 74 6f 72 20 43 20 64  pcua monitor C d
e090: 65 73 74 72 6f 79 20 24 73 75 62 20 24 6d 6f 6e  estroy $sub $mon
e0a0: 0d 0a 20 20 20 20 6f 70 63 75 61 20 73 75 62 73  ..    opcua subs
e0b0: 63 72 69 70 74 69 6f 6e 20 43 20 64 65 73 74 72  cription C destr
e0c0: 6f 79 20 24 73 75 62 0d 0a 0d 0a 20 20 20 20 23  oy $sub....    #
e0d0: 20 73 68 75 74 20 64 6f 77 6e 20 74 68 65 20 73   shut down the s
e0e0: 65 72 76 65 72 20 75 73 69 6e 67 20 61 20 6d 65  erver using a me
e0f0: 74 68 6f 64 20 63 61 6c 6c 0d 0a 20 20 20 20 3a  thod call..    :
e100: 3a 6f 70 63 75 61 3a 3a 43 3a 3a 45 78 69 74 0d  :opcua::C::Exit.
e110: 0a 0d 0a 20 20 20 20 23 20 64 65 73 74 72 6f 79  ...    # destroy
e120: 20 74 68 65 20 63 6c 69 65 6e 74 0d 0a 20 20 20   the client..   
e130: 20 6f 70 63 75 61 20 64 65 73 74 72 6f 79 20 43   opcua destroy C
e140: 0d 0a 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d  ....</verbatim>.
e150: 0a 0d 0a 3c 68 33 3e 53 65 72 76 65 72 20 4f 62  ...<h3>Server Ob
e160: 6a 65 63 74 20 41 6e 64 20 45 76 65 6e 74 20 4c  ject And Event L
e170: 6f 6f 70 3c 2f 68 33 3e 0d 0a 0d 0a 41 20 73 65  oop</h3>....A se
e180: 72 76 65 72 20 6f 62 6a 65 63 74 20 6f 62 74 61  rver object obta
e190: 69 6e 65 64 20 77 69 74 68 20 3c 74 74 3e 6f 70  ined with <tt>op
e1a0: 63 75 61 20 6e 65 77 20 73 65 72 76 65 72 3c 2f  cua new server</
e1b0: 74 74 3e 20 72 65 71 75 69 72 65 73 20 61 20 72  tt> requires a r
e1c0: 75 6e 6e 69 6e 67 20 65 76 65 6e 74 20 6c 6f 6f  unning event loo
e1d0: 70 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  p as long as it 
e1e0: 69 73 20 69 6e 20 72 75 6e 6e 69 6e 67 20 73 74  is in running st
e1f0: 61 74 65 20 28 73 74 61 72 74 65 64 20 77 69 74  ate (started wit
e200: 68 20 3c 74 74 3e 6f 70 63 75 61 20 73 74 61 72  h <tt>opcua star
e210: 74 3c 2f 74 74 3e 29 2e 20 44 65 70 65 6e 64 69  t</tt>). Dependi
e220: 6e 67 20 6f 6e 20 74 68 65 20 73 75 70 70 6f 72  ng on the suppor
e230: 74 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79  t of the underly
e240: 69 6e 67 20 6f 70 65 6e 36 32 35 34 31 20 6c 69  ing open62541 li
e250: 62 72 61 72 79 2c 20 74 68 65 20 6f 70 63 75 61  brary, the opcua
e260: 20 73 65 72 76 65 72 27 73 20 6e 65 74 77 6f 72   server's networ
e270: 6b 20 68 61 6e 64 6c 65 72 20 72 65 2d 64 69 73  k handler re-dis
e280: 70 61 74 63 68 65 73 20 69 74 73 65 6c 66 20 75  patches itself u
e290: 73 69 6e 67 20 61 20 54 63 6c 20 74 69 6d 65 72  sing a Tcl timer
e2a0: 20 63 61 6c 6c 62 61 63 6b 20 77 68 6f 73 65 20   callback whose 
e2b0: 69 6e 74 65 72 76 61 6c 20 69 73 20 63 6f 6e 74  interval is cont
e2c0: 72 6f 6c 6c 65 64 20 62 79 20 74 68 65 20 70 72  rolled by the pr
e2d0: 6f 74 6f 63 6f 6c 20 74 69 6d 65 72 73 20 6f 66  otocol timers of
e2e0: 20 74 68 65 20 4f 50 43 2f 55 41 20 73 74 61 63   the OPC/UA stac
e2f0: 6b 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  k implementation
e300: 2c 20 6f 72 20 69 74 20 73 70 69 6e 73 20 75 70  , or it spins up
e310: 20 61 20 64 65 64 69 63 61 74 65 64 20 74 68 72   a dedicated thr
e320: 65 61 64 20 77 68 69 63 68 20 64 65 61 6c 73 20  ead which deals 
e330: 77 69 74 68 20 74 68 65 20 6e 65 74 77 6f 72 6b  with the network
e340: 20 74 72 61 66 66 69 63 2e 20 49 6e 20 74 68 65   traffic. In the
e350: 20 6c 61 74 74 65 72 20 63 61 73 65 2c 20 61 20   latter case, a 
e360: 72 75 6e 6e 69 6e 67 20 65 76 65 6e 74 20 6c 6f  running event lo
e370: 6f 70 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  op is required, 
e380: 74 6f 6f 2c 20 66 6f 72 20 70 72 6f 63 65 73 73  too, for process
e390: 69 6e 67 20 6d 65 74 68 6f 64 20 61 6e 64 20 64  ing method and d
e3a0: 61 74 61 73 6f 75 72 63 65 20 63 61 6c 6c 62 61  atasource callba
e3b0: 63 6b 73 2e 0d 0a 0d 0a 3c 68 33 3e 53 65 72 76  cks.....<h3>Serv
e3c0: 65 72 20 45 78 61 6d 70 6c 65 3c 2f 68 33 3e 0d  er Example</h3>.
e3d0: 0a 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 0d  ...<verbatim>...
e3e0: 0a 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71  .    package req
e3f0: 75 69 72 65 20 74 6f 70 63 75 61 0d 0a 0d 0a 20  uire topcua.... 
e400: 20 20 20 23 20 63 72 65 61 74 65 20 73 65 72 76     # create serv
e410: 65 72 0d 0a 20 20 20 20 6f 70 63 75 61 20 6e 65  er..    opcua ne
e420: 77 20 73 65 72 76 65 72 20 34 38 34 30 20 53 0d  w server 4840 S.
e430: 0a 0d 0a 20 20 20 20 23 20 73 65 74 75 70 20 61  ...    # setup a
e440: 63 63 65 73 73 20 63 6f 6e 74 72 6f 6c 0d 0a 20  ccess control.. 
e450: 20 20 20 6f 70 63 75 61 20 61 63 6c 20 53 20 75     opcua acl S u
e460: 73 65 72 20 70 61 73 73 0d 0a 0d 0a 20 20 20 20  ser pass....    
e470: 23 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  # implementation
e480: 73 20 6f 66 20 6d 65 74 68 6f 64 73 20 65 74 63  s of methods etc
e490: 2e 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
e4a0: 20 65 76 61 6c 20 3a 3a 6f 70 63 75 61 3a 3a 53   eval ::opcua::S
e4b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 20 6d 65   {..        # me
e4c0: 74 68 6f 64 20 63 61 6c 6c 62 61 63 6b 0d 0a 20  thod callback.. 
e4d0: 20 20 20 20 20 20 20 70 72 6f 63 20 5f 72 65 76         proc _rev
e4e0: 65 72 73 65 20 7b 6f 62 6a 20 6d 65 74 68 20 73  erse {obj meth s
e4f0: 74 72 69 6e 67 7d 20 7b 0d 0a 20 20 20 20 20 20  tring} {..      
e500: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74        return [st
e510: 72 69 6e 67 20 72 65 76 65 72 73 65 20 24 73 74  ring reverse $st
e520: 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ring]..        }
e530: 0d 0a 20 20 20 20 20 20 20 20 23 20 6d 65 74 68  ..        # meth
e540: 6f 64 20 63 61 6c 6c 62 61 63 6b 0d 0a 20 20 20  od callback..   
e550: 20 20 20 20 20 70 72 6f 63 20 5f 77 6f 72 64 73       proc _words
e560: 70 6c 69 74 20 7b 6f 62 6a 20 6d 65 74 68 20 73  plit {obj meth s
e570: 74 72 69 6e 67 7d 20 7b 0d 0a 20 20 20 20 20 20  tring} {..      
e580: 20 20 20 20 20 20 73 65 74 20 77 20 5b 72 65 67        set w [reg
e590: 65 78 70 20 2d 61 6c 6c 20 2d 69 6e 6c 69 6e 65  exp -all -inline
e5a0: 20 7b 5c 53 2b 7d 20 24 73 74 72 69 6e 67 5d 0d   {\S+} $string].
e5b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 72  .            # r
e5c0: 65 74 75 72 6e 20 63 6f 64 65 20 62 72 65 61 6b  eturn code break
e5d0: 20 6d 61 6b 65 73 20 69 6e 74 6f 20 61 6e 20 61   makes into an a
e5e0: 72 72 61 79 20 72 65 73 75 6c 74 0d 0a 20 20 20  rray result..   
e5f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e600: 2d 63 6f 64 65 20 62 72 65 61 6b 20 24 77 0d 0a  -code break $w..
e610: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e620: 20 20 20 23 20 6d 65 74 68 6f 64 20 63 61 6c 6c     # method call
e630: 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 70 72  back..        pr
e640: 6f 63 20 5f 65 78 69 74 20 7b 6f 62 6a 20 6d 65  oc _exit {obj me
e650: 74 68 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  th} {..         
e660: 20 20 20 61 66 74 65 72 20 31 30 30 30 20 5b 6e     after 1000 [n
e670: 61 6d 65 73 70 61 63 65 20 63 75 72 72 65 6e 74  amespace current
e680: 5d 3a 3a 5f 72 65 61 6c 5f 65 78 69 74 0d 0a 20  ]::_real_exit.. 
e690: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e6a0: 6e 20 7b 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n {}..        }.
e6b0: 0a 20 20 20 20 20 20 20 20 23 20 68 65 6c 70 65  .        # helpe
e6c0: 72 20 70 72 6f 63 0d 0a 20 20 20 20 20 20 20 20  r proc..        
e6d0: 70 72 6f 63 20 5f 72 65 61 6c 5f 65 78 69 74 20  proc _real_exit 
e6e0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  {} {..          
e6f0: 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..     
e700: 20 20 20 20 20 20 20 20 20 20 20 3a 3a 6f 70 63             ::opc
e710: 75 61 3a 3a 73 74 6f 70 20 53 0d 0a 20 20 20 20  ua::stop S..    
e720: 20 20 20 20 20 20 20 20 20 20 20 20 3a 3a 6f 70              ::op
e730: 63 75 61 3a 3a 64 65 73 74 72 6f 79 20 53 0d 0a  cua::destroy S..
e740: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e750: 20 20 20 20 20 20 20 20 20 20 20 65 78 69 74 20             exit 
e760: 30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  0..        }..  
e770: 20 20 20 20 20 20 23 20 64 61 74 61 20 73 6f 75        # data sou
e780: 72 63 65 20 63 61 6c 6c 62 61 63 6b 0d 0a 20 20  rce callback..  
e790: 20 20 20 20 20 20 70 72 6f 63 20 5f 69 74 73 5f        proc _its_
e7a0: 74 63 6c 5f 74 69 6d 65 20 7b 6e 6f 64 65 20 6f  tcl_time {node o
e7b0: 70 20 7b 76 61 6c 75 65 20 7b 7d 7d 7d 20 7b 0d  p {value {}}} {.
e7c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
e7d0: 7b 24 6f 70 20 65 71 20 22 72 65 61 64 22 7d 20  {$op eq "read"} 
e7e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e7f0: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list 
e800: 53 74 72 69 6e 67 20 5b 63 6c 6f 63 6b 20 66 6f  String [clock fo
e810: 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  rmat [clock seco
e820: 6e 64 73 5d 5d 5d 0d 0a 20 20 20 20 20 20 20 20  nds]]]..        
e830: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
e840: 20 20 20 72 65 74 75 72 6e 20 7b 7d 0d 0a 20 20     return {}..  
e850: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
e860: 0d 0a 20 20 20 20 23 20 63 72 65 61 74 65 20 6f  ..    # create o
e870: 75 72 20 4f 50 43 2f 55 41 20 6e 61 6d 65 73 70  ur OPC/UA namesp
e880: 61 63 65 0d 0a 20 20 20 20 73 65 74 20 6e 73 20  ace..    set ns 
e890: 5b 6f 70 63 75 61 20 61 64 64 20 53 20 4e 61 6d  [opcua add S Nam
e8a0: 65 73 70 61 63 65 20 4d 79 4e 61 6d 65 73 70 61  espace MyNamespa
e8b0: 63 65 5d 0d 0a 0d 0a 20 20 20 20 23 20 67 65 74  ce]....    # get
e8c0: 20 4f 62 6a 65 63 74 73 20 66 6f 6c 64 65 72 0d   Objects folder.
e8d0: 0a 20 20 20 20 73 65 74 20 4f 46 20 5b 6c 69 6e  .    set OF [lin
e8e0: 64 65 78 20 5b 6f 70 63 75 61 20 74 72 61 6e 73  dex [opcua trans
e8f0: 6c 61 74 65 20 53 20 5b 6f 70 63 75 61 20 72 6f  late S [opcua ro
e900: 6f 74 5d 20 2f 20 4f 62 6a 65 63 74 73 5d 20 30  ot] / Objects] 0
e910: 5d 0d 0a 0d 0a 20 20 20 20 23 20 63 72 65 61 74  ]....    # creat
e920: 65 20 61 6e 20 6f 62 6a 65 63 74 20 69 6e 20 6f  e an object in o
e930: 75 72 20 6e 61 6d 65 73 70 61 63 65 20 69 6e 20  ur namespace in 
e940: 4f 62 6a 65 63 74 73 20 66 6f 6c 64 65 72 0d 0a  Objects folder..
e950: 20 20 20 20 73 65 74 20 6f 62 6a 20 5b 6f 70 63      set obj [opc
e960: 75 61 20 61 64 64 20 53 20 4f 62 6a 65 63 74 20  ua add S Object 
e970: 22 6e 73 3d 24 6e 73 3b 73 3d 4d 79 4f 62 6a 65  "ns=$ns;s=MyObje
e980: 63 74 22 20 24 4f 46 20 4f 72 67 61 6e 69 7a 65  ct" $OF Organize
e990: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 22 24 6e  s \..        "$n
e9a0: 73 3a 4d 79 4f 62 6a 65 63 74 22 5d 0d 0a 0d 0a  s:MyObject"]....
e9b0: 20 20 20 20 23 20 63 72 65 61 74 65 20 6d 65 74      # create met
e9c0: 68 6f 64 73 20 6f 6e 20 6f 62 6a 65 63 74 0d 0a  hods on object..
e9d0: 20 20 20 20 73 65 74 20 6d 65 74 68 20 5b 6f 70      set meth [op
e9e0: 63 75 61 20 61 64 64 20 53 20 4d 65 74 68 6f 64  cua add S Method
e9f0: 20 22 6e 73 3d 24 6e 73 3b 73 3d 52 65 76 65 72   "ns=$ns;s=Rever
ea00: 73 65 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  se" \..         
ea10: 20 20 20 20 20 20 20 20 20 24 6f 62 6a 20 48 61           $obj Ha
ea20: 73 43 6f 6d 70 6f 6e 65 6e 74 20 5c 0d 0a 20 20  sComponent \..  
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea40: 7b 53 74 72 69 6e 67 20 21 6f 75 74 7d 20 22 24  {String !out} "$
ea50: 6e 73 3a 52 65 76 65 72 73 65 22 20 7b 53 74 72  ns:Reverse" {Str
ea60: 69 6e 67 20 21 69 6e 7d 20 5c 0d 0a 20 20 20 20  ing !in} \..    
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 3a                ::
ea80: 6f 70 63 75 61 3a 3a 53 3a 3a 5f 72 65 76 65 72  opcua::S::_rever
ea90: 73 65 5d 0d 0a 20 20 20 20 73 65 74 20 6d 65 74  se]..    set met
eaa0: 68 20 5b 6f 70 63 75 61 20 61 64 64 20 53 20 4d  h [opcua add S M
eab0: 65 74 68 6f 64 20 22 6e 73 3d 24 6e 73 3b 73 3d  ethod "ns=$ns;s=
eac0: 57 6f 72 64 53 70 6c 69 74 22 20 5c 0d 0a 20 20  WordSplit" \..  
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eae0: 24 6f 62 6a 20 48 61 73 43 6f 6d 70 6f 6e 65 6e  $obj HasComponen
eaf0: 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..           
eb00: 20 20 20 20 20 20 20 7b 53 74 72 69 6e 67 20 21         {String !
eb10: 6f 75 74 7d 20 22 24 6e 73 3a 57 6f 72 64 53 70  out} "$ns:WordSp
eb20: 6c 69 74 22 20 7b 53 74 72 69 6e 67 20 21 69 6e  lit" {String !in
eb30: 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } \..           
eb40: 20 20 20 20 20 20 20 3a 3a 6f 70 63 75 61 3a 3a         ::opcua::
eb50: 53 3a 3a 5f 77 6f 72 64 73 70 6c 69 74 5d 0d 0a  S::_wordsplit]..
eb60: 20 20 20 20 73 65 74 20 6d 65 74 68 20 5b 6f 70      set meth [op
eb70: 63 75 61 20 61 64 64 20 53 20 4d 65 74 68 6f 64  cua add S Method
eb80: 20 22 6e 73 3d 24 6e 73 3b 73 3d 45 78 69 74 22   "ns=$ns;s=Exit"
eb90: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
eba0: 20 20 20 20 20 20 24 6f 62 6a 20 48 61 73 43 6f        $obj HasCo
ebb0: 6d 70 6f 6e 65 6e 74 20 5c 0d 0a 20 20 20 20 20  mponent \..     
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20               {} 
ebd0: 22 24 6e 73 3a 45 78 69 74 22 20 7b 7d 20 5c 0d  "$ns:Exit" {} \.
ebe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ebf0: 20 20 20 3a 3a 6f 70 63 75 61 3a 3a 53 3a 3a 5f     ::opcua::S::_
ec00: 65 78 69 74 5d 0d 0a 0d 0a 20 20 20 20 23 20 63  exit]....    # c
ec10: 72 65 61 74 65 20 61 20 76 61 72 69 61 62 6c 65  reate a variable
ec20: 20 69 6e 20 6f 75 72 20 6e 61 6d 65 73 70 61 63   in our namespac
ec30: 65 20 69 6e 20 4f 62 6a 65 63 74 73 20 66 6f 6c  e in Objects fol
ec40: 64 65 72 0d 0a 20 20 20 20 73 65 74 20 76 61 72  der..    set var
ec50: 20 5b 6f 70 63 75 61 20 61 64 64 20 53 20 56 61   [opcua add S Va
ec60: 72 69 61 62 6c 65 20 22 6e 73 3d 24 6e 73 3b 73  riable "ns=$ns;s
ec70: 3d 49 74 73 54 63 6c 54 69 6d 65 22 20 5c 0d 0a  =ItsTclTime" \..
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec90: 20 24 4f 46 20 4f 72 67 61 6e 69 7a 65 73 20 5c   $OF Organizes \
eca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ecb0: 20 20 20 22 24 6e 73 3a 49 74 73 54 63 6c 54 69     "$ns:ItsTclTi
ecc0: 6d 65 22 20 7b 7d 20 7b 7d 20 5c 0d 0a 20 20 20  me" {} {} \..   
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 3a                ::
ece0: 6f 70 63 75 61 3a 3a 53 3a 3a 5f 69 74 73 5f 74  opcua::S::_its_t
ecf0: 63 6c 5f 74 69 6d 65 5d 0d 0a 0d 0a 20 20 20 20  cl_time]....    
ed00: 23 20 64 75 6d 70 20 6d 65 74 68 6f 64 73 0d 0a  # dump methods..
ed10: 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72 20      puts stderr 
ed20: 5b 6f 70 63 75 61 20 6d 65 74 68 6f 64 73 20 53  [opcua methods S
ed30: 5d 0d 0a 0d 0a 20 20 20 20 23 20 67 65 6e 65 72  ]....    # gener
ed40: 61 74 65 20 73 74 75 62 73 20 74 6f 20 6d 65 74  ate stubs to met
ed50: 68 6f 64 73 20 69 6e 20 73 65 72 76 65 72 0d 0a  hods in server..
ed60: 20 20 20 20 23 20 74 68 65 73 65 20 61 72 65 20      # these are 
ed70: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 73  created in the s
ed80: 65 72 76 65 72 20 73 70 65 63 69 66 69 63 20 3a  erver specific :
ed90: 3a 6f 70 63 75 61 3a 3a 53 20 6e 61 6d 65 73 70  :opcua::S namesp
eda0: 61 63 65 0d 0a 20 20 20 20 6f 70 63 75 61 20 67  ace..    opcua g
edb0: 65 6e 73 74 75 62 73 20 53 20 2f 52 6f 6f 74 2f  enstubs S /Root/
edc0: 4f 62 6a 65 63 74 73 2f 24 7b 6e 73 7d 3a 4d 79  Objects/${ns}:My
edd0: 4f 62 6a 65 63 74 2f 24 7b 6e 73 7d 3a 0d 0a 0d  Object/${ns}:...
ede0: 0a 20 20 20 20 23 20 6c 69 73 74 20 61 6c 6c 20  .    # list all 
edf0: 70 72 6f 63 73 20 69 6e 20 73 65 72 76 65 72 20  procs in server 
ee00: 73 70 65 63 69 66 69 63 20 6e 61 6d 65 73 70 61  specific namespa
ee10: 63 65 0d 0a 20 20 20 20 70 75 74 73 20 73 74 64  ce..    puts std
ee20: 65 72 72 20 5b 69 6e 66 6f 20 70 72 6f 63 73 20  err [info procs 
ee30: 3a 3a 6f 70 63 75 61 3a 3a 53 3a 3a 2a 5d 0d 0a  ::opcua::S::*]..
ee40: 0d 0a 20 20 20 20 23 20 63 61 6c 6c 20 73 74 75  ..    # call stu
ee50: 62 73 20 64 69 72 65 63 74 6c 79 20 6f 6e 20 73  bs directly on s
ee60: 65 72 76 65 72 0d 0a 20 20 20 20 70 75 74 73 20  erver..    puts 
ee70: 73 74 64 65 72 72 20 5b 3a 3a 6f 70 63 75 61 3a  stderr [::opcua:
ee80: 3a 53 3a 3a 52 65 76 65 72 73 65 20 65 73 72 65  :S::Reverse esre
ee90: 76 65 52 5d 0d 0a 20 20 20 20 70 75 74 73 20 73  veR]..    puts s
eea0: 74 64 65 72 72 20 5b 3a 3a 6f 70 63 75 61 3a 3a  tderr [::opcua::
eeb0: 53 3a 3a 57 6f 72 64 53 70 6c 69 74 20 22 77 6f  S::WordSplit "wo
eec0: 72 64 5c 6e 5c 6e 73 70 6c 69 74 22 5d 0d 0a 0d  rd\n\nsplit"]...
eed0: 0a 20 20 20 20 23 20 72 65 61 64 20 6f 75 72 20  .    # read our 
eee0: 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 70 75  variable..    pu
eef0: 74 73 20 73 74 64 65 72 72 20 5b 6f 70 63 75 61  ts stderr [opcua
ef00: 20 72 65 61 64 20 53 20 24 76 61 72 5d 0d 0a 0d   read S $var]...
ef10: 0a 20 20 20 20 23 20 73 74 61 72 74 20 73 65 72  .    # start ser
ef20: 76 65 72 0d 0a 20 20 20 20 6f 70 63 75 61 20 73  ver..    opcua s
ef30: 74 61 72 74 20 53 0d 0a 0d 0a 20 20 20 20 23 20  tart S....    # 
ef40: 65 6e 74 65 72 20 65 76 65 6e 74 20 6c 6f 6f 70  enter event loop
ef50: 0d 0a 20 20 20 20 76 77 61 69 74 20 66 6f 72 65  ..    vwait fore
ef60: 76 65 72 0d 0a 0d 0a 3c 2f 76 65 72 62 61 74 69  ver....</verbati
ef70: 6d 3e 0d 0a 0d 0a 3c 68 33 3e 44 65 66 69 6e 69  m>....<h3>Defini
ef80: 6e 67 20 43 75 73 74 6f 6d 20 44 61 74 61 20 53  ng Custom Data S
ef90: 74 72 75 63 74 75 72 65 73 3c 2f 68 33 3e 0d 0a  tructures</h3>..
efa0: 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 0d 0a  ..<verbatim>....
efb0: 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
efc0: 69 72 65 20 74 6f 70 63 75 61 0d 0a 0d 0a 20 20  ire topcua....  
efd0: 20 20 23 20 63 72 65 61 74 65 20 73 65 72 76 65    # create serve
efe0: 72 0d 0a 20 20 20 20 6f 70 63 75 61 20 6e 65 77  r..    opcua new
eff0: 20 73 65 72 76 65 72 20 34 38 34 30 20 53 0d 0a   server 4840 S..
f000: 0d 0a 20 20 20 20 23 20 63 72 65 61 74 65 20 6f  ..    # create o
f010: 75 72 20 6e 61 6d 65 73 70 61 63 65 0d 0a 20 20  ur namespace..  
f020: 20 20 73 65 74 20 4e 53 20 68 74 74 70 3a 2f 2f    set NS http://
f030: 77 77 77 2e 61 6e 64 72 6f 77 69 73 68 2e 6f 72  www.androwish.or
f040: 67 2f 54 65 73 74 4e 53 2f 0d 0a 20 20 20 20 73  g/TestNS/..    s
f050: 65 74 20 6e 73 69 64 78 20 5b 6f 70 63 75 61 20  et nsidx [opcua 
f060: 61 64 64 20 53 20 4e 61 6d 65 73 70 61 63 65 20  add S Namespace 
f070: 24 4e 53 5d 0d 0a 0d 0a 20 20 20 20 23 20 63 72  $NS]....    # cr
f080: 65 61 74 65 20 73 74 72 75 63 74 73 20 65 74 63  eate structs etc
f090: 2e 2c 20 66 69 65 6c 64 20 6e 61 6d 65 73 20 70  ., field names p
f0a0: 72 65 66 69 78 65 64 20 77 69 74 68 20 27 2a 27  refixed with '*'
f0b0: 20 61 72 65 20 61 72 72 61 79 73 0d 0a 20 20 20   are arrays..   
f0c0: 20 23 20 43 41 55 54 49 4f 4e 3a 20 6e 6f 20 63   # CAUTION: no c
f0d0: 6f 6d 6d 65 6e 74 73 20 61 6c 6c 6f 77 65 64 20  omments allowed 
f0e0: 69 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  in the definitio
f0f0: 6e 20 6c 69 73 74 0d 0a 20 20 20 20 6f 70 63 75  n list..    opcu
f100: 61 20 64 65 66 74 79 70 65 73 20 53 20 24 4e 53  a deftypes S $NS
f110: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 75   {..        stru
f120: 63 74 20 4b 56 50 61 69 72 20 7b 0d 0a 20 20 20  ct KVPair {..   
f130: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 20           String 
f140: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  name..          
f150: 20 20 53 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a    String value..
f160: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f170: 20 20 20 73 74 72 75 63 74 20 52 47 42 20 7b 0d     struct RGB {.
f180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 49 6e  .            UIn
f190: 74 31 36 20 72 65 64 0d 0a 20 20 20 20 20 20 20  t16 red..       
f1a0: 20 20 20 20 20 55 49 6e 74 31 36 20 67 72 65 65       UInt16 gree
f1b0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  n..            U
f1c0: 49 6e 74 31 36 20 62 6c 75 65 0d 0a 20 20 20 20  Int16 blue..    
f1d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 73      }..        s
f1e0: 74 72 75 63 74 20 4e 61 6d 65 64 43 6f 6c 6f 72  truct NamedColor
f1f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f200: 53 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20  String name..   
f210: 20 20 20 20 20 20 20 20 20 52 47 42 20 63 6f 6c           RGB col
f220: 6f 72 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  or..        }.. 
f230: 20 20 20 20 20 20 20 73 74 72 75 63 74 20 57 69         struct Wi
f240: 74 68 41 72 72 61 79 20 7b 0d 0a 20 20 20 20 20  thArray {..     
f250: 20 20 20 20 20 20 20 53 74 72 69 6e 67 20 6e 61         String na
f260: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
f270: 53 74 72 69 6e 67 20 2a 76 61 6c 75 65 73 0d 0a  String *values..
f280: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f290: 20 20 20 65 6e 75 6d 20 53 69 6d 70 6c 65 45 6e     enum SimpleEn
f2a0: 75 6d 20 7b 20 52 65 64 20 47 72 65 65 6e 20 42  um { Red Green B
f2b0: 6c 75 65 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  lue }..    }....
f2c0: 20 20 20 20 23 20 69 6d 70 6f 72 74 20 74 79 70      # import typ
f2d0: 65 20 64 65 66 73 0d 0a 20 20 20 20 6f 70 63 75  e defs..    opcu
f2e0: 61 20 67 65 6e 74 79 70 65 73 20 53 0d 0a 0d 0a  a gentypes S....
f2f0: 20 20 20 20 23 20 6d 61 6b 65 20 73 6f 6d 65 20      # make some 
f300: 76 61 72 69 61 62 6c 65 73 20 75 73 69 6e 67 20  variables using 
f310: 74 68 65 20 73 74 72 75 63 74 73 20 66 72 6f 6d  the structs from
f320: 20 61 62 6f 76 65 0d 0a 20 20 20 20 73 65 74 20   above..    set 
f330: 4f 46 20 5b 6c 69 6e 64 65 78 20 5b 6f 70 63 75  OF [lindex [opcu
f340: 61 20 74 72 61 6e 73 6c 61 74 65 20 53 20 5b 6f  a translate S [o
f350: 70 63 75 61 20 72 6f 6f 74 5d 20 2f 20 4f 62 6a  pcua root] / Obj
f360: 65 63 74 73 5d 20 30 5d 0d 0a 20 20 20 20 66 6f  ects] 0]..    fo
f370: 72 65 61 63 68 20 7b 6e 61 6d 65 20 74 79 70 65  reach {name type
f380: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 58 31 20  } {..        X1 
f390: 4b 56 50 61 69 72 0d 0a 20 20 20 20 20 20 20 20  KVPair..        
f3a0: 58 32 20 52 47 42 0d 0a 20 20 20 20 20 20 20 20  X2 RGB..        
f3b0: 58 33 20 4e 61 6d 65 64 43 6f 6c 6f 72 0d 0a 20  X3 NamedColor.. 
f3c0: 20 20 20 20 20 20 20 58 34 20 57 69 74 68 41 72         X4 WithAr
f3d0: 72 61 79 0d 0a 20 20 20 20 7d 20 7b 0d 0a 20 20  ray..    } {..  
f3e0: 20 20 20 20 20 20 73 65 74 20 61 74 74 20 5b 6f        set att [o
f3f0: 70 63 75 61 20 61 74 74 72 73 20 64 65 66 61 75  pcua attrs defau
f400: 6c 74 20 56 61 72 69 61 62 6c 65 41 74 74 72 69  lt VariableAttri
f410: 62 75 74 65 73 5d 0d 0a 20 20 20 20 20 20 20 20  butes]..        
f420: 64 69 63 74 20 73 65 74 20 61 74 74 20 64 61 74  dict set att dat
f430: 61 54 79 70 65 20 5b 6f 70 63 75 61 20 74 79 70  aType [opcua typ
f440: 65 73 20 6e 6f 64 65 69 64 20 53 20 24 74 79 70  es nodeid S $typ
f450: 65 5d 0d 0a 20 20 20 20 20 20 20 20 64 69 63 74  e]..        dict
f460: 20 73 65 74 20 61 74 74 20 76 61 6c 75 65 20 5b   set att value [
f470: 6c 69 73 74 20 24 74 79 70 65 20 5b 6f 70 63 75  list $type [opcu
f480: 61 20 74 79 70 65 73 20 65 6d 70 74 79 20 53 20  a types empty S 
f490: 24 74 79 70 65 5d 5d 0d 0a 20 20 20 20 20 20 20  $type]]..       
f4a0: 20 6f 70 63 75 61 20 61 64 64 20 53 20 56 61 72   opcua add S Var
f4b0: 69 61 62 6c 65 20 22 6e 73 3d 24 7b 6e 73 69 64  iable "ns=${nsid
f4c0: 78 7d 3b 73 3d 24 6e 61 6d 65 22 20 24 4f 46 20  x};s=$name" $OF 
f4d0: 4f 72 67 61 6e 69 7a 65 73 20 5c 0d 0a 20 20 20  Organizes \..   
f4e0: 20 20 20 20 20 20 20 20 20 22 24 7b 6e 73 69 64           "${nsid
f4f0: 78 7d 3a 24 6e 61 6d 65 22 20 7b 7d 20 24 61 74  x}:$name" {} $at
f500: 74 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  t..    }....    
f510: 6f 70 63 75 61 20 77 72 69 74 65 20 53 20 22 24  opcua write S "$
f520: 7b 6e 73 69 64 78 7d 3a 58 34 22 20 56 61 6c 75  {nsidx}:X4" Valu
f530: 65 20 57 69 74 68 41 72 72 61 79 20 7b 0d 0a 20  e WithArray {.. 
f540: 20 20 20 20 20 20 20 6e 61 6d 65 20 7b 41 20 42         name {A B
f550: 20 43 20 44 20 45 7d 0d 0a 20 20 20 20 20 20 20   C D E}..       
f560: 20 76 61 6c 75 65 73 20 7b 41 20 42 20 43 20 44   values {A B C D
f570: 20 45 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20   E}..    }....  
f580: 20 20 23 20 73 74 61 72 74 20 73 65 72 76 65 72    # start server
f590: 0d 0a 20 20 20 20 6f 70 63 75 61 20 73 74 61 72  ..    opcua star
f5a0: 74 20 53 0d 0a 0d 0a 20 20 20 20 23 20 65 6e 74  t S....    # ent
f5b0: 65 72 20 65 76 65 6e 74 20 6c 6f 6f 70 0d 0a 20  er event loop.. 
f5c0: 20 20 20 76 77 61 69 74 20 66 6f 72 65 76 65 72     vwait forever
f5d0: 0d 0a 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d  ....</verbatim>.
f5e0: 0a 0a 5a 20 35 35 36 32 38 65 65 30 33 64 66 64  ..Z 55628ee03dfd
f5f0: 32 32 37 39 39 35 38 61 36 34 36 61 65 39 64 63  2279958a646ae9dc
f600: 63 61 37 66 0a                                   ca7f.