diff -r 40117d02601b -r f02ba5b83811 PLCControler.py --- 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)