Просмотр исходного кода

2 fixes for namespace compiler - alter ns ids of alias and fix bootstrapping of variable nodes

Stasik0 лет назад: 8
Родитель
Сommit
e9a348f677

+ 1 - 0
tools/pyUANamespace/generate_open62541CCode.py

@@ -76,6 +76,7 @@ elif (verbosity==3):
   level = logging.INFO
 elif (verbosity>=4):
   level = logging.DEBUG
+
 logging.basicConfig(level=level)
 logger.setLevel(logging.INFO)
 

+ 8 - 0
tools/pyUANamespace/open62541_XMLPreprocessor.py

@@ -216,6 +216,14 @@ class preProcessDocument:
 
         returns: nothing
     """
+
+    #change ids in aliases
+    ns = self.nodeset.getElementsByTagName("Alias")
+    for al in ns:
+      if al.nodeType == al.ELEMENT_NODE:
+        if al.hasAttribute("Alias"):
+          al.firstChild.data = al.firstChild.data.replace("ns=" + str(currentNsId), "ns=" + str(newNsId))
+
     logger.debug("Migrating nodes /w ns index " + str(currentNsId) + " to " + str(newNsId))
     for nd in self.containedNodes:
       if nd[0].ns == currentNsId:

+ 7 - 1
tools/pyUANamespace/ua_builtin_types.py

@@ -396,12 +396,18 @@ class opcua_value_t():
         if self.value[0].__binTypeId__ == BUILTINTYPE_TYPEID_EXTENSIONOBJECT:
           code.append("UA_" + self.value[0].stringRepresentation + " *" + valueName + " = " + self.value[0].printOpen62541CCode_SubType() + ";")
           code.append("UA_Variant_setScalar( &attr.value, " + valueName + ", &UA_TYPES[UA_TYPES_" + self.value[0].stringRepresentation.upper() + "]);")
+
           #FIXME: There is no membership definition for extensionObjects generated in this function.
           #code.append("UA_" + self.value[0].stringRepresentation + "_deleteMembers(" + valueName + ");")
         else:
+          if bootstrapping == True:
+              code.append("UA_Variant* " + self.parent.getCodePrintableID() + "_variant = UA_Variant_new();" )
           code.append("UA_" + self.value[0].stringRepresentation + " *" + valueName + " =  UA_" + self.value[0].stringRepresentation + "_new();")
           code.append("*" + valueName + " = " + self.value[0].printOpen62541CCode_SubType() + ";")
-          code.append("UA_Variant_setScalar( &attr.value, " + valueName + ", &UA_TYPES[UA_TYPES_" + self.value[0].stringRepresentation.upper() + "]);")
+          if bootstrapping == False:
+            code.append("UA_Variant_setScalar( &attr.value, " + valueName + ", &UA_TYPES[UA_TYPES_" + self.value[0].stringRepresentation.upper() + "]);")
+          else:
+            code.append("UA_Variant_setScalar( "+self.parent.getCodePrintableID()+"_variant, " + valueName + ", &UA_TYPES[UA_TYPES_" + self.value[0].stringRepresentation.upper() + "]);")
           #code.append("UA_" + self.value[0].stringRepresentation + "_deleteMembers(" + valueName + ");")
     return code