--- a/PLCGenerator.py Mon Dec 15 09:45:16 2008 +0100
+++ b/PLCGenerator.py Fri Dec 19 15:07:54 2008 +0100
@@ -172,6 +172,33 @@
datatype_def += JoinList([(",", ())], dimensions)
datatype_def += [("] OF " , ()),
(basetype_name, (tagname, "base"))]
+ # Data type is a structure
+ elif basetype_content["name"] == "struct":
+ elements = []
+ for i, element in enumerate(basetype_content["value"].getvariable()):
+ element_type = element.type.getcontent()
+ # Structure element derived directly from a user defined type
+ if element_type["name"] == "derived":
+ elementtype_name = element_type["value"].getname()
+ self.GenerateDataType(elementtype_name)
+ # Structure element derived directly from a string type
+ elif element_type["name"] in ["string", "wstring"]:
+ elementtype_name = element_type["name"].upper()
+ # Structure element derived directly from an elementary type
+ else:
+ elementtype_name = element_type["name"]
+ element_text = [("\n ", ()),
+ (element.getname(), (tagname, "struct", i, "name")),
+ (" : ", ()),
+ (elementtype_name, (tagname, "struct", i, "type"))]
+ if element.initialValue is not None:
+ element_text.extend([(" := ", ()),
+ (self.ComputeValue(element.initialValue.getvalue(), elementtype_name), (tagname, "struct", i, "initial"))])
+ element_text.append((";", ()))
+ elements.append(element_text)
+ datatype_def += [("STRUCT", ())]
+ datatype_def += JoinList([("", ())], elements)
+ datatype_def += [("\n END_STRUCT", ())]
# Data type derived directly from a elementary type
else:
datatype_def += [(basetype_content["name"], (tagname, "base"))]
@@ -180,7 +207,7 @@
datatype_def += [(" := ", ()),
(self.ComputeValue(datatype.initialValue.getvalue(), datatype_name), (tagname, "initial"))]
datatype_def += [(";\n", ())]
- return datatype_def
+ self.Program += datatype_def
# Generate a POU from its name
def GeneratePouProgram(self, pou_name):
@@ -371,7 +398,7 @@
self.Program += [("TYPE\n", ())]
# Generate every data types defined
for datatype_name in self.DatatypeComputed.keys():
- self.Program += self.GenerateDataType(datatype_name)
+ self.GenerateDataType(datatype_name)
self.Program += [("END_TYPE\n\n", ())]
# Generate every POUs defined
for pou_name in self.PouComputed.keys():