170 for i, dimension in enumerate(basetype_content["value"].getdimension())] |
170 for i, dimension in enumerate(basetype_content["value"].getdimension())] |
171 datatype_def += [("ARRAY [", ())] |
171 datatype_def += [("ARRAY [", ())] |
172 datatype_def += JoinList([(",", ())], dimensions) |
172 datatype_def += JoinList([(",", ())], dimensions) |
173 datatype_def += [("] OF " , ()), |
173 datatype_def += [("] OF " , ()), |
174 (basetype_name, (tagname, "base"))] |
174 (basetype_name, (tagname, "base"))] |
|
175 # Data type is a structure |
|
176 elif basetype_content["name"] == "struct": |
|
177 elements = [] |
|
178 for i, element in enumerate(basetype_content["value"].getvariable()): |
|
179 element_type = element.type.getcontent() |
|
180 # Structure element derived directly from a user defined type |
|
181 if element_type["name"] == "derived": |
|
182 elementtype_name = element_type["value"].getname() |
|
183 self.GenerateDataType(elementtype_name) |
|
184 # Structure element derived directly from a string type |
|
185 elif element_type["name"] in ["string", "wstring"]: |
|
186 elementtype_name = element_type["name"].upper() |
|
187 # Structure element derived directly from an elementary type |
|
188 else: |
|
189 elementtype_name = element_type["name"] |
|
190 element_text = [("\n ", ()), |
|
191 (element.getname(), (tagname, "struct", i, "name")), |
|
192 (" : ", ()), |
|
193 (elementtype_name, (tagname, "struct", i, "type"))] |
|
194 if element.initialValue is not None: |
|
195 element_text.extend([(" := ", ()), |
|
196 (self.ComputeValue(element.initialValue.getvalue(), elementtype_name), (tagname, "struct", i, "initial"))]) |
|
197 element_text.append((";", ())) |
|
198 elements.append(element_text) |
|
199 datatype_def += [("STRUCT", ())] |
|
200 datatype_def += JoinList([("", ())], elements) |
|
201 datatype_def += [("\n END_STRUCT", ())] |
175 # Data type derived directly from a elementary type |
202 # Data type derived directly from a elementary type |
176 else: |
203 else: |
177 datatype_def += [(basetype_content["name"], (tagname, "base"))] |
204 datatype_def += [(basetype_content["name"], (tagname, "base"))] |
178 # Data type has an initial value |
205 # Data type has an initial value |
179 if datatype.initialValue is not None: |
206 if datatype.initialValue is not None: |
180 datatype_def += [(" := ", ()), |
207 datatype_def += [(" := ", ()), |
181 (self.ComputeValue(datatype.initialValue.getvalue(), datatype_name), (tagname, "initial"))] |
208 (self.ComputeValue(datatype.initialValue.getvalue(), datatype_name), (tagname, "initial"))] |
182 datatype_def += [(";\n", ())] |
209 datatype_def += [(";\n", ())] |
183 return datatype_def |
210 self.Program += datatype_def |
184 |
211 |
185 # Generate a POU from its name |
212 # Generate a POU from its name |
186 def GeneratePouProgram(self, pou_name): |
213 def GeneratePouProgram(self, pou_name): |
187 # Verify that POU hasn't been generated yet |
214 # Verify that POU hasn't been generated yet |
188 if not self.PouComputed.get(pou_name, True): |
215 if not self.PouComputed.get(pou_name, True): |
369 # type defined |
396 # type defined |
370 if len(self.DatatypeComputed) > 0: |
397 if len(self.DatatypeComputed) > 0: |
371 self.Program += [("TYPE\n", ())] |
398 self.Program += [("TYPE\n", ())] |
372 # Generate every data types defined |
399 # Generate every data types defined |
373 for datatype_name in self.DatatypeComputed.keys(): |
400 for datatype_name in self.DatatypeComputed.keys(): |
374 self.Program += self.GenerateDataType(datatype_name) |
401 self.GenerateDataType(datatype_name) |
375 self.Program += [("END_TYPE\n\n", ())] |
402 self.Program += [("END_TYPE\n\n", ())] |
376 # Generate every POUs defined |
403 # Generate every POUs defined |
377 for pou_name in self.PouComputed.keys(): |
404 for pou_name in self.PouComputed.keys(): |
378 self.GeneratePouProgram(pou_name) |
405 self.GeneratePouProgram(pou_name) |
379 # Generate every configurations defined |
406 # Generate every configurations defined |