diff -r fd138fc77510 -r 3a1b0afdaf84 PLCControler.py --- a/PLCControler.py Thu Aug 09 18:06:54 2007 +0200 +++ b/PLCControler.py Thu Aug 09 18:07:44 2007 +0200 @@ -24,6 +24,7 @@ from minixsv import pyxsval from xml.dom import minidom +from types import StringType, UnicodeType import cPickle import os,sys,re from datetime import * @@ -382,15 +383,15 @@ def GenerateProgram(self, filepath): if self.Project: - try: - program = GenerateCurrentProgram(self.Project) - programfile = open(filepath, "w") - programfile.write(program) - programfile.close() - self.ProgramFilePath = filepath - return True - except: - pass + #try: + program = GenerateCurrentProgram(self.Project) + programfile = open(filepath, "w") + programfile.write(program) + programfile.close() + self.ProgramFilePath = filepath + return True + #except: + # pass return False #------------------------------------------------------------------------------- @@ -626,7 +627,12 @@ tempvar = plcopen.varListPlain_variable() tempvar.setName(var["Name"]) var_type = plcopen.dataType() - var_type.setValue(var["Type"]) + if GetBlockType(var["Type"]) != None: + derived_type = plcopen.derived() + derived_type.setName(var["Type"]) + var_type.setValue(derived_type) + else: + var_type.setValue(var["Type"]) tempvar.setType(var_type) if var["Initial Value"] != "": value = plcopen.value() @@ -660,7 +666,12 @@ # Extract variables from every varLists for varlist in configuration.getGlobalVars(): for var in varlist.getVariable(): - tempvar = {"Name":var.getName(),"Class":"Global","Type":var.getType().getValue()} + tempvar = {"Name":var.getName(),"Class":"Global"} + var_type = var.getType().getValue() + if isinstance(var_type, (StringType, UnicodeType)): + tempvar["Type"] = var_type + else: + tempvar["Type"] = var_type.getName() initial = var.getInitialValue() if initial: tempvar["Initial Value"] = initial.getValue() @@ -702,7 +713,12 @@ # Extract variables from every varLists for varlist in resource.getGlobalVars(): for var in varlist.getVariable(): - tempvar = {"Name":var.getName(),"Class":"Global","Type":var.getType().getValue()} + tempvar = {"Name":var.getName(),"Class":"Global"} + var_type = var.getType().getValue() + if isinstance(var_type, (StringType, UnicodeType)): + tempvar["Type"] = var_type + else: + tempvar["Type"] = var_type.getName() initial = var.getInitialValue() if initial: tempvar["Initial Value"] = initial.getValue() @@ -737,7 +753,12 @@ # Extract variables from every varLists for type, varlist in pou.getVars(): for var in varlist.getVariable(): - tempvar = {"Name":var.getName(),"Class":type,"Type":var.getType().getValue()} + tempvar = {"Name":var.getName(),"Class":type} + var_type = var.getType().getValue() + if isinstance(var_type, (StringType, UnicodeType)): + tempvar["Type"] = var_type + else: + tempvar["Type"] = var_type.getName() initial = var.getInitialValue() if initial: tempvar["Initial Value"] = initial.getValue() @@ -1418,10 +1439,24 @@ connection.setConnectionParameter(idx, None) idx += 1 - def AddCurrentElementEditingBlock(self, id): + def AddCurrentElementEditingBlock(self, id, blocktype, blockname = None): block = plcopen.block() block.setLocalId(id) - self.GetCurrentElementEditing().addInstance("block", block) + block.setTypeName(blocktype) + if blockname: + block.setInstanceName(blockname) + element = self.GetCurrentElementEditing() + blocktype_infos = GetBlockType(blocktype) + if blocktype_infos["type"] != "function": + if self.CurrentElementEditing != None: + name = self.ElementsOpened[self.CurrentElementEditing] + words = name.split("::") + if len(words) == 1: + element.addPouVar(blocktype, blockname) + elif words[0] in ['T', 'A']: + pou = self.Project.getPou(words[1]) + pou.addPouVar(blocktype, blockname) + element.addInstance("block", block) self.RefreshPouUsingTree() def SetCurrentElementEditingBlockInfos(self, id, infos): @@ -1888,7 +1923,21 @@ self.SetConnectionWires(actionBlock.connectionPointIn, value) def RemoveCurrentElementEditingInstance(self, id): - self.GetCurrentElementEditing().removeInstance(id) + element = self.GetCurrentElementEditing() + instance = element.getInstance(id) + if isinstance(instance, plcopen.block): + blocktype = instance.getTypeName() + blocktype_infos = GetBlockType(blocktype) + if blocktype_infos["type"] != "function": + if self.CurrentElementEditing != None: + name = self.ElementsOpened[self.CurrentElementEditing] + words = name.split("::") + if len(words) == 1: + element.removePouVar(blocktype, instance.getInstanceName()) + elif words[0] in ['T', 'A']: + pou = self.Project.getPou(words[1]) + pou.removePouVar(blocktype, instance.getInstanceName()) + element.removeInstance(id) self.RefreshPouUsingTree() def GetCurrentResourceEditingVariables(self):