Adding support for importing and exporting EDS files
authorlbessard
Fri, 04 May 2007 13:57:54 +0200
changeset 182 988f2b302aa6
parent 181 44d812a41d49
child 183 4cddad17c81f
Adding support for importing and exporting EDS files
objdictgen/config/DS-401.prf
objdictgen/config/DS-404.prf
objdictgen/config/DS-406.prf
objdictgen/eds_in.py
objdictgen/eds_utils.py
objdictgen/gen_cfile.py
objdictgen/node.py
objdictgen/nodemanager.py
objdictgen/objdictedit.py
--- a/objdictgen/config/DS-401.prf	Fri May 04 12:46:09 2007 +0200
+++ b/objdictgen/config/DS-401.prf	Fri May 04 13:57:54 2007 +0200
@@ -5,271 +5,272 @@
 """
 
 Mapping = {
+
     0x6000 : {"name" : "Read Inputs 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 8 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 8 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Read Inputs 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6002 : {"name" : "Polarity Input 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 8 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 8 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Polarity Input 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6003 : {"name" : "Filter Constant Input 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 8 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 8 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Filter Constant Input 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
     0x6005 : {"name" : "Global Interrupt Enable Digital", "struct" : var, "need" : False, "values" :
                 [{"name" : "Global Interrupt Enable Digital", "type" : 0x01, "access" : 'rw', "pdo" : False}]},
 
     0x6006 : {"name" : "Interrupt Mask Any Change 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 8 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 8 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Any Change 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6007 : {"name" : "Interrupt Mask Low to High 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 8 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 8 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Low to High 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6008 : {"name" : "Interrupt Mask High to Low 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 8 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 8 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt High to Low 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6020 : {"name" : "Read Input Bit 0x%X to 0x%X[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01, "need" : False, "nbmax" : 0x8, "values" :
-                [{"name" : "Number of Input 1 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 1 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Read Single Input 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6030 : {"name" : "Polarity Input Bit 0x%X to 0x%X[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01, "need" : False, "nbmax" : 0x8, "values" :
-                [{"name" : "Number of Input 1 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 1 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Polarity Input bit 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6038 : {"name" : "Filter Constant Input Bit 0x%X to 0x%X[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01, "need" : False, "nbmax" : 0x8, "values" :
-                [{"name" : "Number of Input 1 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 1 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Filter Constant Input bit 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6050 : {"name" : "Interrupt Mask Input Any Change Bit 0x%X to 0x%X[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01, "need" : False, "nbmax" : 0x8, "values" :
-                [{"name" : "Number of Input 1 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 1 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Mask Any Change Input bit 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6060 : {"name" : "Interrupt Mask Input Low to High Bit 0x%X to 0x%X[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01, "need" : False, "nbmax" : 0x8, "values" :
-                [{"name" : "Number of Input 1 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 1 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Mask Any Change Input bit 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6070 : {"name" : "Interrupt Mask Input High  to Low Bit 0x%X to 0x%X[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01, "need" : False, "nbmax" : 0x8, "values" :
-                [{"name" : "Number of Input 1 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 1 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Mask Any Change Input bit 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
 
 
     0x6100 : {"name" : "Read Inputs 16 Bit", "struct" : rec,  "need" : False, "values" :
-                [{"name" : "Number of Input 16 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 16 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Read Inputs 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6102 : {"name" : "Polarity Input 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 16 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 16 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Polarity Input 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6103 : {"name" : "Filter Constant Input 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 16 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 16 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Filter Constant Input 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6106 : {"name" : "Interrupt Mask Any Change 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 16 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 16 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Any Change 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6107 : {"name" : "Interrupt Mask Low to High 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 16 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 16 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Low to High 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6106 : {"name" : "Interrupt Mask High to Low 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 16 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 16 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt High to Low 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6120 : {"name" : "Read Input 4 Byte", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 32 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 32 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Read Input 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6122 : {"name" : "Polarity Input 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 32 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 32 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Polarity Input 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
     0x6123 : {"name" : "Filter Constant Input 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 32 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 32 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Polarity Input  0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
     0x6126 : {"name" : "Interrupt Mask Input Any Change 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 32 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 32 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Any Change Input 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6127 : {"name" : "Interrupt Mask Input Low to High 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 32 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 32 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Low to High Input  0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6128 : {"name" : "Interrupt Mask Input High to Low 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Input 32 bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Input 32 bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt High to Low Input 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6200 : {"name" : "Write Outputs 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 8 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 8 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Write Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6202 : {"name" : "Change Polarity Outputs 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 8 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 8 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Change Polarity Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6206 : {"name" : "Error Mode Outputs 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 8 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 8 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Mode Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6207 : {"name" : "Error Value Outputs 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 8 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 8 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Value Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6208 : {"name" : "Filter Mask Outputs 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 8 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 8 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                 {"name" : "Filter Mask Outputs 0x%X to 0x%X[(sub*8-7,sub*8)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6220 : {"name" : "Write Outputs Bit %d to %d[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01,  "need" : False, "nbmax" : 0x08, "values" :
-                [{"name" : "Number of Output 1 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 1 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Write Outputs 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6240 : {"name" : "Change Polarity Outputs Bit %d to %d[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01,  "need" : False, "nbmax" : 0x08, "values" :
-                [{"name" : "Number of Output 1 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 1 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Write Outputs 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6250 : {"name" : "Error Mode Outputs Lines %d to %d[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01,  "need" : False, "nbmax" : 0x08, "values" :
-                [{"name" : "Number of Output 1 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 1 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Mode Outputs 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6260 : {"name" : "Error Value Outputs Lines %d to %d[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01,  "need" : False, "nbmax" : 0x08, "values" :
-                [{"name" : "Number of Output 1 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 1 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Value Outputs 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
     0x6270 : {"name" : "Filter Constant Outputs Lines %d to %d[(idx*128-127,idx*128)]", "struct" : plurirec, "incr" : 0x01,  "need" : False, "nbmax" : 0x08, "values" :
-                [{"name" : "Number of Output 1 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 1 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Filter Constant Outputs 0x%X[((idx-1)*128+sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0x80}]},
 
 
     0x6300 : {"name" : "Write Outputs 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 16 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 16 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Write Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6302 : {"name" : "Change Polarity Outputs 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 16 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 16 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Change Polarity Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6306 : {"name" : "Error Mode Outputs 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 16 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 16 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Mode Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6307 : {"name" : "Error Value Outputs 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 16 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 16 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Value Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6308 : {"name" : "Filter Mask Outputs 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 16 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 16 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Filter Mask Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
     0x6320 : {"name" : "Write Output 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 32 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 32 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Write Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6322 : {"name" : "Change Polarity Outputs 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 32 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 32 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Polarity Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6326 : {"name" : "Error Mode Outputs 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 32 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 32 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Mode Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6327 : {"name" : "Error Value Outputs 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 32 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 32 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Value Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6328 : {"name" : "Filter Mask Outputs 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Output 32 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Output 32 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Filter Mask Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6400 : {"name" : "Read Analogue Input 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Input 8 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Input %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Input 8 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x02, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6401 : {"name" : "Read Analogue Input 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Input 16 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Input %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Input 16 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6402 : {"name" : "Read Analogue Input 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Input 32 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Input 32 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x04, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6403 : {"name" : "Read Analogue Input Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Input Float", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Input Float", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6404 : {"name" : "Read Manufacturer specific Analogue Input", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Input", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Input %d[(sub)]", "type" : 0x11, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Input", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x11, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6410 : {"name" : "Write Analogue Output 8 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Input 8 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Input %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Input 8 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x02, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6411 : {"name" : "Write Analogue Output 16 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Input 16 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Output %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Input 16 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6412 : {"name" : "Write Analogue Output 32 Bit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs 32 Bit", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Output %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Outputs 32 Bit", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6413 : {"name" : "Write Analogue Output Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs Float", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Output %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Outputs Float", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6414 : {"name" : "Write Manufacturer specific Analogue Output", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                {"name" : "Analogue Output %d[(sub)]", "type" : 0x11, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x11, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6421 : {"name" : "Interrupt Trigger Selection", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analog Inputs 0x%X[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6422 : {"name" : "Analogue Input Interrupt Source", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Interrupt Source Bank", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Interrupt Source Bank", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Interrupt Source Bank 0x%X[(sub)]", "type" : 0x07, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
 
     0x6423 : {"name" : "Analogue Input Global Interrupt Enable", "struct" : var, "need" : False, "values" :
                  [{"name" : "Analogue Input Global Interrupt Enable", "type" : 0x01, "access" : 'rw', "pdo" : True}]},
 
     0x6424 : {"name" : "Analogue Input Interrupt Upper Limit Interger", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6425 : {"name" : "Analogue Input Interrupt Lower Limit Interger", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6426 : {"name" : "Analogue Input Interrupt Delta Unsigned", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6427 : {"name" : "Analogue Input Interrupt Negative Delta Unsigned", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6428 : {"name" : "Analogue Input Interrupt Positive Delta Unsigned", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6429 : {"name" : "Analogue Input Interrupt Upper Limit Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x642A : {"name" : "Analogue Input Interrupt Lower Limit Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x642B : {"name" : "Analogue Input Interrupt Delta Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x642C : {"name" : "Analogue Input Interrupt Negative Delta Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x642D : {"name" : "Analogue Input Interrupt Positive Delta Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x642E : {"name" : "Analogue Input Offset Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x642F : {"name" : "Analogue Input Scaling Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6430 : {"name" : "Analogue Input SI unit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6431 : {"name" : "Analogue Input Offset Integer", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6432 : {"name" : "Analogue Input Scaling Integer", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Inputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Inputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Input %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6441 : {"name" : "Analogue Output Offset Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Output %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6442 : {"name" : "Analogue Output Scaling Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Output %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6443 : {"name" : "Analogue Output Error Mode", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Error Mode Analogue Output %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6444 : {"name" : "Analogue Output Error Value Integer", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6445 : {"name" : "Analogue Output Error Value Float", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6446 : {"name" : "Analogue Output Offset Integer", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6447 : {"name" : "Analogue Output Scaling Integer", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Analogue Output %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6450 : {"name" : "Analogue Output SI Unit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Analogue Outputs", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Analogue Outputs", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Analogue Output %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]}
 }
 
--- a/objdictgen/config/DS-404.prf	Fri May 04 12:46:09 2007 +0200
+++ b/objdictgen/config/DS-404.prf	Fri May 04 13:57:54 2007 +0200
@@ -6,1037 +6,1077 @@
 
 Mapping = {
     0x6000 : {"name" : "DI Read state 8 Input Lines", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DI Read state 8 Inputs Lines %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6002 : {"name" : "DI Polarity 8 Input Lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'rw', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'rw', "pdo" : False},
                  {"name" : "DI Polarity 8 Input Lines %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x6020 : {"name" : "DI Read state 1 Input Lines", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DI Read state 1 Inputs Lines %d[(sub)]", "type" : 0x01, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x6030 : {"name" : "DI Polarity 1 Input Lines", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DI Polarity 1 Inputs Lines %d[(sub)]", "type" : 0x01, "access" : 'ro', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6100 : {"name" : "AI Input FV", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input FV %d[(sub)]", "type" : 0x08, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x7100 : {"name" : "AI Input FV", "struct" : rec  , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input FV %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x8100 : {"name" : "AI Input FV",  "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input FV %d[(sub)]", "type" : 0x10, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x9100 : {"name" : "AI Input FV",  "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input FV %d[(sub)]", "type" : 0x04, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6103 : {"name" : "AI Interrupt delta input FV", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta input FV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7103 : {"name" : "AI Interrupt delta input FV","struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta input FV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8103 : {"name" : "AI Interrupt delta input FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta input FV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9103 : {"name" : "AI Interrupt delta input FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta input FV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6110 : {"name" : "AI Sensor Type", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Sensor Type %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x6111 : {"name" : "AI Autocalibration", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Autocalibration %d[(sub)]", "type" : 0x07, "access" : 'wo', "pdo" : False, "nbmax" : 0xC7}]},
     0x6112 : {"name" : "AI Operating Mode",  "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Operating Mode %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x6114 : {"name" : "AI ADC Sample Rate", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Sample Rate %d[(sub)]", "type" : 0x07, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6120 : {"name" : "AI Input Scaling 1 FV", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 1 FV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7120 : {"name" : "AI Input Scaling 1 FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 1 FV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8120 : {"name" : "AI Input Scaling 1 FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 1 FV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9120 : {"name" : "AI Input Scaling 1 FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 1 FV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6121 : {"name" : "AI Input Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 1 PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7121 : {"name" : "AI Input Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 1 PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8121 : {"name" : "AI Input Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 1 PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9121 : {"name" : "AI Input Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 1 PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6122 : {"name" : "AI Input Scaling 2 FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 2 FV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7122 : {"name" : "AI Input Scaling 2 FV",  "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 2 FV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8122 : {"name" : "AI Input Scaling 2 FV", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 2 FV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9122 : {"name" : "AI Input Scaling 2 FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 2 FV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6123 : {"name" : "AI Input Scaling 2 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 2 PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7123 : {"name" : "AI Input Scaling 2 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 2 PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8123 : {"name" : "AI Input Scaling 2 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 2 PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9123 : {"name" : "AI Input Scaling 2 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Scaling 2 PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6124 : {"name" : "AI Input Offset", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Offset %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7124 : {"name" : "AI Input Offset", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Offset %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8124 : {"name" : "AI Input Offset", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Offset %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9124 : {"name" : "AI Input Offset", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input Offset %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6125 : {"name" : "AI Autozero", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Autozero %d[(sub)]", "type" : 0x07, "access" : 'wo', "pdo" : False, "nbmax" : 0xC7}]},
     0x6126 : {"name" : "AI Scaling Factor", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Scaling Factor %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x6127 : {"name" : "AI Scaling Offset", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Scaling Offset %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6130 : {"name" : "AI Input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input PV %d[(sub)]", "type" : 0x08, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x7130 : {"name" : "AI Input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input PV %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x8130 : {"name" : "AI Input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input PV %d[(sub)]", "type" : 0x10, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x9130 : {"name" : "AI Input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Input PV %d[(sub)]", "type" : 0x04, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
 
     0x6131 : {"name" : "AI Physical Unit PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Physical Unit PV %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x6132 : {"name" : "AI Decimal digits PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Decimal digits PV %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
 
     0x6133 : {"name" : "AI Interrupt delta input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta input PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7133 : {"name" : "AI Interrupt delta input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta input PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8133 : {"name" : "AI Interrupt delta input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta input PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9133 : {"name" : "AI Interrupt delta input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta input PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6134 : {"name" : "AI Interrupt lower input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt lower input PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7134 : {"name" : "AI Interrupt lower input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt lower input PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8134 : {"name" : "AI Interrupt lower input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt lower input PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9134 : {"name" : "AI Interrupt lower input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt lower input PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6135 : {"name" : "AI Interrupt upper input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt upper input PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7135 : {"name" : "AI Interrupt upper input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt upper input PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8135 : {"name" : "AI Interrupt upper input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt upper input PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9135 : {"name" : "AI Interrupt upper input PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt upper input PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6138 : {"name" : "AI Tare zero", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Tare zero %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7138 : {"name" : "AI Tare zero", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Tare zero %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8138 : {"name" : "AI Tare zero", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Tare zero %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9138 : {"name" : "AI Tare zero", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Tare zero %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6139 : {"name" : "AI Autotare", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Autotare %d[(sub)]", "type" : 0x07, "access" : 'wo', "pdo" : True, "nbmax" : 0xC7}]},
 
 
     0x6140 : {"name" : "AI Net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Net PV %d[(sub)]", "type" : 0x08, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x7140 : {"name" : "AI Net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Net PV %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x8140 : {"name" : "AI Net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Net PV %d[(sub)]", "type" : 0x10, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x9140 : {"name" : "AI Net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Net PV %d[(sub)]", "type" : 0x04, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
 
     0x6143 : {"name" : "AI Interrupt delta net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta net PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7143 : {"name" : "AI Interrupt delta net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta net PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8143 : {"name" : "AI Interrupt delta net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta net PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9143 : {"name" : "AI Interrupt delta net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt delta net PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6144 : {"name" : "AI Interrupt lower limit net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt lower limit net PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7144 : {"name" : "AI Interrupt lower limit net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt lower limit net PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8144 : {"name" : "AI Interrupt lower limit net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt lower limit net PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9144 : {"name" : "AI Interrupt lower limit net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt lower limit net PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6145 : {"name" : "AI Interrupt upper limit net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt upper limit net PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7145 : {"name" : "AI Interrupt upper limit net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt upper limit net PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8145 : {"name" : "AI Interrupt upper limit net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt upper limit net PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9145 : {"name" : "AI Interrupt upper limit net PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Interrupt upper limit net PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6148 : {"name" : "AI Span start", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Span start %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7148 : {"name" : "AI Span start", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Span start %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8148 : {"name" : "AI Span start", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Span start %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9148 : {"name" : "AI Span start", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Span start %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6149 : {"name" : "AI Span end", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Span end %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7149 : {"name" : "AI Span end", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Span end %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8149 : {"name" : "AI Span end", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Span end %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9149 : {"name" : "AI Span end", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Span end %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6150 : {"name" : "AI Status", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Status %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6160 : {"name" : "AI Control Byte", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Control Byte %d[(sub)]", "type" : 0x05, "access" : 'wo', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6161 : {"name" : "AI Control Byte Enable", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Control Byte Enable %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x61A0 : {"name" : "AI Filter Type", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Filter Type %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x61A1 : {"name" : "AI Filter Constant", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AI Filter Constant %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6200 : {"name" : "DO Write state 8 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Write state 8 output lines %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6202 : {"name" : "DO Polarity 8 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Polarity 8 output lines %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6206 : {"name" : "DO Fault mode 8 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Fault mode 8 output lines %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6207 : {"name" : "DO Fault state 8 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Fault state 8 output lines %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6210 : {"name" : "DO Link object 8 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Link Object 8 output lines %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6220 : {"name" : "DO Write state 1 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Write state 1 output lines %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6240 : {"name" : "DO Polarity 1 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Polarity 1 output lines %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6250 : {"name" : "DO Fault mode 1 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Failt mode 1 output lines %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6260 : {"name" : "DO Fault state 1 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Fault state 1 output lines %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6280 : {"name" : "DO Link object 1 output lines", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "DO Link object 1 output lines %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6300 : {"name" : "AO Output PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x7300 : {"name" : "AO Output PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x8300 : {"name" : "AO Output PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x9300 : {"name" : "AO Output PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
 
 
     0x6301 : {"name" : "AO Physical Unit PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AO Physical Unit PV %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Physical Unit PV %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6302 : {"name" : "AO Decimal digits PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Decimal digits PV %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6303 : {"name" : "AO Link output PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Link output PV %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6310 : {"name" : "AO Output type", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output type %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6320 : {"name" : "AO Output Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output Scaling 1 PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7320 : {"name" : "AO Output PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+    0x7320 : {"name" : "AO Output Scaling 1 PV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output Scaling 1 PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8320 : {"name" : "AO Output Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output Scaling 1 PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9320 : {"name" : "AO Output Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Output Scaling 1 PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
-    0x6323 : {"name" : "AO Output Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AO Output Scaling 1 PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7323 : {"name" : "AO Output PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AO Output Scaling 1 PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8323 : {"name" : "AO Output Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AO Output Scaling 1 PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9323 : {"name" : "AO Output Scaling 1 PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AO Output Scaling 1 PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-
-
-
+    0x6321 : {"name" : "AO Output Scaling 1 FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 1 FV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7321 : {"name" : "AO Output Scaling 1 FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 1 FV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8321 : {"name" : "AO Output Scaling 1 FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 1 FV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9321 : {"name" : "AO Output Scaling 1 FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 1 FV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+
+    0x6322 : {"name" : "AO Output Scaling 2 PV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 2 PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7322 : {"name" : "AO Output Scaling 2 PV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 2 PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8322 : {"name" : "AO Output Scaling 2 PV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 2 PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9322 : {"name" : "AO Output Scaling 2 PV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 2 PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+
+    0x6323 : {"name" : "AO Output Scaling 2 FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 2 FV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7323 : {"name" : "AO Output Scaling 2 FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 2 FV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8323 : {"name" : "AO Output Scaling 2 FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 2 FV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9323 : {"name" : "AO Output Scaling 2 FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output Scaling 2 FV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+
+    0x6330 : {"name" : "AO Output FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output FV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7330 : {"name" : "AO Output FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output FV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8330 : {"name" : "AO Output FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output FV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9330 : {"name" : "AO Output FV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AO Output FV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    
     0x6331 : {"name" : "AO Physical Unit FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Physical Unit FV %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6332 : {"name" : "AO Decimal digits FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Decimal digits FV %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6340 : {"name" : "AO Fault mode", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Fault mode %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6341 : {"name" : "AO Fault FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Fault FV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7341 : {"name" : "AO Fault FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Fault FV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8341 : {"name" : "AO Fault FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Fault FV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9341 : {"name" : "AO Fault FV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AO Fault FV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6400 : {"name" : "CO Effective Current Value Xeff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Effective Current Value Xeff %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x7400 : {"name" : "CO Effective Current Value Xeff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Effective Current Value Xeff %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x8400 : {"name" : "CO Effective Current Value Xeff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Effective Current Value Xeff %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x9400 : {"name" : "CO Effective Current Value Xeff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Effective Current Value Xeff %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
 
 
     0x6401 : {"name" : "CO Effective Set Point Weff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Effective Set Point Weff %d[(sub)]", "type" : 0x08, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Effective Set Point %d[(sub)]", "type" : 0x08, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x7401 : {"name" : "CO Effective Set Point Weff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Effective Set Point Weff %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Effective Set Point %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x8401 : {"name" : "CO Effective Set Point Weff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Effective Set Point Weff %d[(sub)]", "type" : 0x10, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Effective Set Point %d[(sub)]", "type" : 0x10, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
     0x9401 : {"name" : "CO Effective Set Point Weff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Effective Set Point Weff %d[(sub)]", "type" : 0x04, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Effective Set Point %d[(sub)]", "type" : 0x04, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
 
 
 
     0x6402 : {"name" : "CO Set Point W", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Set Point W %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x7402 : {"name" : "CO Set Point W", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Set Point W %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x8402 : {"name" : "CO Set Point W", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Set Point W %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x9402 : {"name" : "CO Set Point W", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Set Point W %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
 
 
     0x6403 : {"name" : "CO 2nd Set Point W2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO 2nd Set Point W2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO 2nd Set Point %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x7403 : {"name" : "CO 2nd Set Point W2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO 2nd Set Point W2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO 2nd Set Point %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x8403 : {"name" : "CO 2nd Set Point W2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO 2nd Set Point W2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO 2nd Set Point %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x9403 : {"name" : "CO 2nd Set Point W2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO 2nd Set Point W2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO 2nd Set Point %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
 
 
     0x6404 : {"name" : "CO Lower Set Point Limit W0", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Lower Set Point Limit W0 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Lower Set Point Limit %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7404 : {"name" : "CO Lower Set Point Limit W0", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Lower Set Point Limit W0 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Lower Set Point Limit %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8404 : {"name" : "CO Lower Set Point Limit W0", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Lower Set Point Limit W0 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Lower Set Point Limit %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9404 : {"name" : "CO Lower Set Point Limit W0", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Lower Set Point Limit W0 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Lower Set Point Limit %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
 
     0x6405 : {"name" : "CO upper Set Point Limit W100", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO 2nd Set Point W2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7405 : {"name" : "CO 2nd Set Point W2", "struct" : rec , "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO 2nd Set Point W2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8405 : {"name" : "CO 2nd Set Point W2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO 2nd Set Point W2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9405 : {"name" : "CO 2nd Set Point W2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO 2nd Set Point W2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-
-
-    0x6406 : {"name" : "CO Physical unit current value - set point", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Physical unit current value - set point %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6407 : {"name" : "CO Decimal digits current value - set point", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Decimal digits current value - set point %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6410 : {"name" : "CO Effective controller output Y", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Effective controller output Y %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6411 : {"name" : "CO Differential controller output Ydiff", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Differential controller output Ydiff %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6412 : {"name" : "CO Manual controller output", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Manual controller output %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6413 : {"name" : "CO Lower controler output limit Ymin", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Lower controler output limit Ymin %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6414 : {"name" : "CO Upper controler output limit Ymax", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Upper controler output limit Ymax %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6415 : {"name" : "CO Physical unit controller output", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Physical unit controller output %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO 2nd Set Point Limit%d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7405 : {"name" : "CO upper Set Point Limit W100", "struct" : rec , "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO 2nd Set Point Limit %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8405 : {"name" : "CO upper Set Point Limit W100", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO 2nd Set Point Limit %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9405 : {"name" : "CO upper Set Point Limit W100", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO 2nd Set Point Limit %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+
+
+    0x6406 : {"name" : "CO Physical Unit XW", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Physical unit XW %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6407 : {"name" : "CO Decimal Digits XW", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Decimal Digits XW %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6410 : {"name" : "CO Effective Controller Output Y", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Effective Controller Output %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6411 : {"name" : "CO Differential Controller Output Ydiff", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Differential Controller Output %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6412 : {"name" : "CO Manual Controller Output", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Manual Controller Output %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6413 : {"name" : "CO Lower Controller Output Limit Ymin", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Lower Controller Output Limit %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6414 : {"name" : "CO Upper Controller Output Limit Ymax", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Upper Controller Output Limit %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6415 : {"name" : "CO Physical Unit Controller Output", "struct" : rec, "need" : True, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Physical Unit Controller Output %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6420 : {"name" : "CO Set point switch W-W2", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Set point switch W-W2 %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6421 : {"name" : "CO Automatic - manual mode A-M", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Automatic - manual mode %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6422 : {"name" : "CO Controller on - off", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Controller on - off %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6423 : {"name" : "CO Controller mode", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Controller mode %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6424 : {"name" : "CO Self optimization on - off", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Set Point Switch %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6421 : {"name" : "CO Automatic-Manual Mode A-M", "struct" : rec, "need" : True, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Automatic-Manual Mode %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6422 : {"name" : "CO Controller On-Off", "struct" : rec, "need" : True, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Controller On-Off %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6423 : {"name" : "CO Controller Mode", "struct" : rec, "need" : True, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Controller Mode %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6424 : {"name" : "CO Self Optimization On-Off", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Self optimization on - off %d[(sub)]", "type" : 0x01, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
-    0x6425 : {"name" : "CO control byte", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO control byte %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6426 : {"name" : "CO control byte enable", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO control byte enable %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6427 : {"name" : "CO status word", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO status word %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+    0x6425 : {"name" : "CO Control Byte", "struct" : rec, "need" : True, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Control Byte %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6426 : {"name" : "CO Control Byte Enable", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Control Byte Enable %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6427 : {"name" : "CO Status Word", "struct" : rec, "need" : True, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Status Word %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
 
     0x6430 : {"name" : "CO Minimum Pulse Time Tmin1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Minimum Pulse Time Tmin1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7430 : {"name" : "CO Minimum Pulse Time Tmin1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Minimum Pulse Time Tmin1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8430 : {"name" : "CO Minimum Pulse Time Tmin1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Minimum Pulse Time Tmin1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9430 : {"name" : "CO Minimum Pulse Time Tmin1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Minimum Pulse Time Tmin1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6431 : {"name" : "CO Minimum Pulse Time Tmin2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Minimum Pulse Time Tmin2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7431 : {"name" : "CO Minimum Pulse Time Tmin2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Minimum Pulse Time Tmin2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8431 : {"name" : "CO Minimum Pulse Time Tmin2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Minimum Pulse Time Tmin2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9431 : {"name" : "CO Minimum Pulse Time Tmin2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Minimum Pulse Time Tmin2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6432 : {"name" : "CO Motor Response Time Tm", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Motor Response Time Tm %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7432 : {"name" : "CO Motor Response Time Tm", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Motor Response Time Tm %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8432 : {"name" : "Motor Response Time Tm", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+    0x8432 : {"name" : "CO Motor Response Time Tm", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Motor Response Time Tm %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9432 : {"name" : "CO Motor Response Time Tm", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Motor Response Time Tm %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
-    0x6433 : {"name" : "CO Min. Pulse Length Tpuls", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Motor Response Time Tm %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7433 : {"name" : "CO Motor Response Time Tm", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Motor Response Time Tm %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8433 : {"name" : "Motor Response Time Tm", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Motor Response Time Tm %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9433 : {"name" : "CO Motor Response Time Tm", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Motor Response Time Tm %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6434 : {"name" : "CO Physical unit pulse timing", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Physical unit pulse timing %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6435 : {"name" : "CO Decimal digits pulse timing", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Decimal digits pulse timing %d[(sub)]", "type" : 0x06, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6440 : {"name" : "Neutral zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Neutral zone 3point Xsh1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7440 : {"name" : "Neutral zone 3point Xsh1","struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Neutral zone 3point Xsh1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8440 : {"name" : "Neutral zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Neutral zone 3point Xsh1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9440 : {"name" : "Neutral zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Neutral zone 3point Xsh1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6441 : {"name" : "Neutral zone 3point Xsh2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Neutral zone 3point Xsh2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7441 : {"name" : "Neutral zone 3point Xsh1","struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Neutral zone 3point Xsh2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8441 : {"name" : "Neutral zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Neutral zone 3point Xsh2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9441 : {"name" : "Neutral zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Neutral zone 3point Xsh2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6442 : {"name" : "CO Neutral zone 3point stepping Xsh", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Neutral zone 3point stepping Xsh %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7442 : {"name" : "CO Neutral zone 3point stepping Xsh", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Neutral zone 3point stepping Xsh %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8442 : {"name" : "CO Neutral zone 3point stepping Xsh", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Neutral zone 3point stepping Xsh %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9442 : {"name" : "CO Neutral zone 3point stepping Xsh", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Neutral zone 3point stepping Xsh %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-
-    0x6443 : {"name" : "CO Switching difference of signaller Xsd1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Switching difference of signaller Xsd1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7443 : {"name" : "CO Switching difference of signaller Xsd1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Switching difference of signaller Xsd1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8443 : {"name" : "CO Switching difference of signaller Xsd1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Switching difference of signaller Xsd1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9443 : {"name" : "CO Switching difference of signaller Xsd1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Switching difference of signaller Xsd1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-
-    0x6444 : {"name" : "CO Switching difference of additional Contact Xsd2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Switching difference of additional Contact Xsd2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7444 : {"name" : "CO Switching difference of additional Contact Xsd2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Switching difference of additional Contact Xsd2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8444 : {"name" : "CO Switching difference of additional Contact Xsd2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Switching difference of additional Contact Xsd2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9444 : {"name" : "CO Switching difference of additional Contact Xsd2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Switching difference of additional Contact Xsd2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-
-    0x6445 : {"name" : "CO Trigger point separation of additional contact LW", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Trigger point separation of additional contact LW %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7445 : {"name" : "CO Trigger point separation of additional contact LW", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Trigger point separation of additional contact LW %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8445 : {"name" : "CO Trigger point separation of additional contact LW", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Trigger point separation of additional contact LW %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9445 : {"name" : "CO Trigger point separation of additional contact LW", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Trigger point separation of additional contact LW %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x6433 : {"name" : "CO Min Pulse Length Tpuls", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Min. Pulse Length %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7433 : {"name" : "CO Min Pulse Length Tpuls", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Min Pulse Length %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8433 : {"name" : "CO Min Pulse Length Tpuls", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Min Pulse Length %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9433 : {"name" : "CO Min Pulse Length Tpuls", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Min Pulse Length %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6434 : {"name" : "CO Physical Unit Pulse Timing", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Physical Unit Pulse Timing %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6435 : {"name" : "CO Decimal Digits PT", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Decimal Digits PT %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6440 : {"name" : "Neutral Zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Neutral Zone 3point Xsh1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7440 : {"name" : "Neutral Zone 3point Xsh1","struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Neutral Zone 3point Xsh1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8440 : {"name" : "Neutral Zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Neutral Zone 3point Xsh1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9440 : {"name" : "Neutral Zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Neutral Zone 3point Xsh1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6441 : {"name" : "Neutral Zone 3point Xsh2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Neutral Zone 3point Xsh2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7441 : {"name" : "Neutral Zone 3point Xsh1","struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Neutral Zone 3point Xsh2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8441 : {"name" : "Neutral Zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Neutral Zone 3point Xsh2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9441 : {"name" : "Neutral Zone 3point Xsh1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Neutral Zone 3point Xsh2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6442 : {"name" : "CO Neutral Zone 3point Stepping Xsh", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Neutral Zone 3point Stepping %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7442 : {"name" : "CO Neutral Zone 3point Stepping Xsh", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Neutral Zone 3point Stepping %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8442 : {"name" : "CO Neutral Zone 3point Stepping Xsh", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Neutral Zone 3point Stepping %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9442 : {"name" : "CO Neutral Zone 3point Stepping Xsh", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Neutral Zone 3point Stepping %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+
+    0x6443 : {"name" : "CO Switching Difference of Signaller Xsd1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Switching Difference of Signaller Xsd1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7443 : {"name" : "CO Switching Difference of Signaller Xsd1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Switching Difference of Signaller Xsd1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8443 : {"name" : "CO Switching Difference of Signaller Xsd1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Switching Difference of Signaller Xsd1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9443 : {"name" : "CO Switching Difference of Signaller Xsd1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Switching Difference of Signaller Xsd1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+
+    0x6444 : {"name" : "CO Switching Difference of Additional Contact Xsd2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Switching Difference of Additional Contact Xsd2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7444 : {"name" : "CO Switching Difference of Additional Contact Xsd2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Switching Difference of Additional Contact Xsd2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8444 : {"name" : "CO Switching Difference of Additional Contact Xsd2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Switching Difference of Additional Contact Xsd2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9444 : {"name" : "CO Switching Difference of Additional Contact Xsd2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Switching Difference of Additional Contact Xsd2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+
+    0x6445 : {"name" : "CO Trigger Point Separation of Additional Contact LW", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Trigger Point Separation of Additional Contact LW %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x7445 : {"name" : "CO Trigger Point Separation of Additional Contact LW", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Trigger Point Separation of Additional Contact LW %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x8445 : {"name" : "CO Trigger Point Separation of Additional Contact LW", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Trigger Point Separation of Additional Contact LW %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x9445 : {"name" : "CO Trigger Point Separation of Additional Contact LW", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Trigger Point Separation of Additional Contact LW %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6450 : {"name" : "CO Proportional Band Xp1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Proportional Band Xp1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7450 : {"name" : "CO Proportional Band Xp1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Proportional Band Xp1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8450 : {"name" : "CO Proportional Band Xp1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Proportional Band Xp1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9450 : {"name" : "CO Proportional Band Xp1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Proportional Band Xp1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6451 : {"name" : "CO Proportional Band Xp2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Proportional Band Xp2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7451 : {"name" : "CO Proportional Band Xp2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Proportional Band Xp2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8451 : {"name" : "CO Proportional Band Xp2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Proportional Band Xp2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9451 : {"name" : "CO Proportional Band Xp2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Proportional Band Xp2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x6452 : {"name" : "CO Integral Action Time Tn1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Integral Action Time Tn1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7452 : {"name" : "CO Integral Action Time Tn1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Integral Action Time Tn1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8452 : {"name" : "CO Integral Action Time Tn1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Integral Action Time Tn1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9452 : {"name" : "CO Integral Action Time Tn1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Integral Action Time Tn1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6453 : {"name" : "CO Integral Action Time Tn2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Integral Action Time Tn2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7453 : {"name" : "CO Integral Action Time Tn2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Integral Action Time Tn2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8453 : {"name" : "CO Integral Action Time Tn2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Integral Action Time Tn2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9453 : {"name" : "CO Integral Action Time Tn2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Integral Action Time Tn2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6454 : {"name" : "CO Derivate Action Time Tv1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Derivate Action Time Tv1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7454 : {"name" : "CO Integral Action Time Tv2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+    0x7454 : {"name" : "CO Derivate Action Time Tv1", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Derivate Action Time Tv1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8454 : {"name" : "CO Derivate Action Time Tv1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Derivate Action Time Tv1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9454 : {"name" : "CO Derivate Action Time Tv1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Derivate Action Time Tv1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6455 : {"name" : "CO Derivate Action Time Tv2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Derivate Action Time Tv2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7455 : {"name" : "CO Integral Action Time Tv2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+    0x7455 : {"name" : "CO Derivate Action Time Tv2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Derivate Action Time Tv2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8455 : {"name" : "CO Derivate Action Time Tv2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Derivate Action Time Tv2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9455 : {"name" : "CO Derivate Action Time Tv2",  "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Derivate Action Time Tv2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6456 : {"name" : "CO Cycle Time T1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Cycle Time T1 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7456 : {"name" : "CO Cycle Time T1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Cycle Time T1 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8456 : {"name" : "CO Cycle Time T1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Cycle Time T1 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9456 : {"name" : "CO Cycle Time T1", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Cycle Time T1 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
-    0x6456 : {"name" : "CO Cycle Time T2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+    0x6457 : {"name" : "CO Cycle Time T2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Cycle Time T2 %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x7456 : {"name" : "CO Cycle Time T2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+    0x7457 : {"name" : "CO Cycle Time T2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Cycle Time T2 %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x8456 : {"name" : "CO Cycle Time T2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+    0x8457 : {"name" : "CO Cycle Time T2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Cycle Time T2 %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-    0x9456 : {"name" : "CO Cycle Time T2", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+    0x9457 : {"name" : "CO Cycle Time T2", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CO Cycle Time T2 %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
-    0x6458 : {"name" : "CO Physical unit PID timing", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Physical unit PID timing %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6459 : {"name" : "CO Decimal digits PID timing", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "CO Decimal digits PID timing %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x6458 : {"name" : "CO Physical Unit PID", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Physical unit PID %d[(sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6459 : {"name" : "CO Decimal Digits PID", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "CO Decimal digits PID %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6500 : {"name" : "AL %d Input Value[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Input Value %d[(idx,sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x7500 : {"name" : "AL %d Input Value[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Input Value %d[(idx,sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x8500 : {"name" : "AL %d Input Value[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Input Value %d[(idx,sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x9500 : {"name" : "AL %d Input Value[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Input Value %d[(idx,sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6503 : {"name" : "AL %d Link Input[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Link Input %d[(idx,sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6504 : {"name" : "AL %d Alternate Input Value[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Alternate Input Value %d[(idx,sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x7504 : {"name" : "AL %d Alternate Input Value[(idx)]", "struct" :  plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Alternate Input Value %d[(idx,sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x8504 : {"name" : "AL %d Alternate Input Value[(idx)]", "struct" :   plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Alternate Input Value %d[(idx,sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x9504 : {"name" : "AL %d Alternate Input Value[(idx)]", "struct" :  plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Alternate Input Value %d[(idx,sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
-    0x6505 : {"name" : "AL %d Link alternate input[(idx)]", "struct" : plurirec,  "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AL %d Link alternate Input %d[(idx,sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6506 : {"name" : "AL %d Fault mode[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AL %d Fault mode %d[(idx,sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
-
-    0x6507 : {"name" : "AL %d Fault state[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AL %d Fault state %d[(idx,sub)]", "type" : 0x01, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+    0x6505 : {"name" : "AL %d Link Alternate Input[(idx)]", "struct" : plurirec,  "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AL %d Link Alternate Input %d[(idx,sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6506 : {"name" : "AL %d Fault Mode[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AL %d Fault Mode %d[(idx,sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
+
+    0x6507 : {"name" : "AL %d Fault State[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AL %d Fault State %d[(idx,sub)]", "type" : 0x01, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6508 : {"name" : "AL %d Type[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Type %d[(idx,sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x6509 : {"name" : "AL %d Action[(idx)]", "struct" : pluriarray, "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Action %d[(idx,sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x650A : {"name" : "AL %d Level[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Level %d[(idx,sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x750A : {"name" : "AL %d Level[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Level %d[(idx,sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x850A : {"name" : "AL %d Level[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Level %d[(idx,sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x950A : {"name" : "AL %d Level[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Level %d[(idx,sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x650B : {"name" : "AL %d Hysteresis[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Hysteresis %d[(idx,sub)]", "type" : 0x08, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x750B : {"name" : "AL %d Hysteresis[(idx)]", "struct" : plurirec, "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Hysteresis %d[(idx,sub)]", "type" : 0x03, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x850B : {"name" : "AL %d Hysteresis[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Hysteresis %d[(idx,sub)]", "type" : 0x10, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
     0x950B : {"name" : "AL %d Hysteresis[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Hysteresis %d[(idx,sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
 
     0x650C : {"name" : "AL %d Group[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Group %d[(idx,sub)]", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xC7}]},
 
     0x650D : {"name" : "AL %d State[(idx)]", "struct" : plurirec, "incr" : 0x10,  "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d State %d[(idx,sub)]", "type" : 0x01, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x650E : {"name" : "AL %d Reset[(idx)]", "struct" : plurirec,  "incr" : 0x10, "need" : False, "nbmax" : 16,  "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "AL %d Reset %d[(idx,sub)]", "type" : 0x01, "access" : 'wo', "pdo" : False, "nbmax" : 0xC7}]},
 
-    0x6600 : {"name" : "AL 1..8 State", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AL 1..8 State %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6601 : {"name" : "AL 9..16 State", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AL 9..16 State %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+    0x6600 : {"name" : "AL 1-8 State", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AL 1-8 State %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6601 : {"name" : "AL 9-16 State", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AL 9-16 State %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6602 : {"name" : "AL General State", "struct" : var, "need" : False, "values" :
                 [{"name" : "AL General State", "type" : 0x01, "access" : 'ro', "pdo" : True}]},
 
-    0x6603 : {"name" : "AL Group 1..8 State", "struct" : var, "need" : False, "values" :
-                 [{"name" : "AL Group 1..8 State", "type" : 0x05, "access" : 'ro', "pdo" : True}]},
+    0x6603 : {"name" : "AL Group 1-8 State", "struct" : var, "need" : False, "values" :
+                 [{"name" : "AL Group 1-8 State", "type" : 0x05, "access" : 'ro', "pdo" : True}]},
 
     0x6610 : {"name" : "AL General Reset", "struct" : var, "need" : False, "values" :
                  [{"name" : "AL General Reset", "type" : 0x01, "access" : 'wo', "pdo" : True}]},
 
-    0x6611 : {"name" : "AL 1..8 Reset", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AL 1..8 Reset %d[(sub)]", "type" : 0x05, "access" : 'wo', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6612 : {"name" : "AL 9..16 Reset", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "AL 9..16 Reset %d[(sub)]", "type" : 0x05, "access" : 'wo', "pdo" : True, "nbmax" : 0xC7}]},
-
-
-    0x6F20 : {"name" : "Life counter", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Life counter %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6F30 : {"name" : "Receive PDO check", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Receive PDO check %d[(sub)]", "type" : 0x05, "access" : 'wo', "pdo" : True, "nbmax" : 0xC7}]},
+    0x6611 : {"name" : "AL 1-8 Reset", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AL 1-8 Reset %d[(sub)]", "type" : 0x05, "access" : 'wo', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6612 : {"name" : "AL 9-16 Reset", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "AL 9-16 Reset %d[(sub)]", "type" : 0x05, "access" : 'wo', "pdo" : True, "nbmax" : 0xC7}]},
+
+
+    0x6F20 : {"name" : "Life Counter", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Life Counter %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6F30 : {"name" : "Receive PDO Check", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "rPDO Check %d[(sub)]", "type" : 0x05, "access" : 'wo', "pdo" : True, "nbmax" : 0xC7}]},
 
     0x6F31 : {"name" : "Transmit PDO check", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Transmit PDO check %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "tPDO check %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xC7}]},
 
 
     0x6F50 : {"name" : "Receive PV", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Receive PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x7F50 : {"name" : "Receive PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Receive PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x8F50 : {"name" : "Receive PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Receive PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
     0x9F50 : {"name" : "Receive PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Receive PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
 
-    0x6F51 : {"name" : "Alternate receive PV", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Alternate receive PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-    0x7F51 : {"name" : "Alternate receive PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Alternate receive PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-    0x8F51 : {"name" : "Alternate receive PV","struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Alternate receive PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-    0x9F51 : {"name" : "Alternate receive PV", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Alternate receive PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6F52 : {"name" : "Received status", "struct" : rec, "need" : True, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Received status %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6F53 : {"name" : "Alternate received status", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Alternate received status %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
-
-    0x6F60 : {"name" : "Transmission enable", "struct" : var, "need" : False, "values" :
-                 [{"name" : "Transmission enable", "type" : 0x01, "access" : 'ro', "pdo" : False}]},
+    0x6F51 : {"name" : "Alternate Receive PV", "struct" : rec, "need" : True, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Alternate Receive PV %d[(sub)]", "type" : 0x08, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+    0x7F51 : {"name" : "Alternate Receive PV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Alternate Receive PV %d[(sub)]", "type" : 0x03, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+    0x8F51 : {"name" : "Alternate Receive PV","struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Alternate Receive PV %d[(sub)]", "type" : 0x10, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+    0x9F51 : {"name" : "Alternate Receive PV", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Alternate Receive PV %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6F52 : {"name" : "Received Status", "struct" : rec, "need" : True, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Received Status %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6F53 : {"name" : "Alternate Received Status", "struct" : rec, "need" : False, "values" :
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Alternate Received Status %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xC7}]},
+
+    0x6F60 : {"name" : "Transmission Enable", "struct" : var, "need" : False, "values" :
+                 [{"name" : "Transmission Enable", "type" : 0x01, "access" : 'ro', "pdo" : False}]},
 }
 
 AddMenuEntries = [("Alarm function block",[0x6500, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507, 0x6508, 0x6509, 0x650A, 0x650B, 0x650C, 0x650D, 0x650E, 0x7500, 0x7504, 0x750A, 0x750B, 0x8500, 0x8504, 0x850A, 0x850B, 0x9500, 0x9504, 0x950A, 0x950B])]
--- a/objdictgen/config/DS-406.prf	Fri May 04 12:46:09 2007 +0200
+++ b/objdictgen/config/DS-406.prf	Fri May 04 13:57:54 2007 +0200
@@ -16,7 +16,7 @@
     0x6004 : {"name" : "Position Value", "struct" : var, "need" : True, "values" :
                 [{"name" : "Position Value", "type" : 0x07, "access" : 'ro', "pdo" : True}]},
     0x6005 : {"name" : "Linear Encoder Measuring Step Settings", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Objects", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Objects", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Position Step Setting", "type" : 0x07, "access" : 'rw', "pdo" : False},
                  {"name" : "Speed Step Setting", "type" : 0x07, "access" : 'rw', "pdo" : False},
                  {"name" : "Acceleration Step Setting", "type" : 0x07, "access" : 'rw', "pdo" : False},
@@ -28,19 +28,19 @@
 
 
     0x6010 : {"name" : "Preset Value for Multi-Sensor Device", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Preset Value Channel %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
     0x6020 : {"name" : "Position Value for Multi-Sensor Device", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Position Value Channel %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6030 : {"name" : "Speed Value", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Speed Value Channel %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6040 : {"name" : "Acceleration Value", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Acceleration Value Channel %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6050 : {"name" : "Jerk Value", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Jerk Value Channel %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
 
 
@@ -49,35 +49,35 @@
 
 
     0x6300 : {"name" : "CAM State Register", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CAM State Channel %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6301 : {"name" : "CAM Enable", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CAM Enable Channel %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
     0x6302 : {"name" : "CAM Polarity", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CAM Polarity Channel %d[(sub)]", "type" : 0x05, "access" : 'rw', "pdo" : True, "nbmax" : 0xFE}]},
 
 
     0x6310 : {"name" : "CAM%d Low Limit[(idx)]", "struct" : plurirec, "incr" : 1, "need" : False, "nbmax" : 0x08, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CAM%d Low Limit Channel %d[(idx,sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
     0x6320 : {"name" : "CAM%d High Limit[(idx)]", "struct" : plurirec, "incr" : 1, "need" : False, "nbmax" : 0x08, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CAM%d High Limit Channel %d[(idx,sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
     0x6330 : {"name" : "CAM%d Hysteresis[(idx)]", "struct" : plurirec, "incr" : 1, "need" : False, "nbmax" : 0x08, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "CAM%d Hysteresis Channel %d[(idx,sub)]", "type" : 0x06, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
 
 
     0x6400 : {"name" : "Area State Register", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Work Area State Channel %d[(sub)]", "type" : 0x05, "access" : 'ro', "pdo" : True, "nbmax" : 0xFE}]},
     0x6401 : {"name" : " Work Area Low Limit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Work Area Low Limit Channel %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
     0x6402 : {"name" : " Work Area High Limit", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Work Area High Limit Channel %d[(sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
 
 
@@ -86,7 +86,7 @@
     0x6501 : {"name" : "Single Turn Resolution", "struct" : var, "need" : True, "values" :
                 [{"name" : "Single Turn Resolution", "type" : 0x07, "access" : 'ro', "pdo" : False}]},
     0x6502 : {"name" : "Number of Distinguishable Revolutions", "struct" : var, "need" : True, "values" :
-                [{"name" : "Number of Distinguishable Revolutions", "type" : 0x07, "access" : 'rw', "pdo" : True}]},
+                [{"name" : "Number of Distinguishable Revolutions", "type" : 0x06, "access" : 'rw', "pdo" : True}]},
     0x6503 : {"name" : "Alarms", "struct" : var, "need" : False, "values" :
                 [{"name" : "Alarms", "type" : 0x06, "access" : 'ro', "pdo" : True}]},
     0x6504 : {"name" : "Supported Alarms", "struct" : var, "need" : False, "values" :
@@ -102,14 +102,14 @@
     0x6509 : {"name" : "Offset Value", "struct" : var, "need" : False, "values" :
                 [{"name" : "Offset Value", "type" : 0x04, "access" : 'ro', "pdo" : False}]},
     0x650A : {"name" : "Module Identification", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Manufacturer Offset Value", "type" : 0x04, "access" : 'ro', "pdo" : False},
                  {"name" : "Manufacturer Min Position Value", "type" : 0x04, "access" : 'ro', "pdo" : False},
                  {"name" : "Manufacturer Max Position Value", "type" : 0x04, "access" : 'ro', "pdo" : False}]},
     0x650B : {"name" : "Serial Number", "struct" : var, "need" : False, "values" :
                 [{"name" : "Serial Number", "type" : 0x07, "access" : 'ro', "pdo" : False}]},
     0x650C : {"name" : "Offset Values for Multi-Sensor Devices", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Available Channels", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Available Channels", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Offset Value Channel %d[(sub)]", "type" : 0x04, "access" : 'ro', "pdo" : False, "nbmax" : 0xFE}]},
 
     0x6510 : {"name" : "Number of High Precision Revolutions", "struct" : var, "need" : True, "values" :
--- a/objdictgen/eds_in.py	Fri May 04 12:46:09 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,466 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#This file is part of CanFestival, a library implementing CanOpen Stack. 
-#
-#Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD
-#
-#See COPYING file for copyrights details.
-#
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License as published by the Free Software Foundation; either
-#version 2.1 of the License, or (at your option) any later version.
-#
-#This library is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#Lesser General Public License for more details.
-#
-#You should have received a copy of the GNU Lesser General Public
-#License along with this library; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-from xml.parsers import expat
-
-import node
-from node import *
-
-maxObjects = 8
-
-currentPDOIndex = 0
-currentBitsMapped = 0
-currentMaxObjects = 0
-currentNbMappedObjects = 0
-
-nextPdoIndex = {"rx":0x1400,"tx":0x1800}
-
-valid_elements = ["node","heartbeat_consumers","sdo_clients","pdo","mapped_object",
-    "pdo_param","pdo_receive","pdo_transmit","mapped_variable","mapped_table",
-    "mapped_string_variable","mapped_string_table"]
-
-#-------------------------------------------------------------------------------
-#                       Callback method of parse
-#-------------------------------------------------------------------------------
-
-def StartElement(name, attrs):
-    if name in valid_elements:
-        if name == "node":
-            startNode(attrs)
-        elif name == "heartbeat_consumers":
-            startHeartBeatConsumers(attrs)
-        elif name == "sdo_clients":
-            startSdoClients(attrs)
-        elif name in ["pdo_param","pdo_receive","pdo_transmit"]:
-            raise ValueError, """!!! The XML grammar has changed.
-Please, open your xml file, delete the tags pdo_param, pdo_receive and pdo_transmit.
-Use instead the tag pdo for each pdo to create, and (optional) use the tag mapped_object (menu pdo/map and object ...)."""
-        elif name == "pdo":
-            startPdo(attrs)
-        elif name == "mapped_object":
-            startMappedObject(attrs)
-        elif name == "mapped_variable":
-            startMappedVariable(attrs)
-        elif name == "mapped_table":
-            startMappedTable(attrs)
-        elif name == "mapped_string_variable":
-            startMappedVariable(attrs)
-        elif name == "mapped_string_table":
-            startMappedTable(attrs)
-
-def EndElement(name):
-    if name in valid_elements:
-       if name == "node":
-           stopNode()
-
-def CharacterData(data):
-    pass
-
-#-------------------------------------------------------------------------------
-#                          Creation of Node
-#-------------------------------------------------------------------------------
-
-def startNode(attrs):
-    name = attrs["name"]
-    Node.SetNodeName(name)
-    
-    if "node_id" in attrs and len(attrs["node_id"]) > 0:
-        node_id = eval(attrs["node_id"])
-    else:
-        node_id = 0x01  # We define here a default node_id. 
-    Node.SetNodeID(node_id)
-    
-    typeNode = attrs["type_node"]
-    Node.SetNodeType(typeNode)
-    
-    if "device_type_1000" in attrs:
-        device_type = eval(attrs["device_type_1000"])
-    else:
-        device_type = 0
-    Node.AddEntry(0x1000, 0, device_type)
-    Node.AddEntry(0x1001, 0, 0)
-    Node.AddEntry(0x1005, 0, 0x00000080)
-    Node.AddEntry(0x1006, 0, 0)
-    Node.AddEntry(0x1007, 0, 0)
-
-    if "manufacturer_device_name_1008" in attrs:
-        manufacturer_device_name = attrs["manufacturer_device_name_1008"]
-    else:
-        manufacturer_device_name = ""
-    Node.AddEntry(0x1008, 0, manufacturer_device_name)
-    
-    if "manufacturer_hardware_version_1009" in attrs:
-        manufacturer_hardware_version = attrs["manufacturer_hardware_version_1009"]
-    else:
-        manufacturer_hardware_version = "__DATE__"
-    Node.AddEntry(0x1009, 0, manufacturer_hardware_version)
-
-    if "manufacturer_software_version_100A" in attrs:
-        manufacturer_software_version = attrs["manufacturer_software_version_100A"]
-    else:
-        manufacturer_software_version = 0
-    Node.AddEntry(0x100A, 0,  manufacturer_software_version)
-
-    if "vendor_id_1018" in attrs:
-        vendor_id = eval(attrs["vendor_id_1018"])
-    else:
-        vendor_id = 0
-    if "product_code_1018" in attrs:
-        product_code = eval(attrs["product_code_1018"])
-    else:
-        product_code = 0
-    if "revision_number_1018" in attrs:
-        revision_number = eval(attrs["revision_number_1018"])
-    else:
-        revision_number = 0
-    if "serial_number_1018" in attrs:
-        serial_number = eval(attrs["serial_number_1018"])
-    else:
-        serial_number = 0
-    Node.AddEntry(0x1018, 1, vendor_id)
-    Node.AddEntry(0x1018, 2, product_code)
-    Node.AddEntry(0x1018, 3, revision_number)
-    Node.AddEntry(0x1018, 4, serial_number)
-
-def stopNode():
-    heartBeatProducer()
-    sdoServer()
-
-#-------------------------------------------------------------------------------
-#                      Creation of PDO in Object Dictionary
-#-------------------------------------------------------------------------------
-
-def startPdo(attrs):
-    global currentPdoIndex
-    global currentMaxObjects
-    global currentNbMappedObjects
-    global currentBitsMapped
-    global maxObjects
-    
-    cobId = 0
-    transmissionType = 253 # Default is on request. Why not ?
-
-    # Find the type of the PDO and search the index of the last added
-    type = attrs["type_rx_tx"]
-    index = nextPdoIndex[type]
-    
-    # If the index of the PDO is define, verify that it has a good index
-    if "index_communication_parameter" in attrs:
-        index = eval(attrs["index_communication_parameter"])
-    if type == "rx" and not 0x1400 <= index <= 0x15FF:
-        raise ValueError, """!!! Abort because Index PDO receive : 0x%04X not valid.
-Valid index is 0x1400 ... 0x15FF"""%index
-    if type == "tx" and not 0x1800 <= index <= 0x19FF:
-        raise ValueError, """!!! Abort because Index PDO transmit : 0x%04X not valid.
-Valid index is 0x1800 ... 0x19FF"""%index
-    
-    # Extract the PDO communication parameters
-    if "cob_id" == attrs:
-        cobId = eval(attrs["cob_id"])
-    if "max_objects_in_pdo" == attrs:
-        maxObjects = eval(attrs["max_objects_in_pdo"])
-    if "transmission_type" in attrs:
-        transmissionType = eval(attrs["transmission_type"])
-
-    if Node.IsEntry(index):
-        raise ValueError, """!!! Abort because the PDO at index : 0x%04X have been already defined."""%index
-
-    # Communication parameters
-    Node.AddEntry(index, 1, cobId)
-    Node.AddEntry(index, 2, transmissionType)
-    
-    # Mapping parameters
-    mapping_index = index + 0x200
-    for i in xrange(1, maxObjects + 1):
-        Node.AddEntry(mapping_index, i, 0x0)
-
-    currentPdoIndex = index
-    currentMaxObjects = maxObjects
-    currentBitsMapped = 0
-    currentNbMappedObjects = 0
-    
-    nextPdoIndex[type] = index + 1
-
-def startMappedObject(attrs):
-    global currentPdoIndex
-    global currentMaxObjects
-    global currentNbMappedObjects
-    global currentBitsMapped
-    
-    index = currentPdoIndex
-    mapping_index = index + 0x200
-    
-    indexObject = eval(attrs["index"])
-    subIndexObject = eval(attrs["sub_index"])
-    sizeInBitsObject = eval(attrs["size_in_bits"])
-
-    if currentMaxObjects == 0:
-        raise ValueError, """!!! Abort because of a bogue for mapped object (defined at index 0x%04X, subIndex 0x%025X)
-in PDO. index : 0x%04X is undefined."""%(indexObject,subindexObject,mapping_index)
-    if currentNbMappedObjects >= currentMaxObjects:
-        raise ValueError, """!!! Abort mapping object (defined at index 0x%04X, subIndex 0x%02X)
-in PDO index 0x%04X. max objects (%d) reached."""%(IndexObject,subIndexObject,mapping_index,pdo[mapping_index]["maxObjects"])
-    if currentBitsMapped + sizeInBitsObject > 64:
-        raise ValueError, """!!! Abort mapping object (defined at index 0x%04X, subIndex 0x%02X)
-in PDO index 0x%04X. No room to put %d bits in the PDO."""%(IndexObject,subIndexObject,mapping_index,sizeInBitsObject)
-
-    value = eval("0x%04X%02X%02X"%(indexObject,subIndexObject,sizeInBitsObject))
-    Node.SetEntry(mapping_index, currentNbMappedObjects + 1, value)
-    
-    currentNbMappedObjects += 1
-    currentBitsMapped += sizeInBitsObject
-
-#-------------------------------------------------------------------------------
-#                    Creation of mapped variable and table 
-#-------------------------------------------------------------------------------
-
-def startMappedVariable(attrs):
-    name = attrs["name"]
-    index = eval(attrs["index"])
-    subIndex = eval(attrs["sub_index"])
-    
-    if "size_in_bits" in attrs:
-        size = eval(attrs["size_in_bits"]) # Numeric variable
-        if "type" in attrs:
-            type = attrs["type"]
-            if (type == "UNS"):
-                type = "UNSIGNED"
-        else: # Default type
-            type = "UNSIGNED"
-        typename = "%s%d"%(type,size)
-
-        type_index = Manager.GetTypeIndex(typename, False)
-        if type_index == None:
-            raise ValueError, """!!! ERROR : For variable "%s" at index 0x%04X, subindex 0x%02X : Unrecognized type : %s"""%(name,index,subIndex,typename)
-        
-        # Begin ValueRange support
-        if "min_value" in attrs or "max_value" in attrs:
-            if "min_value" in attrs and "max_value" in attrs:
-                minValue = eval(attrs["min_value"])
-                maxValue = eval(attrs["max_value"])
-                if (minValue > maxValue):
-                    raise ValueError, """!!! ERROR : For variable "%s" at index 0x%04X, subindex 0x%02X : error in value-range : min > max"""%(name,index,subIndex)
-            else:
-                raise ValueError, """!!! ERROR : For variable "%s" at index 0x%04X, subindex 0x%02X : You have defined only a min or a max value. \nIf you define one, you must define both."""%(name,index,subIndex)
-        
-            type_index = findRangeType(type_index, minValue, maxValue)
-            if type_index == None:
-                raise ValueError, """!!! Sorry, too many different value range have been defined"""
-        # End ValueRange support    
-
-    if "size_in_byte" in attrs:
-        size = eval(attrs["size_in_byte"]) # String variable
-        type_index = findStringType(Manager.GetTypeIndex("VISIBLE_STRING", False), size)
-        if type_index == None:
-            raise ValueError, """!!! Sorry, too many different string length have been defined"""
-          
-    if "access" in attrs:
-        access = attrs["access"].lower()
-    else: 
-        access = "rw" # default value
- 
-    if index < 0x2000 or index > 0xBFFF:
-        raise ValueError, """!!! ERROR : For variable "%s" at index 0x%04X, subindex 0x%02X : Variable can't be defined using this index-subindex."""%(name,index,subIndex)
-
-    if subIndex == 0:
-        Node.AddMappingEntry(index, name = name, struct = 1)
-    elif subIndex == 1:
-        Node.AddMappingEntry(index, struct = 3)
-        Node.AddMappingEntry(index, 0, values = {"name" : "Number of Entries", "type" : 0x02, "access" : "ro", "pdo" : False})    
-    result = Node.AddMappingEntry(index, subIndex, values = {"name" : name, "type" : type_index, "access" : access, "pdo" : True})
-    
-    if result:
-        Node.AddEntry(index, subIndex, 0)
-    else:
-        raise ValueError, """!!! ERROR : For variable "%s" at index 0x%04X, subindex 0x%02X : Unable to map"""%(name,index,subIndex)
-
-def startMappedTable(attrs):
-    name = attrs["name"]
-    number_elements = eval(attrs["number_elements"])
-    index = eval(attrs["index"])
-
-    if "size_in_bits" in attrs:
-        size = eval(attrs["size_in_bits"]) # Numeric variable
-        if "type" in attrs:
-            type = attrs["type"]
-            if (type == "UNS"):
-                type = "UNSIGNED"
-        else: # Default type
-            type = "UNSIGNED"
-        typename = "%s%d"%(type,size)
-
-        type_index = Manager.GetTypeIndex(typename, False)
-        if type_index == None:
-            raise ValueError, """!!! ERROR : For table \"%s\" at index 0x%04X : Unrecognized type : %s"""%(name,index,typename)
-        
-        # Begin ValueRange support
-        if "min_value" in attrs or "max_value" in attrs:
-            if "min_value" in attrs and "max_value" in attrs:
-                minValue = eval(attrs["min_value"])
-                maxValue = eval(attrs["max_value"])
-                if (minValue > maxValue):
-                    raise ValueError, """!!! ERROR : For table \"%s\" at index 0x%04X : error in value-range : min > max"""%(name,index)
-            else:
-                raise ValueError, """!!! ERROR : For table \"%s\" at index 0x%04X : You have defined only a min or a max value. \nIf you define one, you must define both."""%(name,index)
-        
-            type_index = findRangeType(type_index, minValue, maxValue)
-            if type_index == None:
-                raise ValueError, """!!! Sorry, too many different value range have been defined"""
-        # End ValueRange support
-
-    if "size_in_byte" in attrs:
-        size = eval(attrs["size_in_byte"]) # String variable
-        type_index = findStringType(Manager.GetTypeIndex("VISIBLE_STRING", False), size)
-        if type_index == None:
-            raise ValueError, """!!! Sorry, too many different string length have been defined"""
-	      
-    if "access" in attrs:
-        access = attrs["access"].lower()
-    else:
-        access = "rw" # default value    
-
-    if index < 0x2000 or index > 0xBFFF:
-        raise ValueError, """!!! ERROR : For table \"%s\" at index 0x%04X : Variable can't be defined using this index-subindex."""%(name,index)
-
-    result = Node.AddMappingEntry(index, name = name, struct = 7)
-    if not result:
-        raise ValueError, """!!! ERROR : For table \"%s\" at index 0x%04X : Unable to map because a variable or a table is using this index"""%(name,index)
-    Node.AddMappingEntry(index, 0, values = {"name" : "Number of Entries", "type" : 0x02, "access" : "ro", "pdo" : False})
-    Node.AddMappingEntry(index, 1, values = {"name" : name, "type" : type_index, "access" : access, "pdo" : True, "nbmax" : number_elements})
-    
-    for subIndex in xrange(1,number_elements+1):
-        Node.AddEntry(index, subIndex, 0)
-
-def findRangeType(type, minValue, maxValue):
-    index = 0xA0
-    while index < 0x100 and Node.IsEntry(index):
-        current_type = Node.GetEntry(index, 1)
-        if current_type == type:
-            current_minValue = Node.GetEntry(index, 2)
-            current_maxValue = Node.GetEntry(index, 3)
-            if current_minValue == minValue and current_maxValue == maxValue:
-                return index
-        index += 1
-    if index < 0x100:
-        infos = Manager.GetEntryInfos(type, False)
-        name = "%s[%d-%d]"%(infos["name"], minValue, maxValue)
-        Node.AddMappingEntry(index, name = name, struct = 3, size = infos["size"], default = infos["default"])
-        Node.AddMappingEntry(index, 0, values = {"name" : "Number of Entries", "type" : 0x02, "access" : "ro", "pdo" : False})
-        Node.AddMappingEntry(index, 1, values = {"name" : "Type", "type" : 0x02, "access" : "ro", "pdo" : False})
-        Node.AddMappingEntry(index, 2, values = {"name" : "Minimum Value", "type" : type, "access" : "ro", "pdo" : False})
-        Node.AddMappingEntry(index, 3, values = {"name" : "Maximum Value", "type" : type, "access" : "ro", "pdo" : False})
-        Node.AddEntry(index, 1, type)
-        Node.AddEntry(index, 2, minValue)
-        Node.AddEntry(index, 3, maxValue)
-        return index
-    return None
-
-def findStringType(type, length):
-    index = 0xA0
-    while index < 0x100 and Node.IsEntry(index):
-        current_type = Node.GetEntry(index, 1)
-        if current_type == type:
-            current_length = Node.GetEntry(index, 2)
-            if current_length == length:
-                return index
-        index += 1
-    if index < 0x100:
-        infos = Manager.GetEntryInfos(type, False)
-        name = "%s%d"%(Manager.GetTypeName(type), length)
-        Node.AddMappingEntry(index, name = name, struct = 3, size = infos["size"], default = infos["default"])
-        Node.AddMappingEntry(index, 0, values = {"name" : "Number of Entries", "type" : 0x02, "access" : "ro", "pdo" : False})
-        Node.AddMappingEntry(index, 1, values = {"name" : "Type", "type" : 0x02, "access" : "ro", "pdo" : False})
-        Node.AddMappingEntry(index, 2, values = {"name" : "Length", "type" : 0x02, "access" : "ro", "pdo" : False})
-        Node.AddEntry(index, 1, type)
-        Node.AddEntry(index, 2, length)
-        return index
-    return None
-
-#-------------------------------------------------------------------------------
-#                   Creation HeartBeat Producer & Consumers
-#-------------------------------------------------------------------------------
-
-def heartBeatProducer():
-    Node.AddEntry(0x1017, 0, 0)
-    
-def startHeartBeatConsumers(attrs):
-    nombre = eval(attrs["nombre"])
-    for i in xrange(nombre):
-        Node.AddEntry(0x1016, i + 1, 0)		    
-
-#-------------------------------------------------------------------------------
-#                       Creation of SDO Server & Clients
-#-------------------------------------------------------------------------------
-
-def sdoServer():
-    Node.AddEntry(0x1200, 1, 0x600 + Node.GetNodeID())
-    Node.AddEntry(0x1200, 2, 0x580 + Node.GetNodeID())
-    
-def startSdoClients(attrs):
-    nombre = eval(attrs["nombre"])
-    for i in xrange(nombre):
-        Node.AddEntry(0x1280 + i, 1, 0x600)
-        Node.AddEntry(0x1280 + i, 2, 0x580)
-        Node.AddEntry(0x1280 + i, 3, 0)
-    
-#-------------------------------------------------------------------------------
-#                           Parse file with Saxe
-#-------------------------------------------------------------------------------
-
-def ParseFile(filepath):
-    return dict([(                          # Dict containing whole Eds
-              blocktuple[0],                # EntryName : Assignements dict
-              dict([assignment.split('=')   #  Name : Value
-                for assignment in           # Assignements are
-                blocktuple[-1].splitlines()    # all the lines
-                if assignment.find('=') > 0 ]  # that contains '='
-               )) for blocktuple in [       # Split the eds files into
-                 block.split("]")           # (EntryName,Assignements) tuple
-                 for block in               # for each blocks staring with '['
-                 open(filepath,'r').read().split("[")]
-               if blocktuple[0].isalnum()]) # if EntryName exists
-
-def GenerateNode(filepath, manager):
-    global Node
-    global Manager
-    Manager = manager
-    Node = node.Node()
-    eds_dict = ParseFile(filepath)
-    ProfileNb=int(eds_dict["1000"]["DefaultValue"],16) & 0x0000ffff
-    if ProfileNb not in [301, 302]:
-        execfile("config/DS-%d.prf"%ProfileNb)
-        Node.SetProfileName("DS-%d"%ProfileNb)
-        Node.SetProfile(Mapping)
-        Node.SetSpecificMenu(AddMenuEntries)
-    for Entry in ParseFile(filepath):
-        pass
-        
-    return Node
-
-#-------------------------------------------------------------------------------
-#                             Main Function
-#-------------------------------------------------------------------------------
-
-if __name__ == '__main__':
-    ParseFile("test.xml")
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/objdictgen/eds_utils.py	Fri May 04 13:57:54 2007 +0200
@@ -0,0 +1,587 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#This file is part of CanFestival, a library implementing CanOpen Stack. 
+#
+#Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD
+#
+#See COPYING file for copyrights details.
+#
+#This library is free software; you can redistribute it and/or
+#modify it under the terms of the GNU Lesser General Public
+#License as published by the Free Software Foundation; either
+#version 2.1 of the License, or (at your option) any later version.
+#
+#This library is distributed in the hope that it will be useful,
+#but WITHOUT ANY WARRANTY; without even the implied warranty of
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#Lesser General Public License for more details.
+#
+#You should have received a copy of the GNU Lesser General Public
+#License along with this library; if not, write to the Free Software
+#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+import node
+from sets import *
+from types import *
+from time import *
+import os,re
+
+# Regular expression for finding index section names
+index_model = re.compile('([0-9a-fA-F]{1,4})')
+# Regular expression for finding subindex section names
+subindex_model = re.compile('([0-9a-fA-F]{1,4})sub([0-9a-fA-F]{1,2})')
+
+# Dictionary for quickly translate boolean into integer value
+BOOL_TRANSLATE = {True : "1", False : "0"}
+
+# Function for verifying data values
+is_integer = lambda x: type(x) == IntType
+is_string = lambda x: type(x) == StringType
+
+# Define checking of value for each attribute
+ENTRY_ATTRIBUTES = {"SUBNUMBER" : is_integer, "PARAMETERNAME" : is_string, 
+                    "OBJECTTYPE" : lambda x: x in (7, 8, 9), "DATATYPE" : is_integer, 
+                    "LOWLIMIT" : is_integer, "HIGHLIMIT" : is_integer,
+                    "ACCESSTYPE" : lambda x: x in ["ro","wo", "rw", "rwr", "rww", "const"],
+                    "DEFAULTVALUE" : lambda x: True, "PDOMAPPING" : lambda x: x in (0, 1),
+                    "OBJFLAGS" : is_integer}
+
+# Define entry parameters by entry ObjectType number
+ENTRY_TYPES = {7 : {"name" : " VAR",
+                    "require" : ["PARAMETERNAME", "OBJECTTYPE", "DATATYPE", "ACCESSTYPE", "PDOMAPPING"],
+                    "optional" : ["LOWLIMIT", "HIGHLIMIT", "DEFAULTVALUE", "OBJFLAGS"]},
+               8 : {"name" : "n ARRAY",
+                    "require" : ["SUBNUMBER", "PARAMETERNAME", "OBJECTTYPE"],
+                    "optional" : ["OBJFLAGS"]},
+               9 : {"name" : " RECORD",
+                    "require" : ["SUBNUMBER", "PARAMETERNAME", "OBJECTTYPE"],
+                    "optional" : ["OBJFLAGS"]}}
+
+
+# Function that search into Node Mappings the informations about an index or a subindex
+# and return the default value
+def GetDefaultValue(index, subIndex = None):
+    infos = Manager.GetEntryInfos(index, Node)
+    if infos["struct"] & node.OD_MultipleSubindexes:
+        # First case entry is a record
+        if infos["struct"] & node.OD_IdenticalSubindexes:
+            subentry_infos = Manager.GetSubentryInfos(index, 1, Node)
+        # Second case entry is an array
+        else:
+            subentry_infos = Manager.GetSubentryInfos(index, subIndex, Node)
+        # If a default value is defined for this subindex, returns it
+        if "default" in subentry_infos:
+            return subentry_infos["default"]
+        # If not, returns the default value for the subindex type
+        else:
+            return Manager.GetTypeDefaultValue(subentry_infos["type"], Node)
+    # Third case entry is a var
+    else:
+        subentry_infos = Manager.GetSubentryInfos(index, 0, Node)
+        # If a default value is defined for this subindex, returns it
+        if "default" in subentry_infos:
+            return subentry_infos["default"]
+        # If not, returns the default value for the subindex type
+        else:
+            return Manager.GetTypeDefaultValue(subentry_infos["type"], Node)
+    return None
+
+
+#-------------------------------------------------------------------------------
+#                               Parse file
+#-------------------------------------------------------------------------------
+
+
+# List of section names that are not index and subindex and that we can meet in
+# an EDS file
+SECTION_KEYNAMES = ["FILEINFO", "DEVICEINFO", "DUMMYUSAGE", "COMMENTS", 
+                    "MANDATORYOBJECTS", "OPTIONALOBJECTS", "MANUFACTUREROBJECTS"]
+
+
+# Function that parse an EDS file and returns a dictionary of the informations
+def ParseFile(filepath):
+    eds_dict = {}
+    # Read file text
+    eds_file = open(filepath,'r').read()
+    sections = [(blocktuple[0],                # EntryName : Assignements dict
+                 blocktuple[-1].splitlines())  # all the lines
+                 for blocktuple in [           # Split the eds files into
+                 block.split("]")              # (EntryName,Assignements) tuple
+                 for block in                  # for each blocks staring with '['
+                 eds_file.split("[")]
+                 if blocktuple[0].isalnum()]   # if EntryName exists
+    
+    # Parse assignments for each section
+    for section_name, assignments in sections:
+        # Reset values of entry
+        values = {}
+        
+        # Search if the section name match an index or subindex expression
+        index_result = index_model.match(section_name)
+        subindex_result = subindex_model.match(section_name)
+        
+        # Compilation of the EDS information dictionary
+        
+        is_entry = False
+        # First case, section name is in SECTION_KEYNAMES 
+        if section_name.upper() in SECTION_KEYNAMES:
+            # Verify that entry is not already defined
+            if section_name.upper() not in eds_dict:
+                eds_dict[section_name.upper()] = values
+            else:
+                raise SyntaxError, "\"[%s]\" section is defined two times"%section_name
+        # Second case, section name is a subindex name 
+        elif subindex_result:
+            # Extract index and subindex number
+            index, subindex = [int(value, 16) for value in subindex_result.groups()]
+            # If index hasn't been referenced before, we add an entry into the dictionary
+            # that will be updated later
+            if index not in eds_dict:
+                eds_dict[index] = {"subindexes" : {}}
+            if subindex not in eds_dict[index]["subindexes"]:
+                eds_dict[index]["subindexes"][subindex] = values
+            else:
+                raise SyntaxError, "\"[%s]\" section is defined two times"%section_name
+            is_entry = True
+        # Third case, section name is an index name 
+        elif index_result:
+            # Extract index number
+            index = int(index_result.groups()[0], 16)
+            # If index hasn't been referenced before, we add an entry into the dictionary
+            if index not in eds_dict:
+                eds_dict[index] = values
+                eds_dict[index]["subindexes"] = {}
+            elif eds_dict[index].keys() == ["subindexes"]:
+                values["subindexes"] = eds_dict[index]["subindexes"]
+                eds_dict[index] = values
+            else:
+                raise SyntaxError, "\"[%s]\" section is defined two times"%section_name
+            is_entry = True
+        # In any other case, there is a syntax problem into EDS file
+        else:
+            raise SyntaxError, "Section \"[%s]\" is unrecognized"%section_name
+        
+        for assignment in assignments:
+            # Escape any comment
+            if assignment.startswith(";"):
+                pass
+            # Verify that line is a valid assignment
+            elif assignment.find('=') > 0:
+                # Split assignment into the two values keyname and value
+                try:
+                    keyname, value = assignment.split("=")
+                except:
+                    raise SyntaxError, "\"%s\" is not a valid EDS line"%assignment.strip()
+                # keyname must be immediately followed by the "=" sign, so we
+                # verify that there is no whitespace into keyname
+                if keyname.isalnum():
+                    # value can be preceded and followed by whitespaces, so we escape them
+                    value = value.strip()
+                    # First case, value starts with "$NODEID", then it's a formula
+                    if value.startswith("$NODEID"):
+                        try:
+                            computed_value = int(value.replace("$NODEID+", ""), 16)
+                        except:
+                            raise SyntaxError, "\"%s\" is not a valid formula for attribute \"%s\" of section \"[%s]\""%(value, keyname, section_name)
+                    # Second case, value starts with "0x", then it's an hexadecimal value
+                    elif value.startswith("0x"):
+                        try:
+                            computed_value = int(value, 16)
+                        except:
+                            raise SyntaxError, "\"%s\" is not a valid value for attribute \"%s\" of section \"[%s]\""%(value, keyname, section_name)
+                    elif value.isdigit():
+                        # Third case, value is a number and starts with "0", then it's an octal value
+                        if value.startswith("0"):
+                            computed_value = int(value, 8)
+                        # Forth case, value is a number and don't start with "0", then it's a decimal value
+                        else:
+                            computed_value = int(value)
+                    # In any other case, we keep string value
+                    else:
+                        computed_value = value
+                    
+                    # Add value to values dictionary
+                    if computed_value != "":
+                        # If entry is an index or a subindex
+                        if is_entry:
+                            # Verify that keyname is a possible attribute
+                            if keyname.upper() not in ENTRY_ATTRIBUTES:
+                                raise SyntaxError, "Keyname \"%s\" not recognised for section \"[%s]\""%(keyname, section_name)
+                            # Verify that value is valid
+                            elif not ENTRY_ATTRIBUTES[keyname.upper()](computed_value):
+                                raise SyntaxError, "Invalid value \"%s\" for keyname \"%s\" of section \"[%s]\""%(value, keyname, section_name)
+                            else:
+                                values[keyname.upper()] = computed_value
+                        else:
+                            values[keyname.upper()] = computed_value
+            # All lines that are not empty and are neither a comment neither not a valid assignment
+            elif assignment.strip() != "":
+                raise SyntaxError, "\"%s\" is not a valid EDS line"%assignment.strip()
+        
+        # If entry is an index or a subindex
+        if is_entry:
+            # Verify that entry has an ObjectType
+            if "OBJECTTYPE" in values.keys():
+                # Extract entry ObjectType
+                objecttype = values["OBJECTTYPE"]
+                # Extract parameters defined
+                keys = Set(values.keys())
+                keys.discard("subindexes")
+                # Extract possible parameters and parameters required
+                possible = Set(ENTRY_TYPES[objecttype]["require"] + ENTRY_TYPES[objecttype]["optional"])
+                required = Set(ENTRY_TYPES[objecttype]["require"])
+                # Verify that parameters defined contains all the parameters required
+                if not keys.issuperset(required):
+                    missing = required.difference(keys)._data.keys()
+                    if len(missing) > 1:
+                        attributes = "Attributes %s are"%", ".join(["\"%s\""%attribute for attribute in missing])
+                    else:
+                        attributes = "Attribute \"%s\" is"%missing[0]
+                    raise SyntaxError, "Error on section \"[%s]\":\n%s required for a%s entry"%(section_name, attributes, ENTRY_TYPES[objecttype]["name"])
+                # Verify that parameters defined are all in the possible parameters
+                if not keys.issubset(possible):
+                    unsupported = keys.difference(possible)._data.keys()
+                    if len(unsupported) > 1:
+                        attributes = "Attributes %s are"%", ".join(["\"%s\""%attribute for attribute in unsupported])
+                    else:
+                        attributes = "Attribute \"%s\" is"%unsupported[0]
+                    raise SyntaxError, "Error on section \"[%s]\":\n%s unsupported for a%s entry"%(section_name, attributes, ENTRY_TYPES[objecttype]["name"])
+            else:
+                raise SyntaxError, "Error on section \"[%s]\":\nAttribute OBJECTTYPE is required"%section_name
+        
+    return eds_dict
+
+
+# Function that write an EDS file after generate it's content
+def WriteFile(filepath, content):
+    # Open file in write mode
+    cfile = open(filepath,"w")
+    # Write content
+    cfile.write(content)
+    # Close file
+    cfile.close()
+
+
+# Function that generate the EDS file content for the current node in the manager
+def GenerateFileContent(filepath):
+    # Dictionary of each index contents
+    indexContents = {}
+    
+    # Extract local time
+    current_time = localtime()
+    # Extract node informations
+    nodename, nodeid, nodetype, description = Manager.GetCurrentNodeInfos()
+    
+    # Compiling lists of indexes defined
+    entries = [idx for name, idx in Manager.GetCurrentValidIndexes(0, 0xFFFF)]
+    
+    # Generate FileInfo section
+    fileContent = "[FileInfo]\n"
+    fileContent += "CreatedBy=CANFestival\n"
+    fileContent += "Description=%s\n"%description
+    fileContent += "CreationTime=%s"%strftime("%I:%M", current_time)
+    # %p option of strftime seems not working, then generate AM/PM by hands
+    if strftime("%I", current_time) == strftime("%H", current_time):
+        fileContent += "AM\n"
+    else:
+        fileContent += "PM\n"
+    fileContent += "CreationDate=%s\n"%strftime("%m-%d-%Y", current_time)
+    fileContent += "FileName=%s\n"%os.path.split(filepath)[-1]
+    fileContent += "FileVersion=1\n"
+    fileContent += "FileRevision=1\n"
+    fileContent += "EDSVersion=3.0\n"
+    
+    # Generate DeviceInfo section
+    fileContent += "\n[DeviceInfo]\n"
+    fileContent += "VendorName=CANFestival\n"
+    # Use information typed by user in Identity entry
+    fileContent += "VendorNumber=0x%8.8X\n"%Manager.GetCurrentEntry(0x1018, 1)
+    fileContent += "ProductName=%s\n"%nodename
+    fileContent += "ProductNumber=0x%8.8X\n"%Manager.GetCurrentEntry(0x1018, 2)
+    fileContent += "RevisionNumber=0x%8.8X\n"%Manager.GetCurrentEntry(0x1018, 3)
+    # CANFestival support all baudrates as soon as driver choosen support them
+    fileContent += "BaudRate_10=1\n"
+    fileContent += "BaudRate_20=1\n"
+    fileContent += "BaudRate_50=1\n"
+    fileContent += "BaudRate_125=1\n"
+    fileContent += "BaudRate_250=1\n"
+    fileContent += "BaudRate_500=1\n"
+    fileContent += "BaudRate_800=1\n"
+    fileContent += "BaudRate_1000=1\n"
+    # Select BootUp type from the informations given by user
+    fileContent += "SimpleBootUpMaster=%s\n"%BOOL_TRANSLATE[nodetype == "master"]
+    fileContent += "SimpleBootUpSlave=%s\n"%BOOL_TRANSLATE[nodetype == "slave"]
+    # CANFestival characteristics
+    fileContent += "Granularity=8\n"
+    fileContent += "DynamicChannelsSupported=0\n"
+    fileContent += "CompactPDO=0\n"
+    fileContent += "GroupMessaging=0\n"
+    # Calculate receive and tranmit PDO numbers with the entry available
+    fileContent += "NrOfRXPDO=%d\n"%len([idx for idx in entries if 0x1400 <= idx <= 0x15FF])
+    fileContent += "NrOfTXPDO=%d\n"%len([idx for idx in entries if 0x1400 <= idx <= 0x15FF])
+    # LSS not supported as soon as DS-302 was not fully implemented
+    fileContent += "LSS_Supported=0\n"
+    
+    # Generate Dummy Usage section
+    fileContent += "\n[DummyUsage]\n"
+    fileContent += "Dummy0001=0\n"
+    fileContent += "Dummy0002=1\n"
+    fileContent += "Dummy0003=1\n"
+    fileContent += "Dummy0004=1\n"
+    fileContent += "Dummy0005=1\n"
+    fileContent += "Dummy0006=1\n"
+    fileContent += "Dummy0007=1\n"
+
+    # Generate Comments section
+    fileContent += "\n[Comments]\n"
+    fileContent += "Lines=0\n"
+    
+    # List of entry by type (Mandatory, Optional or Manufacturer
+    mandatories = []
+    optionals = []
+    manufacturers = []
+    
+    # For each entry, we generate the entry section or sections if there is subindexes
+    for entry in entries:
+        # Extract infos and values for the entry
+        entry_infos = Manager.GetEntryInfos(entry)
+        values = Manager.GetCurrentEntry(entry)
+        # Define section name
+        text = "\n[%X]\n"%entry
+        # If there is only one value, it's a VAR entry
+        if type(values) != ListType:
+            # Extract the informations of the first subindex
+            subentry_infos = Manager.GetSubentryInfos(entry, 0)
+            # Generate EDS informations for the entry
+            text += "ParameterName=%s\n"%subentry_infos["name"]
+            text += "ObjectType=0x7\n"
+            text += "DataType=0x%4.4X\n"%subentry_infos["type"]
+            text += "AccessType=%s\n"%subentry_infos["access"]
+            text += "DefaultValue=%s\n"%values
+            text += "PDOMapping=%s\n"%BOOL_TRANSLATE[subentry_infos["pdo"]]
+        else:
+            # Generate EDS informations for the entry
+            text += "ParameterName=%s\n"%entry_infos["name"]
+            if entry_infos["struct"] & node.OD_IdenticalSubindexes:
+                text += "ObjectType=0x9\n"
+            else:
+                text += "ObjectType=0x8\n"
+            
+            # Generate EDS informations for subindexes of the entry in a separate text
+            subtext = ""
+            # Reset number of subindex defined 
+            nb_subentry = 0
+            for subentry, value in enumerate(values):
+                # Extract the informations of each subindex
+                subentry_infos = Manager.GetSubentryInfos(entry, subentry)
+                # If entry is not for the compatibility, generate informations for subindex
+                if subentry_infos["name"] != "Compatibility Entry":
+                    subtext += "\n[%Xsub%X]\n"%(entry, subentry)
+                    subtext += "ParameterName=%s\n"%subentry_infos["name"]
+                    subtext += "ObjectType=0x7\n"
+                    subtext += "DataType=0x%4.4X\n"%subentry_infos["type"]
+                    subtext += "AccessType=%s\n"%subentry_infos["access"]
+                    subtext += "DefaultValue=%s\n"%value
+                    subtext += "PDOMapping=%s\n"%BOOL_TRANSLATE[subentry_infos["pdo"]]
+                    # Increment number of subindex defined 
+                    nb_subentry += 1
+            # Write number of subindex defined for the entry
+            text += "SubNumber=%d\n"%nb_subentry
+            # Write subindex definitions
+            text += subtext
+        
+        # Then we add the entry in the right list
+        
+        # First case, entry is between 0x2000 and 0x5FFF, then it's a manufacturer entry
+        if 0x2000 <= entry <= 0x5FFF:
+            manufacturers.append(entry)
+        # Second case, entry is required, then it's a mandatory entry
+        elif entry_infos["need"]:
+            mandatories.append(entry)
+        # In any other case, it's an optional entry
+        else:
+            optionals.append(entry)
+        # Save text of the entry in the dictiionary of contents
+        indexContents[entry] = text
+    
+    # Before generate File Content we sort the entry list
+    manufacturers.sort()
+    mandatories.sort()
+    optionals.sort()
+    
+    # Generate Definition of mandatory objects
+    fileContent += "\n[MandatoryObjects]\n"
+    fileContent += "SupportedObjects=%d\n"%len(mandatories)
+    for idx, entry in enumerate(mandatories):
+        fileContent += "%d=0x%4.4X\n"%(idx, entry)
+    # Write mandatory entries
+    for entry in mandatories:
+        fileContent += indexContents[entry]
+    
+    # Generate Definition of optional objects
+    fileContent += "\n[OptionalObjects]\n"
+    fileContent += "SupportedObjects=%d\n"%len(optionals)
+    for idx, entry in enumerate(optionals):
+        fileContent += "%d=0x%4.4X\n"%(idx, entry)
+    # Write optional entries
+    for entry in optionals:
+        fileContent += indexContents[entry]
+
+    # Generate Definition of manufacturer objects
+    fileContent += "\n[ManufacturerObjects]\n"
+    fileContent += "SupportedObjects=%d\n"%len(manufacturers)
+    for idx, entry in enumerate(manufacturers):
+        fileContent += "%d=0x%4.4X\n"%(idx, entry)
+    # Write manufacturer entries
+    for entry in manufacturers:
+        fileContent += indexContents[entry]
+    
+    # Return File Content
+    return fileContent
+
+
+# Function that generates EDS file from current node edited
+def GenerateEDSFile(filepath, manager):
+    global Manager
+    Manager = manager
+    try:
+        # Generate file content
+        content = GenerateFileContent(filepath)
+        # Write file
+        WriteFile(filepath, content)
+        return None
+    except ValueError, message:
+        return "Unable to generate EDS file\n%s"%message
+    
+
+# Function that generates Node from an EDS file
+def GenerateNode(filepath, manager, cwd):
+    global Node
+    global Manager
+    Manager = manager
+    # Create a new node
+    Node = node.Node()
+    try:
+        # Parse file and extract dictionary of EDS entry
+        eds_dict = ParseFile(filepath)
+        # Extract Profile Number from Device Type entry
+        ProfileNb = eds_dict[0x1000]["DEFAULTVALUE"] & 0x0000ffff
+        # If profile is not DS-301 or DS-302
+        if ProfileNb not in [301, 302]:
+            # Compile Profile name and path to .prf file
+            ProfileName = "DS-%d"%ProfileNb
+            ProfilePath = os.path.join(cwd, "config/%s.prf"%ProfileName)
+            # Verify that profile is available
+            if os.path.isfile(ProfilePath):
+                try:
+                    # Load Profile
+                    execfile(ProfilePath)
+                    Node.SetProfileName(ProfileName)
+                    Node.SetProfile(Mapping)
+                    Node.SetSpecificMenu(AddMenuEntries)
+                except:
+                    pass
+        # Read all entries in the EDS dictionary 
+        for entry, values in eds_dict.items():
+            # All sections with a name in keynames are escaped
+            if entry in SECTION_KEYNAMES:
+                pass
+            else:
+                # Extract informations for the entry
+                entry_infos = Manager.GetEntryInfos(entry, Node)
+                
+                # If no informations are available, then we write them
+                if not entry_infos:
+                    # First case, entry is a VAR
+                    if values["OBJECTTYPE"] == 7:
+                        # Add mapping for entry
+                        Node.AddMappingEntry(entry, name = values["PARAMETERNAME"], struct = 1)
+                        # Add mapping for first subindex
+                        Node.AddMappingEntry(entry, 0, values = {"name" : values["PARAMETERNAME"], 
+                                                                 "type" : values["DATATYPE"], 
+                                                                 "access" : values["ACCESSTYPE"], 
+                                                                 "pdo" : values["PDOMAPPING"] == 1})
+                    # Second case, entry is an ARRAY
+                    elif values["OBJECTTYPE"] == 8:
+                        # Extract maximum subindex number defined
+                        try:
+                            max_subindex = values["subindexes"][0]["DEFAULTVALUE"]
+                        except:
+                            raise SyntaxError, "Error on entry 0x%4.4X:\nSubindex 0 must be defined for an ARRAY entry"%entry
+                        # Add mapping for entry
+                        Node.AddMappingEntry(entry, name = values["PARAMETERNAME"], struct = 3)
+                        # Add mapping for first subindex
+                        Node.AddMappingEntry(entry, 0, values = {"name" : "Number of Entries", "type" : 0x05, "access" : "ro", "pdo" : False})
+                        # Add mapping for other subindexes
+                        for subindex in xrange(1, int(max_subindex) + 1):
+                            # if subindex is defined
+                            if subindex in values["subindexes"]:
+                                Node.AddMappingEntry(entry, subindex, values = {"name" : values["subindexes"][subindex]["PARAMETERNAME"], 
+                                                                                "type" : values["subindexes"][subindex]["DATATYPE"], 
+                                                                                "access" : values["subindexes"][subindex]["ACCESSTYPE"], 
+                                                                                "pdo" : values["subindexes"][subindex]["PDOMAPPING"] == 1})
+                            # if not, we add a mapping for compatibility 
+                            else:
+                                Node.AddMappingEntry(entry, subindex, values = {"name" : "Compatibility Entry", "type" : 0x05, "access" : "rw", "pdo" : False})
+                    # Third case, entry is an RECORD
+                    elif values["OBJECTTYPE"] == 9:
+                        # Verify that the first subindex is defined
+                        if 0 not in values["subindexes"]:
+                            raise SyntaxError, "Error on entry 0x%4.4X:\nSubindex 0 must be defined for a RECORD entry"%entry
+                        # Add mapping for entry
+                        Node.AddMappingEntry(entry, name = values["PARAMETERNAME"], struct = 7)
+                        # Add mapping for first subindex
+                        Node.AddMappingEntry(entry, 0, values = {"name" : "Number of Entries", "type" : 0x05, "access" : "ro", "pdo" : False})
+                        # Verify that second subindex is defined
+                        if 1 in values:
+                            Node.AddMappingEntry(entry, 1, values = {"name" : values["PARAMETERNAME"] + " %d[(sub)]", 
+                                                                     "type" : values["subindexes"][1]["DATATYPE"], 
+                                                                     "access" : values["subindexes"][1]["ACCESSTYPE"], 
+                                                                     "pdo" : values["subindexes"][1]["PDOMAPPING"] == 1})
+                        else:
+                            raise SyntaxError, "Error on entry 0x%4.4X:\nA RECORD entry must have at least 2 subindexes"%entry
+                
+                # Define entry for the new node
+                
+                # First case, entry is a VAR
+                if values["OBJECTTYPE"] == 7:
+                    # Take default value if it is defined
+                    if "DEFAULTVALUE" in values:
+                        value = values["DEFAULTVALUE"]
+                    # Find default value for value type of the entry
+                    else:
+                        value = GetDefaultValue(entry)
+                    Node.AddEntry(entry, 0, value)
+                # Second case, entry is an ARRAY or a RECORD
+                elif values["OBJECTTYPE"] in (8, 9):
+                    # Verify that "Subnumber" attribute is defined and has a valid value
+                    if "SUBNUMBER" in values and values["SUBNUMBER"] > 0:
+                        # Extract maximum subindex number defined
+                        try:
+                            max_subindex = values["subindexes"][0]["DEFAULTVALUE"]
+                        except:
+                            raise SyntaxError, "Error on entry 0x%4.4X:\nSubindex 0 must be defined for an ARRAY or a RECORD entry"%entry
+                        # Define value for all subindexes except the first 
+                        for subindex in xrange(1, int(max_subindex) + 1):
+                            # Take default value if it is defined and entry is defined
+                            if subindex in values["subindexes"] and "DEFAULTVALUE" in values["subindexes"][subindex]:
+                                value = values["subindexes"][subindex]["DEFAULTVALUE"]
+                            # Find default value for value type of the subindex
+                            else:
+                                value = GetDefaultValue(entry, subindex)
+                            Node.AddEntry(entry, subindex, value)
+                    else:
+                        raise SyntaxError, "Array or Record entry 0x%4.4X must have a \"SubNumber\" attribute"%entry
+        return Node
+    except SyntaxError, message:
+        return "Unable to import EDS File\n%s"%message
+
+#-------------------------------------------------------------------------------
+#                             Main Function
+#-------------------------------------------------------------------------------
+
+if __name__ == '__main__':
+    print ParseFile("examples/PEAK MicroMod.eds")
+
--- a/objdictgen/gen_cfile.py	Fri May 04 12:46:09 2007 +0200
+++ b/objdictgen/gen_cfile.py	Fri May 04 13:57:54 2007 +0200
@@ -52,9 +52,11 @@
     result = type_model.match(typename)
     if result:
         values = result.groups()
