From 12f908c1dd2e5ac9e9fe92c2668c770e5b5d0c11 Mon Sep 17 00:00:00 2001
From: aschwinn <al.schwinn@gsi.de>
Date: Tue, 6 Jun 2017 16:14:18 +0200
Subject: [PATCH] Bug 1407 - Remove Plugin specific design validation Rules

---
 silecs-codegen/src/xml/genparam.py            | 37 ++++---------------
 silecs-codegen/src/xml/model/Register.py      |  6 ++-
 .../client/Beckhoff_BC9020.silecsparam        |  4 +-
 .../client/Beckhoff_CX9020.silecsparam        |  4 +-
 .../client/Rabbit_BlockMode.silecsparam       |  4 +-
 .../client/Rabbit_DeviceMode.silecsparam      |  4 +-
 .../client/Schneider_M340.silecsparam         |  4 +-
 .../Schneider_PremiumQuantum.silecsparam      |  4 +-
 .../client/Siemens_Step7Block.silecsparam     |  4 +-
 .../client/Siemens_Step7Device.silecsparam    |  4 +-
 .../client/Siemens_TiaBlock.silecsparam       |  4 +-
 .../client/Siemens_TiaDevice.silecsparam      |  4 +-
 12 files changed, 33 insertions(+), 50 deletions(-)

