diff -r 36d378bd852e -r dae55dd9ee14 PLCControler.py --- 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