--- a/PLCControler.py Sat Jul 07 11:35:17 2007 +0200
+++ b/PLCControler.py Mon Jul 09 11:10:14 2007 +0200
@@ -23,6 +23,7 @@
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from minixsv import pyxsval
+from xml.dom import minidom
import cPickle
import os,sys,re
from datetime import *
@@ -158,6 +159,7 @@
# Reset PLCControler internal variables
def Reset(self):
+ self.VerifyXML = False
self.Project = None
self.ProjectBuffer = None
self.FilePath = ""
@@ -185,7 +187,7 @@
self.Project = plcopen.project()
self.Project.setName(name)
# Initialize the project buffer
- self.ProjectBuffer = UndoBuffer(self.Copy(self.Project))
+ #self.ProjectBuffer = UndoBuffer(self.Copy(self.Project))
# Change project name
def SetProjectName(self, name):
@@ -1054,7 +1056,7 @@
connections = variable.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
connector["links"].append(dic)
infos["connectors"]["inputs"].append(connector)
for variable in instance.outputVariables.getVariable():
@@ -1083,7 +1085,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connector"]["links"].append(dic)
elif isinstance(instance, plcopen.inOutVariable):
infos["name"] = instance.getExpression()
@@ -1100,7 +1102,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connectors"]["input"]["links"].append(dic)
elif isinstance(instance, plcopen.continuation):
infos["name"] = instance.getName()
@@ -1118,7 +1120,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connector"]["links"].append(dic)
elif isinstance(instance, plcopen.comment):
infos["type"] = "comment"
@@ -1138,7 +1140,7 @@
connector["position"] = connection.getRelPosition()
connector["links"] = []
for link in connection.getConnections():
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
connector["links"].append(dic)
infos["connectors"].append(connector)
elif isinstance(instance, plcopen.contact):
@@ -1152,7 +1154,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connectors"]["input"]["links"].append(dic)
infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
elif isinstance(instance, plcopen.coil):
@@ -1166,7 +1168,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connectors"]["input"]["links"].append(dic)
infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
elif isinstance(instance, plcopen.step):
@@ -1181,7 +1183,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connectors"]["input"]["links"].append(dic)
if instance.connectionPointOut:
infos["connectors"]["output"] = {"position" : instance.connectionPointOut.getRelPosition()}
@@ -1198,7 +1200,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connectors"]["input"]["links"].append(dic)
infos["connectors"]["output"]["position"] = instance.connectionPointOut.getRelPosition()
elif isinstance(instance, (plcopen.selectionDivergence, plcopen.simultaneousDivergence)):
@@ -1213,7 +1215,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
connector["links"].append(dic)
infos["connectors"]["inputs"].append(connector)
for sequence in instance.getConnectionPointOut():
@@ -1233,7 +1235,7 @@
connections = sequence.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
connector["links"].append(dic)
infos["connectors"]["inputs"].append(connector)
connector = {}
@@ -1248,7 +1250,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connector"]["links"].append(dic)
elif isinstance(instance, plcopen.actionBlock):
infos["type"] = "actionBlock"
@@ -1259,7 +1261,7 @@
connections = instance.connectionPointIn.getConnections()
if connections:
for link in connections:
- dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints()}
+ dic = {"refLocalId":link.getRefLocalId(),"points":link.getPoints(),"formalParameter":link.getFormalParameter()}
infos["connector"]["links"].append(dic)
return infos
return False
@@ -1278,13 +1280,18 @@
for wire, handle in wires:
points = wire.GetPoints(handle != 0)
if handle == 0:
- refLocalId = wire.GetConnectedId(-1)
+ result = wire.GetConnectedInfos(-1)
else:
- refLocalId = wire.GetConnectedId(0)
- if refLocalId != None:
+ result = wire.GetConnectedInfos(0)
+ if result != None:
+ refLocalId, formalParameter = result
connection.addConnection()
connection.setConnectionId(idx, refLocalId)
connection.setConnectionPoints(idx, points)
+ if formalParameter != "":
+ connection.setConnectionParameter(idx, formalParameter)
+ else:
+ connection.setConnectionParameter(idx, None)
idx += 1
def AddCurrentElementEditingBlock(self, id):
@@ -1847,14 +1854,20 @@
return tasks_data, instances_data
def OpenXMLFile(self, filepath):
- if sys:
- sys.stdout = HolePseudoFile()
- tree = pyxsval.parseAndValidate(filepath, os.path.join(sys.path[0], "plcopen/TC6_XML_V10_B.xsd"))
- if sys:
- sys.stdout = sys.__stdout__
+ if self.VerifyXML:
+ if sys:
+ sys.stdout = HolePseudoFile()
+ result = pyxsval.parseAndValidate(filepath, os.path.join(sys.path[0], "plcopen/TC6_XML_V10_B.xsd"))
+ if sys:
+ sys.stdout = sys.__stdout__
+ tree = result.getTree()
+ else:
+ xmlfile = open(filepath, 'r')
+ tree = minidom.parse(xmlfile)
+ xmlfile.close()
self.Project = plcopen.project()
- self.Project.loadXMLTree(tree.getTree().childNodes[0])
+ self.Project.loadXMLTree(tree.childNodes[0])
self.UndoBuffer = UndoBuffer(self.Copy(self.Project), True)
self.SetFilePath(filepath)
self.ElementsOpened = []
@@ -1873,11 +1886,12 @@
"xsi:schemaLocation" : "http://www.plcopen.org/xml/tc6.xsd http://www.plcopen.org/xml/tc6.xsd"}
text += self.Project.generateXMLText("project", 0, extras)
- if sys:
- sys.stdout = HolePseudoFile()
- pyxsval.parseAndValidateString(text, open(os.path.join(sys.path[0], "plcopen/TC6_XML_V10_B.xsd"),"r").read())
- if sys:
- sys.stdout = sys.__stdout__
+ if self.VerifyXML:
+ if sys:
+ sys.stdout = HolePseudoFile()
+ pyxsval.parseAndValidateString(text, open(os.path.join(sys.path[0], "plcopen/TC6_XML_V10_B.xsd"),"r").read())
+ if sys:
+ sys.stdout = sys.__stdout__
if filepath:
xmlfile = open(filepath,"w")
@@ -1885,7 +1899,7 @@
xmlfile = open(self.FilePath,"w")
xmlfile.write(text)
xmlfile.close()
- self.UndoBuffer.CurrentSaved()
+ #self.ProjectBuffer.CurrentSaved()
if filepath:
self.SetFilePath(filepath)
return True
@@ -1901,20 +1915,20 @@
return cPickle.loads(cPickle.dumps(model))
def BufferProject(self):
- self.UndoBuffer.Buffering(self.Copy(self))
+ self.ProjectBuffer.Buffering(self.Copy(self))
def ProjectIsSaved(self):
- return self.UndoBuffer.IsCurrentSaved()
+ return self.ProjectBuffer.IsCurrentSaved()
def LoadPrevious(self):
- self.Project = self.Copy(self.UndoBuffer.Previous())
+ self.Project = self.Copy(self.ProjectBuffer.Previous())
self.RefreshElementsOpened()
def LoadNext(self):
- self.Project = self.Copy(self.UndoBuffer.Next())
+ self.Project = self.Copy(self.ProjectBuffer.Next())
self.RefreshElementsOpened()
def GetBufferState(self):
- first = self.UndoBuffer.IsFirst()
- last = self.UndoBuffer.IsLast()
+ first = self.ProjectBuffer.IsFirst()
+ last = self.ProjectBuffer.IsLast()
return not first, not last