PLCGenerator.py
changeset 141 c0242a51774c
parent 128 d16a8df4d322
child 151 aaa80b48bead
--- a/PLCGenerator.py	Wed Jan 02 18:15:31 2008 +0100
+++ b/PLCGenerator.py	Wed Jan 02 18:16:12 2008 +0100
@@ -61,18 +61,18 @@
         datatype = currentProject.getDataType(datatype_name)
         datatype_def = "  %s :"%datatype.getName()
         basetype_content = datatype.baseType.getContent()
-        if basetype_content["value"] is None:
-            datatype_def += " %s"%basetype_content["name"]
+        if basetype_content["name"] in ["string", "wstring"]:
+            datatype_def += " %s"%basetype_content["name"].upper()
         elif basetype_content["name"] == "derived":
             basetype_name = basetype_content["value"].getName()
             GenerateDataType(basetype_name)
             datatype_def += " %s"%basetype_name
         elif basetype_content["name"] in ["subrangeSigned", "subrangeUnsigned"]:
             base_type = basetype_content["value"].baseType.getContent()
-            if base_type["value"] is None:
+            if base_type["name"] == "derived":
+                basetype_name = base_type["value"].getName()
+            else:
                 basetype_name = base_type["name"]
-            else:
-                basetype_name = base_type["value"].getName()
                 GenerateDataType(basetype_name)
             min_value = basetype_content["value"].range.getLower()
             max_value = basetype_content["value"].range.getUpper()
@@ -84,15 +84,19 @@
             datatype_def += " (%s)"%", ".join(values)
         elif basetype_content["name"] == "array":
             base_type = basetype_content["value"].baseType.getContent()
-            if base_type["value"] is None:
+            if base_type["name"] == "derived":
+                basetype_name = base_type["value"].getName()
+            elif base_type["name"] in ["string", "wstring"]:
+                basetype_name = base_type["name"].upper()
+            else:
                 basetype_name = base_type["name"]
-            else:
-                basetype_name = base_type["value"].getName()
                 GenerateDataType(basetype_name)
             dimensions = []
             for dimension in basetype_content["value"].getDimension():
                 dimensions.append("0..%d"%(dimension.getUpper() - 1))
             datatype_def += " ARRAY [%s] OF %s"%(",".join(dimensions), basetype_name)
+        else:
+            datatype_def += " %s"%basetype_content["name"]
         if datatype.initialValue is not None:
             datatype_def += " := %s"%str(datatype.initialValue.getValue())
         currentProgram += "%s;\n"%datatype_def
@@ -123,10 +127,12 @@
         config += "\n"
         for var in varlist.getVariable():
             vartype_content = var.getType().getContent()
-            if vartype_content["value"] is None:
+            if vartype_content["name"] == "derived":
+                var_type = vartype_content["value"].getName()
+            elif vartype_content["name"] in ["string", "wstring"]:
+                var_type = vartype_content["name"].upper()
+            else:
                 var_type = vartype_content["name"]
-            else:
-                var_type = vartype_content["value"].getName()
             config += "    %s "%var.getName()
             address = var.getAddress()
             if address:
@@ -160,10 +166,12 @@
         resrce += "\n"
         for var in varlist.getVariable():
             vartype_content = var.getType().getContent()
-            if vartype_content["value"] is None:
+            if vartype_content["name"] == "derived":
+                var_type = vartype_content["value"].getName()
+            elif vartype_content["name"] in ["string", "wstring"]:
+                var_type = vartype_content["name"].upper()
+            else:
                 var_type = vartype_content["name"]
-            else:
-                var_type = vartype_content["value"].getName()
             resrce += "      %s "%var.getName()
             address = var.getAddress()
             if address:
@@ -306,17 +314,7 @@
             located = False
             for var in varlist["value"].getVariable():
                 vartype_content = var.getType().getContent()
-                if vartype_content["value"] is None:
-                    initial = var.getInitialValue()
-                    if initial:
-                        initial_value = initial.getValue()
-                    else:
-                        initial_value = None
-                    address = var.getAddress()
-                    if address:
-                        located = True
-                    variables.append((vartype_content["name"], var.getName(), address, initial_value))
-                else:
+                if vartype_content["name"] == "derived":
                     var_type = vartype_content["value"].getName()
                     GeneratePouProgram(var_type)
                     blocktype = GetBlockType(var_type)
@@ -333,6 +331,19 @@
                         if address:
                             located = True
                         variables.append((vartype_content["value"].getName(), var.getName(), address, initial_value))
+                else:
+                    initial = var.getInitialValue()
+                    if initial:
+                        initial_value = initial.getValue()
+                    else:
+                        initial_value = None
+                    address = var.getAddress()
+                    if address:
+                        located = True
+                    if vartype_content["name"] in ["string", "wstring"]:
+                        variables.append((vartype_content["name"].upper(), var.getName(), address, initial_value))
+                    else:
+                        variables.append((vartype_content["name"], var.getName(), address, initial_value))
             if len(variables) > 0:
                 self.Interface.append((varTypeNames[varlist["name"]], varlist["value"].getRetain(), 
                             varlist["value"].getConstant(), located, variables))
@@ -348,10 +359,12 @@
                     var_type = self.GetVariableType(expression)
                     if expression == pou.getName():
                         returntype_content = pou.interface.getReturnType().getContent()
-                        if returntype_content["value"] is None:
+                        if returntype_content["name"] == "derived":
+                            var_type = returntype_content["value"].getName()
+                        elif returntype_content["name"] in ["string", "wstring"]:
+                            var_type = returntype_content["name"].upper()
+                        else:
                             var_type = returntype_content["name"]
-                        else:
-                            var_type = returntype_content["value"].getName()
                     elif var_type is None:
                         var_type = expression.split("#")[0]
                     if isinstance(instance, (plcopen.inVariable, plcopen.inOutVariable)):