--- 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",