# HG changeset patch # User lbessard # Date 1178279874 -7200 # Node ID 988f2b302aa6dc798bc81b74dcc64387dad4159f # Parent 44d812a41d49abdff8ec7f9e69edff45bebace08 Adding support for importing and exporting EDS files diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/config/DS-401.prf --- 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}]} } diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/config/DS-404.prf --- 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])] diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/config/DS-406.prf --- 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" : diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/eds_in.py --- 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") - diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/eds_utils.py --- /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") + diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/gen_cfile.py --- 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) diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/node.py --- 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): diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/nodemanager.py --- 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 diff -r 44d812a41d49 -r 988f2b302aa6 objdictgen/objdictedit.py --- 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()