--- 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):