PLCControler.py
changeset 145 4fb225afddf4
parent 144 b67a5de5a24a
child 151 aaa80b48bead
--- a/PLCControler.py	Fri Jan 04 17:49:17 2008 +0100
+++ b/PLCControler.py	Fri Jan 11 17:51:56 2008 +0100
@@ -27,6 +27,7 @@
 from types import StringType, UnicodeType
 import cPickle
 import os,sys,re
+from time import localtime
 from datetime import *
 
 from plcopen import plcopen
@@ -188,10 +189,12 @@
         return self.Project != None
 
     # Create a new project by replacing the current one
-    def CreateNewProject(self, name):
+    def CreateNewProject(self, properties):
         # Create the project
         self.Project = plcopen.project()
-        self.Project.setName(name)
+        properties["creationDateTime"] = datetime(*localtime()[:6])
+        self.Project.setFileHeader(properties)
+        self.Project.setContentHeader(properties)
         self.SetFilePath("")
         # Initialize the project buffer
         self.ProjectBuffer = UndoBuffer(self.Copy(self.Project), False)
@@ -261,13 +264,14 @@
             self.Project.setName(name)
         if properties != None:
             self.Project.setFileHeader(properties)
+            self.Project.setContentHeader(properties)
         if name != None or properties != None:
             self.BufferProject()
             
     # Return project properties
     def GetProjectProperties(self):
         properties = self.Project.getFileHeader()
-        properties["projectName"] = self.Project.getName()
+        properties.update(self.Project.getContentHeader())
         return properties
     
     # Return project informations
@@ -1420,24 +1424,12 @@
                         infos["connectors"]["input"]["links"].append(dic)
             elif isinstance(instance, plcopen.continuation):
                 infos["name"] = instance.getName()
-                infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
                 infos["type"] = "continuation"
-                executionOrder = instance.getExecutionOrderId()
-                if executionOrder is not None:
-                    infos["executionOrder"] = executionOrder
-                else:
-                    infos["executionOrder"] = 0
                 infos["connector"] = {}
                 infos["connector"]["position"] = instance.connectionPointOut.getRelPosition()
             elif isinstance(instance, plcopen.connector):
                 infos["name"] = instance.getName()
-                infos["value_type"] = self.GetCurrentPouVarValueType(infos["name"])
                 infos["type"] = "connection"
-                executionOrder = instance.getExecutionOrderId()
-                if executionOrder is not None:
-                    infos["executionOrder"] = executionOrder
-                else:
-                    infos["executionOrder"] = 0
                 infos["connector"] = {}
                 infos["connector"]["position"] = instance.connectionPointIn.getRelPosition()
                 infos["connector"]["links"] = []
@@ -1664,6 +1656,18 @@
                     connection.setConnectionParameter(idx, None)
                 idx += 1
     
+    def AddEditedElementPouVar(self, tagname, type, name):
+        words = tagname.split("::")
+        if words[0] in ['P', 'T', 'A']:
+            pou = self.Project.getPou(words[1])
+            pou.addPouVar(type, name)
+            
+    def ChangeEditedElementPouVar(self, tagname, old_type, old_name, new_type, new_name):
+        words = tagname.split("::")
+        if words[0] in ['P', 'T', 'A']:
+            pou = self.Project.getPou(words[1])
+            pou.changePouVar(old_type, old_name, new_type, new_name)
+    
     def AddEditedElementBlock(self, tagname, id, blocktype, blockname = None):
         element = self.GetEditedElement(tagname)
         if element is not None:
@@ -1673,7 +1677,7 @@
             blocktype_infos = GetBlockType(blocktype)
             if blocktype_infos["type"] != "function" and blockname is not None:
                 block.setInstanceName(blockname)
-                element.addPouVar(blocktype, blockname)    
+                self.AddEditedElementPouVar(tagname, blocktype, blockname)
             element.addInstance("block", block)
             self.RefreshPouUsingTree()
     
@@ -1681,12 +1685,15 @@
         element = self.GetEditedElement(tagname)
         if element is not None:
             block = element.getInstance(id)
-            if "name" in infos or "type" in infos:
-                old_name = block.getInstanceName()
-                old_type = block.getTypeName()
-                new_name = infos.get("name", old_name)
-                new_type = infos.get("type", old_type)
-                self.GetEditedElement(tagname).changePouVar(old_type, old_name, new_type, new_name)
+            blocktype = infos.get("type", block.getTypeName())
+            blocktype_infos = GetBlockType(blocktype)
+            if blocktype_infos["type"] != "function":
+                if "name" in infos or "type" in infos:
+                    old_name = block.getInstanceName()
+                    old_type = block.getTypeName()
+                    new_name = infos.get("name", old_name)
+                    new_type = infos.get("type", old_type)
+                    self.ChangeEditedElementPouVar(tagname, old_type, old_name, new_type, new_name)
             for param, value in infos.items():
                 if param == "name":
                     block.setInstanceName(value)
@@ -2337,6 +2344,10 @@
         if not filepath and self.FilePath == "":
             return False
         else:
+            contentheader = self.Project.getContentHeader()
+            contentheader["modificationDateTime"] = datetime(*localtime()[:6])
+            self.Project.setContentHeader(contentheader)
+            
             text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
             extras = {"xmlns" : "http://www.plcopen.org/xml/tc6.xsd",
                       "xmlns:xhtml" : "http://www.w3.org/1999/xhtml",