PLCControler.py
changeset 1294 f02ba5b83811
parent 1293 40117d02601b
child 1297 cd639725fba5
--- a/PLCControler.py	Thu Aug 29 00:28:39 2013 +0200
+++ b/PLCControler.py	Thu Aug 29 19:18:41 2013 +0200
@@ -1232,7 +1232,7 @@
             else:
                 tempvar.setaddress(None)
             if var['Documentation'] != "":
-                ft = plcopen.formattedText()
+                ft = PLCOpenParser.CreateElement("documentation", "variable")
                 ft.setanyText(var['Documentation'])
                 tempvar.setdocumentation(ft)
 
@@ -1366,7 +1366,7 @@
         if project is not None:
             # Found the resource corresponding to name
             resource = project.getconfigurationResource(config_name, name)
-            if resource:
+            if resource is not None:
                 # Extract variables from every varLists
                 for varlist in resource.getglobalVars():
                     for var in varlist.getvariable():
@@ -1483,7 +1483,7 @@
                     pou.interface = PLCOpenParser.CreateElement("interface", "pou")
                 # If there isn't any return type yet, add it
                 return_type_obj = pou.interface.getreturnType()
-                if not return_type_obj:
+                if return_type_obj is None:
                     return_type_obj = PLCOpenParser.CreateElement("returnType", "interface")
                     pou.interface.setreturnType(return_type_obj)
                 # Change return type
@@ -1500,12 +1500,12 @@
                 self.Project.RefreshCustomBlockTypes()
     
     def UpdateProjectUsedPous(self, old_name, new_name):
-        if self.Project:
+        if self.Project is not None:
             self.Project.updateElementName(old_name, new_name)
     
     def UpdateEditedElementUsedVariable(self, tagname, old_name, new_name):
         pou = self.GetEditedElement(tagname)
-        if pou:
+        if pou is not None:
             pou.updateElementName(old_name, new_name)
     
     # Return the return type of the pou given by its name
@@ -1938,21 +1938,23 @@
                     derived_datatype.setname(infos["base_type"])
                     datatype.baseType.setcontent(derived_datatype)
             elif infos["type"] == "Subrange":
-                datatype.baseType.setcontent(PLCOpenParser.CreateElement(
+                subrange = PLCOpenParser.CreateElement(
                     "subrangeUnsigned" 
                     if infos["base_type"] in GetSubTypes("ANY_UINT")
-                    else "subrangeSigned", "dataType"))
+                    else "subrangeSigned", "dataType")
+                datatype.baseType.setcontent(subrange)
                 subrange.range.setlower(infos["min"])
                 subrange.range.setupper(infos["max"])
                 if infos["base_type"] in self.GetBaseTypes():
                     subrange.baseType.setcontent(
-                        PLCOpenParser.CreateElement(infos["base_type"]))
+                        PLCOpenParser.CreateElement(infos["base_type"], "dataType"))
                 else:
                     derived_datatype = PLCOpenParser.CreateElement("derived", "dataType")
                     derived_datatype.setname(infos["base_type"])
                     subrange.baseType.setcontent(derived_datatype)
             elif infos["type"] == "Enumerated":
                 enumerated = PLCOpenParser.CreateElement("enum", "dataType")
+                datatype.baseType.setcontent(enumerated)
                 values = PLCOpenParser.CreateElement("values", "enum")
                 enumerated.setvalues(values)
                 for i, enum_value in enumerate(infos["values"]):
@@ -1962,9 +1964,9 @@
                         values.setvalue([value])
                     else:
                         values.appendvalue(value)
-                datatype.baseType.setcontent(enumerated)
             elif infos["type"] == "Array":
                 array = PLCOpenParser.CreateElement("array", "dataType")
+                datatype.baseType.setcontent(array)
                 for i, dimension in enumerate(infos["dimensions"]):
                     dimension_range = PLCOpenParser.CreateElement("dimension", "array")
                     dimension_range.setlower(dimension[0])
@@ -1982,9 +1984,9 @@
                     derived_datatype = PLCOpenParser.CreateElement("derived", "dataType")
                     derived_datatype.setname(infos["base_type"])
                     array.baseType.setcontent(derived_datatype)
-                datatype.baseType.setcontent(array)
             elif infos["type"] == "Structure":
                 struct = PLCOpenParser.CreateElement("struct", "dataType")
+                datatype.baseType.setcontent(struct)
                 for i, element_infos in enumerate(infos["elements"]):
                     element = PLCOpenParser.CreateElement("variable", "struct")
                     element.setname(element_infos["Name"])
@@ -1993,6 +1995,7 @@
                         if element_infos["Type"][0] == "array":
                             array_type, base_type_name, dimensions = element_infos["Type"]
                             array = PLCOpenParser.CreateElement("array", "dataType")
