]> rtime.felk.cvut.cz Git - CanFestival-3.git/commitdiff
Implemented EMCY objects.
authorluis <luis>
Wed, 26 Sep 2007 14:02:00 +0000 (14:02 +0000)
committerluis <luis>
Wed, 26 Sep 2007 14:02:00 +0000 (14:02 +0000)
Added emcy.c and emcy.h
Modified data.h for necessary variables.
Added some EMCY message sendings in TestMasterSlave example.
Modified configure script to define EMCY_MAX_ERRORS.
Modified python scripts to make 1003h object always available (with a callback).

21 files changed:
CONTRIBUTORS
configure
doc/manual/en/manual.tex
examples/TestMasterMicroMod/TestMaster.c
examples/TestMasterMicroMod/TestMaster.h
examples/TestMasterSlave/Master.c
examples/TestMasterSlave/Master.h
examples/TestMasterSlave/Slave.c
examples/TestMasterSlave/Slave.h
examples/TestMasterSlave/TestMaster.c
examples/TestMasterSlave/TestMaster.od
examples/TestMasterSlave/TestMasterSlave.c
examples/TestMasterSlave/TestSlave.c
examples/TestMasterSlave/TestSlave.od
include/data.h
include/emcy.h [new file with mode: 0644]
objdictgen/gen_cfile.py
objdictgen/node.py
src/Makefile.in
src/emcy.c [new file with mode: 0644]
src/states.c

index 78fcb27d964846dd4441a3a05853091e7fb94333..dddf6fe6e5af3206249d5dccf8f5176cc5319b41 100644 (file)
@@ -11,5 +11,6 @@ Other unsorted contribs:
        David DUMINY (sté A6R)
        Laurent ROMIEUX
        Zakaria BELAMRI
+       Luis JIMENEZ
 
 Many thanks to the main contributors for their great work.
index aa688925cbbe397f3972fd52faa83b4ec7658dc6..e4f558db8b9603bdbe6f46851dff72fda608a56d 100755 (executable)
--- a/configure
+++ b/configure
@@ -55,6 +55,9 @@ TIMEVAL_MAX=
 # Default to little-endian
 CANOPEN_BIG_ENDIAN=
 
+# Max number of active errors managed in error_data structure.
+EMCY_MAX_ERRORS=8
+
 ###########################################################################
 #                             DEFAULT BUILD OPTIONS                       #
 ###########################################################################
@@ -108,6 +111,7 @@ while [ $# -ge 1 ]; do
        --SDO_TIMEOUT_MS=*)     SDO_TIMEOUT_MS=$1;;
        --CANOPEN_BIG_ENDIAN=*) CANOPEN_BIG_ENDIAN=$1;;
        --MAX_NB_TIMER=*) MAX_NB_TIMER=$1;;
+       --EMCY_MAX_ERRORS=*) EMCY_MAX_ERRORS=$1;;
        --help) echo    "Usage: ./configure [options]"
                echo    "Options:"
                echo    " --cc=foo      Use compiler 'foo' instead of defaults ${CC1} or ${CC2}."
@@ -143,6 +147,7 @@ while [ $# -ge 1 ]; do
                echo    " --SDO_MAX_SIMULTANEOUS_TRANSFERTS [=4] Number of SDO that the node can manage concurrently"
                echo    " --NMT_MAX_NODE_ID [=128] can be reduced to gain memory on small network"
                echo    " --SDO_TIMEOUT_MS [=3000] Timeout in milliseconds for SDO (None to disable the feature)"
+               echo    " --EMCY_MAX_ERRORS [=8] Max number of active errors managed in error_data structure"
                exit 0;;
        *)              echo "Unknown argument ${1}"; exit -1;;
        esac
@@ -574,7 +579,8 @@ for i in \
  US_TO_TIMEVAL_FACTOR\
  TIMEVAL\
  TIMEVAL_MAX\
- RTCAN_SOCKET; do
+ RTCAN_SOCKET\
+ EMCY_MAX_ERRORS; do
 if [ "${!i}" = "" ]; then
 echo "/* $i is not defined */" >> include/config.h
 else
@@ -585,7 +591,8 @@ echo "" >> include/config.h
 
 for i in \
  SDO_MAX_SIMULTANEOUS_TRANSFERTS\
- NMT_MAX_NODE_ID; do
+ NMT_MAX_NODE_ID\
+ EMCY_MAX_ERRORS; do
        echo "#define REPEAT_"$i"_TIMES(repeat)\\">> include/config.h
        times=${!i}
        result=""
index 3cc40bfe98de5c66c874a751d31811a1ea8abfe8..2c84ab1d74ac18a143b6e03e2c5c9b13f5a43e0c 100644 (file)
@@ -198,7 +198,7 @@ SYNC, on event.
 producer or receiver.
 \item NMT NodeGuard implemented : Not fully implemented.
 \item TIME (time Stamp) : Not implemented.
-\item EMCY (emergency objects) : Not implemented.
+\item EMCY (emergency objects) : Sending and reception of EMCY objectos (without manufacturer specific error field).
 \item PDO Mapping bit per bit implemented.
 \end{enumerate}
 {\bfseries\upshape
index 84cb7edabf3ed365ba3068728f0aaf7699aa6072..a55be961ca82ff2d0393f747eeb4537dfebd2a94 100644 (file)
@@ -62,6 +62,23 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                        { RO, uint8, sizeof (UNS8), (void*)&TestMaster_obj1001 }
                      };
 
+/* index 0x1003 :   Pre-defined Error Field */
+                    UNS8 TestMaster_highestSubIndex_obj1003 = 0; /* number of subindex - 1*/
+                    UNS32 TestMaster_obj1003[] = 
+                    {
+                      0x0      /* 0 */
+                    };
+                    ODCallback_t TestMaster_Index1003_callbacks[] = 
+                     {
+                       NULL,
+                       NULL,
+                     };
+                    subindex TestMaster_Index1003[] = 
+                     {
+                       { RW, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1003 },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestMaster_obj1003[0] }
+                     };
+
 /* index 0x1005 :   SYNC COB ID. */
                     UNS32 TestMaster_obj1005 = 0x40000080;     /* 1073741952 */
                     ODCallback_t TestMaster_Index1005_callbacks[] = 
@@ -118,13 +135,13 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                     UNS8 TestMaster_highestSubIndex_obj1280 = 3; /* number of subindex - 1*/
                     UNS32 TestMaster_obj1280_COB_ID_Client_to_Server_Transmit_SDO = 0x640;     /* 1600 */
                     UNS32 TestMaster_obj1280_COB_ID_Server_to_Client_Receive_SDO = 0x5C0;      /* 1472 */
-                    INTEGER32 TestMaster_obj1280_Node_ID_of_the_SDO_Server = 0x40;     /* 64 */
+                    UNS8 TestMaster_obj1280_Node_ID_of_the_SDO_Server = 0x40;  /* 64 */
                     subindex TestMaster_Index1280[] = 
                      {
                        { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1280 },
                        { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1280_COB_ID_Client_to_Server_Transmit_SDO },
                        { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1280_COB_ID_Server_to_Client_Receive_SDO },
-                       { RW, int32, sizeof (INTEGER32), (void*)&TestMaster_obj1280_Node_ID_of_the_SDO_Server }
+                       { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1280_Node_ID_of_the_SDO_Server }
                      };
 
 /* index 0x1400 :   Receive PDO 1 Parameter. */
@@ -177,6 +194,15 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                     UNS16 TestMaster_obj1800_Inhibit_Time = 0x0;       /* 0 */
                     UNS8 TestMaster_obj1800_Compatibility_Entry = 0x0; /* 0 */
                     UNS16 TestMaster_obj1800_Event_Timer = 0x0;        /* 0 */
+                    ODCallback_t TestMaster_Index1800_callbacks[] = 
+                     {
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                     };
                     subindex TestMaster_Index1800[] = 
                      {
                        { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1800 },
@@ -291,7 +317,7 @@ const indextable * TestMaster_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCa
                case 0x1280: i = 6;break;
                case 0x1400: i = 7;break;
                case 0x1600: i = 8;break;
-               case 0x1800: i = 9;break;
+               case 0x1800: i = 9;*callbacks = TestMaster_Index1800_callbacks; break;
                case 0x1A00: i = 10;break;
                case 0x2000: i = 11;break;
                case 0x200F: i = 12;break;
index f54fcf25dda70bab6c5528ca58fbc39f5c886b6a..f64ff872c5c1b8fbd751796b9ede314aa2f142e9 100644 (file)
@@ -12,6 +12,7 @@ const indextable * TestMaster_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCa
 
 /* Master node data struct */
 extern CO_Data TestMaster_Data;
+extern ODCallback_t Transmit_PDO_1_Parameter_callbacks[];              /* Callbacks of index0x1800 */
 extern UNS8 DO;                /* Mapped at index 0x2000, subindex 0x00*/
 extern UNS8 DI1;               /* Mapped at index 0x200F, subindex 0x00*/
 extern UNS8 DI2;               /* Mapped at index 0x2010, subindex 0x00*/
index a03a9cbbe9afc1d7e71c6440b4ccc3d4e4ba3a9d..dac02b6362a045be946fe2d12c9704e49c0d0847 100644 (file)
@@ -180,10 +180,14 @@ void TestMaster_post_sync()
                MasterMap13);
 }
 
+void TestMaster_post_emcy(UNS8 nodeID, UNS16 errCode, UNS8 errReg)
+{
+       eprintf("Master received EMCY message. Node: %2.2x  ErrorCode: %4.4x  ErrorRegister: %2.2x\n", nodeID, errCode, errReg);
+}
+
 char query_result = 0;
 char waiting_answer = 0;
 
-
 static void CheckSDO(CO_Data* d, UNS8 nodeId)
 {
        UNS32 abortCode;        
index 9918bfb3ed7f5fa3b97f94a1b69e1ec797d0ed58..87a731e98452c95a68121180f1f3cb5ce091a21e 100644 (file)
@@ -11,3 +11,4 @@ void TestMaster_stopped(void);
 
 void TestMaster_post_sync(void);
 void TestMaster_post_TPDO(void);
+void TestMaster_post_emcy(UNS8 nodeID, UNS16 errCode, UNS8 errReg);
index 88b25bd8825624f278c652c52f93b1f4c71e3bc2..cec97a144f9c5f8d426f8a60f8eeba5894d27555 100644 (file)
@@ -86,6 +86,13 @@ void TestSlave_post_TPDO()
 {
         SlaveMap13 += 1;
        eprintf("TestSlave_post_TPDO\n");
+       
+       /* send an error and recover inmediately every 12 cycles */
+       if(SlaveMap13 % 12 == 0)
+       {
+               EMCY_setError(&TestSlave_Data, 0x4200, 0x08);
+               EMCY_errorRecovered(&TestSlave_Data, 0x4200);
+       }
 }
 
 void TestSlave_storeODSubIndex(UNS16 wIndex, UNS8 bSubindex)
@@ -101,3 +108,8 @@ void TestSlave_storeODSubIndex(UNS16 wIndex, UNS8 bSubindex)
         * */
        eprintf("TestSlave_storeODSubIndex : %4.4x %2.2x\n", wIndex,  bSubindex);
 }
+
+void TestSlave_post_emcy(UNS8 nodeID, UNS16 errCode, UNS8 errReg)
+{
+       eprintf("Slave received EMCY message. Node: %2.2x  ErrorCode: %4.4x  ErrorRegister: %2.2x\n", nodeID, errCode, errReg);
+}
index c01fad1527ae77f39eedd61bf64b4740ddd7a967..ea4b2a349edbb5e209c9976df8f5c2f39510dd2e 100644 (file)
@@ -12,3 +12,4 @@ void TestSlave_stopped(void);
 void TestSlave_post_sync(void);
 void TestSlave_post_TPDO(void);
 void TestSlave_storeODSubIndex(UNS16 wIndex, UNS8 bSubindex);
+void TestSlave_post_emcy(UNS8 nodeID, UNS16 errCode, UNS8 errReg);
index 50f4de90a463c1d561f485f8800fe5b4f7bada70..c4c11a2b66bf3a797168e86d48622f641cca5258 100644 (file)
@@ -66,6 +66,23 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                        { RO, uint8, sizeof (UNS8), (void*)&TestMaster_obj1001 }
                      };
 
