diff -r 4edbbab206a3 -r 779a519f78f2 PLCGenerator.py --- a/PLCGenerator.py Thu Dec 10 12:26:06 2009 +0100 +++ b/PLCGenerator.py Thu Dec 10 16:37:11 2009 +0100 @@ -249,10 +249,12 @@ for varlist in configuration.getglobalVars(): # Generate variable block with modifier config += [(" VAR_GLOBAL", ())] - if varlist.getretain(): - config += [(" RETAIN", (tagname, "variable", (var_number, var_number + len(varlist.getvariable())), "retain"))] if varlist.getconstant(): config += [(" CONSTANT", (tagname, "variable", (var_number, var_number + len(varlist.getvariable())), "constant"))] + elif varlist.getretain(): + config += [(" RETAIN", (tagname, "variable", (var_number, var_number + len(varlist.getvariable())), "retain"))] + elif varlist.getretain(): + config += [(" NON_RETAIN", (tagname, "variable", (var_number, var_number + len(varlist.getvariable())), "non_retain"))] config += [("\n", ())] # Generate any variable of this block for var in varlist.getvariable(): @@ -302,10 +304,12 @@ for varlist in resource.getglobalVars(): # Generate variable block with modifier resrce += [(" VAR_GLOBAL", ())] - if varlist.getretain(): - resrce += [(" RETAIN", (tagname, "variable", (var_number, var_number + len(varlist.getvariable())), "retain"))] if varlist.getconstant(): resrce += [(" CONSTANT", (tagname, "variable", (var_number, var_number + len(varlist.getvariable())), "constant"))] + elif varlist.getretain(): + resrce += [(" RETAIN", (tagname, "variable", (var_number, var_number + len(varlist.getvariable())), "retain"))] + elif varlist.getnonretain(): + resrce += [(" NON_RETAIN", (tagname, "variable", (var_number, var_number + len(varlist.getvariable())), "non_retain"))] resrce += [("\n", ())] # Generate any variable of this block for var in varlist.getvariable(): @@ -471,7 +475,7 @@ # Test if a variable has already been defined def IsAlreadyDefined(self, name): - for list_type, retain, constant, located, vars in self.Interface: + for list_type, option, located, vars in self.Interface: for var_type, var_name, var_address, var_initial in vars: if name == var_name: return True @@ -479,7 +483,7 @@ # Return the type of a variable defined in interface def GetVariableType(self, name): - for list_type, retain, constant, located, vars in self.Interface: + for list_type, option, located, vars in self.Interface: for var_type, var_name, var_address, var_initial in vars: if name == var_name: return var_type @@ -592,12 +596,18 @@ located.append((vartype_content["name"], var.getname(), address, initial_value)) else: variables.append((vartype_content["name"], var.getname(), None, initial_value)) + if varlist["value"].getconstant(): + option = "CONSTANT" + elif varlist["value"].getretain(): + option = "RETAIN" + elif varlist["value"].getnonretain(): + option = "NON_RETAIN" + else: + option = None if len(variables) > 0: - self.Interface.append((varTypeNames[varlist["name"]], varlist["value"].getretain(), - varlist["value"].getconstant(), False, variables)) + self.Interface.append((varTypeNames[varlist["name"]], option, False, variables)) if len(located) > 0: - self.Interface.append((varTypeNames[varlist["name"]], varlist["value"].getretain(), - varlist["value"].getconstant(), True, located)) + self.Interface.append((varTypeNames[varlist["name"]], option, True, located)) def ComputeConnectionTypes(self, pou): body = pou.getbody() @@ -951,14 +961,14 @@ return expression def AddTrigger(self, edge, expression, var_info): - if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] or self.Interface[-1][2] or self.Interface[-1][3]: - self.Interface.append(("VAR", False, False, False, [])) + if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] is not None or self.Interface[-1][2]: + self.Interface.append(("VAR", None, False, [])) i = 1 name = "%s%d"%(edge, i) while self.IsAlreadyDefined(name): i += 1 name = "%s%d"%(edge, i) - self.Interface[-1][4].append((edge, name, None, None)) + self.Interface[-1][3].append((edge, name, None, None)) self.Program += [(self.CurrentIndent, ()), (name, var_info), ("(CLK := ", ())] self.Program += expression self.Program += [(");\n", ())] @@ -1256,12 +1266,10 @@ if len(self.Program) == 0 : raise PLCGenException, _("No body defined in \"%s\" POU")%self.Name var_number = 0 - for list_type, retain, constant, located, variables in self.Interface: + for list_type, option, located, variables in self.Interface: program += [(" %s"%list_type, ())] - if retain: - program += [(" RETAIN", (self.TagName, "variable", (var_number, var_number + len(variables)), "retain"))] - if constant: - program += [(" CONSTANT", (self.TagName, "variable", (var_number, var_number + len(variables)), "constant"))] + if option is not None: + program += [(" %s"%option, (self.TagName, "variable", (var_number, var_number + len(variables)), option.lower()))] program += [("\n", ())] for var_type, var_name, var_address, var_initial in variables: program += [(" ", ())]