-        if values[0] in ("UNSIGNED", "INTEGER") and eval(values[1]) in [i * 8 for i in xrange(1, 9)]:
+        if values[0] == "UNSIGNED" and int(values[1]) in [i * 8 for i in xrange(1, 9)]:
             return "UNS%s"%values[1], "", "uint%s"%values[1]
-        elif values[0] == "REAL" and eval(values[1]) in (32, 64):
+        if values[0] == "INTEGER" and int(values[1]) in [i * 8 for i in xrange(1, 9)]:
+            return "INTEGER%s"%values[1], "", "int%s"%values[1]
+        elif values[0] == "REAL" and int(values[1]) in (32, 64):
             return "%s%s"%(values[0], values[1]), "", "real%s"%values[1]
         elif values[0] == "VISIBLE_STRING":
             if values[1] == "":
@@ -215,7 +217,7 @@
                                 sep = ""
                             if typeinfos[2] == "visible_string":
                                 value = "\"%s\""%value
-                            if typeinfos[2] == "domain":
+                            elif typeinfos[2] == "domain":
                                 value = "\"%s\""%''.join(["\\x%2.2x"%ord(char) for char in value])
                             else:
                                 comment = "\t/* %s */"%str(value)
--- a/objdictgen/node.py	Fri May 04 12:46:09 2007 +0200
+++ b/objdictgen/node.py	Fri May 04 13:57:54 2007 +0200
@@ -98,20 +98,20 @@
     0x001A : {"name" : "UNSIGNED56", "struct" : nosub, "size" : 56, "default" : 0, "values" : []},
     0x001B : {"name" : "UNSIGNED64", "struct" : nosub, "size" : 64, "default" : 0, "values" : []},
     0x1000 : {"name" : "Device Type", "struct" : var, "need" : True, "values" : 
-                [{"name" : "Device Type", "type" : 0x04, "access" : 'ro', "pdo" : False}]},
+                [{"name" : "Device Type", "type" : 0x07, "access" : 'ro', "pdo" : False}]},
     0x1001 : {"name" : "Error Register", "struct" : var,  "need" : True, "values" : 
-                [{"name" : "Error Register", "type" : 0x02, "access": 'ro', "pdo" : True}]},
+                [{"name" : "Error Register", "type" : 0x05, "access": 'ro', "pdo" : True}]},
     0x1002 : {"name" : "Manufacturer Status Register", "struct" : var, "need" : False,  "values" :
-                [{"name" : "Manufacturer Status Register", "type" : 0x04, "access" : 'ro', "pdo" : True}]},
+                [{"name" : "Manufacturer Status Register", "type" : 0x07, "access" : 'ro', "pdo" : True}]},
     0x1003 : {"name" : "Pre-defined Error Field", "struct" : rec, "need" : False,  "values" :
-                [{"name" : "Number of Errors", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Standard Error Field", "type" : 0x04, "access" : 'ro', "pdo" : False, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Errors", "type" : 0x05, "access" : 'rw', "pdo" : False},
+                 {"name" : "Standard Error Field", "type" : 0x07, "access" : 'ro', "pdo" : False, "nbmax" : 0xFE}]},
     0x1005 : {"name" : "SYNC COB ID", "struct" : var, "need" : True, "callback" : True, "values" :
-                [{"name" : "SYNC COB ID", "type" : 0x04, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "SYNC COB ID", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
     0x1006 : {"name" : "Communication / Cycle Period", "struct" : var, "need" : False, "callback" : True, "values" :
-                [{"name" : "Communication Cycle Period", "type" : 0x04, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Communication Cycle Period", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
     0x1007 : {"name" : "Synchronous Window Length", "struct" : var, "need" : False, "values" :
-                [{"name" : "Synchronous Window Length", "type" : 0x04, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Synchronous Window Length", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
     0x1008 : {"name" : "Manufacturer Device Name", "struct" : var, "need" : False, "values" :
                 [{"name" : "Manufacturer Device Name", "type" : 0x09, "access" : 'ro', "pdo" : False}]},
     0x1009 : {"name" : "Manufacturer Hardware Version", "struct" : var, "need" : False, "values" :
@@ -119,109 +119,109 @@
     0x100A : {"name" : "Manufacturer Software Version", "struct" : var, "need" : False, "values" :
                 [{"name" : "Manufacturer Software Version", "type" : 0x09, "access" : 'ro', "pdo" : False}]},
     0x100C : {"name" : "Guard Time", "struct" : var, "need" : False, "values" :
-                [{"name" : "Guard Time", "type" : 0x03, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Guard Time", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
     0x100D : {"name" : "Life Time Factor", "struct" : var, "need" : False, "values" :
-                [{"name" : "Life Time Factor", "type" : 0x02, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Life Time Factor", "type" : 0x05, "access" : 'rw', "pdo" : False}]},
     0x1010 : {"name" : "Store parameters", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Save All Parameters", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Save Communication Parameters", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Save Application Parameters", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Save Manufacturer Parameters", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0x7C}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Save All Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "Save Communication Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "Save Application Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "Save Manufacturer Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0x7C}]},
     0x1011 : {"name" : "Restore Default Parameters", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Restore All Default Parameters", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Restore Communication Default Parameters", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Restore Application Default Parameters", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Restore Manufacturer Default Parameters", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0x7C}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Restore All Default Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "Restore Communication Default Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "Restore Application Default Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "Restore Manufacturer Default Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0x7C}]},
     0x1012 : {"name" : "TIME COB ID", "struct" : var, "need" : False, "values" :
-                [{"name" : "TIME COB ID", "type" : 0x04, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "TIME COB ID", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
     0x1013 : {"name" : "High Resolution Timestamp", "struct" : var, "need" : False, "values" :
-                [{"name" : "High Resolution Time Stamp", "type" : 0x04, "access" : 'rw', "pdo" : True}]},
+                [{"name" : "High Resolution Time Stamp", "type" : 0x07, "access" : 'rw', "pdo" : True}]},
     0x1014 : {"name" : "Emergency COB ID", "struct" : var, "need" : False, "values" :
-                [{"name" : "Emergency COB ID", "type" : 0x04, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Emergency COB ID", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
     0x1015 : {"name" : "Inhibit Time Emergency", "struct" : var, "need" : False, "values" :
-                [{"name" : "Inhibit Time Emergency", "type" : 0x03, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Inhibit Time Emergency", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
     0x1016 : {"name" : "Consumer Heartbeat Time", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Consumer Heartbeat Time", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0x7F}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Consumer Heartbeat Time", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0x7F}]},
     0x1017 : {"name" : "Producer Heartbeat Time", "struct" : var, "need" : False, "callback" : True, "values" :
-                [{"name" : "Producer Heartbeat Time", "type" : 0x03, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Producer Heartbeat Time", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
     0x1018 : {"name" : "Identity", "struct" : array, "need" : True, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Vendor ID", "type" : 0x04, "access" : 'ro', "pdo" : False},
-                 {"name" : "Product Code", "type" : 0x04, "access" : 'ro', "pdo" : False},
-                 {"name" : "Revision Number", "type" : 0x04, "access" : 'ro', "pdo" : False},
-                 {"name" : "Serial Number", "type" : 0x04, "access" : 'ro', "pdo" : False}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Vendor ID", "type" : 0x07, "access" : 'ro', "pdo" : False},
+                 {"name" : "Product Code", "type" : 0x07, "access" : 'ro', "pdo" : False},
+                 {"name" : "Revision Number", "type" : 0x07, "access" : 'ro', "pdo" : False},
+                 {"name" : "Serial Number", "type" : 0x07, "access" : 'ro', "pdo" : False}]},
     0x1020 : {"name" : "Verify Configuration", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Configuration Date", "type" : 0x04, "access" : 'ro', "pdo" : False},
-                 {"name" : "Configuration Time", "type" : 0x04, "access" : 'ro', "pdo" : False}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Configuration Date", "type" : 0x07, "access" : 'ro', "pdo" : False},
+                 {"name" : "Configuration Time", "type" : 0x07, "access" : 'ro', "pdo" : False}]},
 #    0x1021 : {"name" : "Store EDS", "struct" : var, "need" : False, "values" :
 #                [{"name" : "Store EDS", "type" : 0x0F, "access" : 'rw', "pdo" : False}]},
 #    0x1022 : {"name" : "Storage Format", "struct" : var, "need" : False, "values" :
-#                [{"name" : "Storage Format", "type" : 0x04, "access" : 'rw', "pdo" : False}]},
+#                [{"name" : "Storage Format", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
     0x1023 : {"name" : "OS Command", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Command", "type" : 0x0A, "access" : 'rw', "pdo" : False},
-                 {"name" : "Status", "type" : 0x02, "access" : 'ro', "pdo" : False},
+                 {"name" : "Status", "type" : 0x05, "access" : 'ro', "pdo" : False},
                  {"name" : "Reply", "type" : 0x0A, "access" : 'ro', "pdo" : False}]},
     0x1024 : {"name" : "OS Command Mode", "struct" : var, "need" : False, "values" :
-                [{"name" : "OS Command Mode", "type" : 0x02, "access" : 'wo', "pdo" : False}]},
+                [{"name" : "OS Command Mode", "type" : 0x05, "access" : 'wo', "pdo" : False}]},
     0x1025 : {"name" : "OS Debugger Interface", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Command", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Status", "type" : 0x04, "access" : 'ro', "pdo" : False},
-                 {"name" : "Reply", "type" : 0x04, "access" : 'ro', "pdo" : False}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Command", "type" : 0x0A, "access" : 'rw', "pdo" : False},
+                 {"name" : "Status", "type" : 0x07, "access" : 'ro', "pdo" : False},
+                 {"name" : "Reply", "type" : 0x0A, "access" : 'ro', "pdo" : False}]},
     0x1026 : {"name" : "OS Prompt", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "StdIn", "type" : 0x02, "access" : 'wo', "pdo" : True},
-                 {"name" : "StdOut", "type" : 0x02, "access" : 'ro', "pdo" : True},
-                 {"name" : "StdErr", "type" : 0x02, "access" : 'ro', "pdo" : True}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "StdIn", "type" : 0x05, "access" : 'wo', "pdo" : True},
+                 {"name" : "StdOut", "type" : 0x05, "access" : 'ro', "pdo" : True},
+                 {"name" : "StdErr", "type" : 0x05, "access" : 'ro', "pdo" : True}]},
     0x1027 : {"name" : "Module List", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Connected Modules", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Module %d[(sub)]", "type" : 0x03, "access" : 'ro', "pdo" : False, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Connected Modules", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Module %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : False, "nbmax" : 0xFE}]},
     0x1028 : {"name" : "Emergency Consumer", "struct" : rec, "need" : False, "values" :
-                [{"name" : "Number of Consumed Emergency Objects", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Emergency Consumer", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0x7E}]},
+                [{"name" : "Number of Consumed Emergency Objects", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Emergency Consumer", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0x7E}]},
     0x1029 : {"name" : "Error Behavior", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Error Classes", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "Communication Error", "type" : 0x02, "access" : 'rw', "pdo" : False},
-                 {"name" : "Device Profile", "type" : 0x02, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
+                [{"name" : "Number of Error Classes", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "Communication Error", "type" : 0x05, "access" : 'rw', "pdo" : False},
+                 {"name" : "Device Profile", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
     0x1200 : {"name" : "Server SDO Parameter", "struct" : array, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "COB ID Client to Server (Receive SDO)", "type" : 0x04, "access" : 'ro', "pdo" : False},
-                 {"name" : "COB ID Server to Client (Transmit SDO)", "type" : 0x04, "access" : 'ro', "pdo" : False}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "COB ID Client to Server (Receive SDO)", "type" : 0x07, "access" : 'ro', "pdo" : False},
+                 {"name" : "COB ID Server to Client (Transmit SDO)", "type" : 0x07, "access" : 'ro', "pdo" : False}]},
     0x1201 : {"name" : "Additional Server SDO %d Parameter[(idx)]", "struct" : pluriarray, "incr" : 1, "nbmax" : 0x7F, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "COB ID Client to Server (Receive SDO)", "type" : 0x04, "access" : 'ro', "pdo" : False},
-                 {"name" : "COB ID Server to Client (Transmit SDO)", "type" : 0x04, "access" : 'ro', "pdo" : False},
-                 {"name" : "Node ID of the SDO Client", "type" : 0x04, "access" : 'ro', "pdo" : False}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "COB ID Client to Server (Receive SDO)", "type" : 0x07, "access" : 'ro', "pdo" : False},
+                 {"name" : "COB ID Server to Client (Transmit SDO)", "type" : 0x07, "access" : 'ro', "pdo" : False},
+                 {"name" : "Node ID of the SDO Client", "type" : 0x05, "access" : 'ro', "pdo" : False}]},
     0x1280 : {"name" : "Client SDO %d Parameter[(idx)]", "struct" : pluriarray, "incr" : 1, "nbmax" : 0x100, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "COB ID Client to Server (Transmit SDO)", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "COB ID Server to Client (Receive SDO)", "type" : 0x04, "access" : 'rw', "pdo" : False},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "COB ID Client to Server (Transmit SDO)", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "COB ID Server to Client (Receive SDO)", "type" : 0x07, "access" : 'rw', "pdo" : False},
                  {"name" : "Node ID of the SDO Server", "type" : 0x04, "access" : 'rw', "pdo" : False}]},
     0x1400 : {"name" : "Receive PDO %d Parameter[(idx)]", "struct" : pluriarray, "incr" : 1, "nbmax" : 0x200, "need" : False, "values" :
-                [{"name" : "Highest SubIndex Supported", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "COB ID used by PDO", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Transmission Type", "type" : 0x02, "access" : 'rw', "pdo" : False},
-                 {"name" : "Inhibit Time", "type" : 0x03, "access" : 'rw', "pdo" : False},
-                 {"name" : "Compatibility Entry", "type" : 0x03, "access" : 'rw', "pdo" : False},
-                 {"name" : "Event Timer", "type" : 0x03, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Highest SubIndex Supported", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "COB ID used by PDO", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "Transmission Type", "type" : 0x05, "access" : 'rw', "pdo" : False},
+                 {"name" : "Inhibit Time", "type" : 0x06, "access" : 'rw', "pdo" : False},
+                 {"name" : "Compatibility Entry", "type" : 0x05, "access" : 'rw', "pdo" : False},
+                 {"name" : "Event Timer", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
     0x1600 : {"name" : "Receive PDO %d Mapping[(idx)]", "struct" : plurirec, "incr" : 1, "nbmax" : 0x200, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'rw', "pdo" : False},
-                 {"name" : "PDO %d Mapping for an application object %d[(idx,sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0x40}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'rw', "pdo" : False},
+                 {"name" : "PDO %d Mapping for an application object %d[(idx,sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0x40}]},
     0x1800 : {"name" : "Transmit PDO %d Parameter[(idx)]", "struct" : pluriarray, "incr" : 1, "nbmax" : 0x200, "need" : False, "values" :
-                [{"name" : "Highest SubIndex Supported", "type" : 0x02, "access" : 'ro', "pdo" : False},
-                 {"name" : "COB ID used by PDO", "type" : 0x04, "access" : 'rw', "pdo" : False},
-                 {"name" : "Transmission Type", "type" : 0x02, "access" : 'rw', "pdo" : False},
-                 {"name" : "Inhibit Time", "type" : 0x03, "access" : 'rw', "pdo" : False},
-                 {"name" : "Compatibility Entry", "type" : 0x03, "access" : 'rw', "pdo" : False},
-                 {"name" : "Event Timer", "type" : 0x03, "access" : 'rw', "pdo" : False}]},
+                [{"name" : "Highest SubIndex Supported", "type" : 0x05, "access" : 'ro', "pdo" : False},
+                 {"name" : "COB ID used by PDO", "type" : 0x07, "access" : 'rw', "pdo" : False},
+                 {"name" : "Transmission Type", "type" : 0x05, "access" : 'rw', "pdo" : False},
+                 {"name" : "Inhibit Time", "type" : 0x06, "access" : 'rw', "pdo" : False},
+                 {"name" : "Compatibility Entry", "type" : 0x05, "access" : 'rw', "pdo" : False},
+                 {"name" : "Event Timer", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
     0x1A00 : {"name" : "Transmit PDO %d Mapping[(idx)]", "struct" : plurirec, "incr" : 1, "nbmax" : 0x200, "need" : False, "values" :
-                [{"name" : "Number of Entries", "type" : 0x02, "access" : 'rw', "pdo" : False},
-                 {"name" : "PDO %d Mapping for a process data variable %d[(idx,sub)]", "type" : 0x04, "access" : 'rw', "pdo" : False, "nbmax" : 0x40}]},
+                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'rw', "pdo" : False},
+                 {"name" : "PDO %d Mapping for a process data variable %d[(idx,sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0x40}]},
 }
 
 #-------------------------------------------------------------------------------
@@ -235,10 +235,11 @@
 
 class Node:
     
-    def __init__(self, name = "", type = "slave", id = 0, profilename = "DS-301", profile = {}, specificmenu = []):
+    def __init__(self, name = "", type = "slave", id = 0, description = "", profilename = "DS-301", profile = {}, specificmenu = []):
         self.Name = name
         self.Type = type
         self.ID = id
+        self.Description = description
         self.ProfileName = profilename
         self.Profile = profile
         self.SpecificMenu = specificmenu
@@ -284,6 +285,21 @@
         self.ID = id
 
     """
+    Return the node description
+    """
+    def GetNodeDescription(self):
+        if getattr(self, "Description", False):
+            return self.Description
+        else:
+            return ""
+    
+    """
+    Define the node description
+    """
+    def SetNodeDescription(self, description):
+        self.Description = description
+
+    """
     Return the Specific Profile Name
     """
     def GetProfileName(self):
--- a/objdictgen/nodemanager.py	Fri May 04 12:46:09 2007 +0200
+++ b/objdictgen/nodemanager.py	Fri May 04 13:57:54 2007 +0200
@@ -26,7 +26,7 @@
 setParanoia(0)
 
 from node import *
-import eds_in, gen_cfile
+import eds_utils, gen_cfile
 
 from types import *
 import os, re
@@ -300,12 +300,13 @@
     """
     Constructor
     """
-    def __init__(self):
+    def __init__(self, cwd):
         self.LastNewIndex = 0
         self.FilePaths = []
         self.FileNames = []
         self.NodeIndex = -1
         self.CurrentNode = None
+        self.ScriptDirectory = cwd
         self.UndoBuffers = []
 
 #-------------------------------------------------------------------------------
@@ -358,17 +359,18 @@
     """
     Create a new node and add a new buffer for storing it
     """
-    def CreateNewNode(self, name, id, type, profile, filepath, NMT, options):
+    def CreateNewNode(self, name, id, type, description, profile, filepath, NMT, options):
         # Create a new node
         node = Node()
         # Try to load profile given
         result = self.LoadProfile(profile, filepath, node)
-        if not IsOfType(result, StringType):
+        if not result:
             # if success, initialising node
             self.CurrentNode = node
             self.CurrentNode.SetNodeName(name)
             self.CurrentNode.SetNodeID(id)
             self.CurrentNode.SetNodeType(type)
+            self.CurrentNode.SetNodeDescription(description)
             AddIndexList = self.GetMandatoryIndexes()
             if NMT == "NodeGuarding":
                 AddIndexList.extend([0x100C, 0x100D])
@@ -376,12 +378,13 @@
                 AddIndexList.append(0x1017)
             for option in options:
                 if option == "DS302":
+                    DS302Path = os.path.join(self.ScriptDirectory, "config/DS-302.prf")
                     # Charging DS-302 profile if choosen by user
-                    if os.path.isfile("config/DS-302.prf"):
+                    if os.path.isfile(DS302Path):
                         try:
-                        	execfile("config/DS-302.prf")
-                        	self.CurrentNode.SetDS302Profile(Mapping)
-                        	self.CurrentNode.ExtendSpecificMenu(AddMenuEntries)
+                            execfile(DS302Path)
+                            self.CurrentNode.SetDS302Profile(Mapping)
+                            self.CurrentNode.ExtendSpecificMenu(AddMenuEntries)
                         except:
                             return "Problem with DS-302! Syntax Error."
                     else:
@@ -417,15 +420,15 @@
                 node.SetProfileName(profile)
                 node.SetProfile(Mapping)
                 node.SetSpecificMenu(AddMenuEntries)
-                return True
+                return None
             except:
-                return "Bad OD Profile file!\nSyntax Error."
+                return "Syntax Error\nBad OD Profile file!."
         else:
             # Default profile
             node.SetProfileName("None")
             node.SetProfile({})
             node.SetSpecificMenu([])
-            return True
+            return None
 
     """
     Open a file and store it in a new buffer
@@ -473,25 +476,33 @@
         return False
 
     """
-    Import a xml file and store it in a new buffer if no node edited
-    """
-    def ImportCurrentFromFile(self, filepath):
+    Import an eds file and store it in a new buffer if no node edited
+    """
+    def ImportCurrentFromEDSFile(self, filepath):
         # Generate node from definition in a xml file
-        node = eds_in.GenerateNode(filepath, self)
-        if node:
-            self.CurrentNode = node
+        result = eds_utils.GenerateNode(filepath, self, self.ScriptDirectory)
+        if isinstance(result, Node):
+            self.CurrentNode = result
             self.GenerateTypeList()
             self.GenerateMapList()
             if len(self.UndoBuffers) == 0:
                 self.AddNodeBuffer()
                 self.SetCurrentFilePath("")
             self.BufferCurrentNode()
-        return result
+            return None
+        else:
+            return result
+    
+    """
+    Export to an eds file and store it in a new buffer if no node edited
+    """
+    def ExportCurrentToEDSFile(self, filepath):
+        return eds_utils.GenerateEDSFile(filepath, self)
     
     """
     Build the C definition of Object Dictionary for current node 
     """
-    def ExportCurrentToFile(self, filepath):
+    def ExportCurrentToCFile(self, filepath):
         return gen_cfile.GenerateFile(filepath, self)
 
 #-------------------------------------------------------------------------------
@@ -645,6 +656,7 @@
             self.RemoveCurrentVariable(index)
         self.BufferCurrentNode()
 
+
     """
     Remove an entry from current node. Analize the index to perform the correct
     method
@@ -771,13 +783,18 @@
         if self.CurrentNode and self.CurrentNode.IsEntry(index):
             if name == "value":
                 if editor == "map":
-                    value = eval("0x%s"%self.NameTranslation[value])
-                    self.CurrentNode.SetEntry(index, subIndex, value)
+                    try:
+                        value = int(self.NameTranslation[value], 16)
+                        self.CurrentNode.SetEntry(index, subIndex, value)
+                    except:
+                        pass
                 elif editor == "bool":
                     value = value == "True"
                     self.CurrentNode.SetEntry(index, subIndex, value)
                 elif editor == "time":
                     self.CurrentNode.SetEntry(index, subIndex, value)
+                elif editor == "number":
+                    self.CurrentNode.SetEntry(index, subIndex, value)
                 elif editor == "domain":
                     try:
                         if len(value) % 2 != 0:
@@ -796,7 +813,7 @@
                         type = self.CurrentNode.GetEntry(type)[1]
                     if dic[type] == 0:
                         try:
-                            value = eval(value, {})
+                            value = int(value, 16)
                             self.CurrentNode.SetEntry(index, subIndex, value)
                         except:
                             pass
@@ -1007,12 +1024,14 @@
         name = self.CurrentNode.GetNodeName()
         id = self.CurrentNode.GetNodeID()
         type = self.CurrentNode.GetNodeType()
-        return name, id, type
+        description = self.CurrentNode.GetNodeDescription()
+        return name, id, type, description
         
-    def SetCurrentNodeInfos(self, name, id, type):
+    def SetCurrentNodeInfos(self, name, id, type, description):
         self.CurrentNode.SetNodeName(name)
         self.CurrentNode.SetNodeID(id)
         self.CurrentNode.SetNodeType(type)
+        self.CurrentNode.SetNodeDescription(description)
         self.BufferCurrentNode()
 
     def GetCurrentProfileName(self):
@@ -1142,10 +1161,12 @@
                         result = type_model.match(dic["type"])
                         if result:
                             values = result.groups()
-                            if values[0] in ["INTEGER", "UNSIGNED"]:
+                            if values[0] == "UNSIGNED":
                                 format = "0x%0" + str(int(values[1])/4) + "X"
                                 dic["value"] = format%dic["value"]
                                 editor["value"] = "string"
+                            if values[0] == "INTEGER":
+                                editor["value"] = "number"
                             elif values[0] == "REAL":
                                 editor["value"] = "float"
                             elif values[0] == "VISIBLE_STRING":
@@ -1153,7 +1174,7 @@
                         result = range_model.match(dic["type"])
                         if result:
                             values = result.groups()
-                            if values[0] in ("UNSIGNED", "REAL"):
+                            if values[0] in ["UNSIGNED", "INTEGER", "REAL"]:
                                 editor["min"] = values[2]
                                 editor["max"] = values[3]
                 editors.append(editor)
@@ -1170,74 +1191,81 @@
         customisabletypes = self.GetCustomisableTypes()
         return values, customisabletypes[values[1]][1]
 
-    def GetEntryName(self, index, node = True):
+    def GetEntryName(self, index, node = None):
         result = None
-        if node:
-            NodeMappings = self.CurrentNode.GetMappings()
-            i = 0
-            while not result and i < len(NodeMappings):
-                result = FindEntryName(index, NodeMappings[i])
-                i += 1
+        if node == None:
+            node = self.CurrentNode
+        NodeMappings = node.GetMappings()
+        i = 0
+        while not result and i < len(NodeMappings):
+            result = FindEntryName(index, NodeMappings[i])
+            i += 1
         if result == None:
             result = FindEntryName(index, MappingDictionary)
         return result
     
-    def GetEntryInfos(self, index, node = True):
+    def GetEntryInfos(self, index, node = None):
         result = None
-        if node:
-            NodeMappings = self.CurrentNode.GetMappings()
-            i = 0
-            while not result and i < len(NodeMappings):
-                result = FindEntryInfos(index, NodeMappings[i])
-                i += 1
+        if node == None:
+            node = self.CurrentNode
+        NodeMappings = node.GetMappings()
+        i = 0
+        while not result and i < len(NodeMappings):
+            result = FindEntryInfos(index, NodeMappings[i])
+            i += 1
         if result == None:
             result = FindEntryInfos(index, MappingDictionary)
         return result
     
-    def GetSubentryInfos(self, index, subIndex, node = True):
+    def GetSubentryInfos(self, index, subIndex, node = None):
         result = None
-        if node:
-            NodeMappings = self.CurrentNode.GetMappings()
-            i = 0
-            while not result and i < len(NodeMappings):
-                result = FindSubentryInfos(index, subIndex, NodeMappings[i])
-                if result:
-                    result["user_defined"] = i == len(NodeMappings) - 1 and index >= 0x1000
-                i += 1
+        if node == None:
+            node = self.CurrentNode
+        NodeMappings = node.GetMappings()
+        i = 0
+        while not result and i < len(NodeMappings):
+            result = FindSubentryInfos(index, subIndex, NodeMappings[i])
+            if result:
+                result["user_defined"] = i == len(NodeMappings) - 1 and index >= 0x1000
+            i += 1
         if result == None:    
             result = FindSubentryInfos(index, subIndex, MappingDictionary)
             if result:
                 result["user_defined"] = False
         return result
     
-    def GetTypeIndex(self, typename, node = True):
+    def GetTypeIndex(self, typename, node = None):
         result = None
-        if node:
-            NodeMappings = self.CurrentNode.GetMappings()
-            i = 0
-            while not result and i < len(NodeMappings):
-                result = FindTypeIndex(typename, NodeMappings[i])
-                i += 1
+        if node == None:
+            node = self.CurrentNode
+        NodeMappings = node.GetMappings()
+        i = 0
+        while not result and i < len(NodeMappings):
+            result = FindTypeIndex(typename, NodeMappings[i])
+            i += 1
         if result == None:
             result = FindTypeIndex(typename, MappingDictionary)
         return result
     
-    def GetTypeName(self, typeindex, node = True):
+    def GetTypeName(self, typeindex, node = None):
         result = None
-        if node:
-            NodeMappings = self.CurrentNode.GetMappings()
-            i = 0
-            while not result and i < len(NodeMappings):
-                result = FindTypeName(typeindex, NodeMappings[i])
-                i += 1
+        if node == None:
+            node = self.CurrentNode
+        NodeMappings = node.GetMappings()
+        i = 0
+        while not result and i < len(NodeMappings):
+            result = FindTypeName(typeindex, NodeMappings[i])
+            i += 1
         if result == None:
             result = FindTypeName(typeindex, MappingDictionary)
         return result
     
-    def GetTypeDefaultValue(self, typeindex, node = True):
+    def GetTypeDefaultValue(self, typeindex, node = None):
         result = None
+        if node == None:
+            node = self.CurrentNode
         if node:
-            NodeMappings = self.CurrentNode.GetMappings()
+            NodeMappings = node.GetMappings()
             i = 0
             while not result and i < len(NodeMappings):
                 result = FindTypeDefaultValue(typeindex, NodeMappings[i])
@@ -1246,26 +1274,30 @@
             result = FindTypeDefaultValue(typeindex, MappingDictionary)
         return result
     
-    def GetTypeList(self, node = True):
+    def GetTypeList(self, node = None):
         list = FindTypeList(MappingDictionary)
-        if node:
-            for NodeMapping in self.CurrentNode.GetMappings():
-                list.extend(FindTypeList(NodeMapping))
+        if node == None:
+            node = self.CurrentNode
+        for NodeMapping in self.CurrentNode.GetMappings():
+            list.extend(FindTypeList(NodeMapping))
         list.sort()
         return list
     
-    def GetMapVariableList(self):
+    def GetMapVariableList(self, node = None):
         list = FindMapVariableList(MappingDictionary, self)
-        for NodeMapping in self.CurrentNode.GetMappings():
+        if node == None:
+            node = self.CurrentNode
+        for NodeMapping in node.GetMappings():
             list.extend(FindMapVariableList(NodeMapping, self))
         list.sort()
         return list
     
-    def GetMandatoryIndexes(self, node = True):
+    def GetMandatoryIndexes(self, node = None):
         list = FindMandatoryIndexes(MappingDictionary)
-        if node:
-            for NodeMapping in self.CurrentNode.GetMappings():
-                list.extend(FindMandatoryIndexes(NodeMapping))
+        if node == None:
+            node = self.CurrentNode
+        for NodeMapping in node.GetMappings():
+            list.extend(FindMandatoryIndexes(NodeMapping))
         return list
     
     def GetCustomisableTypes(self):
@@ -1280,4 +1312,3 @@
             return self.CurrentNode.GetSpecificMenu()
         return []
 
-    
\ No newline at end of file
--- a/objdictgen/objdictedit.py	Fri May 04 12:46:09 2007 +0200
+++ b/objdictgen/objdictedit.py	Fri May 04 13:57:54 2007 +0200
@@ -752,12 +752,12 @@
                 dialog = wxTextEntryDialog(self, "Number of subindexes to add:",
                              "Add subindexes", "1", wxOK|wxCANCEL)
                 if dialog.ShowModal() == wxID_OK:
-                    number = eval(dialog.GetValue())
-                    if type(number) == IntType:
+                    try:
+                        number = int(dialog.GetValue())
                         self.Manager.AddSubentriesToCurrent(index, number)
                         self.Parent.RefreshBufferState()
                         self.RefreshIndexList()
-                    else:
+                    except:
                         message = wxMessageDialog(self, "An integer is required!", "ERROR", wxOK|wxICON_ERROR)
                         message.ShowModal()
                         message.Destroy()
@@ -772,12 +772,12 @@
                 dialog = wxTextEntryDialog(self, "Number of subindexes to delete:",
                              "Delete subindexes", "1", wxOK|wxCANCEL)
                 if dialog.ShowModal() == wxID_OK:
-                    number = eval(dialog.GetValue())
-                    if type(number) == IntType:
+                    try:
+                        number = int(dialog.GetValue())
                         self.Manager.RemoveSubentriesFromCurrent(index, number)
                         self.Parent.RefreshBufferState()
                         self.RefreshIndexList()
-                    else:
+                    except:
                         message = wxMessageDialog(self, "An integer is required!", "ERROR", wxOK|wxICON_ERROR)
                         message.ShowModal()
                         message.Destroy()
@@ -797,7 +797,8 @@
  wxID_OBJDICTEDITFILEMENUITEMS2, wxID_OBJDICTEDITFILEMENUITEMS4, 
  wxID_OBJDICTEDITFILEMENUITEMS5, wxID_OBJDICTEDITFILEMENUITEMS6, 
  wxID_OBJDICTEDITFILEMENUITEMS7, wxID_OBJDICTEDITFILEMENUITEMS8,
-] = [wx.NewId() for _init_coll_FileMenu_Items in range(8)]
+ wxID_OBJDICTEDITFILEMENUITEMS9,
+] = [wx.NewId() for _init_coll_FileMenu_Items in range(9)]
 
 [wxID_OBJDICTEDITEDITMENUITEMS0, wxID_OBJDICTEDITEDITMENUITEMS1, 
  wxID_OBJDICTEDITEDITMENUITEMS2, wxID_OBJDICTEDITEDITMENUITEMS4, 
@@ -885,6 +886,8 @@
         parent.AppendSeparator()
         parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS7,
               kind=wx.ITEM_NORMAL, text='Import EDS file')
+        parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS9,
+              kind=wx.ITEM_NORMAL, text='Export to EDS file')
         parent.Append(help='', id=wxID_OBJDICTEDITFILEMENUITEMS8,
               kind=wx.ITEM_NORMAL, text='Build Dictionary\tCTRL+B')
         parent.AppendSeparator()
@@ -902,10 +905,12 @@
               id=wxID_OBJDICTEDITFILEMENUITEMS5)
         self.Bind(wx.EVT_MENU, self.OnSaveAsMenu,
               id=wxID_OBJDICTEDITFILEMENUITEMS6)
-        self.Bind(wx.EVT_MENU, self.OnImportMenu,
+        self.Bind(wx.EVT_MENU, self.OnImportEDSMenu,
               id=wxID_OBJDICTEDITFILEMENUITEMS7)
-        self.Bind(wx.EVT_MENU, self.OnExportMenu,
+        self.Bind(wx.EVT_MENU, self.OnExportCMenu,
               id=wxID_OBJDICTEDITFILEMENUITEMS8)
+        self.Bind(wx.EVT_MENU, self.OnExportEDSMenu,
+              id=wxID_OBJDICTEDITFILEMENUITEMS9)
 
     def _init_coll_AddMenu_Items(self, parent):
         # generated method, don't edit
@@ -989,7 +994,7 @@
         self._init_ctrls(parent)
         self.HtmlFrameOpened = []
         
-        self.Manager = NodeManager()
+        self.Manager = NodeManager(ScriptDirectory)
         for filepath in filesOpen:
             self.Manager.OpenFileInCurrent(filepath)
             new_editingpanel = EditingPanel(self, self.Manager)
@@ -1168,48 +1173,54 @@
                 self.HelpBar.SetStatusText("", i)
 
     def RefreshMainMenu(self):
-        if self.FileOpened.GetPageCount() > 0:
-            self.menuBar1.EnableTop(1, True)
-            self.menuBar1.EnableTop(2, True)
-            self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS1, True)
-            self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS2, True)
-            self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS6, True)
-            self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS8, True)
-        else:
-            self.menuBar1.EnableTop(1, False)      
-            self.menuBar1.EnableTop(2, False)
-            self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS1, False)
-            self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS2, False)
-            self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS6, False)
-            self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS8, False)
+        if self.FileMenu:
+            if self.FileOpened.GetPageCount() > 0:
+                self.menuBar1.EnableTop(1, True)
+                self.menuBar1.EnableTop(2, True)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS1, True)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS2, True)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS6, True)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS8, True)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS9, True)
+            else:
+                self.menuBar1.EnableTop(1, False)      
+                self.menuBar1.EnableTop(2, False)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS1, False)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS2, False)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS6, False)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS8, False)
+                self.FileMenu.Enable(wxID_OBJDICTEDITFILEMENUITEMS9, False)
 
     def RefreshEditMenu(self):
-        if self.FileOpened.GetPageCount() > 0:
-            undo, redo = self.Manager.GetCurrentBufferState()
-            self.EditMenu.FindItemByPosition(2).Enable(undo)
-            self.EditMenu.FindItemByPosition(3).Enable(redo)
-        else:
-            self.EditMenu.FindItemByPosition(2).Enable(False)
-            self.EditMenu.FindItemByPosition(3).Enable(False)
+        if self.FileMenu:
+            if self.FileOpened.GetPageCount() > 0:
+                undo, redo = self.Manager.GetCurrentBufferState()
+                self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS1, undo)
+                self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS0, redo)
+            else:
+                self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS1, False)
+                self.EditMenu.Enable(wxID_OBJDICTEDITEDITMENUITEMS0, False)
 
     def RefreshProfileMenu(self):
-        profile = self.Manager.GetCurrentProfileName()
-        edititem = self.EditMenu.FindItemByPosition(8)
-        length = self.AddMenu.GetMenuItemCount()
-        for i in xrange(length-6):
-            additem = self.AddMenu.FindItemByPosition(6)
-            self.AddMenu.Delete(additem.GetId())
-        if profile not in ("None", "DS-301"):
-            edititem.SetText("%s Profile"%profile)
-            edititem.Enable(True)
-            self.AddMenu.AppendSeparator()
-            for text, indexes in self.Manager.GetCurrentSpecificMenu():
-                new_id = wx.NewId()
-                self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text)
-                self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id)
-        else:
-            edititem.SetText("Other Profile")
-            edititem.Enable(False)
+        if self.EditMenu:
+            profile = self.Manager.GetCurrentProfileName()
+            edititem = self.EditMenu.FindItemById(wxID_OBJDICTEDITEDITMENUITEMS7)
+            if edititem:
+                length = self.AddMenu.GetMenuItemCount()
+                for i in xrange(length-6):
+                    additem = self.AddMenu.FindItemByPosition(6)
+                    self.AddMenu.Delete(additem.GetId())
+                if profile not in ("None", "DS-301"):
+                    edititem.SetText("%s Profile"%profile)
+                    edititem.Enable(True)
+                    self.AddMenu.AppendSeparator()
+                    for text, indexes in self.Manager.GetCurrentSpecificMenu():
+                        new_id = wx.NewId()
+                        self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text)
+                        self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id)
+                else:
+                    edititem.SetText("Other Profile")
+                    edititem.Enable(False)
         
 
 #-------------------------------------------------------------------------------
@@ -1244,11 +1255,11 @@
         self.FilePath = ""
         dialog = CreateNodeDialog(self)
         if dialog.ShowModal() == wxID_OK:
-            name, id, type = dialog.GetValues()
+            name, id, type, description = dialog.GetValues()
             profile, filepath = dialog.GetProfile()
             NMT = dialog.GetNMTManagement()
             options = dialog.GetOptions()
-            result = self.Manager.CreateNewNode(name, id, type, profile, filepath, NMT, options)
+            result = self.Manager.CreateNewNode(name, id, type, description, profile, filepath, NMT, options)
             if not IsOfType(result, StringType):
                 new_editingpanel = EditingPanel(self, self.Manager)
                 self.FileOpened.AddPage(new_editingpanel, "")
@@ -1364,13 +1375,13 @@
 #                         Import and Export Functions
 #-------------------------------------------------------------------------------
 
-    def OnImportMenu(self, event):
-        dialog = wxFileDialog(self, "Choose a file", os.getcwd(), "",  "XML OD files (*.xml)|*.xml|All files|*.*", wxOPEN|wxCHANGE_DIR)
+    def OnImportEDSMenu(self, event):
+        dialog = wxFileDialog(self, "Choose a file", os.getcwd(), "",  "EDS files (*.eds)|*.eds|All files|*.*", wxOPEN|wxCHANGE_DIR)
         if dialog.ShowModal() == wxID_OK:
             filepath = dialog.GetPath()
             if os.path.isfile(filepath):
-                result = self.Manager.ImportCurrentFromFile(filepath)
-                if result:
+                result = self.Manager.ImportCurrentFromEDSFile(filepath)
+                if not result:
                     if self.FileOpened.GetPageCount() == 0:
                         new_editingpanel = EditingPanel(self, self.Manager)
                         self.FileOpened.AddPage(new_editingpanel, "")
@@ -1382,10 +1393,43 @@
                     message = wxMessageDialog(self, "Import successful", "Information", wxOK|wxICON_INFORMATION)
                     message.ShowModal()
                     message.Destroy()
+                else:
+                    message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
+                    message.ShowModal()
+                    message.Destroy()
+            else:
+                message = wxMessageDialog(self, "\"%s\" is not a valid file!"%filepath, "Error", wxOK|wxICON_ERROR)
+                message.ShowModal()
+                message.Destroy()
         dialog.Destroy()
         event.Skip()
 
-    def OnExportMenu(self, event):
+
+    def OnExportEDSMenu(self, event):
+        dialog = wxFileDialog(self, "Choose a file", os.getcwd(), self.Manager.GetCurrentNodeInfos()[0], "EDS files (*.eds)|*.eds|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT|wxCHANGE_DIR)
+        if dialog.ShowModal() == wxID_OK:
+            filepath = dialog.GetPath()
+            if os.path.isdir(os.path.dirname(filepath)):
+                path, extend = os.path.splitext(filepath)
+                if extend in ("", "."):
+                    filepath = path + ".eds"
+                result = self.Manager.ExportCurrentToEDSFile(filepath)
+                if not result:
+                    message = wxMessageDialog(self, "Export successful", "Information", wxOK|wxICON_INFORMATION)
+                    message.ShowModal()
+                    message.Destroy()
+                else:
+                    message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
+                    message.ShowModal()
+                    message.Destroy()
+            else:
+                message = wxMessageDialog(self, "\"%s\" is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
+                message.ShowModal()
+                message.Destroy()
+        dialog.Destroy()
+        event.Skip()
+
+    def OnExportCMenu(self, event):
         dialog = wxFileDialog(self, "Choose a file", os.getcwd(), self.Manager.GetCurrentNodeInfos()[0],  "CANFestival OD files (*.c)|*.c|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT|wxCHANGE_DIR)
         if dialog.ShowModal() == wxID_OK:
             filepath = dialog.GetPath()
@@ -1393,13 +1437,17 @@
                 path, extend = os.path.splitext(filepath)
                 if extend in ("", "."):
                     filepath = path + ".c"
-                result = self.Manager.ExportCurrentToFile(filepath)
-                if result:
+                result = self.Manager.ExportCurrentToCFile(filepath)
+                if not result:
                     message = wxMessageDialog(self, "Export successful", "Information", wxOK|wxICON_INFORMATION)
                     message.ShowModal()
                     message.Destroy()
+                else:
+                    message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
+                    message.ShowModal()
+                    message.Destroy()
             else:
-                message = wxMessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
+                message = wxMessageDialog(self, "\"%s\" is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
                 message.ShowModal()
                 message.Destroy()
         dialog.Destroy()
@@ -1462,13 +1510,11 @@
 
     def OnNodeInfosMenu(self, event):
         dialog = NodeInfosDialog(self)
-        name,id,type = self.Manager.GetCurrentNodeInfos()
-        profile = self.Manager.GetCurrentProfileName()
-        dialog.SetProfiles([profile])
-        dialog.SetValues(name, id, type, profile)
+        name, id, type, description = self.Manager.GetCurrentNodeInfos()
+        dialog.SetValues(name, id, type, description)
         if dialog.ShowModal() == wxID_OK:
-            name,id,type,profile = dialog.GetValues()
-            self.Manager.SetCurrentNodeInfos(name, id, type)
+            name, id, type, description = dialog.GetValues()
+            self.Manager.SetCurrentNodeInfos(name, id, type, description)
             self.RefreshBufferState()
             self.RefreshProfileMenu()
         event.Skip()
@@ -1755,20 +1801,54 @@
         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_CENTER)
         self.staticText4.Enable(False)
         self.Number.Enable(False)
+        
+        EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
 
     def SetIndex(self, index):
         self.Index.SetValue("0x%04X"%index)
 
+    def OnOK(self, event):
+        error = []
+        try:
+            int(self.Index.GetValue(), 16)
+        except:
+            error.append("Index")
+        if self.radioButton2.GetValue() or self.radioButton3.GetValue():
+            try:
+                int(self.Number.GetValue())
+            except:
+                error.append("Number")
+        if len(error) > 0:
+            text = ""
+            if len(error) > 1:
+                suffix = "s"
+            else:
+                suffix = ""
+            for i, item in enumerate(error):
+                if i == 0:
+                    text += item
+                elif i == len(error) - 1:
+                    text += " and %s"%item
+                else:
+                    text += ", %s"%item
+            message = wxMessageDialog(self, "Form isn't valid. %s must be integer%s!"%(text,suffix), "Error", wxOK|wxICON_ERROR)
+            message.ShowModal()
+            message.Destroy()
+        else:
+            self.EndModal(wxID_OK)
+
     def GetValues(self):
+        name = self.IndexName.GetValue()
+        index = int(self.Index.GetValue(), 16)
         if self.radioButton1.GetValue():
             struct = 1
+            number = None
         elif self.radioButton2.GetValue():
             struct = 3
+            number = int(self.Number.GetValue())
         elif self.radioButton3.GetValue():
             struct = 7
-        name = self.IndexName.GetValue()
-        index = eval(self.Index.GetValue())
-        number = eval(self.Number.GetValue())
+            number = int(self.Number.GetValue())
         return index, name, struct, number
 
     def OnRadioButton1Click(self, event):
@@ -1871,7 +1951,57 @@
         self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL)
         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_CENTER)
         self.TypeDictionary = {}
-        
+
+        EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
+
+    def OnOK(self, event):
+        error = []
+        good = True
+        firstmessage = ""
+        secondmessage = ""
+        name = self.Type.GetStringSelection()
+        if name != "":
+            valuetype = self.TypeDictionary[name][1]
+            if valuetype == 0:
+                try:
+                    int(self.Min.GetValue(), 16)
+                except:
+                    error.append("Minimum")
+                    good = False
+                try:
+                    int(self.Max.GetValue(), 16)
+                except:
+                    error.append("Maximum")
+                    good = False
+            elif valuetype == 1:
+                try:
+                    int(self.Length.GetValue(), 16)
+                except:
+                    error.append("Length")
+                    good = False
+            if len(error) > 0:
+                secondmessage = ". "
+                for i, item in enumerate(error):
+                    if i == 0:
+                        secondmessage += item
+                    elif i == len(error) - 1:
+                        secondmessage += " and %s"%item
+                    else:
+                        secondmessage += ", %s"%item
+                secondmessage += " must be integer"
+                if len(error) > 1:
+                    secondmessage += "s"
+        else:
+            firstmessage = ". A type must be selected"
+            good = False
+        if not good:
+            message = wxMessageDialog(self, "Form isn't valid%s%s%s!"%(firstmessage,secondmessage), "Error", wxOK|wxICON_ERROR)
+            message.ShowModal()
+            message.Destroy()
+            self.Name.SetFocus()
+        else:
+            self.EndModal(wxID_OK)
+
     def SetValues(self, min = None, max = None, length = None):
         if min != None:
             self.Min.SetValue(str(min))
@@ -1926,9 +2056,9 @@
     def GetValues(self):
         name = self.Type.GetStringSelection()
         type = self.TypeDictionary[name][0]
-        min = eval(self.Min.GetValue())
-        max = eval(self.Max.GetValue())
-        length = eval(self.Length.GetValue())
+        min = int(self.Min.GetValue())
+        max = int(self.Max.GetValue())
+        length = int(self.Length.GetValue())
         return type, min, max, length
 
 
@@ -1940,7 +2070,7 @@
 
 [wxID_NODEINFOSDIALOG, wxID_NODEINFOSDIALOGMAINPANEL, 
  wxID_NODEINFOSDIALOGNAME, wxID_NODEINFOSDIALOGNODEID, 
- wxID_NODEINFOSDIALOGPROFILE, wxID_NODEINFOSDIALOGSTATICTEXT1, 
+ wxID_NODEINFOSDIALOGDESCRIPTION, wxID_NODEINFOSDIALOGSTATICTEXT1, 
  wxID_NODEINFOSDIALOGSTATICTEXT2, wxID_NODEINFOSDIALOGSTATICTEXT3, 
  wxID_NODEINFOSDIALOGSTATICTEXT4, wxID_NODEINFOSDIALOGTYPE, 
 ] = [wx.NewId() for _init_ctrls in range(10)]
@@ -1963,13 +2093,13 @@
         # generated method, don't edit
         wx.Dialog.__init__(self, id=wxID_NODEINFOSDIALOG,
               name='NodeInfosDialog', parent=prnt, pos=wx.Point(376, 223),
-              size=wx.Size(249, 250), style=wx.DEFAULT_DIALOG_STYLE,
+              size=wx.Size(300, 300), style=wx.DEFAULT_DIALOG_STYLE,
               title='Node Infos')
-        self.SetClientSize(wx.Size(249, 250))
+        self.SetClientSize(wx.Size(300, 300))
 
         self.MainPanel = wx.Panel(id=wxID_NODEINFOSDIALOGMAINPANEL,
               name='MainPanel', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(231, 264), style=wx.TAB_TRAVERSAL)
+              size=wx.Size(280, 264), style=wx.TAB_TRAVERSAL)
         self.MainPanel.SetAutoLayout(True)
 
         self.staticText1 = wx.StaticText(id=wxID_NODEINFOSDIALOGSTATICTEXT1,
@@ -1978,7 +2108,7 @@
               pos=wx.Point(24, 24), size=wx.Size(156, 17), style=0)
 
         self.Name = wx.TextCtrl(id=wxID_NODEINFOSDIALOGNAME, name='Name',
-              parent=self.MainPanel, pos=wx.Point(24, 48), size=wx.Size(200,
+              parent=self.MainPanel, pos=wx.Point(24, 48), size=wx.Size(250,
               25), style=0, value='')
 
         self.staticText2 = wx.StaticText(id=wxID_NODEINFOSDIALOGSTATICTEXT2,
@@ -1986,7 +2116,7 @@
               pos=wx.Point(24, 80), size=wx.Size(67, 17), style=0)
 
         self.NodeID = wx.TextCtrl(id=wxID_NODEINFOSDIALOGNODEID, name='NodeID',
-              parent=self.MainPanel, pos=wx.Point(24, 104), size=wx.Size(200,
+              parent=self.MainPanel, pos=wx.Point(24, 104), size=wx.Size(250,
               25), style=wx.TE_RIGHT, value='')
 
         self.staticText3 = wx.StaticText(id=wxID_NODEINFOSDIALOGSTATICTEXT3,
@@ -1995,15 +2125,15 @@
 
         self.Type = wx.Choice(choices=[], id=wxID_NODEINFOSDIALOGTYPE,
               name='Type', parent=self.MainPanel, pos=wx.Point(24, 160),
-              size=wx.Size(200, 25), style=0)
+              size=wx.Size(250, 25), style=0)
 
         self.staticText4 = wx.StaticText(id=wxID_NODEINFOSDIALOGSTATICTEXT4,
-              label='Profile:', name='staticText4', parent=self.MainPanel,
-              pos=wx.Point(24, 192), size=wx.Size(47, 17), style=0)
-
-        self.Profile = wx.Choice(choices=[], id=wxID_NODEINFOSDIALOGPROFILE,
-              name='Profile', parent=self.MainPanel, pos=wx.Point(24, 216),
-              size=wx.Size(200, 25), style=0)
+              label='Description:', name='staticText4', parent=self.MainPanel,
+              pos=wx.Point(24, 192), size=wx.Size(71, 17), style=0)
+
+        self.Description = wx.TextCtrl(id=wxID_NODEINFOSDIALOGDESCRIPTION, 
+              name='Description', parent=self.MainPanel, pos=wx.Point(24, 216), 
+              size=wx.Size(250, 25), style=0, value='')
 
         self._init_sizers()
 
@@ -2013,43 +2143,43 @@
         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_CENTER)
         self.Type.Append("master")
         self.Type.Append("slave")
-        self.staticText4.Hide()
-        self.Profile.Hide()
 
         EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
 
     def OnOK(self, event):
         name = self.Name.GetValue()
+        message = ""
         if name != "":
             good = not name[0].isdigit()
             for item in name.split("_"):
                 good &= item.isalnum()
-        else:
-            good = False
-        if not good:
-            message = wxMessageDialog(self, "Node name can't be undefined or start with a digit and must be composed of alphanumerical characters or underscore!", "ERROR", wxOK|wxICON_ERROR)
+            if not good:
+                message = "Node name can't be undefined or start with a digit and must be composed of alphanumerical characters or underscore!"
+        if message != "":
+            try:
+                nodeid = int(self.NodeID.GetValue(), 16)
+            except:
+                message = "Node ID must be integer!"
+        if message != "":
+            message = wxMessageDialog(self, message, "ERROR", wxOK|wxICON_ERROR)
             message.ShowModal()
             message.Destroy()
             self.Name.SetFocus()
         else:
             self.EndModal(wxID_OK)
     
-    def SetProfiles(self, profiles):
-        for profile in profiles:
-            self.Profile.Append(profile)
-    
-    def SetValues(self, name, id, type, profile):
+    def SetValues(self, name, id, type, description):
         self.Name.SetValue(name)
         self.NodeID.SetValue("0x%02X"%id)
         self.Type.SetStringSelection(type)
-        self.Profile.SetStringSelection(profile)
+        self.Description.SetValue(description)
 
     def GetValues(self):
         name = self.Name.GetValue()
-        nodeid = eval(self.NodeID.GetValue())
+        nodeid = int(self.NodeID.GetValue(), 16)
         type = self.Type.GetStringSelection()
-        profile = self.Profile.GetStringSelection()
-        return name, nodeid, type, profile
+        description = self.Description.GetValue()
+        return name, nodeid, type, description
 
 
 
@@ -2066,9 +2196,10 @@
  wxID_CREATENODEDIALOGSAVECONFIG, wxID_CREATENODEDIALOGSTATICTEXT1, 
  wxID_CREATENODEDIALOGSTATICTEXT2, wxID_CREATENODEDIALOGSTATICTEXT3, 
  wxID_CREATENODEDIALOGSTATICTEXT4, wxID_CREATENODEDIALOGSTATICTEXT5, 
- wxID_CREATENODEDIALOGSTATICTEXT6, wxID_CREATENODEDIALOGSTOREEDS, 
+ wxID_CREATENODEDIALOGSTATICTEXT6, wxID_CREATENODEDIALOGSTATICTEXT7,
+ wxID_CREATENODEDIALOGSTOREEDS, wxID_CREATENODEDIALOGDESCRIPTION,
  wxID_CREATENODEDIALOGTYPE, 
-] = [wx.NewId() for _init_ctrls in range(19)]
+] = [wx.NewId() for _init_ctrls in range(21)]
 
 class CreateNodeDialog(wx.Dialog):
     def _init_coll_flexGridSizer1_Items(self, parent):
@@ -2088,9 +2219,9 @@
         # generated method, don't edit
         wx.Dialog.__init__(self, id=wxID_CREATENODEDIALOG,
               name='CreateNodeDialog', parent=prnt, pos=wx.Point(376, 223),
-              size=wx.Size(451, 316), style=wx.DEFAULT_DIALOG_STYLE,
+              size=wx.Size(451, 376), style=wx.DEFAULT_DIALOG_STYLE,
               title='Create a new Node')
-        self.SetClientSize(wx.Size(451, 316))
+        self.SetClientSize(wx.Size(451, 376))
 
         self.MainPanel = wx.Panel(id=wxID_CREATENODEDIALOGMAINPANEL,
               name='MainPanel', parent=self, pos=wx.Point(0, 0),
@@ -2185,7 +2316,15 @@
 #              label='Store EDS', name='StoreEDS', parent=self.MainPanel,
 #              pos=wx.Point(256, 240), size=wx.Size(144, 24), style=0)
 #        self.StoreEDS.SetValue(False)
- 
+
+        self.staticText7 = wx.StaticText(id=wxID_CREATENODEDIALOGSTATICTEXT7,
+              label='Description:', name='staticText7', parent=self.MainPanel,
+              pos=wx.Point(24, 248), size=wx.Size(71, 17), style=0)
+
+        self.Description = wx.TextCtrl(id=wxID_CREATENODEDIALOGDESCRIPTION, 
+              name='Description', parent=self.MainPanel, pos=wx.Point(24, 272), 
+              size=wx.Size(400, 25), style=0, value='')
+
         self._init_sizers()
 
     def __init__(self, parent):
@@ -2196,6 +2335,7 @@
         self.Type.Append("master")
         self.Type.Append("slave")
         self.Type.SetStringSelection("slave")
+        self.Description.SetValue("")
         self.ListProfile = {"None" : ""}
         self.Profile.Append("None")
         self.Directory = os.path.join(ScriptDirectory, "config")
@@ -2214,14 +2354,20 @@
 
     def OnOK(self, event):
         name = self.Name.GetValue()
+        message = ""
         if name != "":
             good = not name[0].isdigit()
             for item in name.split("_"):
                 good &= item.isalnum()
-        else:
-            good = False
-        if not good:
-            message = wxMessageDialog(self, "Node name can't be undefined or start with a digit and must be composed of alphanumerical characters or underscore!", "ERROR", wxOK|wxICON_ERROR)
+            if not good:
+                message = "Node name can't be undefined or start with a digit and must be composed of alphanumerical characters or underscore!"
+        if message != "":
+            try:
+                nodeid = int(self.NodeID.GetValue(), 16)
+            except:
+                message = "Node ID must be an integer!"
+        if message != "":
+            message = wxMessageDialog(self, message, "ERROR", wxOK|wxICON_ERROR)
             message.ShowModal()
             message.Destroy()
             self.Name.SetFocus()
@@ -2232,9 +2378,10 @@
         name = self.Name.GetValue()
         nodeid = 0
         if self.NodeID.GetValue() != "":
-            nodeid = eval(self.NodeID.GetValue())
+            nodeid = int(self.NodeID.GetValue(), 16)
         type = self.Type.GetStringSelection()
-        return name, nodeid, type
+        description = self.Description.GetValue()
+        return name, nodeid, type, description
 
     def GetProfile(self):
         name = self.Profile.GetStringSelection()