+/* index 0x1003 :   Pre-defined Error Field */
+                    UNS8 TestMaster_highestSubIndex_obj1003 = 0; /* number of subindex - 1*/
+                    UNS32 TestMaster_obj1003[] = 
+                    {
+                      0x0      /* 0 */
+                    };
+                    ODCallback_t TestMaster_Index1003_callbacks[] = 
+                     {
+                       NULL,
+                       NULL,
+                     };
+                    subindex TestMaster_Index1003[] = 
+                     {
+                       { RW, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1003 },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestMaster_obj1003[0] }
+                     };
+
 /* index 0x1005 :   SYNC COB ID. */
                     UNS32 TestMaster_obj1005 = 0x40000080;     /* 1073741952 */
                     ODCallback_t TestMaster_Index1005_callbacks[] = 
@@ -152,13 +169,13 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                     UNS8 TestMaster_highestSubIndex_obj1280 = 3; /* number of subindex - 1*/
                     UNS32 TestMaster_obj1280_COB_ID_Client_to_Server_Transmit_SDO = 0x602;     /* 1538 */
                     UNS32 TestMaster_obj1280_COB_ID_Server_to_Client_Receive_SDO = 0x582;      /* 1410 */
-                    INTEGER32 TestMaster_obj1280_Node_ID_of_the_SDO_Server = 0x2;      /* 2 */
+                    UNS8 TestMaster_obj1280_Node_ID_of_the_SDO_Server = 0x2;   /* 2 */
                     subindex TestMaster_Index1280[] = 
                      {
                        { RO, uint8, sizeof (UNS8), (void*)&TestMaster_highestSubIndex_obj1280 },
                        { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1280_COB_ID_Client_to_Server_Transmit_SDO },
                        { RW, uint32, sizeof (UNS32), (void*)&TestMaster_obj1280_COB_ID_Server_to_Client_Receive_SDO },
-                       { RW, int32, sizeof (INTEGER32), (void*)&TestMaster_obj1280_Node_ID_of_the_SDO_Server }
+                       { RW, uint8, sizeof (UNS8), (void*)&TestMaster_obj1280_Node_ID_of_the_SDO_Server }
                      };
 
 /* index 0x1400 :   Receive PDO 1 Parameter. */
index 33fc8df239d45730d43cbdc45b8423181df3918e..23a88825c20dc0ef91b8c962769131209eb589c2 100644 (file)
@@ -1,18 +1,18 @@
 <?xml version="1.0"?>
 <!DOCTYPE PyObject SYSTEM "PyObjects.dtd">
-<PyObject module="node" class="Node" id="46582816">
-<attr name="Profile" type="dict" id="45421552" >
+<PyObject module="node" class="Node" id="1111003340">
+<attr name="Profile" type="dict" id="1110999764" >
   <entry>
     <key type="numeric" value="24576" />
-    <val type="dict" id="46279792" >
+    <val type="dict" id="1111000172" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46518712" >
-          <item type="dict" id="47325472" >
+        <val type="list" id="1101093228" >
+          <item type="dict" id="1111000580" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
@@ -30,7 +30,7 @@
               <val type="string" value="Number of Input 8 bit" />
             </entry>
           </item>
-          <item type="dict" id="46104736" >
+          <item type="dict" id="1111001124" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
   </entry>
   <entry>
     <key type="numeric" value="24832" />
-    <val type="dict" id="45358112" >
+    <val type="dict" id="1101358324" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519144" >
-          <item type="dict" id="46394368" >
+        <val type="list" id="1101093484" >
+          <item type="dict" id="1111000444" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
@@ -92,7 +92,7 @@
               <val type="string" value="Number of Input 16 bit" />
             </entry>
           </item>
-          <item type="dict" id="46284592" >
+          <item type="dict" id="1111000308" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
   </entry>
   <entry>
     <key type="numeric" value="24578" />
-    <val type="dict" id="43954032" >
+    <val type="dict" id="1101359004" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505712" >
-          <item type="dict" id="45613168" >
+        <val type="list" id="1101094476" >
+          <item type="dict" id="1111001532" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 8 bit" />
             </entry>
           </item>
-          <item type="dict" id="46102848" >
+          <item type="dict" id="1111001804" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24579" />
-    <val type="dict" id="45570224" >
+    <val type="dict" id="1111000852" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46495648" >
-          <item type="dict" id="46401968" >
+        <val type="list" id="1101093580" >
+          <item type="dict" id="1111001940" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 8 bit" />
             </entry>
           </item>
-          <item type="dict" id="46247504" >
+          <item type="dict" id="1111002212" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25604" />
-    <val type="dict" id="44928832" >
+    <val type="dict" id="1111000988" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505856" >
-          <item type="dict" id="45914656" >
+        <val type="list" id="1101093772" >
+          <item type="dict" id="1111002348" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Input" />
             </entry>
           </item>
-          <item type="dict" id="46843712" >
+          <item type="dict" id="1111002620" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
   </entry>
   <entry>
     <key type="numeric" value="24581" />
-    <val type="dict" id="46284880" >
+    <val type="dict" id="1111001668" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519432" >
-          <item type="dict" id="45392416" >
+        <val type="list" id="1101093100" >
+          <item type="dict" id="1111002756" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24582" />
-    <val type="dict" id="46411968" >
+    <val type="dict" id="1111011372" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46512176" >
-          <item type="dict" id="46412256" >
+        <val type="list" id="1101093804" >
+          <item type="dict" id="1111011780" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 8 bit" />
             </entry>
           </item>
-          <item type="dict" id="46412544" >
+          <item type="dict" id="1111001260" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24583" />
-    <val type="dict" id="46842832" >
+    <val type="dict" id="1111011644" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46512392" >
-          <item type="dict" id="46412832" >
+        <val type="list" id="1101067148" >
+          <item type="dict" id="1111000036" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 8 bit" />
             </entry>
           </item>
-          <item type="dict" id="46413120" >
+          <item type="dict" id="1111012052" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24584" />
-    <val type="dict" id="46154848" >
+    <val type="dict" id="1111002076" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505784" >
-          <item type="dict" id="45748288" >
+        <val type="list" id="1101066988" >
+          <item type="dict" id="1111012188" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 8 bit" />
             </entry>
           </item>
-          <item type="dict" id="45748624" >
+          <item type="dict" id="1111012460" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24834" />
-    <val type="dict" id="45358400" >
+    <val type="dict" id="1111002892" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46513832" >
-          <item type="dict" id="45358688" >
+        <val type="list" id="1101067404" >
+          <item type="dict" id="1111012596" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 16 bit" />
             </entry>
           </item>
-          <item type="dict" id="46154560" >
+          <item type="dict" id="1111012868" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25616" />
-    <val type="dict" id="45912240" >
+    <val type="dict" id="1111011916" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46513688" >
-          <item type="dict" id="46438752" >
+        <val type="list" id="1100837548" >
+          <item type="dict" id="1111013004" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Input 8 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46439040" >
+          <item type="dict" id="1111013276" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25617" />
-    <val type="dict" id="46350880" >
+    <val type="dict" id="1111012324" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46513544" >
-          <item type="dict" id="46351168" >
+        <val type="list" id="1101076972" >
+          <item type="dict" id="1111013412" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Input 16 Bit" />
             </entry>
           </item>
-          <item type="dict" id="45911952" >
+          <item type="dict" id="1111013684" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25618" />
-    <val type="dict" id="46400912" >
+    <val type="dict" id="1111012732" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46513400" >
-          <item type="dict" id="46452128" >
+        <val type="list" id="1101079308" >
+          <item type="dict" id="1111013820" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs 32 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46452416" >
+          <item type="dict" id="1111014092" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24835" />
-    <val type="dict" id="45914048" >
+    <val type="dict" id="1111013140" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46512032" >
-          <item type="dict" id="45914336" >
+        <val type="list" id="1101067372" >
+          <item type="dict" id="1111014228" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 16 bit" />
             </entry>
           </item>
-          <item type="dict" id="46400624" >
+          <item type="dict" id="1111014500" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25620" />
-    <val type="dict" id="46446112" >
+    <val type="dict" id="1111013548" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46512752" >
-          <item type="dict" id="46280624" >
+        <val type="list" id="1101062892" >
+          <item type="dict" id="1111014636" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs" />
             </entry>
           </item>
-          <item type="dict" id="46417840" >
+          <item type="dict" id="1111014908" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25088" />
-    <val type="dict" id="45347120" >
+    <val type="dict" id="1111013956" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46513040" >
-          <item type="dict" id="46329888" >
+        <val type="list" id="1101093868" >
+          <item type="dict" id="1111015044" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 8 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46444064" >
+          <item type="dict" id="1111015468" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25603" />
-    <val type="dict" id="45341216" >
+    <val type="dict" id="1111014364" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46512824" >
-          <item type="dict" id="45861408" >
+        <val type="list" id="1101064652" >
+          <item type="dict" id="1111015604" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Input Float" />
             </entry>
           </item>
-          <item type="dict" id="45571648" >
+          <item type="dict" id="1111015876" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
   </entry>
   <entry>
     <key type="numeric" value="25378" />
-    <val type="dict" id="46841872" >
+    <val type="dict" id="1111034164" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46503120" >
-          <item type="dict" id="46842160" >
+        <val type="list" id="1111005196" >
+          <item type="dict" id="1111035252" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 32 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46842448" >
+          <item type="dict" id="1111035524" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25344" />
-    <val type="dict" id="46912576" >
+    <val type="dict" id="1111014772" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46503048" >
-          <item type="dict" id="46912864" >
+        <val type="list" id="1101094028" >
+          <item type="dict" id="1111016012" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 16 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46913152" >
+          <item type="dict" id="1111016284" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24608" />
-    <val type="dict" id="45610288" >
+    <val type="dict" id="1111015180" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46518928" >
-          <item type="dict" id="46280128" >
+        <val type="list" id="1111004076" >
+          <item type="dict" id="1111016420" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 1 bit" />
             </entry>
           </item>
-          <item type="dict" id="45418800" >
+          <item type="dict" id="1111016692" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25633" />
-    <val type="dict" id="45500336" >
+    <val type="dict" id="1111002484" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46512464" >
-          <item type="dict" id="45628304" >
+        <val type="list" id="1111003852" >
+          <item type="dict" id="1111016828" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="46139248" >
+          <item type="dict" id="1111017100" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24866" />
-    <val type="dict" id="45558736" >
+    <val type="dict" id="1111015740" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46514120" >
-          <item type="dict" id="45404464" >
+        <val type="list" id="1111003564" >
+          <item type="dict" id="1111017236" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 32 bit" />
             </entry>
           </item>
-          <item type="dict" id="44824048" >
+          <item type="dict" id="1111017508" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24867" />
-    <val type="dict" id="46394080" >
+    <val type="dict" id="1111016556" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46518424" >
-          <item type="dict" id="45093088" >
+        <val type="list" id="1111004204" >
+          <item type="dict" id="1111017644" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 32 bit" />
             </entry>
           </item>
-          <item type="dict" id="45614384" >
+          <item type="dict" id="1111017916" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25636" />
-    <val type="dict" id="45419712" >
+    <val type="dict" id="1111016964" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46496296" >
-          <item type="dict" id="46459776" >
+        <val type="list" id="1111003692" >
+          <item type="dict" id="1111018052" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="46460064" >
+          <item type="dict" id="1111018324" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24838" />
-    <val type="dict" id="45509680" >
+    <val type="dict" id="1111017372" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505064" >
-          <item type="dict" id="45892784" >
+        <val type="list" id="1111003980" >
+          <item type="dict" id="1111018460" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 16 bit" />
             </entry>
           </item>
-          <item type="dict" id="44927216" >
+          <item type="dict" id="1111018732" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25638" />
-    <val type="dict" id="45639808" >
+    <val type="dict" id="1111017780" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46496224" >
-          <item type="dict" id="45880768" >
+        <val type="list" id="1111004268" >
+          <item type="dict" id="1111018868" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="47237920" >
+          <item type="dict" id="1111019140" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25383" />
-    <val type="dict" id="47101952" >
+    <val type="dict" id="1111018188" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46511456" >
-          <item type="dict" id="44928544" >
+        <val type="list" id="1111004300" >
+          <item type="dict" id="1111019276" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 32 Bit" />
             </entry>
           </item>