diff --git a/silecs-codegen/src/xml/genparam.py b/silecs-codegen/src/xml/genparam.py
index e93bb7c..60be9d2 100644
--- a/silecs-codegen/src/xml/genparam.py
+++ b/silecs-codegen/src/xml/genparam.py
@@ -482,38 +482,17 @@ def computeChecksumController( workspacePath, controllerNode, silecsVersion, PLC
     return CRC32
     
 def computeChecksumClass(designDOM, CRC32, logTopics={'errorlog': True}):
-    blockList = designDOM.xpathEval("Block")
+    blockList = designDOM.xpathEval("//Block")
     for blockNode in blockList:
         blockName = blockNode.prop('name')
         blockMode = blockNode.prop('mode')
-        registerList = blockNode.xpathEval("Register")
-        for register in registerList:
-            regName   = register.prop("name")
-            CRC32     = zlib.crc32(trim(regName),CRC32)& 0xffffffff
-
-            regFormat = register.prop("format")
-            CRC32     = zlib.crc32(trim(regFormat),CRC32)& 0xffffffff
-
-            try:
-                # array-dim1 is an optional attribute!!!
-                regDim1   = register.prop("array-dim1")
-            except:
-                regDim1   = "1"
-            CRC32     = zlib.crc32(trim(regDim1),CRC32)& 0xffffffff
-
-            try:
-                # array-dim2 is an optional attribute!!!
-                regDim2   = register.prop("array-dim2")
-            except:
-                regDim2   = "1"
-            CRC32     = zlib.crc32(trim(regDim2),CRC32)& 0xffffffff
-
-            try:
-                # string-len is an optional attribute!!!
-                stringLength = register.prop("string-len")
-                CRC32     = zlib.crc32(trim(stringLength),CRC32)& 0xffffffff
-            except:
-                pass
+        for registerNode in blockNode.xpathEval("Register"):
+            register = DesignRegister(registerNode)
+            CRC32     = zlib.crc32(trim(register.name),CRC32)& 0xffffffff
+            CRC32     = zlib.crc32(trim(register.format),CRC32)& 0xffffffff
+            CRC32     = zlib.crc32(trim(str(register.dim1)),CRC32)& 0xffffffff
+            CRC32     = zlib.crc32(trim(str(register.dim2)),CRC32)& 0xffffffff
+            CRC32     = zlib.crc32(trim(str(register.stringLength)),CRC32)& 0xffffffff
     return CRC32
     
 #-------------------------------------------------------------------------
diff --git a/silecs-codegen/src/xml/model/Register.py b/silecs-codegen/src/xml/model/Register.py
index 8388b2d..6695e7e 100644
--- a/silecs-codegen/src/xml/model/Register.py
+++ b/silecs-codegen/src/xml/model/Register.py
@@ -61,6 +61,9 @@ class Register(object):
     
     def isArray2D(self):
         return self.valueType == 'array2D' or 'stringArray2D'
+    
+    def isStringType(self):
+        return self.valueType == 'string' or 'stringArray' or 'stringArray2D'
 
 #has some additionalValues
 class ParamRegister(Register):
@@ -95,7 +98,8 @@ class DesignRegister(Register):
         self.fesaFieldName = ""
         if self.xmlNode.hasProp("fesaFieldName"):
             self.fesaFieldName = xmlNode.prop("fesaFieldName")
-        self.generateFesaValueItem = xsdBooleanToBoolean(xmlNode.prop("generateFesaValueItem"))
+        if self.xmlNode.hasProp("generateFesaValueItem"): #SilecsHEader does not have this attribute 
+            self.generateFesaValueItem = xsdBooleanToBoolean(xmlNode.prop("generateFesaValueItem"))
     def getFesaName(self):
         if self.fesaFieldName == "":
             return self.name
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Beckhoff_BC9020.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Beckhoff_BC9020.silecsparam
index a26d3ee..8095901 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Beckhoff_BC9020.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Beckhoff_BC9020.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.813259"/>
-    <Deployment checksum="2843029646"/>
+    <Generation date="2017-06-06 16:10:01.024808"/>
+    <Deployment checksum="3184721915"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Beckhoff_BC9020" plc-brand="BECKHOFF" plc-system="TWINCat" plc-model="BC9020" protocol="BLOCK_MODE" address="32768" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="32768" used-mem="MW16384..MW16407 / 24 words">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Beckhoff_CX9020.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Beckhoff_CX9020.silecsparam
index 03c1561..e36c8eb 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Beckhoff_CX9020.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Beckhoff_CX9020.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.853125"/>
-    <Deployment checksum="427563505"/>
+    <Generation date="2017-06-06 16:10:01.058078"/>
+    <Deployment checksum="656547166"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Beckhoff_CX9020" plc-brand="BECKHOFF" plc-system="TWINCat" plc-model="CX9020" protocol="BLOCK_MODE" address="24576" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="24576" used-mem="MW12288..MW12313 / 26 words">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Rabbit_BlockMode.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Rabbit_BlockMode.silecsparam
index b3275d4..d7f5f4a 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Rabbit_BlockMode.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Rabbit_BlockMode.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:21.011368"/>
-    <Deployment checksum="3940683809"/>
+    <Generation date="2017-06-06 16:10:01.179699"/>
+    <Deployment checksum="1525793519"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Rabbit_BlockMode" plc-brand="DIGI" plc-system="Standard-C" plc-model="Rabbit_RCM_4010" protocol="BLOCK_MODE" address="0" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="0" used-mem="MW0..MW21 / 22 words">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Rabbit_DeviceMode.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Rabbit_DeviceMode.silecsparam
index 3f7bedc..b3728a3 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Rabbit_DeviceMode.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Rabbit_DeviceMode.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.972129"/>
-    <Deployment checksum="3940683809"/>
+    <Generation date="2017-06-06 16:10:01.151147"/>
+    <Deployment checksum="1525793519"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Rabbit_DeviceMode" plc-brand="DIGI" plc-system="Standard-C" plc-model="Rabbit_RCM_4010" protocol="DEVICE_MODE" address="0" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="0" used-mem="MW0..MW21 / 22 words">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Schneider_M340.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Schneider_M340.silecsparam
index a4271a2..cc3ecef 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Schneider_M340.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Schneider_M340.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.934851"/>
-    <Deployment checksum="3940683809"/>
+    <Generation date="2017-06-06 16:10:01.121096"/>
+    <Deployment checksum="1525793519"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Schneider_M340" plc-brand="SCHNEIDER" plc-system="UNITY Pro" plc-model="M340" protocol="BLOCK_MODE" address="0" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="0" used-mem="MW0..MW21 / 22 words">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Schneider_PremiumQuantum.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Schneider_PremiumQuantum.silecsparam
index fc8dc15..cf3064a 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Schneider_PremiumQuantum.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Schneider_PremiumQuantum.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.891171"/>
-    <Deployment checksum="3940683809"/>
+    <Generation date="2017-06-06 16:10:01.091104"/>
+    <Deployment checksum="1525793519"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Schneider_PremiumQuantum" plc-brand="SCHNEIDER" plc-system="UNITY Pro" plc-model="Premium" protocol="BLOCK_MODE" address="0" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="0" used-mem="MW0..MW21 / 22 words">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Siemens_Step7Block.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Siemens_Step7Block.silecsparam
index 64589a2..ccde805 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Siemens_Step7Block.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Siemens_Step7Block.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.641338"/>
-    <Deployment checksum="3940683809"/>
+    <Generation date="2017-06-06 16:10:00.914936"/>
+    <Deployment checksum="1525793519"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Siemens_Step7Block" plc-brand="SIEMENS" plc-system="STEP-7" plc-model="SIMATIC_S7-300" protocol="DEVICE_MODE" address="0" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="0" used-mem="DB0..DB0 / 48 bytes">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Siemens_Step7Device.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Siemens_Step7Device.silecsparam
index 3c1e348..d210b15 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Siemens_Step7Device.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Siemens_Step7Device.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.678230"/>
-    <Deployment checksum="3940683809"/>
+    <Generation date="2017-06-06 16:10:00.942946"/>
+    <Deployment checksum="1525793519"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Siemens_Step7Device" plc-brand="SIEMENS" plc-system="STEP-7" plc-model="SIMATIC_S7-300" protocol="BLOCK_MODE" address="0" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="0" used-mem="DB0..DB0 / 48 bytes">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Siemens_TiaBlock.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Siemens_TiaBlock.silecsparam
index 5f82300..0e4b97f 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Siemens_TiaBlock.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Siemens_TiaBlock.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.606090"/>
-    <Deployment checksum="3940683809"/>
+    <Generation date="2017-06-06 16:10:00.881636"/>
+    <Deployment checksum="1525793519"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Siemens_TiaBlock" plc-brand="SIEMENS" plc-system="TIA-PORTAL" plc-model="SIMATIC_S7-300" protocol="BLOCK_MODE" address="0" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="0" used-mem="DB0..DB0 / 48 bytes">
diff --git a/silecs-codegen/src/xml/test/generated_correct/client/Siemens_TiaDevice.silecsparam b/silecs-codegen/src/xml/test/generated_correct/client/Siemens_TiaDevice.silecsparam
index 4938f35..bafa3a0 100644
--- a/silecs-codegen/src/xml/test/generated_correct/client/Siemens_TiaDevice.silecsparam
+++ b/silecs-codegen/src/xml/test/generated_correct/client/Siemens_TiaDevice.silecsparam
@@ -2,8 +2,8 @@
 <SILECS-Param silecs-version="DEV">
   <Mapping-Info>
     <Owner user-login="schwinn"/>
-    <Generation date="2017-06-06 11:12:20.553639"/>
-    <Deployment checksum="3940683809"/>
+    <Generation date="2017-06-06 16:10:00.846238"/>
+    <Deployment checksum="1525793519"/>
   </Mapping-Info>
   <SILECS-Mapping plc-name="Siemens_TiaDevice" plc-brand="SIEMENS" plc-system="TIA-PORTAL" plc-model="SIMATIC_S7-300" protocol="DEVICE_MODE" address="0" domain="NotUsed" used-mem="TODO">
     <SILECS-Class name="SilecsHeader" version="1.0.0" address="0" used-mem="DB0..DB0 / 48 bytes">
-- 
GitLab