diff -r b67a5de5a24a -r 4fb225afddf4 PLCControler.py --- 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 = "\n" extras = {"xmlns" : "http://www.plcopen.org/xml/tc6.xsd", "xmlns:xhtml" : "http://www.w3.org/1999/xhtml",