-          <item type="dict" id="47265280" >
+          <item type="dict" id="1111023796" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25640" />
-    <val type="dict" id="45532192" >
+    <val type="dict" id="1111018596" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46518568" >
-          <item type="dict" id="47031872" >
+        <val type="list" id="1111004332" >
+          <item type="dict" id="1111023932" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="45757584" >
+          <item type="dict" id="1111024204" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25641" />
-    <val type="dict" id="45955552" >
+    <val type="dict" id="1111019004" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46512608" >
-          <item type="dict" id="46898224" >
+        <val type="list" id="1111004364" >
+          <item type="dict" id="1111024340" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="45551376" >
+          <item type="dict" id="1111024612" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25642" />
-    <val type="dict" id="46134672" >
+    <val type="dict" id="1111023660" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46511600" >
-          <item type="dict" id="44679392" >
+        <val type="list" id="1111004236" >
+          <item type="dict" id="1111024748" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="45946160" >
+          <item type="dict" id="1111025020" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25643" />
-    <val type="dict" id="46973968" >
+    <val type="dict" id="1111024068" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46513256" >
-          <item type="dict" id="46369904" >
+        <val type="list" id="1111004428" >
+          <item type="dict" id="1111025156" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="47189472" >
+          <item type="dict" id="1111025428" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25644" />
-    <val type="dict" id="45914944" >
+    <val type="dict" id="1111024476" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46511168" >
-          <item type="dict" id="45331536" >
+        <val type="list" id="1111004460" >
+          <item type="dict" id="1111025564" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="45331824" >
+          <item type="dict" id="1111025836" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25645" />
-    <val type="dict" id="45911168" >
+    <val type="dict" id="1111024884" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46510952" >
-          <item type="dict" id="45911456" >
+        <val type="list" id="1111004524" >
+          <item type="dict" id="1111025972" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="46328352" >
+          <item type="dict" id="1111026244" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25646" />
-    <val type="dict" id="45428176" >
+    <val type="dict" id="1111025292" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46510736" >
-          <item type="dict" id="45428464" >
+        <val type="list" id="1111004588" >
+          <item type="dict" id="1111026380" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="46265488" >
+          <item type="dict" id="1111026652" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25647" />
-    <val type="dict" id="46265824" >
+    <val type="dict" id="1111025700" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46510520" >
-          <item type="dict" id="46338624" >
+        <val type="list" id="1111004556" >
+          <item type="dict" id="1111026788" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="46338912" >
+          <item type="dict" id="1111027060" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24624" />
-    <val type="dict" id="45346336" >
+    <val type="dict" id="1111026108" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46510232" >
-          <item type="dict" id="45346624" >
+        <val type="list" id="1111004620" >
+          <item type="dict" id="1111027196" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 1 bit" />
             </entry>
           </item>
-          <item type="dict" id="47250976" >
+          <item type="dict" id="1111027468" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25352" />
-    <val type="dict" id="47251264" >
+    <val type="dict" id="1111016148" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505928" >
-          <item type="dict" id="47094672" >
+        <val type="list" id="1111003724" >
+          <item type="dict" id="1111027756" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 16 Bit" />
             </entry>
           </item>
-          <item type="dict" id="47094960" >
+          <item type="dict" id="1111028028" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25650" />
-    <val type="dict" id="47232800" >
+    <val type="dict" id="1111026516" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505208" >
-          <item type="dict" id="47233088" >
+        <val type="list" id="1111004652" >
+          <item type="dict" id="1111028164" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="47248160" >
+          <item type="dict" id="1111028436" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25090" />
-    <val type="dict" id="46781216" >
+    <val type="dict" id="1111030340" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46502544" >
-          <item type="dict" id="46781504" >
+        <val type="list" id="1111005036" >
+          <item type="dict" id="1111036220" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 8 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46781792" >
+          <item type="dict" id="1111036492" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25096" />
-    <val type="dict" id="47326048" >
+    <val type="dict" id="1111026924" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505352" >
-          <item type="dict" id="47326336" >
+        <val type="list" id="1111004748" >
+          <item type="dict" id="1111029388" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 8 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46368576" >
+          <item type="dict" id="1111029660" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24632" />
-    <val type="dict" id="46368912" >
+    <val type="dict" id="1111028300" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46512248" >
-          <item type="dict" id="46369200" >
+        <val type="list" id="1111004780" >
+          <item type="dict" id="1111029796" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 1 bit" />
             </entry>
           </item>
-          <item type="dict" id="46402304" >
+          <item type="dict" id="1111030068" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24871" />
-    <val type="dict" id="46917632" >
+    <val type="dict" id="1111041268" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46504848" >
-          <item type="dict" id="46917920" >
+        <val type="list" id="1111004492" >
+          <item type="dict" id="1111042356" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 32 bit" />
             </entry>
           </item>
-          <item type="dict" id="46918208" >
+          <item type="dict" id="1111042628" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
       </entry>
     </val>
   </entry>
-  <entry>
-    <key type="numeric" value="25351" />
-    <val type="dict" id="46907360" >
-      <entry>
-        <key type="string" value="need" />
-        <val type="False" value="" />
-      </entry>
-      <entry>
-        <key type="string" value="values" />
-        <val type="list" id="46495864" >
-          <item type="dict" id="46907648" >
-            <entry>
-              <key type="string" value="access" />
-              <val type="string" value="ro" />
-            </entry>
-            <entry>
-              <key type="string" value="pdo" />
-              <val type="False" value="" />
-            </entry>
-            <entry>
-              <key type="string" value="type" />
-              <val type="numeric" value="5" />
-            </entry>
-            <entry>
-              <key type="string" value="name" />
-              <val type="string" value="Number of Output 16 Bit" />
-            </entry>
-          </item>
-          <item type="dict" id="46907984" >
-            <entry>
-              <key type="string" value="access" />
-              <val type="string" value="rw" />
-            </entry>
-            <entry>
-              <key type="string" value="pdo" />
-              <val type="True" value="" />
-            </entry>
-            <entry>
-              <key type="string" value="type" />
-              <val type="numeric" value="6" />
-            </entry>
-            <entry>
-              <key type="string" value="name" />
-              <val type="string" value="Error Value Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]" />
-            </entry>
-            <entry>
-              <key type="string" value="nbmax" />
-              <val type="numeric" value="254" />
-            </entry>
-          </item>
-        </val>
-      </entry>
-      <entry>
-        <key type="string" value="name" />
-        <val type="string" value="Error Value Outputs 16 Bit" />
-      </entry>
-      <entry>
-        <key type="string" value="struct" />
-        <val type="numeric" value="7" />
-      </entry>
-    </val>
-  </entry>
   <entry>
     <key type="numeric" value="25152" />
-    <val type="dict" id="47263552" >
+    <val type="dict" id="1111029524" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46504272" >
-          <item type="dict" id="47263840" >
+        <val type="list" id="1111004876" >
+          <item type="dict" id="1111031020" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 1 Bit" />
             </entry>
           </item>
-          <item type="dict" id="47264176" >
+          <item type="dict" id="1111031292" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24864" />
-    <val type="dict" id="46269200" >
+    <val type="dict" id="1111011508" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46504128" >
-          <item type="dict" id="46844832" >
+        <val type="list" id="1111004908" >
+          <item type="dict" id="1111031428" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 32 bit" />
             </entry>
           </item>
-          <item type="dict" id="46845168" >
+          <item type="dict" id="1111031852" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25666" />
-    <val type="dict" id="46845456" >
+    <val type="dict" id="1111029932" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46503984" >
-          <item type="dict" id="46845744" >
+        <val type="list" id="1111004940" >
+          <item type="dict" id="1111031988" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs" />
             </entry>
           </item>
-          <item type="dict" id="46846080" >
+          <item type="dict" id="1111032260" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25667" />
-    <val type="dict" id="46765072" >
+    <val type="dict" id="1111031156" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46503840" >
-          <item type="dict" id="46765360" >
+        <val type="list" id="1111004972" >
+          <item type="dict" id="1111032396" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs" />
             </entry>
           </item>
-          <item type="dict" id="46765696" >
+          <item type="dict" id="1111032668" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25668" />
-    <val type="dict" id="46765984" >
+    <val type="dict" id="1111031564" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46503696" >
-          <item type="dict" id="46766272" >
+        <val type="list" id="1111005004" >
+          <item type="dict" id="1111032804" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs" />
             </entry>
           </item>
-          <item type="dict" id="46766608" >
+          <item type="dict" id="1111033076" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25669" />
-    <val type="dict" id="46766944" >
+    <val type="dict" id="1111032124" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46503552" >
-          <item type="dict" id="47134240" >
+        <val type="list" id="1111005100" >
+          <item type="dict" id="1111033212" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs" />
             </entry>
           </item>
-          <item type="dict" id="47134528" >
+          <item type="dict" id="1111033484" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25665" />
-    <val type="dict" id="47134816" >
+    <val type="dict" id="1111032532" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46497520" >
-          <item type="dict" id="47135104" >
+        <val type="list" id="1111005068" >
+          <item type="dict" id="1111033620" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs" />
             </entry>
           </item>
-          <item type="dict" id="47135392" >
+          <item type="dict" id="1111033892" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25648" />
-    <val type="dict" id="47135728" >
+    <val type="dict" id="1111032940" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46503264" >
-          <item type="dict" id="47136016" >
+        <val type="list" id="1111005132" >
+          <item type="dict" id="1111034028" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="47136304" >
+          <item type="dict" id="1111034300" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24672" />
-    <val type="dict" id="46790576" >
+    <val type="dict" id="1111038668" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46502184" >
-          <item type="dict" id="46790864" >
+        <val type="list" id="1111005612" >
+          <item type="dict" id="1111039756" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 1 bit" />
             </entry>
           </item>
-          <item type="dict" id="46791200" >
+          <item type="dict" id="1111040180" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25094" />
-    <val type="dict" id="46840960" >
+    <val type="dict" id="1111033756" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44121552" >
-          <item type="dict" id="46841248" >
+        <val type="list" id="1111005228" >
+          <item type="dict" id="1111034844" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 8 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46841536" >
+          <item type="dict" id="1111035116" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
       </entry>
     </val>
   </entry>
+  <entry>
+    <key type="numeric" value="25680" />
+    <val type="dict" id="1111037852" >
+      <entry>
+        <key type="string" value="need" />
+        <val type="False" value="" />
+      </entry>
+      <entry>
+        <key type="string" value="values" />
+        <val type="list" id="1111005740" >
+          <item type="dict" id="1111040316" >
+            <entry>
+              <key type="string" value="access" />
+              <val type="string" value="ro" />
+            </entry>
+            <entry>
+              <key type="string" value="pdo" />
+              <val type="False" value="" />
+            </entry>
+            <entry>
+              <key type="string" value="type" />
+              <val type="numeric" value="5" />
+            </entry>
+            <entry>
+              <key type="string" value="name" />
+              <val type="string" value="Number of Analogue Outputs" />
+            </entry>
+          </item>
+          <item type="dict" id="1111040588" >
+            <entry>
+              <key type="string" value="access" />
+              <val type="string" value="rw" />
+            </entry>
+            <entry>
+              <key type="string" value="pdo" />
+              <val type="True" value="" />
+            </entry>
+            <entry>
+              <key type="string" value="type" />
+              <val type="numeric" value="7" />
+            </entry>
+            <entry>
+              <key type="string" value="name" />
+              <val type="string" value="Analogue Output %d[(sub)]" />
+            </entry>
+            <entry>
+              <key type="string" value="nbmax" />
+              <val type="numeric" value="254" />
+            </entry>
+          </item>
+        </val>
+      </entry>
+      <entry>
+        <key type="string" value="name" />
+        <val type="string" value="Analogue Output SI Unit" />
+      </entry>
+      <entry>
+        <key type="string" value="struct" />
+        <val type="numeric" value="7" />
+      </entry>
+    </val>
+  </entry>
   <entry>
     <key type="numeric" value="25634" />
-    <val type="dict" id="46840048" >
+    <val type="dict" id="1111033348" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46503336" >
-          <item type="dict" id="46840336" >
+        <val type="list" id="1111004396" >
+          <item type="dict" id="1111034436" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Interrupt Source Bank" />
             </entry>
           </item>
-          <item type="dict" id="46840624" >
+          <item type="dict" id="1111034708" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
   </entry>
   <entry>
     <key type="numeric" value="25384" />
-    <val type="dict" id="46908320" >
+    <val type="dict" id="1111042492" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44207856" >
-          <item type="dict" id="46908608" >
+        <val type="list" id="1111005772" >
+          <item type="dict" id="1111043580" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 32 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46908896" >
+          <item type="dict" id="1111043852" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
     </val>
   </entry>
   <entry>