+                            element_type.setcontent(array)
                             for j, dimension in enumerate(dimensions):
                                 dimension_range = PLCOpenParser.CreateElement("dimension", "array")
                                 dimension_range.setlower(dimension[0])
@@ -2010,7 +2013,6 @@
                                 derived_datatype = PLCOpenParser.CreateElement("derived", "dataType")
                                 derived_datatype.setname(base_type_name)
                                 array.baseType.setcontent(derived_datatype)
-                            element_type.setcontent(array)
                     elif element_infos["Type"] in self.GetBaseTypes():
                         element_type.setcontent(
                             PLCOpenParser.CreateElement(
@@ -2030,7 +2032,6 @@
                         struct.setvariable([element])
                     else:
                         struct.appendvariable(element)
-                datatype.baseType.setcontent(struct)
             if infos["initial"] != "":
                 if datatype.initialValue is None:
                     datatype.initialValue = PLCOpenParser.CreateElement("initialValue", "dataType")
@@ -2705,18 +2706,13 @@
                     variable.text = value
                     contact.setvariable(variable)
                 elif param == "type":
-                    if value == CONTACT_NORMAL:
-                        contact.setnegated(False)
-                        contact.setedge("none")
-                    elif value == CONTACT_REVERSE:
-                        contact.setnegated(True)
-                        contact.setedge("none")
-                    elif value == CONTACT_RISING:
-                        contact.setnegated(False)
-                        contact.setedge("rising")
-                    elif value == CONTACT_FALLING:
-                        contact.setnegated(False)
-                        contact.setedge("falling")
+                    negated, edge = {
+                        CONTACT_NORMAL: (False, "none"),
+                        CONTACT_REVERSE: (True, "none"),
+                        CONTACT_RISING: (False, "rising"),
+                        CONTACT_FALLING: (False, "falling")}[value]
+                    contact.setnegated(negated)
+                    contact.setedge(edge)
                 elif param == "height":
                     contact.setheight(value)
                 elif param == "width":
@@ -2755,30 +2751,16 @@
                     variable.text = value
                     coil.setvariable(variable)
                 elif param == "type":
-                    if value == COIL_NORMAL:
-                        coil.setnegated(False)
-                        coil.setstorage("none")
-                        coil.setedge("none")
-                    elif value == COIL_REVERSE:
-                        coil.setnegated(True)
-                        coil.setstorage("none")
-                        coil.setedge("none")
-                    elif value == COIL_SET:
-                        coil.setnegated(False)
-                        coil.setstorage("set")
-                        coil.setedge("none")
-                    elif value == COIL_RESET:
-                        coil.setnegated(False)
-                        coil.setstorage("reset")
-                        coil.setedge("none")
-                    elif value == COIL_RISING:
-                        coil.setnegated(False)
-                        coil.setstorage("none")
-                        coil.setedge("rising")
-                    elif value == COIL_FALLING:
-                        coil.setnegated(False)
-                        coil.setstorage("none")
-                        coil.setedge("falling")
+                    negated, storage, edge = {
+                        COIL_NORMAL: (False, "none", "none"),
+                        COIL_REVERSE: (True, "none", "none"),
+                        COIL_SET: (False, "set", "none"),
+                        COIL_RESET: (False, "reset", "none"),
+                        COIL_RISING: (False, "none", "rising"),
+                        COIL_FALLING: (False, "none", "falling")}[value]
+                    coil.setnegated(negated)
+                    coil.setstorage(storage)
+                    coil.setedge(edge)
                 elif param == "height":
                     coil.setheight(value)
                 elif param == "width":
@@ -3046,7 +3028,8 @@
             resource.setpouInstance([])
             task_list = {}
             for task in tasks:
-                new_task = plcopen.resource_task()
+                new_task = PLCOpenParser.CreateElement("task", "resource")
+                resource.appendtask(new_task)
                 new_task.setname(task["Name"])
                 if task["Triggering"] == "Interrupt":
                     new_task.setsingle(task["Single"])
@@ -3066,12 +3049,16 @@
                 new_task.setpriority(int(task["Priority"]))
                 if task["Name"] != "":
                     task_list[task["Name"]] = new_task
-                resource.appendtask(new_task)
             for instance in instances:
-                new_instance = plcopen.pouInstance()
+                task = task_list.get(instance["Task"])
+                if task is not None:
+                    new_instance = PLCOpenParser.CreateElement("pouInstance", "task")
+                    task.appendpouInstance(new_instance)
+                else:
+                    new_instance = PLCOpenParser.CreateElement("pouInstance", "resource")
+                    resource.appendpouInstance(new_instance)
                 new_instance.setname(instance["Name"])
                 new_instance.settypeName(instance["Type"])
-                task_list.get(instance["Task"], resource).appendpouInstance(new_instance)
 
     def GetEditedResourceInfos(self, tagname, debug = False):
         resource = self.GetEditedElement(tagname, debug)