PLCControler.py
changeset 67 3a1b0afdaf84
parent 63 04a02b4b2a57
child 68 66308e07402c
--- a/PLCControler.py	Thu Aug 09 18:06:54 2007 +0200
+++ b/PLCControler.py	Thu Aug 09 18:07:44 2007 +0200
@@ -24,6 +24,7 @@
 
 from minixsv import pyxsval
 from xml.dom import minidom
+from types import StringType, UnicodeType
 import cPickle
 import os,sys,re
 from datetime import *
@@ -382,15 +383,15 @@
 
     def GenerateProgram(self, filepath):
         if self.Project:
-            try:
-                program = GenerateCurrentProgram(self.Project)
-                programfile = open(filepath, "w")
-                programfile.write(program)
-                programfile.close()
-                self.ProgramFilePath = filepath
-                return True
-            except:
-                pass
+            #try:
+            program = GenerateCurrentProgram(self.Project)
+            programfile = open(filepath, "w")
+            programfile.write(program)
+            programfile.close()
+            self.ProgramFilePath = filepath
+            return True
+            #except:
+            #    pass
         return False
 
 #-------------------------------------------------------------------------------
@@ -626,7 +627,12 @@
             tempvar = plcopen.varListPlain_variable()
             tempvar.setName(var["Name"])
             var_type = plcopen.dataType()
-            var_type.setValue(var["Type"])
+            if GetBlockType(var["Type"]) != None:
+                derived_type = plcopen.derived()
+                derived_type.setName(var["Type"])
+                var_type.setValue(derived_type)
+            else:
+                var_type.setValue(var["Type"])
             tempvar.setType(var_type)
             if var["Initial Value"] != "":
                 value = plcopen.value()
@@ -660,7 +666,12 @@
             # Extract variables from every varLists
             for varlist in configuration.getGlobalVars():
                 for var in varlist.getVariable():
-                    tempvar = {"Name":var.getName(),"Class":"Global","Type":var.getType().getValue()}
+                    tempvar = {"Name":var.getName(),"Class":"Global"}
+                    var_type = var.getType().getValue()
+                    if isinstance(var_type, (StringType, UnicodeType)):
+                        tempvar["Type"] = var_type
+                    else:
+                        tempvar["Type"] = var_type.getName()
                     initial = var.getInitialValue()
                     if initial:
                         tempvar["Initial Value"] = initial.getValue()
@@ -702,7 +713,12 @@
             # Extract variables from every varLists
             for varlist in resource.getGlobalVars():
                 for var in varlist.getVariable():
-                    tempvar = {"Name":var.getName(),"Class":"Global","Type":var.getType().getValue()}
+                    tempvar = {"Name":var.getName(),"Class":"Global"}
+                    var_type = var.getType().getValue()
+                    if isinstance(var_type, (StringType, UnicodeType)):
+                        tempvar["Type"] = var_type
+                    else:
+                        tempvar["Type"] = var_type.getName()
                     initial = var.getInitialValue()
                     if initial:
                         tempvar["Initial Value"] = initial.getValue()
@@ -737,7 +753,12 @@
             # Extract variables from every varLists
             for type, varlist in pou.getVars():
                 for var in varlist.getVariable():
-                    tempvar = {"Name":var.getName(),"Class":type,"Type":var.getType().getValue()}
+                    tempvar = {"Name":var.getName(),"Class":type}
+                    var_type = var.getType().getValue()
+                    if isinstance(var_type, (StringType, UnicodeType)):
+                        tempvar["Type"] = var_type
+                    else:
+                        tempvar["Type"] = var_type.getName()
                     initial = var.getInitialValue()
                     if initial:
                         tempvar["Initial Value"] = initial.getValue()
@@ -1418,10 +1439,24 @@
                     connection.setConnectionParameter(idx, None)
                 idx += 1
     
-    def AddCurrentElementEditingBlock(self, id):
+    def AddCurrentElementEditingBlock(self, id, blocktype, blockname = None):
         block = plcopen.block()
         block.setLocalId(id)
-        self.GetCurrentElementEditing().addInstance("block", block)
+        block.setTypeName(blocktype)
+        if blockname:
+            block.setInstanceName(blockname)
+        element = self.GetCurrentElementEditing()
+        blocktype_infos = GetBlockType(blocktype)
+        if blocktype_infos["type"] != "function":
+            if self.CurrentElementEditing != None:
+                name = self.ElementsOpened[self.CurrentElementEditing]
+                words = name.split("::")
+                if len(words) == 1:
+                    element.addPouVar(blocktype, blockname)
+                elif words[0] in ['T', 'A']:
+                    pou = self.Project.getPou(words[1])
+                    pou.addPouVar(blocktype, blockname)    
+        element.addInstance("block", block)
         self.RefreshPouUsingTree()
     
     def SetCurrentElementEditingBlockInfos(self, id, infos):
@@ -1888,7 +1923,21 @@
                 self.SetConnectionWires(actionBlock.connectionPointIn, value)
     
     def RemoveCurrentElementEditingInstance(self, id):
-        self.GetCurrentElementEditing().removeInstance(id)
+        element = self.GetCurrentElementEditing()
+        instance = element.getInstance(id)
+        if isinstance(instance, plcopen.block):
+            blocktype = instance.getTypeName()
+            blocktype_infos = GetBlockType(blocktype)
+            if blocktype_infos["type"] != "function":
+                if self.CurrentElementEditing != None:
+                    name = self.ElementsOpened[self.CurrentElementEditing]
+                    words = name.split("::")
+                    if len(words) == 1:
+                        element.removePouVar(blocktype, instance.getInstanceName())
+                    elif words[0] in ['T', 'A']:
+                        pou = self.Project.getPou(words[1])
+                        pou.removePouVar(blocktype, instance.getInstanceName())    
+        element.removeInstance(id)
         self.RefreshPouUsingTree()
 
     def GetCurrentResourceEditingVariables(self):