-    <key type="numeric" value="25680" />
-    <val type="dict" id="46780352" >
+    <key type="numeric" value="24656" />
+    <val type="dict" id="1111029116" >
       <entry>
-        <key type="string" value="need" />
-        <val type="False" value="" />
+        <key type="string" value="incr" />
+        <val type="numeric" value="1" />
+      </entry>
+      <entry>
+        <key type="string" value="struct" />
+        <val type="numeric" value="15" />
+      </entry>
+      <entry>
+        <key type="string" value="nbmax" />
+        <val type="numeric" value="8" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46513976" >
-          <item type="dict" id="46780640" >
+        <val type="list" id="1111004844" >
+          <item type="dict" id="1111030612" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Number of Analogue Outputs" />
+              <val type="string" value="Number of Input 1 bit" />
             </entry>
           </item>
-          <item type="dict" id="46780928" >
+          <item type="dict" id="1111030884" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
             </entry>
             <entry>
               <key type="string" value="type" />
-              <val type="numeric" value="7" />
+              <val type="numeric" value="1" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Analogue Output %d[(sub)]" />
+              <val type="string" value="Interrupt Mask Any Change Input bit 0x%X[((idx-1)*128+sub)]" />
             </entry>
             <entry>
               <key type="string" value="nbmax" />
-              <val type="numeric" value="254" />
+              <val type="numeric" value="128" />
             </entry>
           </item>
         </val>
       </entry>
       <entry>
-        <key type="string" value="name" />
-        <val type="string" value="Analogue Output SI Unit" />
+        <key type="string" value="need" />
+        <val type="False" value="" />
       </entry>
       <entry>
-        <key type="string" value="struct" />
-        <val type="numeric" value="7" />
+        <key type="string" value="name" />
+        <val type="string" value="Interrupt Mask Input Any Change Bit 0x%X to 0x%X[(idx*128-127,idx*128)]" />
       </entry>
     </val>
   </entry>
   <entry>
     <key type="numeric" value="25350" />
-    <val type="dict" id="47248496" >
+    <val type="dict" id="1111027332" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505568" >
-          <item type="dict" id="47240992" >
+        <val type="list" id="1111004684" >
+          <item type="dict" id="1111028572" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 16 Bit" />
             </entry>
           </item>
-          <item type="dict" id="47241280" >
+          <item type="dict" id="1111028844" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25635" />
-    <val type="dict" id="46782128" >
+    <val type="dict" id="1111034980" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46495432" >
-          <item type="dict" id="46782416" >
+        <val type="list" id="1111005356" >
+          <item type="dict" id="1111036628" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
     </val>
   </entry>
   <entry>
-    <key type="numeric" value="24870" />
-    <val type="dict" id="46918496" >
+    <key type="numeric" value="25351" />
+    <val type="dict" id="1111042084" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46495792" >
-          <item type="dict" id="46906736" >
+        <val type="list" id="1111005836" >
+          <item type="dict" id="1111043172" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Number of Input 32 bit" />
+              <val type="string" value="Number of Output 16 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46907072" >
+          <item type="dict" id="1111043444" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
             </entry>
             <entry>
               <key type="string" value="type" />
-              <val type="numeric" value="7" />
+              <val type="numeric" value="6" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Interrupt Any Change Input 0x%X to 0x%X[(sub*32-31,sub*32)]" />
+              <val type="string" value="Error Value Outputs 0x%X to 0x%X[(sub*16-15,sub*16)]" />
             </entry>
             <entry>
               <key type="string" value="nbmax" />
       </entry>
       <entry>
         <key type="string" value="name" />
-        <val type="string" value="Interrupt Mask Input Any Change 32 Bit" />
+        <val type="string" value="Error Value Outputs 16 Bit" />
       </entry>
       <entry>
         <key type="string" value="struct" />
   </entry>
   <entry>
     <key type="numeric" value="25120" />
-    <val type="dict" id="46783664" >
+    <val type="dict" id="1111037172" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46502328" >
-          <item type="dict" id="46783952" >
+        <val type="list" id="1111005420" >
+          <item type="dict" id="1111035388" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 1 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46413408" >
+          <item type="dict" id="1111037580" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25600" />
-    <val type="dict" id="46414480" >
+    <val type="dict" id="1111037036" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44208000" >
-          <item type="dict" id="46414768" >
+        <val type="list" id="1111005388" >
+          <item type="dict" id="1111037716" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Input 8 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46415104" >
+          <item type="dict" id="1111037988" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
   </entry>
   <entry>
     <key type="numeric" value="25346" />
-    <val type="dict" id="46417088" >
+    <val type="dict" id="1111036764" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46511744" >
-          <item type="dict" id="46788128" >
+        <val type="list" id="1111005452" >
+          <item type="dict" id="1111038532" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 16 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46788464" >
+          <item type="dict" id="1111038804" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25670" />
-    <val type="dict" id="46788800" >
+    <val type="dict" id="1111037444" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46502040" >
-          <item type="dict" id="46789088" >
+        <val type="list" id="1111005484" >
+          <item type="dict" id="1111038940" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs" />
             </entry>
           </item>
-          <item type="dict" id="46789376" >
+          <item type="dict" id="1111039212" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25376" />
-    <val type="dict" id="46789712" >
+    <val type="dict" id="1111038260" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46497736" >
-          <item type="dict" id="46790000" >
+        <val type="list" id="1111005516" >
+          <item type="dict" id="1111039348" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 32 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46790288" >
+          <item type="dict" id="1111039620" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25184" />
-    <val type="dict" id="46415440" >
+    <val type="dict" id="1111035948" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46511888" >
-          <item type="dict" id="46415728" >
+        <val type="list" id="1111003596" >
+          <item type="dict" id="1111038124" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 1 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46416016" >
+          <item type="dict" id="1111038396" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
     </val>
   </entry>
   <entry>
-    <key type="numeric" value="24656" />
-    <val type="dict" id="46792272" >
+    <key type="numeric" value="25168" />
+    <val type="dict" id="1111034572" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46502832" >
-          <item type="dict" id="46792560" >
+        <val type="list" id="1111005292" >
+          <item type="dict" id="1111035660" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Number of Input 1 bit" />
+              <val type="string" value="Number of Output 1 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46792896" >
+          <item type="dict" id="1111036084" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Interrupt Mask Any Change Input bit 0x%X[((idx-1)*128+sub)]" />
+              <val type="string" value="Error Mode Outputs 0x%X[((idx-1)*128+sub)]" />
             </entry>
             <entry>
               <key type="string" value="nbmax" />
       </entry>
       <entry>
         <key type="string" value="name" />
-        <val type="string" value="Interrupt Mask Input Any Change Bit 0x%X to 0x%X[(idx*128-127,idx*128)]" />
+        <val type="string" value="Error Mode Outputs Lines %d to %d[(idx*128-127,idx*128)]" />
       </entry>
     </val>
   </entry>
   <entry>
     <key type="numeric" value="25602" />
-    <val type="dict" id="46793184" >
+    <val type="dict" id="1111039076" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46497088" >
-          <item type="dict" id="46914224" >
+        <val type="list" id="1111005548" >
+          <item type="dict" id="1111040724" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Input 32 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46914560" >
+          <item type="dict" id="1111040996" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
     </val>
   </entry>
   <entry>
-    <key type="numeric" value="25382" />
-    <val type="dict" id="46914896" >
+    <key type="numeric" value="24870" />
+    <val type="dict" id="1111040044" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46496872" >
-          <item type="dict" id="46915184" >
+        <val type="list" id="1111005644" >
+          <item type="dict" id="1111041132" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Number of Output 32 Bit" />
+              <val type="string" value="Number of Input 32 bit" />
             </entry>
           </item>
-          <item type="dict" id="46915472" >
+          <item type="dict" id="1111041404" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Error Mode Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]" />
+              <val type="string" value="Interrupt Any Change Input 0x%X to 0x%X[(sub*32-31,sub*32)]" />
             </entry>
             <entry>
               <key type="string" value="nbmax" />
       </entry>
       <entry>
         <key type="string" value="name" />
-        <val type="string" value="Error Mode Outputs 32 Bit" />
+        <val type="string" value="Interrupt Mask Input Any Change 32 Bit" />
       </entry>
       <entry>
         <key type="string" value="struct" />
   </entry>
   <entry>
     <key type="numeric" value="25649" />
-    <val type="dict" id="46915808" >
+    <val type="dict" id="1111040452" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46496728" >
-          <item type="dict" id="46916096" >
+        <val type="list" id="1111005580" >
+          <item type="dict" id="1111041540" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="46916384" >
+          <item type="dict" id="1111041812" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25095" />
-    <val type="dict" id="46916720" >
+    <val type="dict" id="1111040860" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46496152" >
-          <item type="dict" id="46917008" >
+        <val type="list" id="1111005708" >
+          <item type="dict" id="1111041948" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 8 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46917296" >
+          <item type="dict" id="1111042220" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25639" />
-    <val type="dict" id="46402592" >
+    <val type="dict" id="1111028708" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46504632" >
-          <item type="dict" id="46402880" >
+        <val type="list" id="1111004812" >
+          <item type="dict" id="1111030204" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="47097376" >
+          <item type="dict" id="1111030476" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25601" />
-    <val type="dict" id="46782704" >
+    <val type="dict" id="1111041676" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46502400" >
-          <item type="dict" id="46782992" >
+        <val type="list" id="1111005324" >
+          <item type="dict" id="1111042764" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Input 16 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46783328" >
+          <item type="dict" id="1111043036" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
   </entry>
   <entry>
     <key type="numeric" value="25200" />
-    <val type="dict" id="47234848" >
+    <val type="dict" id="1111027892" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46502760" >
-          <item type="dict" id="47235136" >
+        <val type="list" id="1111004716" >
+          <item type="dict" id="1111028980" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Output 1 Bit" />
             </entry>
           </item>
-          <item type="dict" id="47325760" >
+          <item type="dict" id="1111029252" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24872" />
-    <val type="dict" id="47097712" >
+    <val type="dict" id="1111036900" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46504416" >
-          <item type="dict" id="47098000" >
+        <val type="list" id="1111005260" >
+          <item type="dict" id="1111037308" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 32 bit" />
             </entry>
           </item>
-          <item type="dict" id="47263264" >
+          <item type="dict" id="1111030748" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25619" />
-    <val type="dict" id="46909232" >
+    <val type="dict" id="1111042900" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46505424" >
-          <item type="dict" id="46909520" >
+        <val type="list" id="1111005932" >
+          <item type="dict" id="1111052332" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs Float" />
             </entry>
           </item>
-          <item type="dict" id="46909808" >
+          <item type="dict" id="1111052604" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
     </val>
   </entry>
   <entry>
-    <key type="numeric" value="25168" />
-    <val type="dict" id="46910144" >
-      <entry>
-        <key type="string" value="incr" />
-        <val type="numeric" value="1" />
-      </entry>
-      <entry>
-        <key type="string" value="struct" />
-        <val type="numeric" value="15" />
-      </entry>
+    <key type="numeric" value="25382" />
+    <val type="dict" id="1111043308" >
       <entry>
-        <key type="string" value="nbmax" />
-        <val type="numeric" value="8" />
+        <key type="string" value="need" />
+        <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44128376" >
-          <item type="dict" id="46910432" >
+        <val type="list" id="1111005676" >
+          <item type="dict" id="1111052740" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Number of Output 1 Bit" />
+              <val type="string" value="Number of Output 32 Bit" />
             </entry>
           </item>
-          <item type="dict" id="46910720" >
+          <item type="dict" id="1111053012" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
             </entry>
             <entry>
               <key type="string" value="type" />
-              <val type="numeric" value="1" />
+              <val type="numeric" value="7" />
             </entry>
             <entry>
               <key type="string" value="name" />
-              <val type="string" value="Error Mode Outputs 0x%X[((idx-1)*128+sub)]" />
+              <val type="string" value="Error Mode Outputs 0x%X to 0x%X[(sub*32-31,sub*32)]" />
             </entry>
             <entry>
               <key type="string" value="nbmax" />
-              <val type="numeric" value="128" />
+              <val type="numeric" value="254" />
             </entry>
           </item>
         </val>
       </entry>
       <entry>
-        <key type="string" value="need" />
-        <val type="False" value="" />
+        <key type="string" value="name" />
+        <val type="string" value="Error Mode Outputs 32 Bit" />
       </entry>
       <entry>
-        <key type="string" value="name" />
-        <val type="string" value="Error Mode Outputs Lines %d to %d[(idx*128-127,idx*128)]" />
+        <key type="string" value="struct" />
+        <val type="numeric" value="7" />
       </entry>
     </val>
   </entry>
   <entry>
     <key type="numeric" value="24839" />
-    <val type="dict" id="46911792" >
+    <val type="dict" id="1111043716" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46496008" >
-          <item type="dict" id="46912080" >
+        <val type="list" id="1111005964" >
+          <item type="dict" id="1111053148" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 16 bit" />
             </entry>
           </item>
-          <item type="dict" id="46405376" >
+          <item type="dict" id="1111053420" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25671" />
-    <val type="dict" id="46405712" >
+    <val type="dict" id="1111052468" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46504776" >
-          <item type="dict" id="46406000" >
+        <val type="list" id="1111005804" >
+          <item type="dict" id="1111053556" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Outputs" />
             </entry>
           </item>
-          <item type="dict" id="46406288" >
+          <item type="dict" id="1111053828" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="25637" />
-    <val type="dict" id="46406624" >
+    <val type="dict" id="1111052876" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46497304" >
-          <item type="dict" id="46406912" >
+        <val type="list" id="1111006060" >
+          <item type="dict" id="1111053964" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Analogue Inputs" />
             </entry>
           </item>
-          <item type="dict" id="46407200" >
+          <item type="dict" id="1111054236" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="24688" />
-    <val type="dict" id="46407536" >
+    <val type="dict" id="1111053284" >
       <entry>
         <key type="string" value="incr" />
         <val type="numeric" value="1" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46513472" >
-          <item type="dict" id="46407824" >
+        <val type="list" id="1111006028" >
+          <item type="dict" id="1111054372" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Input 1 bit" />
             </entry>
           </item>
-          <item type="dict" id="46408112" >
+          <item type="dict" id="1111054644" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
     </val>
   </entry>
 </attr>
-<attr name="Description" type="string"></attr>
-<attr name="Dictionary" type="dict" id="46409184" >
+<attr name="Description" type="string" value="" />
+<attr name="Dictionary" type="dict" id="1111036356" >
   <entry>
     <key type="numeric" value="4096" />
     <val type="numeric" value="301" />
   </entry>
   <entry>
     <key type="numeric" value="5122" />
-    <val type="list" id="46522024" >
+    <val type="list" id="1101093676" >
       <item type="numeric" value="1025" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="4112" />
-    <val type="list" id="46521016" >
+    <val type="list" id="1101092716" >
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="4113" />
-    <val type="list" id="46520944" >
+    <val type="list" id="1111006092" >
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="5123" />
-    <val type="list" id="46520872" >
+    <val type="list" id="1111005900" >
       <item type="numeric" value="1154" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="4118" />
-    <val type="list" id="46520656" >
+    <val type="list" id="1111006156" >
       <item type="numeric" value="132572" />
     </val>
   </entry>
   <entry>
     <key type="numeric" value="4120" />
-    <val type="list" id="46520728" >
+    <val type="list" id="1111006124" >
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="4736" />
-    <val type="list" id="46520800" >
+    <val type="list" id="1111006444" >
       <item type="numeric" value="1538" />
       <item type="numeric" value="1410" />
       <item type="numeric" value="2" />
   </entry>
   <entry>
     <key type="numeric" value="7970" />
-    <val type="list" id="46520584" >
+    <val type="list" id="1111006252" >
       <item type="string" value="" />
       <item type="string" value="\x01\x00\x00\x00\x17\x10\x00\x02\x00\x00\x00\xe8\x03" />
     </val>
   </entry>
   <entry>
     <key type="numeric" value="5120" />
-    <val type="list" id="46520512" >
+    <val type="list" id="1111006316" >
       <item type="string" value="{True:self.ID+(base+2)*0x100,False:0}[base&lt;4]" />
       <item type="numeric" value="1" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="5632" />
-    <val type="list" id="46520440" >
+    <val type="list" id="1111006412" >
       <item type="numeric" value="536870913" />
       <item type="numeric" value="536936449" />
       <item type="numeric" value="537001985" />
   </entry>
   <entry>
     <key type="numeric" value="5121" />
-    <val type="list" id="46520368" >
+    <val type="list" id="1111003532" >
       <item type="string" value="{True:self.ID+(base+2)*0x100,False:0}[base&lt;4]" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="5633" />
-    <val type="list" id="46520296" >
+    <val type="list" id="1111006348" >
       <item type="numeric" value="537526288" />
     </val>
   </entry>
   <entry>
     <key type="numeric" value="5635" />
-    <val type="list" id="46520224" >
+    <val type="list" id="1111006508" >
       <item type="numeric" value="537657360" />
     </val>
   </entry>
   <entry>
     <key type="numeric" value="5634" />
-    <val type="list" id="46520008" >
+    <val type="list" id="1111006284" >
       <item type="numeric" value="537591824" />
     </val>
   </entry>
 </attr>
-<attr name="SpecificMenu" type="list" id="46520080" >
-  <item type="tuple" id="42137936" >
+<attr name="SpecificMenu" type="list" id="1101093388" >
+  <item type="tuple" id="1111003660" >
     <item type="string" value="Read Input Bit" />
-    <item type="list" id="46519936" >
+    <item type="list" id="1111006188" >
       <item type="numeric" value="24608" />
       <item type="numeric" value="24624" />
       <item type="numeric" value="24632" />
       <item type="numeric" value="24688" />
     </item>
   </item>
-  <item type="tuple" id="42135992" >
+  <item type="tuple" id="1111003948" >
     <item type="string" value="Write Output Bit" />
-    <item type="list" id="46520152" >
+    <item type="list" id="1111006476" >
       <item type="numeric" value="25120" />
       <item type="numeric" value="25152" />
       <item type="numeric" value="25168" />
     </item>
   </item>
 </attr>
-<attr name="ParamsDictionary" type="dict" id="45635056" >
+<attr name="ParamsDictionary" type="dict" id="1111171116" >
 </attr>
-<attr name="UserMapping" type="dict" id="46409840" >
+<attr name="UserMapping" type="dict" id="1111054100" >
   <entry>
     <key type="numeric" value="8192" />
-    <val type="dict" id="46410128" >
+    <val type="dict" id="1111053692" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519864" >
-          <item type="dict" id="46410416" >
+        <val type="list" id="1111006732" >
+          <item type="dict" id="1111055596" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8193" />
-    <val type="dict" id="46410752" >
+    <val type="dict" id="1111039484" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519792" >
-          <item type="dict" id="46411040" >
+        <val type="list" id="1111005868" >
+          <item type="dict" id="1111055324" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8194" />
-    <val type="dict" id="46411328" >
+    <val type="dict" id="1111055052" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519648" >
-          <item type="dict" id="47330224" >
+        <val type="list" id="1111006828" >
+          <item type="dict" id="1111054508" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8195" />
-    <val type="dict" id="47330560" >
+    <val type="dict" id="1111055868" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519720" >
-          <item type="dict" id="47330848" >
+        <val type="list" id="1111005996" >
+          <item type="dict" id="1111055732" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8196" />
-    <val type="dict" id="47331184" >
+    <val type="dict" id="1111056140" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519576" >
-          <item type="dict" id="47331472" >
+        <val type="list" id="1111006636" >
+          <item type="dict" id="1111056004" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8197" />
-    <val type="dict" id="47331936" >
+    <val type="dict" id="1111056564" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519360" >
-          <item type="dict" id="47332224" >
+        <val type="list" id="1111006860" >
+          <item type="dict" id="1111056428" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8198" />
-    <val type="dict" id="47333472" >
+    <val type="dict" id="1111056836" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519504" >
-          <item type="dict" id="47333760" >
+        <val type="list" id="1111006796" >
+          <item type="dict" id="1111056700" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8199" />
-    <val type="dict" id="46767408" >
+    <val type="dict" id="1111057108" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519072" >
-          <item type="dict" id="46767696" >
+        <val type="list" id="1111007180" >
+          <item type="dict" id="1111056972" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8200" />
-    <val type="dict" id="46768160" >
+    <val type="dict" id="1111057380" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519000" >
-          <item type="dict" id="46768448" >
+        <val type="list" id="1111007020" >
+          <item type="dict" id="1111057244" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8201" />
-    <val type="dict" id="46768912" >
+    <val type="dict" id="1111057652" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46518856" >
-          <item type="dict" id="46769200" >
+        <val type="list" id="1111006956" >
+          <item type="dict" id="1111057516" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8202" />
-    <val type="dict" id="46769664" >
+    <val type="dict" id="1111057924" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46518496" >
-          <item type="dict" id="46769952" >
+        <val type="list" id="1111006988" >
+          <item type="dict" id="1111057788" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8203" />
-    <val type="dict" id="46770416" >
+    <val type="dict" id="1111058196" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46518640" >
-          <item type="dict" id="46770704" >
+        <val type="list" id="1111007116" >
+          <item type="dict" id="1111058060" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8204" />
-    <val type="dict" id="46771104" >
+    <val type="dict" id="1111058468" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46518352" >
-          <item type="dict" id="46771392" >
+        <val type="list" id="1111060524" >
+          <item type="dict" id="1111058332" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
     </val>
   </entry>
 </attr>
-<attr name="DS302" type="dict" id="46772576" >
+<attr name="DS302" type="dict" id="1111058740" >
   <entry>
     <key type="numeric" value="7968" />
-    <val type="dict" id="46772864" >
+    <val type="dict" id="1111055188" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46519216" >
-          <item type="dict" id="46773152" >
+        <val type="list" id="1111060652" >
+          <item type="dict" id="1111059420" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Entries" />
             </entry>
           </item>
-          <item type="dict" id="46773488" >
+          <item type="dict" id="1111059284" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="7969" />
-    <val type="dict" id="46773824" >
+    <val type="dict" id="1111058876" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="46522240" >
-          <item type="dict" id="46774112" >
+        <val type="list" id="1111060620" >
+          <item type="dict" id="1111054916" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Entries" />
             </entry>
           </item>
-          <item type="dict" id="46774400" >
+          <item type="dict" id="1111059692" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="7970" />
-    <val type="dict" id="46774736" >
+    <val type="dict" id="1111055460" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44204832" >
-          <item type="dict" id="46775024" >
+        <val type="list" id="1111060684" >
+          <item type="dict" id="1111059828" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="ro" />
               <val type="string" value="Number of Entries" />
             </entry>
           </item>
-          <item type="dict" id="46775312" >
+          <item type="dict" id="1111060100" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
index b3e06de90a9fd925fb21904ac7d7c4d954d57072..12a0342f2f60a2f04b5d763d6fee027db8d7f262 100644 (file)
@@ -193,7 +193,8 @@ int main(int argc,char **argv)
                TestSlave_Data.stopped = TestSlave_stopped;
                TestSlave_Data.post_sync = TestSlave_post_sync;
                TestSlave_Data.post_TPDO = TestSlave_post_TPDO;
-               TestSlave_Data.storeODSubIndex = TestSlave_storeODSubIndex;             
+               TestSlave_Data.storeODSubIndex = TestSlave_storeODSubIndex;
+               TestSlave_Data.post_emcy = TestSlave_post_emcy;
 
                if(!canOpen(&SlaveBoard,&TestSlave_Data)){
                        eprintf("Cannot open Slave Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate);
@@ -209,6 +210,7 @@ int main(int argc,char **argv)
                TestMaster_Data.stopped = TestMaster_stopped;
                TestMaster_Data.post_sync = TestMaster_post_sync;
                TestMaster_Data.post_TPDO = TestMaster_post_TPDO;
+               TestMaster_Data.post_emcy = TestMaster_post_emcy;
                
                if(!canOpen(&MasterBoard,&TestMaster_Data)){
                        eprintf("Cannot open Master Board (%s,%s)\n",MasterBoard.busname, MasterBoard.baudrate);
index 960ddb6de274ba43c3ff430e4c590a265c7aee22..83a40eb2f75ae7a60d1eb5f153407f54e36120c6 100644 (file)
@@ -66,6 +66,44 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                        { RO, uint8, sizeof (UNS8), (void*)&TestSlave_obj1001 }
                      };
 
+/* index 0x1003 :   Pre-defined Error Field. */
+                    UNS8 TestSlave_highestSubIndex_obj1003 = 8; /* number of subindex - 1*/
+                    UNS32 TestSlave_obj1003[] = 
+                    {
+                      0x0,     /* 0 */
+                      0x0,     /* 0 */
+                      0x0,     /* 0 */
+                      0x0,     /* 0 */
+                      0x0,     /* 0 */
+                      0x0,     /* 0 */
+                      0x0,     /* 0 */
+                      0x0      /* 0 */
+                    };
+                    ODCallback_t TestSlave_Index1003_callbacks[] = 
+                     {
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                     };
+                    subindex TestSlave_Index1003[] = 
+                     {
+                       { RW, uint8, sizeof (UNS8), (void*)&TestSlave_highestSubIndex_obj1003 },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1003[0] },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1003[1] },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1003[2] },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1003[3] },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1003[4] },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1003[5] },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1003[6] },
+                       { RO, uint32, sizeof (UNS32), (void*)&TestSlave_obj1003[7] }
+                     };
+
 /* index 0x1005 :   SYNC COB ID. */
                     UNS32 TestSlave_obj1005 = 0x80;    /* 128 */
                     ODCallback_t TestSlave_Index1005_callbacks[] = 
@@ -465,6 +503,7 @@ const indextable TestSlave_objdict[] =
 {
   { (subindex*)TestSlave_Index1000,sizeof(TestSlave_Index1000)/sizeof(TestSlave_Index1000[0]), 0x1000},
   { (subindex*)TestSlave_Index1001,sizeof(TestSlave_Index1001)/sizeof(TestSlave_Index1001[0]), 0x1001},
+  { (subindex*)TestSlave_Index1003,sizeof(TestSlave_Index1003)/sizeof(TestSlave_Index1003[0]), 0x1003},
   { (subindex*)TestSlave_Index1005,sizeof(TestSlave_Index1005)/sizeof(TestSlave_Index1005[0]), 0x1005},
   { (subindex*)TestSlave_Index1006,sizeof(TestSlave_Index1006)/sizeof(TestSlave_Index1006[0]), 0x1006},
   { (subindex*)TestSlave_Index1010,sizeof(TestSlave_Index1010)/sizeof(TestSlave_Index1010[0]), 0x1010},
@@ -504,36 +543,37 @@ const indextable * TestSlave_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCal
        switch(wIndex){
                case 0x1000: i = 0;break;
                case 0x1001: i = 1;break;
-               case 0x1005: i = 2;*callbacks = TestSlave_Index1005_callbacks; break;
-               case 0x1006: i = 3;*callbacks = TestSlave_Index1006_callbacks; break;
-               case 0x1010: i = 4;*callbacks = TestSlave_Index1010_callbacks; break;
-               case 0x1011: i = 5;*callbacks = TestSlave_Index1011_callbacks; break;
-               case 0x1017: i = 6;*callbacks = TestSlave_Index1017_callbacks; break;
-               case 0x1018: i = 7;break;
-               case 0x1200: i = 8;break;
-               case 0x1800: i = 9;*callbacks = TestSlave_Index1800_callbacks; break;
-               case 0x1801: i = 10;*callbacks = TestSlave_Index1801_callbacks; break;
-               case 0x1802: i = 11;*callbacks = TestSlave_Index1802_callbacks; break;
-               case 0x1803: i = 12;*callbacks = TestSlave_Index1803_callbacks; break;
-               case 0x1804: i = 13;*callbacks = TestSlave_Index1804_callbacks; break;
-               case 0x1A00: i = 14;break;
-               case 0x1A01: i = 15;break;
-               case 0x1A02: i = 16;break;
-               case 0x1A03: i = 17;break;
-               case 0x1A04: i = 18;break;
-               case 0x2000: i = 19;break;
-               case 0x2001: i = 20;break;
-               case 0x2002: i = 21;break;
-               case 0x2003: i = 22;break;
-               case 0x2004: i = 23;break;
-               case 0x2005: i = 24;break;
-               case 0x2006: i = 25;break;
-               case 0x2007: i = 26;break;
-               case 0x2008: i = 27;break;
-               case 0x2009: i = 28;break;
-               case 0x200A: i = 29;break;
-               case 0x200B: i = 30;break;
-               case 0x200C: i = 31;break;
+               case 0x1003: i = 2;*callbacks = TestSlave_Index1003_callbacks; break;
+               case 0x1005: i = 3;*callbacks = TestSlave_Index1005_callbacks; break;
+               case 0x1006: i = 4;*callbacks = TestSlave_Index1006_callbacks; break;
+               case 0x1010: i = 5;*callbacks = TestSlave_Index1010_callbacks; break;
+               case 0x1011: i = 6;*callbacks = TestSlave_Index1011_callbacks; break;
+               case 0x1017: i = 7;*callbacks = TestSlave_Index1017_callbacks; break;
+               case 0x1018: i = 8;break;
+               case 0x1200: i = 9;break;
+               case 0x1800: i = 10;*callbacks = TestSlave_Index1800_callbacks; break;
+               case 0x1801: i = 11;*callbacks = TestSlave_Index1801_callbacks; break;
+               case 0x1802: i = 12;*callbacks = TestSlave_Index1802_callbacks; break;
+               case 0x1803: i = 13;*callbacks = TestSlave_Index1803_callbacks; break;
+               case 0x1804: i = 14;*callbacks = TestSlave_Index1804_callbacks; break;
+               case 0x1A00: i = 15;break;
+               case 0x1A01: i = 16;break;
+               case 0x1A02: i = 17;break;
+               case 0x1A03: i = 18;break;
+               case 0x1A04: i = 19;break;
+               case 0x2000: i = 20;break;
+               case 0x2001: i = 21;break;
+               case 0x2002: i = 22;break;
+               case 0x2003: i = 23;break;
+               case 0x2004: i = 24;break;
+               case 0x2005: i = 25;break;
+               case 0x2006: i = 26;break;
+               case 0x2007: i = 27;break;
+               case 0x2008: i = 28;break;
+               case 0x2009: i = 29;break;
+               case 0x200A: i = 30;break;
+               case 0x200B: i = 31;break;
+               case 0x200C: i = 32;break;
                default:
                        *errorCode = OD_NO_SUCH_OBJECT;
                        return NULL;
@@ -550,21 +590,21 @@ const indextable * TestSlave_scanIndexOD (UNS16 wIndex, UNS32 * errorCode, ODCal
 s_PDO_status TestSlave_PDO_status[5] = {s_PDO_staus_Initializer,s_PDO_staus_Initializer,s_PDO_staus_Initializer,s_PDO_staus_Initializer,s_PDO_staus_Initializer};
 
 quick_index TestSlave_firstIndex = {
-  8, /* SDO_SVR */
+  9, /* SDO_SVR */
   0, /* SDO_CLT */
   0, /* PDO_RCV */
   0, /* PDO_RCV_MAP */
-  9, /* PDO_TRS */
-  14 /* PDO_TRS_MAP */
+  10, /* PDO_TRS */
+  15 /* PDO_TRS_MAP */
 };
 
 quick_index TestSlave_lastIndex = {
-  8, /* SDO_SVR */
+  9, /* SDO_SVR */
   0, /* SDO_CLT */
   0, /* PDO_RCV */
   0, /* PDO_RCV_MAP */
-  13, /* PDO_TRS */
-  18 /* PDO_TRS_MAP */
+  14, /* PDO_TRS */
+  19 /* PDO_TRS_MAP */
 };
 
 UNS16 TestSlave_ObjdictSize = sizeof(TestSlave_objdict)/sizeof(TestSlave_objdict[0]); 
index beac1c2c649c1015e61571b3d46f8a73d522c5fc..ccc17054ad822c1523a7346c9cfef0030fc90b3d 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version="1.0"?>
 <!DOCTYPE PyObject SYSTEM "PyObjects.dtd">
-<PyObject module="node" class="Node" id="44190968">
-<attr name="Profile" type="dict" id="45532192" >
+<PyObject module="node" class="Node" id="1111185676">
+<attr name="Profile" type="dict" id="1111312828" >
 </attr>
 <attr name="Name" type="string">TestSlave</attr>
-<attr name="Dictionary" type="dict" id="46134672" >
+<attr name="Dictionary" type="dict" id="1111382324" >
   <entry>
     <key type="numeric" value="4096" />
     <val type="numeric" value="301" />
@@ -59,7 +59,7 @@
   </entry>
   <entry>
     <key type="numeric" value="6146" />
-    <val type="list" id="44160208" >
+    <val type="list" id="1111185772" >
       <item type="string" value="{True:self.ID+(base+1)*0x100+0x80,False:0}[base&lt;4]" />
       <item type="numeric" value="255" />
       <item type="numeric" value="5000" />
@@ -69,7 +69,7 @@
   </entry>
   <entry>
     <key type="numeric" value="4112" />
-    <val type="list" id="44204760" >
+    <val type="list" id="1111186764" >
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
@@ -78,7 +78,7 @@
   </entry>
   <entry>
     <key type="numeric" value="4113" />
-    <val type="list" id="44204112" >
+    <val type="list" id="1111185420" >
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="6658" />
-    <val type="list" id="44159992" >
+    <val type="list" id="1111184332" >
       <item type="numeric" value="537591824" />
     </val>
   </entry>
   <entry>
     <key type="numeric" value="6147" />
-    <val type="list" id="44190680" >
+    <val type="list" id="1111186412" >
       <item type="string" value="{True:self.ID+(base+1)*0x100+0x80,False:0}[base&lt;4]" />
       <item type="numeric" value="252" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="4608" />
-    <val type="list" id="44204472" >
+    <val type="list" id="1111185580" >
       <item type="numeric" value="1537" />
       <item type="numeric" value="1409" />
     </val>
   </entry>
   <entry>
     <key type="numeric" value="4120" />
-    <val type="list" id="44204832" >
+    <val type="list" id="1111377772" >
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="6148" />
-    <val type="list" id="44191688" >
+    <val type="list" id="1111186220" >
       <item type="numeric" value="1025" />
       <item type="numeric" value="253" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="6659" />
-    <val type="list" id="44204976" >
+    <val type="list" id="1111184492" >
       <item type="numeric" value="537657360" />
     </val>
   </entry>
   </entry>
   <entry>
     <key type="numeric" value="6144" />
-    <val type="list" id="44191616" >
+    <val type="list" id="1111184652" >
       <item type="string" value="{True:self.ID+(base+1)*0x100+0x80,False:0}[base&lt;4]" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="6660" />
-    <val type="list" id="44191040" >
+    <val type="list" id="1111184460" >
       <item type="numeric" value="537657360" />
     </val>
   </entry>
   <entry>
     <key type="numeric" value="6656" />
-    <val type="list" id="44205120" >
+    <val type="list" id="1111186860" >
       <item type="numeric" value="536870913" />
       <item type="numeric" value="536936449" />
       <item type="numeric" value="537001985" />
       <item type="numeric" value="537460768" />
     </val>
   </entry>
+  <entry>
+    <key type="numeric" value="4099" />
+    <val type="list" id="1111186380" >
+      <item type="numeric" value="0" />
+      <item type="numeric" value="0" />
+      <item type="numeric" value="0" />
+      <item type="numeric" value="0" />
+      <item type="numeric" value="0" />
+      <item type="numeric" value="0" />
+      <item type="numeric" value="0" />
+      <item type="numeric" value="0" />
+    </val>
+  </entry>
   <entry>
     <key type="numeric" value="6145" />
-    <val type="list" id="44205048" >
+    <val type="list" id="1111213196" >
       <item type="string" value="{True:self.ID+(base+1)*0x100+0x80,False:0}[base&lt;4]" />
       <item type="numeric" value="0" />
       <item type="numeric" value="0" />
   </entry>
   <entry>
     <key type="numeric" value="6657" />
-    <val type="list" id="44204904" >
+    <val type="list" id="1111215276" >
       <item type="numeric" value="537526288" />
     </val>
   </entry>
 </attr>
-<attr name="SpecificMenu" type="list" id="44204688" >
+<attr name="SpecificMenu" type="list" id="1111215180" >
 </attr>
-<attr name="ParamsDictionary" type="dict" id="44502560" >
+<attr name="ParamsDictionary" type="dict" id="1102931324" >
   <entry>
     <key type="numeric" value="8192" />
-    <val type="dict" id="46323360" >
+    <val type="dict" id="1111381644" >
       <entry>
         <key type="string" value="callback" />
         <val type="False" value="" />
   </entry>
   <entry>
     <key type="numeric" value="6144" />
-    <val type="dict" id="46134064" >
+    <val type="dict" id="1111382460" >
       <entry>
         <key type="numeric" value="2" />
-        <val type="dict" id="45517376" >
+        <val type="dict" id="1111381372" >
           <entry>
             <key type="string" value="save" />
             <val type="True" value="" />
       </entry>
       <entry>
         <key type="numeric" value="3" />
-        <val type="dict" id="45486528" >
+        <val type="dict" id="1102938428" >
           <entry>
             <key type="string" value="save" />
             <val type="True" value="" />
   </entry>
   <entry>
     <key type="numeric" value="6146" />
-    <val type="dict" id="45550400" >
+    <val type="dict" id="1111252068" >
       <entry>
         <key type="numeric" value="2" />
-        <val type="dict" id="45424304" >
+        <val type="dict" id="1111381780" >
           <entry>
             <key type="string" value="comment" />
             <val type="string">EVENT</val>
       </entry>
       <entry>
         <key type="numeric" value="3" />
-        <val type="dict" id="44825120" >
+        <val type="dict" id="1111381916" >
           <entry>
             <key type="string" value="comment" />
             <val type="string">5000*100 ÂµC = 500 ms</val>
       </entry>
       <entry>
         <key type="numeric" value="4" />
-        <val type="dict" id="45946192" >
+        <val type="dict" id="1111251932" >
           <entry>
             <key type="string" value="comment" />
             <val type="string" value="" />
       </entry>
       <entry>
         <key type="numeric" value="5" />
-        <val type="dict" id="45558240" >
+        <val type="dict" id="1111381508" >
           <entry>
             <key type="string" value="comment" />
             <val type="string">1000 ms</val>
   </entry>
   <entry>
     <key type="numeric" value="6147" />
-    <val type="dict" id="45381152" >
+    <val type="dict" id="1111382052" >
       <entry>
         <key type="numeric" value="2" />
-        <val type="dict" id="44869008" >
+        <val type="dict" id="1111382188" >
           <entry>
             <key type="string" value="comment" />
             <val type="string">RTR_SYNC</val>
   </entry>
   <entry>
     <key type="numeric" value="6148" />
-    <val type="dict" id="45645664" >
+    <val type="dict" id="1111382596" >
       <entry>
         <key type="numeric" value="2" />
-        <val type="dict" id="45619920" >
+        <val type="dict" id="1111382732" >
           <entry>
             <key type="string" value="comment" />
             <val type="string">RTR</val>
   </entry>
   <entry>
     <key type="numeric" value="4112" />
-    <val type="dict" id="45559424" >
+    <val type="dict" id="1111382868" >
       <entry>
         <key type="string" value="callback" />
         <val type="True" value="" />
   </entry>
   <entry>
     <key type="numeric" value="4113" />
-    <val type="dict" id="45758656" >
+    <val type="dict" id="1111383004" >
+      <entry>
+        <key type="string" value="callback" />
+        <val type="True" value="" />
+      </entry>
+    </val>
+  </entry>
+  <entry>
+    <key type="numeric" value="4099" />
+    <val type="dict" id="1111387644" >
       <entry>
         <key type="string" value="callback" />
         <val type="True" value="" />
   </entry>
   <entry>
     <key type="numeric" value="4119" />
-    <val type="dict" id="45945616" >
+    <val type="dict" id="1111383140" >
       <entry>
         <key type="string" value="callback" />
         <val type="True" value="" />
     </val>
   </entry>
 </attr>
-<attr name="UserMapping" type="dict" id="45618240" >
+<attr name="UserMapping" type="dict" id="1111383276" >
   <entry>
     <key type="numeric" value="8192" />
-    <val type="dict" id="46144528" >
+    <val type="dict" id="1111383412" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44204544" >
-          <item type="dict" id="46103712" >
+        <val type="list" id="1111214412" >
+          <item type="dict" id="1111383548" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8193" />
-    <val type="dict" id="45619296" >
+    <val type="dict" id="1111383684" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44204400" >
-          <item type="dict" id="46103424" >
+        <val type="list" id="1111213516" >
+          <item type="dict" id="1111383820" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8194" />
-    <val type="dict" id="46142672" >
+    <val type="dict" id="1111384108" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44204328" >
-          <item type="dict" id="45529040" >
+        <val type="list" id="1111213612" >
+          <item type="dict" id="1111384244" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8195" />
-    <val type="dict" id="45620208" >
+    <val type="dict" id="1111384380" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44204256" >
-          <item type="dict" id="46323648" >
+        <val type="list" id="1111214860" >
+          <item type="dict" id="1111384516" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8196" />
-    <val type="dict" id="46100416" >
+    <val type="dict" id="1111384652" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44204184" >
-          <item type="dict" id="45805232" >
+        <val type="list" id="1111212716" >
+          <item type="dict" id="1111384788" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8197" />
-    <val type="dict" id="46092800" >
+    <val type="dict" id="1111384924" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44191544" >
-          <item type="dict" id="45757584" >
+        <val type="list" id="1111212748" >
+          <item type="dict" id="1111385060" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8198" />
-    <val type="dict" id="46132560" >
+    <val type="dict" id="1111385196" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44191472" >
-          <item type="dict" id="45619008" >
+        <val type="list" id="1111305356" >
+          <item type="dict" id="1111385332" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8199" />
-    <val type="dict" id="46093776" >
+    <val type="dict" id="1111385468" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44191400" >
-          <item type="dict" id="46135248" >
+        <val type="list" id="1111303532" >
+          <item type="dict" id="1111385604" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8200" />
-    <val type="dict" id="45524512" >
+    <val type="dict" id="1111385740" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44190896" >
-          <item type="dict" id="46092448" >
+        <val type="list" id="1111306124" >
+          <item type="dict" id="1111385876" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8201" />
-    <val type="dict" id="46139744" >
+    <val type="dict" id="1111386012" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44191112" >
-          <item type="dict" id="46093376" >
+        <val type="list" id="1111302572" >
+          <item type="dict" id="1111386148" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8202" />
-    <val type="dict" id="46140816" >
+    <val type="dict" id="1111386284" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44191328" >
-          <item type="dict" id="46098560" >
+        <val type="list" id="1111305228" >
+          <item type="dict" id="1111386420" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8203" />
-    <val type="dict" id="45438400" >
+    <val type="dict" id="1111386556" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44191256" >
-          <item type="dict" id="43876288" >
+        <val type="list" id="1111304524" >
+          <item type="dict" id="1111386692" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
   </entry>
   <entry>
     <key type="numeric" value="8204" />
-    <val type="dict" id="45591984" >
+    <val type="dict" id="1111386828" >
       <entry>
         <key type="string" value="need" />
         <val type="False" value="" />
       </entry>
       <entry>
         <key type="string" value="values" />
-        <val type="list" id="44128664" >
-          <item type="dict" id="45889536" >
+        <val type="list" id="1111305484" >
+          <item type="dict" id="1111386964" >
             <entry>
               <key type="string" value="access" />
               <val type="string" value="rw" />
     </val>
   </entry>
 </attr>
-<attr name="DS302" type="dict" id="45646224" >
+<attr name="DS302" type="dict" id="1111387100" >
 </attr>
 <attr name="ProfileName" type="string" value="DS-301" />
 <attr name="Type" type="string">slave</attr>
 <attr name="ID" type="numeric" value="2" />
-<attr name="Description" type="string"></attr>
+<attr name="Description" type="string" value="" />
 </PyObject>
index e62471e7b18f5ea5200aa084aa8ae87316d2bbcd..0cdd19db1a91bc45338854180bc49d6bcec44500 100644 (file)
@@ -43,6 +43,7 @@ typedef struct struct_CO_Data CO_Data;
 #include "lifegrd.h"
 #include "sync.h"
 #include "nmtMaster.h"
+#include "emcy.h"
 
 /* This structurs contains all necessary information for a CanOpen node */
 struct struct_CO_Data {
@@ -95,6 +96,15 @@ struct struct_CO_Data {
        UNS8* dcf_cursor;
        UNS32 dcf_count_targets;
        
+       /* EMCY */
+       e_errorState error_state;
+       UNS8 error_history_size;
+       UNS8* error_number;
+       UNS32* error_first_element;
+       UNS8* error_register;
+       s_errors error_data[EMCY_MAX_ERRORS];
+       post_emcy_t post_emcy;
+       
 };
 
 #define NMTable_Initializer Unknown_state,
@@ -115,6 +125,13 @@ struct struct_CO_Data {
                NULL        /* Callback */\
          },
 
+#define ERROR_DATA_INITIALIZER \
+       {\
+       0, /* errCode */\
+       0, /* errRegMask */\
+       0 /* active */\
+       },
+
 /* A macro to initialize the data in client app.*/
 /* CO_Data structure */
 #define CANOPEN_NODE_DATA_INITIALIZER(NODE_PREFIX) {\
@@ -174,7 +191,19 @@ struct struct_CO_Data {
        NODE_PREFIX ## _scanIndexOD,                /* scanIndexOD */\
        _storeODSubIndex,                /* storeODSubIndex */\
        NULL,           /*dcf_cursor*/\
-       1               /*dcf_count_targets*/\
+       1,              /*dcf_count_targets*/\
+       \
+       /* EMCY */\
+       Error_free,                      /* error_state */\
+       sizeof(NODE_PREFIX ## _obj1003) / sizeof(NODE_PREFIX ## _obj1003[0]),      /* error_history_size */\
+       & NODE_PREFIX ## _highestSubIndex_obj1003,    /* error_number */\
+       & NODE_PREFIX ## _obj1003[0],    /* error_first_element */\
+       & NODE_PREFIX ## _obj1001,       /* error_register */\
+       /* error_data: structure s_errors */\
+       {\
+       REPEAT_EMCY_MAX_ERRORS_TIMES(ERROR_DATA_INITIALIZER)\
+       },\
+       _post_emcy              /* post_emcy */\
 }
 
 #ifdef __cplusplus
diff --git a/include/emcy.h b/include/emcy.h
new file mode 100644 (file)
index 0000000..f3dacf2
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+This file is part of CanFestival, a library implementing CanOpen Stack. 
+
+Copyright (C): Edouard TISSERANT and Francis DUPIN
+
+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
+*/
+
+/*!
+** @file   emcy.h
+** @author Luis Jimenez
+** @date   Wed Sep 26 2007
+**
+** @brief Declarations of the functions that manage EMCY (emergency) messages
+**
+**
+*/
+
+#ifndef __emcy_h__
+#define __emcy_h__
+
+
+#include <applicfg.h>
+
+/* The error states 
+ * ----------------- */
+typedef enum enum_errorState {
+  Error_free           = 0x00, 
+  Error_occurred       = 0x01
+} e_errorState;
+
+typedef struct {
+       UNS16 errCode;
+       UNS8 errRegMask;
+       UNS8 active;
+} s_errors;
+
+#include "data.h"
+
+
+typedef void (*post_emcy_t)(UNS8 nodeID, UNS16 errCode, UNS8 errReg);
+void _post_emcy(UNS8 nodeID, UNS16 errCode, UNS8 errReg);
+
+/*************************************************************************
+ * Functions
+ *************************************************************************/
+
+/** Sets a new error with code errCode. Also sets corresponding bits in Error register (1001h)
+ */
+UNS8 EMCY_setError(CO_Data* d, UNS16 errCode, UNS8 errRegMask);
+
+/** Indicates it has recovered from error errCode. Also clears corresponding bits in Error register (1001h)
+ */
+void EMCY_errorRecovered(CO_Data* d, UNS16 errCode);
+
+/** Start EMCY consumer and producer
+ */
+void emergencyInit(CO_Data* d);
+
+/** Stop EMCY producer and consumer 
+ */
+void emergencyStop(CO_Data* d);
+
+/** This function is responsible to process an EMCY canopen-message 
+ *  \param Message The CAN-message which has to be analysed.
+ */
+void proceedEMCY(CO_Data* d, Message* m);
+
+#endif /*__emcy_h__ */
index ea2b7f2c925310f389d2c4d33008d1996d7d538a..e5ec962a4469974af75404402d92b2c9cf75ebed 100644 (file)
@@ -317,6 +317,27 @@ def GenerateFileContent(Node, headerfilepath):
 #                     Declaration of Particular Parameters
 #-------------------------------------------------------------------------------
 
+    if 0x1003 not in communicationlist:
+        entry_infos = Node.GetEntryInfos(0x1003)
+        texts["EntryName"] = entry_infos["name"]
+        indexContents[0x1003] = """\n/* index 0x1003 :   %(EntryName)s */
+                    UNS8 %(NodeName)s_highestSubIndex_obj1003 = 0; /* number of subindex - 1*/
+                    UNS32 %(NodeName)s_obj1003[] = 
+                    {
+                      0x0      /* 0 */
+                    };
+                    ODCallback_t %(NodeName)s_Index1003_callbacks[] = 
+                     {
+                       NULL,
+                       NULL,
+                     };
+                    subindex %(NodeName)s_Index1003[] = 
+                     {
+                       { RW, uint8, sizeof (UNS8), (void*)&%(NodeName)s_highestSubIndex_obj1003 },
+                       { RO, uint32, sizeof (UNS32), (void*)&%(NodeName)s_obj1003[0] }
+                     };
+"""%texts
+
     if 0x1005 not in communicationlist:
         entry_infos = Node.GetEntryInfos(0x1005)
         texts["EntryName"] = entry_infos["name"]
index c796e692ff41f0e1d68ad0e51d7bbbf861397b19..bb94785cc697a29b6b39bea50a30dc9f4253cd27 100755 (executable)
@@ -104,7 +104,7 @@ MappingDictionary = {
                 [{"name" : "Error Register", "type" : 0x05, "access": 'ro', "pdo" : True}]},
     0x1002 : {"name" : "Manufacturer Status Register", "struct" : var, "need" : False,  "values" :
                 [{"name" : "Manufacturer Status Register", "type" : 0x07, "access" : 'ro', "pdo" : True}]},
-    0x1003 : {"name" : "Pre-defined Error Field", "struct" : rec, "need" : False,  "values" :
+    0x1003 : {"name" : "Pre-defined Error Field", "struct" : rec, "need" : False, "callback" : True,  "values" :
                 [{"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" : False, "callback" : True, "values" :
index 760acfeb698afa84f6690a0e0ed2ee4e8dd54476..c4a2414e831d0df81168e8705740d840a057cd51 100644 (file)
@@ -34,7 +34,7 @@ TIMERS_DRIVER = SUB_TIMERS_DRIVER
 INCLUDES = -I../include -I../include/$(TARGET) -I../include/$(TIMERS_DRIVER) -I../drivers/$(TARGET)
 
 OBJS = $(TARGET)_objacces.o $(TARGET)_lifegrd.o $(TARGET)_sdo.o\
-           $(TARGET)_pdo.o $(TARGET)_sync.o $(TARGET)_nmtSlave.o $(TARGET)_nmtMaster.o $(TARGET)_states.o $(TARGET)_timer.o $(TARGET)_dcf.o
+           $(TARGET)_pdo.o $(TARGET)_sync.o $(TARGET)_nmtSlave.o $(TARGET)_nmtMaster.o $(TARGET)_states.o $(TARGET)_timer.o $(TARGET)_dcf.o $(TARGET)_emcy.o
 
 # # # # Target specific paramters # # # #
 
diff --git a/src/emcy.c b/src/emcy.c
new file mode 100644 (file)
index 0000000..7f9aeec
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+  This file is part of CanFestival, a library implementing CanOpen
+  Stack.
+
+  Copyright (C): Edouard TISSERANT and Francis DUPIN
+
+  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
+*/
+
+/*!
+** @file   emcy.c
+** @author Luis Jimenez
+** @date   Wed Sep 26 2007
+**
+** @brief Definitions of the functions that manage EMCY (emergency) messages
+**
+**
+*/
+
+#include <data.h>
+#include "emcy.h"
+#include "canfestival.h"
+
+
+
+UNS32 OnNumberOfErrorsUpdate(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex);
+UNS8 sendEMCY(CO_Data* d, UNS32 cob_id, UNS16 errCode, UNS8 errRegister);
+
+
+/*! This is called when Index 0x1003 is updated.
+**
+**
+** @param d
+** @param unsused_indextable
+** @param unsused_bSubindex
+**
+** @return
+**/
+UNS32 OnNumberOfErrorsUpdate(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex)
+{
+       UNS8 index;
+  // if 0, reset Pre-defined Error Field
+  // else, don't change and give an abort message (eeror code: 0609 0030h)
+       if (*d->error_number == 0)
+               for (index = 0; index < d->error_history_size; ++index)
+                       *(d->error_first_element + index) = 0;          /* clear all the fields in Pre-defined Error Field (1003h) */
+       else
+               ;// abort message
+  return 0;
+}
+
+/*! start the EMCY mangagement.
+**
+**
+** @param d
+**/
+void emergencyInit(CO_Data* d)
+{
+  RegisterSetODentryCallBack(d, 0x1003, 0x00, &OnNumberOfErrorsUpdate);
+
+  *d->error_number = 0;
+}
+
+/*!
+**
+**
+** @param d
+**/
+void emergencyStop(CO_Data* d)
+{
+  
+}
+
+/*!                                                                                                
+ **                                                                                                 
+ **                                                                                                 
+ ** @param d                                                                                        
+ ** @param cob_id                                                                                   
+ **                                                                                                 
+ ** @return                                                                                         
+ **/  
+UNS8 sendEMCY(CO_Data* d, UNS32 cob_id, UNS16 errCode, UNS8 errRegister)
+{
+       Message m;
+  
+       MSG_WAR(0xA001, "sendEMCY", 0);
+  
+       m.cob_id.w = cob_id ;
+       m.rtr = NOT_A_REQUEST;
+       m.len = 8;
+       m.data[0] = errCode & 0xFF;        /* LSB */
+       m.data[1] = (errCode >> 8) & 0xFF; /* MSB */
+       m.data[2] = errRegister;
+       m.data[3] = 0;          /* Manufacturer specific Error Field still not implemented */
+       m.data[4] = 0;
+       m.data[5] = 0;
+       m.data[6] = 0;
+       m.data[7] = 0;
+  
+       return canSend(d->canHandle,&m);
+}
+
+/*! Sets a new error with code errCode. Also sets corresponding bits in Error register (1001h)
+ **                                                                                                 
+ **  
+ ** @param d
+ ** @param errCode Code of the error                                                                                        
+ ** @param errRegister Bits of Error register (1001h) to be set.
+ ** @return 1 if error, 0 if successful
+ */
+UNS8 EMCY_setError(CO_Data* d, UNS16 errCode, UNS8 errRegMask)
+{
+       UNS8 index;
+       UNS8 errRegister_tmp;
+       
+       for (index = 0; index < EMCY_MAX_ERRORS; ++index)
+       {
+               if (d->error_data[index].errCode == errCode)            /* error already registered */
+               {
+                       if (d->error_data[index].active)
+                       {
+                               MSG_WAR(0xA002, "EMCY message already sent", 0);
+                               return 0;
+                       } else d->error_data[index].active = 1;         /* set as active error */
+                       break;
+               }
+       }
+       
+       if (index == EMCY_MAX_ERRORS)           /* if errCode not already registered */
+               for (index = 0; index < EMCY_MAX_ERRORS; ++index) if (d->error_data[index].active == 0) break;  /* find first inactive error */
+       
+       if (index == EMCY_MAX_ERRORS)           /* error_data full */
+       {
+               MSG_ERR(0xA003, "error_data full", 0);
+               return 1;
+       }
+       
+       d->error_data[index].errCode = errCode;
+       d->error_data[index].errRegMask = 1;
+       d->error_data[index].active = 1;
+       
+       /* set the new state in the error state machine */
+       d->error_state = Error_occurred;
+
+       /* set Error Register (1001h) */
+       for (index = 0, errRegister_tmp = 0; index < EMCY_MAX_ERRORS; ++index)
+               if (d->error_data[index].active == 1) errRegister_tmp |= d->error_data[index].errRegMask;
+       *d->error_register = errRegister_tmp;
+       
+       /* set Pre-defined Error Field (1003h) */
+       for (index = d->error_history_size - 1; index > 0; --index)
+               *(d->error_first_element + index) = *(d->error_first_element + index - 1);
+       *(d->error_first_element) = (UNS32)errCode;
+       if(*d->error_number < d->error_history_size) ++(*d->error_number);
+       
+       /* send EMCY message */
+       if (d->CurrentCommunicationState.csEmergency)
+               return sendEMCY(d, *d->bDeviceNodeId + 0x080, errCode, *d->error_register);
+       else return 1;
+}
+
+/*! Deletes error errCode. Also clears corresponding bits in Error register (1001h)
+ **                                                                                                 
+ **  
+ ** @param d
+ ** @param errCode Code of the error                                                                                        
+ ** @param errRegister Bits of Error register (1001h) to be set.
+ ** @return 1 if error, 0 if successful
+ */
+void EMCY_errorRecovered(CO_Data* d, UNS16 errCode)
+{
+       UNS8 index;
+       UNS8 errRegister_tmp;
+       UNS8 anyActiveError = 0;
+       
+       for (index = 0; index < EMCY_MAX_ERRORS; ++index)
+               if (d->error_data[index].errCode == errCode) break;             /* find the position of the error */
+
+       
+       if ((index != EMCY_MAX_ERRORS) && (d->error_data[index].active == 1))
+       {
+               d->error_data[index].active = 0;
+               
+               /* set Error Register (1001h) and check error state machine */
+               for (index = 0, errRegister_tmp = 0; index < EMCY_MAX_ERRORS; ++index)
+                       if (d->error_data[index].active == 1)
+                       {
+                               anyActiveError = 1;
+                               errRegister_tmp |= d->error_data[index].errRegMask;
+                       }
+               if(anyActiveError == 0)
+               {
+                       d->error_state = Error_free;
+                       /* send a EMCY message with code "Error Reset or No Error" */
+                       if (d->CurrentCommunicationState.csEmergency)
+                               sendEMCY(d, *d->bDeviceNodeId + 0x080, 0x0000, 0x00);
+               }
+               *d->error_register = errRegister_tmp;
+       }
+       else
+               MSG_WAR(0xA004, "recovered error was not active", 0);
+}
+
+/*! This function is responsible to process an EMCY canopen-message.
+ **
+ **
+ ** @param d
+ ** @param m The CAN-message which has to be analysed.
+ **
+ **/
+void proceedEMCY(CO_Data* d, Message* m)
+{
+       UNS8 nodeID;
+       UNS16 errCode;
+       UNS8 errReg;
+       
+       MSG_WAR(0xA005, "EMCY received. Proceed. ", 0);
+  
+       /* Test if the size of the EMCY is ok */
+       if ( m->len != 8) {
+               MSG_ERR(0xA006, "Error size EMCY. CobId  : ", m->cob_id.w);
+               return;
+       }
+       
+       /* post the received EMCY */
+       nodeID = m->cob_id.w & 0x7F;
+       errCode = m->data[0] | ((UNS16)m->data[1] << 8);
+       errReg = m->data[2];
+       (*d->post_emcy)(nodeID, errCode, errReg);
+}
+
+void _post_emcy(UNS8 nodeID, UNS16 errCode, UNS8 errReg){}
index ebdb852c68dd4d2ad90f2eab263a75a3a3ff59aa..a1a6f3fa2d99deb19ab3f6d25e5d2f156d561c1c 100644 (file)
@@ -33,6 +33,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #include "def.h"
 #include "dcf.h"
 #include "nmtSlave.h"
+#include "emcy.h"
 
 /** Prototypes for internals functions */
 /*!                                                                                                
@@ -66,9 +67,14 @@ void canDispatch(CO_Data* d, Message *m)
 {
         switch(m->cob_id.w >> 7)
        {
-               case SYNC:
-                       if(d->CurrentCommunicationState.csSYNC)
-                               proceedSYNC(d);
+               case SYNC:              /* can be a SYNC or a EMCY message */
+                       if(m->cob_id.w == 0x080)        /* SYNC */
+                       {
+                               if(d->CurrentCommunicationState.csSYNC)
+                                       proceedSYNC(d);
+                       } else          /* EMCY */
+                               if(d->CurrentCommunicationState.csEmergency)
+                                       proceedEMCY(d,m);
                        break;
                /* case TIME_STAMP: */
                case PDO1tx:
@@ -122,7 +128,7 @@ void switchCommunicationState(CO_Data* d, s_state_communication *newCommunicatio
        StartOrStop(csSDO,      None,           resetSDO(d))
        StartOrStop(csSYNC,     startSYNC(d),           stopSYNC(d))
        StartOrStop(csHeartbeat,        heartbeatInit(d),       heartbeatStop(d))
-/*     StartOrStop(Emergency,,) */
+       StartOrStop(csEmergency,        emergencyInit(d),       emergencyStop(d)) 
        StartOrStop(csPDO,      PDOInit(d),     PDOStop(d))
        StartOrStop(csBoot_Up,  None,   slaveSendBootUp(d))
 }