author  Andrey Skvortsov <andrej.skvortzov@gmail.com> 
Mon, 26 Dec 2016 14:01:54 +0300  
changeset 1615  af9b0ccb418e 
parent 1581  2295fdc5c271 
child 1616  3638463d6e02 
permissions  rwrr 
814  1 
#!/usr/bin/env python 
2 
# * coding: utf8 * 

3 

1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

4 
# This file is part of Beremiz, a Integrated Development Environment for 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

5 
# programming IEC 611313 automates supporting plcopen standard and CanFestival. 
814  6 
# 
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

7 
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD 
814  8 
# 
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

9 
# See COPYING file for copyrights details. 
814  10 
# 
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

11 
# This program is free software; you can redistribute it and/or 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

12 
# modify it under the terms of the GNU General Public License 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

13 
# as published by the Free Software Foundation; either version 2 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

14 
# of the License, or (at your option) any later version. 
814  15 
# 
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

16 
# This program is distributed in the hope that it will be useful, 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

17 
# but WITHOUT ANY WARRANTY; without even the implied warranty of 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

18 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

19 
# GNU General Public License for more details. 
814  20 
# 
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

21 
# You should have received a copy of the GNU General Public License 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

22 
# along with this program; if not, write to the Free Software 
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1508
diff
changeset

23 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021101301, USA. 
814  24 

25 
from xml.dom import minidom 

26 
from types import StringType, UnicodeType, TupleType 

1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

27 
from lxml import etree 
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

28 
from copy import deepcopy 
814  29 
import os,sys,re 
30 
import datetime 

31 
from time import localtime 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

32 
from collections import OrderedDict, namedtuple 
814  33 

1313
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1311
diff
changeset

34 
from plcopen import * 
814  35 
from graphics.GraphicCommons import * 
36 
from PLCGenerator import * 

37 

38 
duration_model = re.compile("(?:([09]{1,2})h)?(?:([09]{1,2})m(?!s))?(?:([09]{1,2})s)?(?:([09]{1,3}(?:\.[09]*)?)ms)?") 

39 

40 
ITEMS_EDITABLE = [ITEM_PROJECT, 

41 
ITEM_POU, 

42 
ITEM_VARIABLE, 

43 
ITEM_TRANSITION, 

44 
ITEM_ACTION, 

45 
ITEM_CONFIGURATION, 

46 
ITEM_RESOURCE, 

47 
ITEM_DATATYPE 

48 
] = range(8) 

49 

50 
ITEMS_UNEDITABLE = [ITEM_DATATYPES, 

51 
ITEM_FUNCTION, 

52 
ITEM_FUNCTIONBLOCK, 

53 
ITEM_PROGRAM, 

54 
ITEM_TRANSITIONS, 

55 
ITEM_ACTIONS, 

56 
ITEM_CONFIGURATIONS, 

57 
ITEM_RESOURCES, 

58 
ITEM_PROPERTIES 

59 
] = range(8, 17) 

1411  60 

814  61 
ITEMS_VARIABLE = [ITEM_VAR_LOCAL, 
62 
ITEM_VAR_GLOBAL, 

63 
ITEM_VAR_EXTERNAL, 

64 
ITEM_VAR_TEMP, 

65 
ITEM_VAR_INPUT, 

66 
ITEM_VAR_OUTPUT, 

67 
ITEM_VAR_INOUT 

68 
] = range(17, 24) 

69 

1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

70 
VAR_CLASS_INFOS = { 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

71 
"Local": ("localVars", ITEM_VAR_LOCAL), 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

72 
"Global": ("globalVars", ITEM_VAR_GLOBAL), 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

73 
"External": ("externalVars", ITEM_VAR_EXTERNAL), 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

74 
"Temp": ("tempVars", ITEM_VAR_TEMP), 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

75 
"Input": ("inputVars", ITEM_VAR_INPUT), 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

76 
"Output": ("outputVars", ITEM_VAR_OUTPUT), 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

77 
"InOut": ("inOutVars", ITEM_VAR_INOUT)} 
814  78 

79 
POU_TYPES = {"program": ITEM_PROGRAM, 

80 
"functionBlock": ITEM_FUNCTIONBLOCK, 

81 
"function": ITEM_FUNCTION, 

82 
} 

83 

84 
LOCATIONS_ITEMS = [LOCATION_CONFNODE, 

85 
LOCATION_MODULE, 

86 
LOCATION_GROUP, 

87 
LOCATION_VAR_INPUT, 

88 
LOCATION_VAR_OUTPUT, 

89 
LOCATION_VAR_MEMORY] = range(6) 

90 

91 
ScriptDirectory = os.path.split(os.path.realpath(__file__))[0] 

92 

93 
def GetUneditableNames(): 

94 
_ = lambda x:x 

1411  95 
return [_("Userdefined POUs"), _("Functions"), _("Function Blocks"), 
96 
_("Programs"), _("Data Types"), _("Transitions"), _("Actions"), 

814  97 
_("Configurations"), _("Resources"), _("Properties")] 
98 
UNEDITABLE_NAMES = GetUneditableNames() 

1411  99 
[USER_DEFINED_POUS, FUNCTIONS, FUNCTION_BLOCKS, PROGRAMS, 
100 
DATA_TYPES, TRANSITIONS, ACTIONS, CONFIGURATIONS, 

814  101 
RESOURCES, PROPERTIES] = UNEDITABLE_NAMES 
102 

103 
# 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

104 
# Helper object for loading library in xslt stylesheets 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

105 
# 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

106 

533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

107 
class LibraryResolver(etree.Resolver): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

108 

533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

109 
def __init__(self, controller, debug=False): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

110 
self.Controller = controller 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

111 
self.Debug = debug 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

112 

533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

113 
def resolve(self, url, pubid, context): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

114 
lib_name = os.path.basename(url) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

115 
if lib_name in ["project", "stdlib", "extensions"]: 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

116 
lib_el = etree.Element(lib_name) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

117 
if lib_name == "project": 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

118 
lib_el.append(deepcopy(self.Controller.GetProject(self.Debug))) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

119 
elif lib_name == "stdlib": 
1390  120 
for lib in StdBlckLibs.values(): 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

121 
lib_el.append(deepcopy(lib)) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

122 
else: 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

123 
for ctn in self.Controller.ConfNodeTypes: 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

124 
lib_el.append(deepcopy(ctn["types"])) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

125 
return self.resolve_string(etree.tostring(lib_el), context) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

126 

533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

127 
# 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

128 
# Helpers functions for translating list of arguments 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

129 
# from xslt to valid arguments 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

130 
# 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

131 

1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

132 
_StringValue = lambda x: x 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

133 
_BoolValue = lambda x: x in ["true", "0"] 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

134 

533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

135 
def _translate_args(translations, args): 
1411  136 
return [translate(arg[0]) if len(arg) > 0 else None 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

137 
for translate, arg in 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

138 
zip(translations, args)] 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

139 

533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

140 
# 
1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

141 
# Helpers object for generating pou var list 
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

142 
# 
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

143 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

144 
class _VariableInfos(object): 
1411  145 
__slots__ = ["Name", "Class", "Option", "Location", "InitialValue", 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

146 
"Edit", "Documentation", "Type", "Tree", "Number"] 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

147 
def __init__(self, *args): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

148 
for attr, value in zip(self.__slots__, args): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

149 
setattr(self, attr, value if value is not None else "") 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

150 
def copy(self): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

151 
return _VariableInfos(*[getattr(self, attr) for attr in self.__slots__]) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

152 

533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

153 
class VariablesInfosFactory: 
1411  154 

1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

155 
def __init__(self, variables): 
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

156 
self.Variables = variables 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

157 
self.TreeStack = [] 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

158 
self.Type = None 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

159 
self.Dimensions = None 
1411  160 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

161 
def SetType(self, context, *args): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

162 
self.Type = args[0][0] 
1411  163 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

164 
def GetType(self): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

165 
if len(self.Dimensions) > 0: 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

166 
return ("array", self.Type, self.Dimensions) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

167 
return self.Type 
1411  168 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

169 
def GetTree(self): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

170 
return (self.TreeStack.pop(1), self.Dimensions) 
1411  171 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

172 
def AddDimension(self, context, *args): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

173 
self.Dimensions.append(tuple( 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

174 
_translate_args([_StringValue] * 2, args))) 
1411  175 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

176 
def AddTree(self, context, *args): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

177 
self.TreeStack.append([]) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

178 
self.Dimensions = [] 
1411  179 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

180 
def AddVarToTree(self, context, *args): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

181 
var = (args[0][0], self.Type, self.GetTree()) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

182 
self.TreeStack[1].append(var) 
1411  183 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

184 
def AddVariable(self, context, *args): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

185 
self.Variables.append(_VariableInfos(*(_translate_args( 
1411  186 
[_StringValue] * 5 + [_BoolValue] + [_StringValue], args) + 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

187 
[self.GetType(), self.GetTree()]))) 
1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

188 

ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

189 
# 
1316
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

190 
# Helpers object for generating pou variable instance list 
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

191 
# 
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

192 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

193 
def class_extraction(value): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

194 
class_type = { 
1316
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

195 
"configuration": ITEM_CONFIGURATION, 
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

196 
"resource": ITEM_RESOURCE, 
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

197 
"action": ITEM_ACTION, 
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

198 
"transition": ITEM_TRANSITION, 
1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

199 
"program": ITEM_PROGRAM}.get(value) 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

200 
if class_type is not None: 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

201 
return class_type 
1411  202 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

203 
pou_type = POU_TYPES.get(value) 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

204 
if pou_type is not None: 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

205 
return pou_type 
1411  206 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

207 
var_type = VAR_CLASS_INFOS.get(value) 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

208 
if var_type is not None: 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

209 
return var_type[1] 
1411  210 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

211 
return None 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

212 

aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

213 
class _VariablesTreeItemInfos(object): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

214 
__slots__ = ["name", "var_class", "type", "edit", "debug", "variables"] 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

215 
def __init__(self, *args): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

216 
for attr, value in zip(self.__slots__, args): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

217 
setattr(self, attr, value if value is not None else "") 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

218 
def copy(self): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

219 
return _VariableTreeItem(*[getattr(self, attr) for attr in self.__slots__]) 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

220 

aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

221 
class VariablesTreeInfosFactory: 
1411  222 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

223 
def __init__(self): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

224 
self.Root = None 
1411  225 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

226 
def GetRoot(self): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

227 
return self.Root 
1411  228 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

229 
def SetRoot(self, context, *args): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

230 
self.Root = _VariablesTreeItemInfos( 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

231 
*([''] + _translate_args( 
1411  232 
[class_extraction, _StringValue] + [_BoolValue] * 2, 
1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

233 
args) + [[]])) 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

234 

aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

235 
def AddVariable(self, context, *args): 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

236 
if self.Root is not None: 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

237 
self.Root.variables.append(_VariablesTreeItemInfos( 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

238 
*(_translate_args( 
1411  239 
[_StringValue, class_extraction, _StringValue] + 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

240 
[_BoolValue] * 2, args) + [[]]))) 
1316
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

241 

df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

242 
# 
1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

243 
# Helpers object for generating instances path list 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

244 
# 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

245 

1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

246 
class InstancesPathFactory: 
1411  247 

1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

248 
def __init__(self, instances): 
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

249 
self.Instances = instances 
1411  250 

1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

251 
def AddInstance(self, context, *args): 
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

252 
self.Instances.append(args[0][0]) 
1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

253 

748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

254 
# 
1321
83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

255 
# Helpers object for generating instance tagname 
83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

256 
# 
83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

257 

1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

258 
class InstanceTagName: 
1321
83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

259 

83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

260 
def __init__(self, controller): 
83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

261 
self.Controller = controller 
1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

262 
self.TagName = None 
1411  263 

1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

264 
def GetTagName(self): 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

265 
return self.TagName 
1411  266 

1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

267 
def ConfigTagName(self, context, *args): 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

268 
self.TagName = self.Controller.ComputeConfigurationName(args[0][0]) 
1411  269 

1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

270 
def ResourceTagName(self, context, *args): 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

271 
self.TagName = self.Controller.ComputeConfigurationResourceName(args[0][0], args[1][0]) 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

272 

a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

273 
def PouTagName(self, context, *args): 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

274 
self.TagName = self.Controller.ComputePouName(args[0][0]) 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

275 

a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

276 
def ActionTagName(self, context, *args): 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

277 
self.TagName = self.Controller.ComputePouActionName(args[0][0], args[0][1]) 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

278 

a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

279 
def TransitionTagName(self, context, *args): 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

280 
self.TagName = self.Controller.ComputePouTransitionName(args[0][0], args[0][1]) 
1321
83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

281 

83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

282 
# 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

283 
# Helpers object for generating pou block instances list 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

284 
# 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

285 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

286 
_Point = namedtuple("Point", ["x", "y"]) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

287 

1411  288 
_BlockInstanceInfos = namedtuple("BlockInstanceInfos", 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

289 
["type", "id", "x", "y", "width", "height", "specific_values", "inputs", "outputs"]) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

290 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

291 
_BlockSpecificValues = ( 
1411  292 
namedtuple("BlockSpecificValues", 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

293 
["name", "execution_order"]), 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

294 
[_StringValue, int]) 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

295 
_VariableSpecificValues = ( 
1411  296 
namedtuple("VariableSpecificValues", 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

297 
["name", "value_type", "execution_order"]), 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

298 
[_StringValue, _StringValue, int]) 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

299 
_ConnectionSpecificValues = ( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

300 
namedtuple("ConnectionSpecificValues", ["name"]), 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

301 
[_StringValue]) 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

302 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

303 
_PowerRailSpecificValues = ( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

304 
namedtuple("PowerRailSpecificValues", ["connectors"]), 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

305 
[int]) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

306 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

307 
_LDElementSpecificValues = ( 
1411  308 
namedtuple("LDElementSpecificValues", 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

309 
["name", "negated", "edge", "storage", "execution_order"]), 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

310 
[_StringValue, _BoolValue, _StringValue, _StringValue, int]) 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

311 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

312 
_DivergenceSpecificValues = ( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

313 
namedtuple("DivergenceSpecificValues", ["connectors"]), 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

314 
[int]) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

315 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

316 
_SpecificValuesTuples = { 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

317 
"comment": ( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

318 
namedtuple("CommentSpecificValues", ["content"]), 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

319 
[_StringValue]), 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

320 
"input": _VariableSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

321 
"output": _VariableSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

322 
"inout": _VariableSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

323 
"connector": _ConnectionSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

324 
"continuation": _ConnectionSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

325 
"leftPowerRail": _PowerRailSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

326 
"rightPowerRail": _PowerRailSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

327 
"contact": _LDElementSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

328 
"coil": _LDElementSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

329 
"step": ( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

330 
namedtuple("StepSpecificValues", ["name", "initial", "action"]), 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

331 
[_StringValue, _BoolValue, lambda x: x]), 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

332 
"transition": ( 
1411  333 
namedtuple("TransitionSpecificValues", 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

334 
["priority", "condition_type", "condition", "connection"]), 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

335 
[int, _StringValue, _StringValue, lambda x: x]), 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

336 
"selectionDivergence": _DivergenceSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

337 
"selectionConvergence": _DivergenceSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

338 
"simultaneousDivergence": _DivergenceSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

339 
"simultaneousConvergence": _DivergenceSpecificValues, 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

340 
"jump": ( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

341 
namedtuple("JumpSpecificValues", ["target"]), 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

342 
[_StringValue]), 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

343 
"actionBlock": ( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

344 
namedtuple("ActionBlockSpecificValues", ["actions"]), 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

345 
[lambda x: x]), 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

346 
} 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

347 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

348 
_InstanceConnectionInfos = namedtuple("InstanceConnectionInfos", 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

349 
["name", "negated", "edge", "position", "links"]) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

350 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

351 
_ConnectionLinkInfos = namedtuple("ConnectionLinkInfos", 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

352 
["refLocalId", "formalParameter", "points"]) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

353 

1341  354 
class _ActionInfos(object): 
1339  355 
__slots__ = ["qualifier", "type", "value", "duration", "indicator"] 
356 
def __init__(self, *args): 

357 
for attr, value in zip(self.__slots__, args): 

358 
setattr(self, attr, value if value is not None else "") 

359 
def copy(self): 

360 
return _ActionInfos(*[getattr(self, attr) for attr in self.__slots__]) 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

361 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

362 
class BlockInstanceFactory: 
1411  363 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

364 
def __init__(self, block_instances): 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

365 
self.BlockInstances = block_instances 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

366 
self.CurrentInstance = None 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

367 
self.SpecificValues = None 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

368 
self.CurrentConnection = None 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

369 
self.CurrentLink = None 
1411  370 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

371 
def SetSpecificValues(self, context, *args): 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

372 
self.SpecificValues = list(args) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

373 
self.CurrentInstance = None 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

374 
self.CurrentConnection = None 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

375 
self.CurrentLink = None 
1411  376 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

377 
def AddBlockInstance(self, context, *args): 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

378 
specific_values_tuple, specific_values_translation = \ 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

379 
_SpecificValuesTuples.get(args[0][0], _BlockSpecificValues) 
1411  380 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

381 
if (args[0][0] == "step" and len(self.SpecificValues) < 3 or 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

382 
args[0][0] == "transition" and len(self.SpecificValues) < 4): 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

383 
self.SpecificValues.append([None]) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

384 
elif args[0][0] == "actionBlock" and len(self.SpecificValues) < 1: 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

385 
self.SpecificValues.append([[]]) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

386 
specific_values = specific_values_tuple(*_translate_args( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

387 
specific_values_translation, self.SpecificValues)) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

388 
self.SpecificValues = None 
1411  389 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

390 
self.CurrentInstance = _BlockInstanceInfos( 
1411  391 
*(_translate_args([_StringValue, int] + [float] * 4, args) + 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

392 
[specific_values, [], []])) 
1411  393 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

394 
self.BlockInstances[self.CurrentInstance.id] = self.CurrentInstance 
1411  395 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

396 
def AddInstanceConnection(self, context, *args): 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

397 
connection_args = _translate_args( 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

398 
[_StringValue] * 2 + [_BoolValue, _StringValue] + [float] * 2, args) 
1411  399 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

400 
self.CurrentConnection = _InstanceConnectionInfos( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

401 
*(connection_args[1:4] + [ 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

402 
_Point(*connection_args[4:6]), []])) 
1411  403 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

404 
if self.CurrentInstance is not None: 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

405 
if connection_args[0] == "input": 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

406 
self.CurrentInstance.inputs.append(self.CurrentConnection) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

407 
else: 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

408 
self.CurrentInstance.outputs.append(self.CurrentConnection) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

409 
else: 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

410 
self.SpecificValues.append([self.CurrentConnection]) 
1411  411 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

412 
def AddConnectionLink(self, context, *args): 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

413 
self.CurrentLink = _ConnectionLinkInfos( 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

414 
*(_translate_args([int, _StringValue], args) + [[]])) 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

415 
self.CurrentConnection.links.append(self.CurrentLink) 
1411  416 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

417 
def AddLinkPoint(self, context, *args): 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

418 
self.CurrentLink.points.append(_Point( 
1373
4278d5c1e414
Fixed bug when graphic element position and size and connection points are decimal
Laurent Bessard
parents:
1372
diff
changeset

419 
*_translate_args([float] * 2, args))) 
1411  420 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

421 
def AddAction(self, context, *args): 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

422 
if len(self.SpecificValues) == 0: 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

423 
self.SpecificValues.append([[]]) 
1378
cbc0f64a25eb
Fixed bug with nonascii characters in program comments
Laurent Bessard
parents:
1373
diff
changeset

424 
translated_args = _translate_args([_StringValue] * 5, args) 
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

425 
self.SpecificValues[0][0].append(_ActionInfos(*translated_args)) 
1411  426 

1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

427 
pou_block_instances_xslt = etree.parse( 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

428 
os.path.join(ScriptDirectory, "plcopen", "pou_block_instances.xslt")) 
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

429 

c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1337
diff
changeset

430 
# 
814  431 
# Undo Buffer for PLCOpenEditor 
432 
# 

433 

434 
# Length of the buffer 

435 
UNDO_BUFFER_LENGTH = 20 

436 

437 
""" 

438 
Class implementing a buffer of changes made on the current editing model 

439 
""" 

440 
class UndoBuffer: 

441 

442 
# Constructor initialising buffer 

443 
def __init__(self, currentstate, issaved = False): 

444 
self.Buffer = [] 

445 
self.CurrentIndex = 1 

446 
self.MinIndex = 1 

447 
self.MaxIndex = 1 

448 
# if current state is defined 

449 
if currentstate: 

450 
self.CurrentIndex = 0 

451 
self.MinIndex = 0 

452 
self.MaxIndex = 0 

453 
# Initialising buffer with currentstate at the first place 

454 
for i in xrange(UNDO_BUFFER_LENGTH): 

455 
if i == 0: 

456 
self.Buffer.append(currentstate) 

457 
else: 

458 
self.Buffer.append(None) 

459 
# Initialising index of state saved 

460 
if issaved: 

461 
self.LastSave = 0 

462 
else: 

463 
self.LastSave = 1 

1411  464 

814  465 
# Add a new state in buffer 
466 
def Buffering(self, currentstate): 

467 
self.CurrentIndex = (self.CurrentIndex + 1) % UNDO_BUFFER_LENGTH 

468 
self.Buffer[self.CurrentIndex] = currentstate 

469 
# Actualising buffer limits 

470 
self.MaxIndex = self.CurrentIndex 

471 
if self.MinIndex == self.CurrentIndex: 

472 
# If the removed state was the state saved, there is no state saved in the buffer 

473 
if self.LastSave == self.MinIndex: 

474 
self.LastSave = 1 

475 
self.MinIndex = (self.MinIndex + 1) % UNDO_BUFFER_LENGTH 

476 
self.MinIndex = max(self.MinIndex, 0) 

1411  477 

814  478 
# Return current state of buffer 
479 
def Current(self): 

480 
return self.Buffer[self.CurrentIndex] 

1411  481 

814  482 
# Change current state to previous in buffer and return new current state 
483 
def Previous(self): 

484 
if self.CurrentIndex != self.MinIndex: 

485 
self.CurrentIndex = (self.CurrentIndex  1) % UNDO_BUFFER_LENGTH 

486 
return self.Buffer[self.CurrentIndex] 

487 
return None 

1411  488 

814  489 
# Change current state to next in buffer and return new current state 
490 
def Next(self): 

491 
if self.CurrentIndex != self.MaxIndex: 

492 
self.CurrentIndex = (self.CurrentIndex + 1) % UNDO_BUFFER_LENGTH 

493 
return self.Buffer[self.CurrentIndex] 

494 
return None 

1411  495 

814  496 
# Return True if current state is the first in buffer 
497 
def IsFirst(self): 

498 
return self.CurrentIndex == self.MinIndex 

1411  499 

814  500 
# Return True if current state is the last in buffer 
501 
def IsLast(self): 

502 
return self.CurrentIndex == self.MaxIndex 

503 

504 
# Note that current state is saved 

505 
def CurrentSaved(self): 

506 
self.LastSave = self.CurrentIndex 

1411  507 

814  508 
# Return True if current state is saved 
509 
def IsCurrentSaved(self): 

510 
return self.LastSave == self.CurrentIndex 

511 

512 

513 
# 

514 
# Controler for PLCOpenEditor 

515 
# 

516 

517 
""" 

518 
Class which controls the operations made on the plcopen model and answers to view requests 

519 
""" 

520 
class PLCControler: 

1411  521 

814  522 
# Create a new PLCControler 
523 
def __init__(self): 

524 
self.LastNewIndex = 0 

525 
self.Reset() 

1411  526 

814  527 
# Reset PLCControler internal variables 
528 
def Reset(self): 

529 
self.Project = None 

530 
self.ProjectBufferEnabled = True 

531 
self.ProjectBuffer = None 

532 
self.ProjectSaved = True 

533 
self.Buffering = False 

534 
self.FilePath = "" 

535 
self.FileName = "" 

536 
self.ProgramChunks = [] 

537 
self.ProgramOffset = 0 

538 
self.NextCompiledProject = None 

539 
self.CurrentCompiledProject = None 

540 
self.ConfNodeTypes = [] 

1283
f3cfe1ff917e
More optimization attemps in type handling
Edouard Tisserant
parents:
1265
diff
changeset

541 
self.TotalTypesDict = StdBlckDct.copy() 
f3cfe1ff917e
More optimization attemps in type handling
Edouard Tisserant
parents:
1265
diff
changeset

542 
self.TotalTypes = StdBlckLst[:] 
1284  543 
self.ProgramFilePath = "" 
1411  544 

814  545 
def GetQualifierTypes(self): 
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1297
diff
changeset

546 
return QualifierList 
814  547 

548 
def GetProject(self, debug = False): 

549 
if debug and self.CurrentCompiledProject is not None: 

550 
return self.CurrentCompiledProject 

551 
else: 

552 
return self.Project 

553 

554 
# 

555 
# Project management functions 

556 
# 

557 

558 
# Return if a project is opened 

559 
def HasOpenedProject(self): 

560 
return self.Project is not None 

561 

562 
# Create a new project by replacing the current one 

563 
def CreateNewProject(self, properties): 

564 
# Create the project 

1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1284
diff
changeset

565 
self.Project = PLCOpenParser.CreateRoot() 
814  566 
properties["creationDateTime"] = datetime.datetime(*localtime()[:6]) 
567 
self.Project.setfileHeader(properties) 

568 
self.Project.setcontentHeader(properties) 

569 
self.SetFilePath("") 

1411  570 

814  571 
# Initialize the project buffer 
572 
self.CreateProjectBuffer(False) 

573 
self.ProgramChunks = [] 

574 
self.ProgramOffset = 0 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

575 
self.NextCompiledProject = self.Copy(self.Project) 
814  576 
self.CurrentCompiledProject = None 
577 
self.Buffering = False 

1411  578 

814  579 
# Return project data type names 
580 
def GetProjectDataTypeNames(self, debug = False): 

581 
project = self.GetProject(debug) 

582 
if project is not None: 

583 
return [datatype.getname() for datatype in project.getdataTypes()] 

584 
return [] 

1411  585 

814  586 
# Return project pou names 
587 
def GetProjectPouNames(self, debug = False): 

588 
project = self.GetProject(debug) 

589 
if project is not None: 

590 
return [pou.getname() for pou in project.getpous()] 

591 
return [] 

1411  592 

814  593 
# Return project pou names 
594 
def GetProjectConfigNames(self, debug = False): 

595 
project = self.GetProject(debug) 

596 
if project is not None: 

597 
return [config.getname() for config in project.getconfigurations()] 

598 
return [] 

1411  599 

1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

600 
# Return project pou variable names 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

601 
def GetProjectPouVariableNames(self, pou_name = None, debug = False): 
814  602 
variables = [] 
603 
project = self.GetProject(debug) 

604 
if project is not None: 

605 
for pou in project.getpous(): 

606 
if pou_name is None or pou_name == pou.getname(): 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

607 
variables.extend([var.Name for var in self.GetPouInterfaceVars(pou, debug=debug)]) 
814  608 
for transition in pou.gettransitionList(): 
609 
variables.append(transition.getname()) 

610 
for action in pou.getactionList(): 

611 
variables.append(action.getname()) 

612 
return variables 

1411  613 

814  614 
# Return file path if project is an open file 
615 
def GetFilePath(self): 

616 
return self.FilePath 

1411  617 

814  618 
# Return file path if project is an open file 
619 
def GetProgramFilePath(self): 

620 
return self.ProgramFilePath 

1411  621 

814  622 
# Return file name and point out if file is up to date 
623 
def GetFilename(self): 

624 
if self.Project is not None: 

625 
if self.ProjectIsSaved(): 

626 
return self.FileName 

627 
else: 

628 
return "~%s~"%self.FileName 

629 
return "" 

1411  630 

814  631 
# Change file path and save file name or create a default one if file path not defined 
632 
def SetFilePath(self, filepath): 

633 
self.FilePath = filepath 

634 
if filepath == "": 

635 
self.LastNewIndex += 1 

636 
self.FileName = _("Unnamed%d")%self.LastNewIndex 

637 
else: 

638 
self.FileName = os.path.splitext(os.path.basename(filepath))[0] 

1411  639 

814  640 
# Change project properties 
641 
def SetProjectProperties(self, name = None, properties = None, buffer = True): 

642 
if self.Project is not None: 

643 
if name is not None: 

644 
self.Project.setname(name) 

645 
if properties is not None: 

646 
self.Project.setfileHeader(properties) 

647 
self.Project.setcontentHeader(properties) 

648 
if buffer and (name is not None or properties is not None): 

649 
self.BufferProject() 

1411  650 

814  651 
# Return project name 
652 
def GetProjectName(self, debug=False): 

653 
project = self.GetProject(debug) 

654 
if project is not None: 

655 
return project.getname() 

656 
return None 

1411  657 

814  658 
# Return project properties 
659 
def GetProjectProperties(self, debug = False): 

660 
project = self.GetProject(debug) 

661 
if project is not None: 

662 
properties = project.getfileHeader() 

663 
properties.update(project.getcontentHeader()) 

664 
return properties 

665 
return None 

1411  666 

814  667 
# Return project informations 
668 
def GetProjectInfos(self, debug = False): 

669 
project = self.GetProject(debug) 

670 
if project is not None: 

671 
infos = {"name": project.getname(), "type": ITEM_PROJECT} 

672 
datatypes = {"name": DATA_TYPES, "type": ITEM_DATATYPES, "values":[]} 

673 
for datatype in project.getdataTypes(): 

1411  674 
datatypes["values"].append({"name": datatype.getname(), "type": ITEM_DATATYPE, 
814  675 
"tagname": self.ComputeDataTypeName(datatype.getname()), "values": []}) 
676 
pou_types = {"function": {"name": FUNCTIONS, "type": ITEM_FUNCTION, "values":[]}, 

677 
"functionBlock": {"name": FUNCTION_BLOCKS, "type": ITEM_FUNCTIONBLOCK, "values":[]}, 

678 
"program": {"name": PROGRAMS, "type": ITEM_PROGRAM, "values":[]}} 

679 
for pou in project.getpous(): 

680 
pou_type = pou.getpouType() 

681 
pou_infos = {"name": pou.getname(), "type": ITEM_POU, 

682 
"tagname": self.ComputePouName(pou.getname())} 

683 
pou_values = [] 

684 
if pou.getbodyType() == "SFC": 

685 
transitions = [] 

686 
for transition in pou.gettransitionList(): 

1411  687 
transitions.append({"name": transition.getname(), "type": ITEM_TRANSITION, 
688 
"tagname": self.ComputePouTransitionName(pou.getname(), transition.getname()), 

814  689 
"values": []}) 
690 
pou_values.append({"name": TRANSITIONS, "type": ITEM_TRANSITIONS, "values": transitions}) 

691 
actions = [] 

692 
for action in pou.getactionList(): 

1411  693 
actions.append({"name": action.getname(), "type": ITEM_ACTION, 
694 
"tagname": self.ComputePouActionName(pou.getname(), action.getname()), 

814  695 
"values": []}) 
696 
pou_values.append({"name": ACTIONS, "type": ITEM_ACTIONS, "values": actions}) 

697 
if pou_type in pou_types: 

698 
pou_infos["values"] = pou_values 

699 
pou_types[pou_type]["values"].append(pou_infos) 

700 
configurations = {"name": CONFIGURATIONS, "type": ITEM_CONFIGURATIONS, "values": []} 

701 
for config in project.getconfigurations(): 

702 
config_name = config.getname() 

1411  703 
config_infos = {"name": config_name, "type": ITEM_CONFIGURATION, 
704 
"tagname": self.ComputeConfigurationName(config.getname()), 

814  705 
"values": []} 
706 
resources = {"name": RESOURCES, "type": ITEM_RESOURCES, "values": []} 

707 
for resource in config.getresource(): 

708 
resource_name = resource.getname() 

1411  709 
resource_infos = {"name": resource_name, "type": ITEM_RESOURCE, 
710 
"tagname": self.ComputeConfigurationResourceName(config.getname(), resource.getname()), 

814  711 
"values": []} 
712 
resources["values"].append(resource_infos) 

713 
config_infos["values"] = [resources] 

714 
configurations["values"].append(config_infos) 

1411  715 
infos["values"] = [datatypes, pou_types["function"], pou_types["functionBlock"], 
814  716 
pou_types["program"], configurations] 
717 
return infos 

718 
return None 

719 

720 
def GetPouVariables(self, tagname, debug = False): 

721 
pou_type = None 

722 
project = self.GetProject(debug) 

723 
if project is not None: 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

724 
factory = VariablesTreeInfosFactory() 
1411  725 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

726 
parser = etree.XMLParser() 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

727 
parser.resolvers.add(LibraryResolver(self, debug)) 
1411  728 

1316
df9d02bd3eb7
Replaced old pou instance variable list generating process by xslt stylesheet
Laurent Bessard
parents:
1315
diff
changeset

729 
pou_variable_xslt_tree = etree.XSLT( 
1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

730 
etree.parse( 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

731 
os.path.join(ScriptDirectory, "plcopen", "pou_variables.xslt"), 
1411  732 
parser), 
1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

733 
extensions = {("pou_vars_ns", name): getattr(factory, name) 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

734 
for name in ["SetRoot", "AddVariable"]}) 
1411  735 

1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

736 
obj = None 
814  737 
words = tagname.split("::") 
738 
if words[0] == "P": 

1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

739 
obj = self.GetPou(words[1], debug) 
1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

740 
elif words[0] != "D": 
1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

741 
obj = self.GetEditedElement(tagname, debug) 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

742 
if obj is not None: 
1348
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

743 
pou_variable_xslt_tree(obj) 
aee0a7eb833a
Fixed pou variables instance information loading stylesheet
Laurent Bessard
parents:
1347
diff
changeset

744 
return factory.GetRoot() 
1411  745 

1321
83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

746 
return None 
1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

747 

748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

748 
def GetInstanceList(self, root, name, debug = False): 
1354
241c19ea80da
Fixed bug when selecting pou that is not used in project
Laurent Bessard
parents:
1351
diff
changeset

749 
instances = [] 
241c19ea80da
Fixed bug when selecting pou that is not used in project
Laurent Bessard
parents:
1351
diff
changeset

750 
project = self.GetProject(debug) 
241c19ea80da
Fixed bug when selecting pou that is not used in project
Laurent Bessard
parents:
1351
diff
changeset

751 
if project is not None: 
1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

752 
factory = InstancesPathFactory(instances) 
1411  753 

1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

754 
parser = etree.XMLParser() 
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

755 
parser.resolvers.add(LibraryResolver(self, debug)) 
1411  756 

1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

757 
instances_path_xslt_tree = etree.XSLT( 
1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

758 
etree.parse( 
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

759 
os.path.join(ScriptDirectory, "plcopen", "instances_path.xslt"), 
1411  760 
parser), 
1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

761 
extensions = { 
1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

762 
("instances_ns", "AddInstance"): factory.AddInstance}) 
1411  763 

764 
instances_path_xslt_tree(root, 

1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

765 
instance_type=etree.XSLT.strparam(name)) 
1411  766 

1354
241c19ea80da
Fixed bug when selecting pou that is not used in project
Laurent Bessard
parents:
1351
diff
changeset

767 
return instances 
1411  768 

1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

769 
def SearchPouInstances(self, tagname, debug = False): 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

770 
project = self.GetProject(debug) 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

771 
if project is not None: 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

772 
words = tagname.split("::") 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

773 
if words[0] == "P": 
1350
7280349a3375
Fixed pou instance path list computing stylesheet
Laurent Bessard
parents:
1348
diff
changeset

774 
return self.GetInstanceList(project, words[1]) 
814  775 
elif words[0] == 'C': 
776 
return [words[1]] 

777 
elif words[0] == 'R': 

778 
return ["%s.%s" % (words[1], words[2])] 

826
098f822ef308
Adding transition and action in list of instances of SFC POU in PouInstanceVariablesPanel
laurent
parents:
823
diff
changeset

779 
elif words[0] in ['T', 'A']: 
098f822ef308
Adding transition and action in list of instances of SFC POU in PouInstanceVariablesPanel
laurent
parents:
823
diff
changeset

780 
return ["%s.%s" % (instance, words[2]) 
098f822ef308
Adding transition and action in list of instances of SFC POU in PouInstanceVariablesPanel
laurent
parents:
823
diff
changeset

781 
for instance in self.SearchPouInstances( 
098f822ef308
Adding transition and action in list of instances of SFC POU in PouInstanceVariablesPanel
laurent
parents:
823
diff
changeset

782 
self.ComputePouName(words[1]), debug)] 
814  783 
return [] 
1411  784 

814  785 
def GetPouInstanceTagName(self, instance_path, debug = False): 
1254
ebc765355536
Fixed bug when trying to add a global function block instance variable to debug variable panel and not connected
Laurent Bessard
parents:
1223
diff
changeset

786 
project = self.GetProject(debug) 
1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

787 
factory = InstanceTagName(self) 
1411  788 

1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

789 
parser = etree.XMLParser() 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

790 
parser.resolvers.add(LibraryResolver(self, debug)) 
1411  791 

1321
83f41ea00b97
Replaced old pou instance type tagname computing by xslt stylesheet
Laurent Bessard
parents:
1319
diff
changeset

792 
instance_tagname_xslt_tree = etree.XSLT( 
1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

793 
etree.parse( 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

794 
os.path.join(ScriptDirectory, "plcopen", "instance_tagname.xslt"), 
1411  795 
parser), 
1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

796 
extensions = {("instance_tagname_ns", name): getattr(factory, name) 
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

797 
for name in ["ConfigTagName", "ResourceTagName", 
1411  798 
"PouTagName", "ActionTagName", 
1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

799 
"TransitionTagName"]}) 
1411  800 

801 
instance_tagname_xslt_tree(project, 

1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

802 
instance_path=etree.XSLT.strparam(instance_path)) 
1411  803 

1351
a546a63ce1bf
Fixed pou tagname of instance path computing stylesheet
Laurent Bessard
parents:
1350
diff
changeset

804 
return factory.GetTagName() 
1411  805 

814  806 
def GetInstanceInfos(self, instance_path, debug = False): 
807 
tagname = self.GetPouInstanceTagName(instance_path) 

808 
if tagname is not None: 

827
a2ce084fb598
Fix restore project tab layout with transition and action debug tabs
laurent
parents:
826
diff
changeset

809 
infos = self.GetPouVariables(tagname, debug) 
1360
ebfe9c22af2a
Fixed bug when debugging PLC with Graphic Viewer in debug open and retransfer PLC
Laurent Bessard
parents:
1354
diff
changeset

810 
infos.type = tagname 
827
a2ce084fb598
Fix restore project tab layout with transition and action debug tabs
laurent
parents:
826
diff
changeset

811 
return infos 
814  812 
else: 
813 
pou_path, var_name = instance_path.rsplit(".", 1) 

814 
tagname = self.GetPouInstanceTagName(pou_path) 

815 
if tagname is not None: 

816 
pou_infos = self.GetPouVariables(tagname, debug) 

1360
ebfe9c22af2a
Fixed bug when debugging PLC with Graphic Viewer in debug open and retransfer PLC
Laurent Bessard
parents:
1354
diff
changeset

817 
for var_infos in pou_infos.variables: 
ebfe9c22af2a
Fixed bug when debugging PLC with Graphic Viewer in debug open and retransfer PLC
Laurent Bessard
parents:
1354
diff
changeset

818 
if var_infos.name == var_name: 
814  819 
return var_infos 
820 
return None 

1411  821 

814  822 
# Return if data type given by name is used by another data type or pou 
823 
def DataTypeIsUsed(self, name, debug = False): 

1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

824 
project = self.GetProject(debug) 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

825 
if project is not None: 
1354
241c19ea80da
Fixed bug when selecting pou that is not used in project
Laurent Bessard
parents:
1351
diff
changeset

826 
return len(self.GetInstanceList(project, name, debug)) > 0 
814  827 
return False 
828 

829 
# Return if pou given by name is used by another pou 

830 
def PouIsUsed(self, name, debug = False): 

1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

831 
project = self.GetProject(debug) 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

832 
if project is not None: 
1354
241c19ea80da
Fixed bug when selecting pou that is not used in project
Laurent Bessard
parents:
1351
diff
changeset

833 
return len(self.GetInstanceList(project, name, debug)) > 0 
814  834 
return False 
835 

836 
# Return if pou given by name is directly or undirectly used by the reference pou 

837 
def PouIsUsedBy(self, name, reference, debug = False): 

1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

838 
pou_infos = self.GetPou(reference, debug) 
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

839 
if pou_infos is not None: 
1354
241c19ea80da
Fixed bug when selecting pou that is not used in project
Laurent Bessard
parents:
1351
diff
changeset

840 
return len(self.GetInstanceList(pou_infos, name, debug)) > 0 
814  841 
return False 
842 

843 
def GenerateProgram(self, filepath=None): 

844 
errors = [] 

845 
warnings = [] 

846 
if self.Project is not None: 

847 
try: 

848 
self.ProgramChunks = GenerateCurrentProgram(self, self.Project, errors, warnings) 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

849 
self.NextCompiledProject = self.Copy(self.Project) 
901
ab43f3e40b9d
Fix bug when compiling project containing nonascii characters
Laurent Bessard
parents:
887
diff
changeset

850 
program_text = "".join([item[0] for item in self.ProgramChunks]) 
814  851 
if filepath is not None: 
852 
programfile = open(filepath, "w") 

853 
programfile.write(program_text.encode("utf8")) 

854 
programfile.close() 

855 
self.ProgramFilePath = filepath 

856 
return program_text, errors, warnings 

857 
except PLCGenException, e: 

858 
errors.append(e.message) 

859 
else: 

860 
errors.append("No project opened") 

861 
return "", errors, warnings 

862 

863 
def DebugAvailable(self): 

864 
return self.CurrentCompiledProject is not None 

865 

866 
def ProgramTransferred(self): 

867 
if self.NextCompiledProject is None: 

868 
self.CurrentCompiledProject = self.NextCompiledProject 

869 
else: 

870 
self.CurrentCompiledProject = self.Copy(self.Project) 

871 

872 
def GetChunkInfos(self, from_location, to_location): 

873 
row = self.ProgramOffset + 1 

874 
col = 1 

875 
infos = [] 

876 
for chunk, chunk_infos in self.ProgramChunks: 

877 
lines = chunk.split("\n") 

878 
if len(lines) > 1: 

879 
next_row = row + len(lines)  1 

880 
next_col = len(lines[1]) + 1 

881 
else: 

882 
next_row = row 

883 
next_col = col + len(chunk) 

884 
if (next_row > from_location[0] or next_row == from_location[0] and next_col >= from_location[1]) and len(chunk_infos) > 0: 

885 
infos.append((chunk_infos, (row, col))) 

886 
if next_row == to_location[0] and next_col > to_location[1] or next_row > to_location[0]: 

887 
return infos 

888 
row, col = next_row, next_col 

889 
return infos 

1411  890 

814  891 
# 
892 
# Project Pous management functions 

893 
# 

1411  894 

814  895 
# Add a Data Type to Project 
896 
def ProjectAddDataType(self, datatype_name=None): 

897 
if self.Project is not None: 

898 
if datatype_name is None: 

899 
datatype_name = self.GenerateNewName(None, None, "datatype%d") 

900 
# Add the datatype to project 

901 
self.Project.appenddataType(datatype_name) 

902 
self.BufferProject() 

903 
return self.ComputeDataTypeName(datatype_name) 

904 
return None 

1411  905 

814  906 
# Remove a Data Type from project 
907 
def ProjectRemoveDataType(self, datatype_name): 

908 
if self.Project is not None: 

909 
self.Project.removedataType(datatype_name) 

910 
self.BufferProject() 

1411  911 

814  912 
# Add a Pou to Project 
913 
def ProjectAddPou(self, pou_name, pou_type, body_type): 

914 
if self.Project is not None: 

915 
# Add the pou to project 

916 
self.Project.appendpou(pou_name, pou_type, body_type) 

917 
if pou_type == "function": 

918 
self.SetPouInterfaceReturnType(pou_name, "BOOL") 

919 
self.BufferProject() 

920 
return self.ComputePouName(pou_name) 

921 
return None 

1411  922 

814  923 
def ProjectChangePouType(self, name, pou_type): 
924 
if self.Project is not None: 

925 
pou = self.Project.getpou(name) 

926 
if pou is not None: 

927 
pou.setpouType(pou_type) 

928 
self.BufferProject() 

1411  929 

814  930 
def GetPouXml(self, pou_name): 
931 
if self.Project is not None: 

932 
pou = self.Project.getpou(pou_name) 

933 
if pou is not None: 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

934 
return pou.tostring() 
814  935 
return None 
1411  936 

814  937 
def PastePou(self, pou_type, pou_xml): 
938 
''' 

939 
Adds the POU defined by 'pou_xml' to the current project with type 'pou_type' 

940 
''' 

941 
try: 

1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1328
diff
changeset

942 
new_pou, error = LoadPou(pou_xml) 
814  943 
except: 
1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1328
diff
changeset

944 
error = "" 
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1328
diff
changeset

945 
if error is not None: 
814  946 
return _("Couldn't paste nonPOU object.") 
1411  947 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

948 
name = new_pou.getname() 
1411  949 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

950 
idx = 0 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

951 
new_name = name 
1411  952 
while self.Project.getpou(new_name) is not None: 
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

953 
# a POU with that name already exists. 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

954 
# make a new name and test if a POU with that name exists. 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

955 
# append an incrementing numeric suffix to the POU name. 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

956 
idx += 1 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

957 
new_name = "%s%d" % (name, idx) 
1411  958 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

959 
# we've found a name that does not already exist, use it 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

960 
new_pou.setname(new_name) 
1411  961 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

962 
if pou_type is not None: 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

963 
orig_type = new_pou.getpouType() 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

964 

9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

965 
# prevent violations of POU content restrictions: 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

966 
# function blocks cannot be pasted as functions, 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

967 
# programs cannot be pasted as functions or function blocks 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

968 
if orig_type == 'functionBlock' and pou_type == 'function' or \ 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

969 
orig_type == 'program' and pou_type in ['function', 'functionBlock']: 
1581
2295fdc5c271
fix translation strings with multiple parameters
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1571
diff
changeset

970 
msg = _('''{a1} "{a2}" can't be pasted as a {a3}.''').format(a1 = orig_type, a2 = name, a3 = pou_type) 
2295fdc5c271
fix translation strings with multiple parameters
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1571
diff
changeset

971 
return msg 
1411  972 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

973 
new_pou.setpouType(pou_type) 
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

974 

1411  975 
self.Project.insertpou(0, new_pou) 
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

976 
self.BufferProject() 
1411  977 

1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset

978 
return self.ComputePouName(new_name), 
814  979 

980 
# Remove a Pou from project 

981 
def ProjectRemovePou(self, pou_name): 

982 
if self.Project is not None: 

983 
self.Project.removepou(pou_name) 

984 
self.BufferProject() 

1411  985 

814  986 
# Return the name of the configuration if only one exist 
987 
def GetProjectMainConfigurationName(self): 

988 
if self.Project is not None: 

989 
# Found the configuration corresponding to old name and change its name to new name 

990 
configurations = self.Project.getconfigurations() 

991 
if len(configurations) == 1: 

992 
return configurations[0].getname() 

993 
return None 

1411  994 

814  995 
# Add a configuration to Project 
996 
def ProjectAddConfiguration(self, config_name=None): 

997 
if self.Project is not None: 

998 
if config_name is None: 

999 
config_name = self.GenerateNewName(None, None, "configuration%d") 

1000 
self.Project.addconfiguration(config_name) 

1001 
self.BufferProject() 

1002 
return self.ComputeConfigurationName(config_name) 

1003 
return None 

1411  1004 

814  1005 
# Remove a configuration from project 
1006 
def ProjectRemoveConfiguration(self, config_name): 

1007 
if self.Project is not None: 

1008 
self.Project.removeconfiguration(config_name) 

1009 
self.BufferProject() 

1411  1010 

814  1011 
# Add a resource to a configuration of the Project 
1012 
def ProjectAddConfigurationResource(self, config_name, resource_name=None): 

1013 
if self.Project is not None: 

1014 
if resource_name is None: 

1015 
resource_name = self.GenerateNewName(None, None, "resource%d") 

1016 
self.Project.addconfigurationResource(config_name, resource_name) 

1017 
self.BufferProject() 

1018 
return self.ComputeConfigurationResourceName(config_name, resource_name) 

1019 
return None 

1411  1020 

814  1021 
# Remove a resource from a configuration of the project 
1022 
def ProjectRemoveConfigurationResource(self, config_name, resource_name): 

1023 
if self.Project is not None: 

1024 
self.Project.removeconfigurationResource(config_name, resource_name) 

1025 
self.BufferProject() 

1411  1026 

814  1027 
# Add a Transition to a Project Pou 
1028 
def ProjectAddPouTransition(self, pou_name, transition_name, transition_type): 

1029 
if self.Project is not None: 

1030 
pou = self.Project.getpou(pou_name) 

1031 
if pou is not None: 

1032 
pou.addtransition(transition_name, transition_type) 

1033 
self.BufferProject() 

1034 
return self.ComputePouTransitionName(pou_name, transition_name) 

1035 
return None 

1411  1036 

814  1037 
# Remove a Transition from a Project Pou 
1038 
def ProjectRemovePouTransition(self, pou_name, transition_name): 

1039 
# Search if the pou removed is currently opened 

1040 
if self.Project is not None: 

1041 
pou = self.Project.getpou(pou_name) 

1042 
if pou is not None: 

1043 
pou.removetransition(transition_name) 

1044 
self.BufferProject() 

1411  1045 

814  1046 
# Add an Action to a Project Pou 
1047 
def ProjectAddPouAction(self, pou_name, action_name, action_type): 

1048 
if self.Project is not None: 

1049 
pou = self.Project.getpou(pou_name) 

1050 
if pou is not None: 

1051 
pou.addaction(action_name, action_type) 

1052 
self.BufferProject() 

1053 
return self.ComputePouActionName(pou_name, action_name) 

1054 
return None 

1411  1055 

814  1056 
# Remove an Action from a Project Pou 
1057 
def ProjectRemovePouAction(self, pou_name, action_name): 

1058 
# Search if the pou removed is currently opened 

1059 
if self.Project is not None: 

1060 
pou = self.Project.getpou(pou_name) 

1061 
if pou is not None: 

1062 
pou.removeaction(action_name) 

1063 
self.BufferProject() 

1411  1064 

814  1065 
# Change the name of a pou 
1066 
def ChangeDataTypeName(self, old_name, new_name): 

1067 
if self.Project is not None: 

1068 
# Found the pou corresponding to old name and change its name to new name 

1069 
datatype = self.Project.getdataType(old_name) 

1070 
if datatype is not None: 

1071 
datatype.setname(new_name) 

1072 
self.Project.updateElementName(old_name, new_name) 

1073 
self.BufferProject() 

1411  1074 

814  1075 
# Change the name of a pou 
1076 
def ChangePouName(self, old_name, new_name): 

1077 
if self.Project is not None: 

1078 
# Found the pou corresponding to old name and change its name to new name 

1079 
pou = self.Project.getpou(old_name) 

1080 
if pou is not None: 

1081 
pou.setname(new_name) 

1082 
self.Project.updateElementName(old_name, new_name) 

1083 
self.BufferProject() 

1411  1084 

814  1085 
# Change the name of a pou transition 
1086 
def ChangePouTransitionName(self, pou_name, old_name, new_name): 

1087 
if self.Project is not None: 

1088 
# Found the pou transition corresponding to old name and change its name to new name 

1089 
pou = self.Project.getpou(pou_name) 

1090 
if pou is not None: 

1091 
transition = pou.gettransition(old_name) 

1092 
if transition is not None: 

1093 
transition.setname(new_name) 

1094 
pou.updateElementName(old_name, new_name) 

1095 
self.BufferProject() 

1411  1096 

814  1097 
# Change the name of a pou action 
1098 
def ChangePouActionName(self, pou_name, old_name, new_name): 

1099 
if self.Project is not None: 

1100 
# Found the pou action corresponding to old name and change its name to new name 

1101 
pou = self.Project.getpou(pou_name) 

1102 
if pou is not None: 

1103 
action = pou.getaction(old_name) 

1104 
if action is not None: 

1105 
action.setname(new_name) 

1106 
pou.updateElementName(old_name, new_name) 

1107 
self.BufferProject() 

1411  1108 

814  1109 
# Change the name of a pou variable 
1110 
def ChangePouVariableName(self, pou_name, old_name, new_name): 

1111 
if self.Project is not None: 

1112 
# Found the pou action corresponding to old name and change its name to new name 

1113 
pou = self.Project.getpou(pou_name) 

1114 
if pou is not None: 

1115 
for type, varlist in pou.getvars(): 

1116 
for var in varlist.getvariable(): 

1117 
if var.getname() == old_name: 

1118 
var.setname(new_name) 

1119 
self.BufferProject() 

1411  1120 

814  1121 
# Change the name of a configuration 
1122 
def ChangeConfigurationName(self, old_name, new_name): 

1123 
if self.Project is not None: 

1124 
# Found the configuration corresponding to old name and change its name to new name 

1125 
configuration = self.Project.getconfiguration(old_name) 

1126 
if configuration is not None: 

1127 
configuration.setname(new_name) 

1128 
self.BufferProject() 

1411  1129 

814  1130 
# Change the name of a configuration resource 
1131 
def ChangeConfigurationResourceName(self, config_name, old_name, new_name): 

1132 
if self.Project is not None: 

1133 
# Found the resource corresponding to old name and change its name to new name 

1134 
resource = self.Project.getconfigurationResource(config_name, old_name) 

1135 
if resource is not None: 

1136 
resource.setname(new_name) 

1137 
self.BufferProject() 

1411  1138 

814  1139 
# Return the description of the pou given by its name 
1140 
def GetPouDescription(self, name, debug = False): 

1141 
project = self.GetProject(debug) 

1142 
if project is not None: 

1143 
# Found the pou correponding to name and return its type 

1144 
pou = project.getpou(name) 

1145 
if pou is not None: 

1146 
return pou.getdescription() 

1147 
return "" 

1411  1148 

814  1149 
# Return the description of the pou given by its name 
1150 
def SetPouDescription(self, name, description, debug = False): 

1151 
project = self.GetProject(debug) 

1152 
if project is not None: 

1153 
# Found the pou correponding to name and return its type 

1154 
pou = project.getpou(name) 

1155 
if pou is not None: 

1156 
pou.setdescription(description) 

1157 
self.BufferProject() 

1411  1158 

814  1159 
# Return the type of the pou given by its name 
1160 
def GetPouType(self, name, debug = False): 

1161 
project = self.GetProject(debug) 

1162 
if project is not None: 

1163 
# Found the pou correponding to name and return its type 

1164 
pou = project.getpou(name) 

1165 
if pou is not None: 

1166 
return pou.getpouType() 

1167 
return None 

1411  1168 

814  1169 
# Return pous with SFC language 
1170 
def GetSFCPous(self, debug = False): 

1171 
list = [] 

1172 
project = self.GetProject(debug) 

1173 
if project is not None: 

1174 
for pou in project.getpous(): 

1175 
if pou.getBodyType() == "SFC": 

1176 
list.append(pou.getname()) 

1177 
return list 

1411  1178 

814  1179 
# Return the body language of the pou given by its name 
1180 
def GetPouBodyType(self, name, debug = False): 

1181 
project = self.GetProject(debug) 

1182 
if project is not None: 

1183 
# Found the pou correponding to name and return its body language 

1184 
pou = project.getpou(name) 

1185 
if pou is not None: 

1186 
return pou.getbodyType() 

1187 
return None 

1411  1188 

814  1189 
# Return the actions of a pou 
1190 
def GetPouTransitions(self, pou_name, debug = False): 

1191 
transitions = [] 

1192 
project = self.GetProject(debug) 

1193 
if project is not None: 

1194 
# Found the pou correponding to name and return its transitions if SFC 

1195 
pou = project.getpou(pou_name) 

1196 
if pou is not None and pou.getbodyType() == "SFC": 

1197 
for transition in pou.gettransitionList(): 

1198 
transitions.append(transition.getname()) 

1199 
return transitions 

1411  1200 

814  1201 
# Return the body language of the transition given by its name 
1202 
def GetTransitionBodyType(self, pou_name, pou_transition, debug = False): 

1203 
project = self.GetProject(debug) 

1204 
if project is not None: 

1205 
# Found the pou correponding to name 

1206 
pou = project.getpou(pou_name) 

1207 
if pou is not None: 

1208 
# Found the pou transition correponding to name and return its body language 

1209 
transition = pou.gettransition(pou_transition) 

1210 
if transition is not None: 

1211 
return transition.getbodyType() 

1212 
return None 

1411  1213 

814  1214 
# Return the actions of a pou 
1215 
def GetPouActions(self, pou_name, debug = False): 

1216 
actions = [] 

1217 
project = self.GetProject(debug) 

1218 
if project is not None: 

1219 
# Found the pou correponding to name and return its actions if SFC 

1220 
pou = project.getpou(pou_name) 

1221 
if pou.getbodyType() == "SFC": 

1222 
for action in pou.getactionList(): 

1223 
actions.append(action.getname()) 

1224 
return actions 

1411  1225 

814  1226 
# Return the body language of the pou given by its name 
1227 
def GetActionBodyType(self, pou_name, pou_action, debug = False): 

1228 
project = self.GetProject(debug) 

1229 
if project is not None: 

1230 
# Found the pou correponding to name and return its body language 

1231 
pou = project.getpou(pou_name) 

1232 
if pou is not None: 

1233 
action = pou.getaction(pou_action) 

1234 
if action is not None: 

1235 
return action.getbodyType() 

1236 
return None 

1411  1237 

814  1238 
# Extract varlists from a list of vars 
1239 
def ExtractVarLists(self, vars): 

1240 
varlist_list = [] 

1241 
current_varlist = None 

1242 
current_type = None 

1243 
for var in vars: 

1411  1244 
next_type = (var.Class, 
1245 
var.Option, 

1246 
var.Location in ["", None] or 

1247 
# When declaring globals, located 

1248 
# and not located variables are 

814  1249 
# in the same declaration block 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1250 
var.Class == "Global") 
814  1251 
if current_type != next_type: 
1252 
current_type = next_type 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1253 
infos = VAR_CLASS_INFOS.get(var.Class, None) 
814  1254 
if infos is not None: 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1255 
current_varlist = PLCOpenParser.CreateElement(infos[0], "interface") 
814  1256 
else: 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1257 
current_varlist = PLCOpenParser.CreateElement("varList") 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1258 
varlist_list.append((var.Class, current_varlist)) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1259 
if var.Option == "Constant": 
814  1260 
current_varlist.setconstant(True) 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1261 
elif var.Option == "Retain": 
814  1262 
current_varlist.setretain(True) 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1263 
elif var.Option == "NonRetain": 
814  1264 
current_varlist.setnonretain(True) 
1265 
# Create variable and change its properties 

1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1266 
tempvar = PLCOpenParser.CreateElement("variable", "varListPlain") 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1267 
tempvar.setname(var.Name) 
1411  1268 

1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1269 
var_type = PLCOpenParser.CreateElement("type", "variable") 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1270 
if isinstance(var.Type, TupleType): 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1271 
if var.Type[0] == "array": 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1272 
array_type, base_type_name, dimensions = var.Type 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1273 
array = PLCOpenParser.CreateElement("array", "dataType") 
1306
1ff1cdf6c318
Fixed bug with direct array variable type definition
Laurent Bessard
parents:
1304
diff
changeset

1274 
baseType = PLCOpenParser.CreateElement("baseType", "array") 
1ff1cdf6c318
Fixed bug with direct array variable type definition
Laurent Bessard
parents:
1304
diff
changeset

1275 
array.setbaseType(baseType) 
814  1276 
for i, dimension in enumerate(dimensions): 
1306
1ff1cdf6c318
Fixed bug with direct array variable type definition
Laurent Bessard
parents:
1304
diff
changeset

1277 
dimension_range = PLCOpenParser.CreateElement("dimension", "array") 
814  1278 
if i == 0: 
1279 
array.setdimension([dimension_range]) 

1280 
else: 

1281 
array.appenddimension(dimension_range) 

1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1297
diff
changeset

1282 
dimension_range.setlower(dimension[0]) 
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1297
diff
changeset

1283 
dimension_range.setupper(dimension[1]) 
814  1284 
if base_type_name in self.GetBaseTypes(): 
1306
1ff1cdf6c318
Fixed bug with direct array variable type definition
Laurent Bessard
parents:
1304
diff
changeset

1285 
baseType.setcontent(PLCOpenParser.CreateElement( 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1286 
base_type_name.lower() 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1287 
if base_type_name in ["STRING", "WSTRING"] 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1288 
else base_type_name, "dataType")) 
814  1289 
else: 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1290 
derived_datatype = PLCOpenParser.CreateElement("derived", "dataType") 
814  1291 
derived_datatype.setname(base_type_name) 
1306
1ff1cdf6c318
Fixed bug with direct array variable type definition
Laurent Bessard
parents:
1304
diff
changeset

1292 
baseType.setcontent(derived_datatype) 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1293 
var_type.setcontent(array) 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1294 
elif var.Type in self.GetBaseTypes(): 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1295 
var_type.setcontent(PLCOpenParser.CreateElement( 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1296 
var.Type.lower() 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1297 
if var.Type in ["STRING", "WSTRING"] 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1298 
else var.Type, "dataType")) 
814  1299 
else: 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1300 
derived_type = PLCOpenParser.CreateElement("derived", "dataType") 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1301 
derived_type.setname(var.Type) 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1302 
var_type.setcontent(derived_type) 
814  1303 
tempvar.settype(var_type) 
1304 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1305 
if var.InitialValue != "": 
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1306 
value = PLCOpenParser.CreateElement("initialValue", "variable") 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1307 
value.setvalue(var.InitialValue) 
814  1308 
tempvar.setinitialValue(value) 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1309 
if var.Location != "": 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1310 
tempvar.setaddress(var.Location) 
814  1311 
else: 
1312 
tempvar.setaddress(None) 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1313 
if var.Documentation != "": 
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset

1314 
ft = PLCOpenParser.CreateElement("documentation", "variable") 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1315 
ft.setanyText(var.Documentation) 
814  1316 
tempvar.setdocumentation(ft) 
1317 

1318 
# Add variable to varList 

1319 
current_varlist.appendvariable(tempvar) 

1320 
return varlist_list 

1411  1321 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1322 
def GetVariableDictionary(self, object_with_vars, tree=False, debug=False): 
1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

1323 
variables = [] 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1324 
factory = VariablesInfosFactory(variables) 
1411  1325 

1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1326 
parser = etree.XMLParser() 
1368
e567e4bee11f
Fixed bugs with pou variable infos computation stylesheet
Laurent Bessard
parents:
1367
diff
changeset

1327 
parser.resolvers.add(LibraryResolver(self, debug)) 
1411  1328 

1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

1329 
variables_infos_xslt_tree = etree.XSLT( 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1330 
etree.parse( 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1331 
os.path.join(ScriptDirectory, "plcopen", "variables_infos.xslt"), 
1411  1332 
parser), 
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1333 
extensions = {("var_infos_ns", name): getattr(factory, name) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1334 
for name in ["SetType", "AddDimension", "AddTree", 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1335 
"AddVarToTree", "AddVariable"]}) 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1336 
variables_infos_xslt_tree(object_with_vars, 
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1341
diff
changeset

1337 
tree=etree.XSLT.strparam(str(tree))) 
1411  1338 

1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

1339 
return variables 
1411  1340 

1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1341 
# Add a global var to configuration to configuration 
1411  1342 
def AddConfigurationGlobalVar(self, config_name, var_type, var_name, 
1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1343 
location="", description=""): 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1344 
if self.Project is not None: 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1345 
# Found the configuration corresponding to name 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1346 
configuration = self.Project.getconfiguration(config_name) 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1347 
if configuration is not None: 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1348 
# Set configuration global vars 
1313
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1311
diff
changeset

1349 
configuration.addglobalVar( 
1411  1350 
self.GetVarTypeObject(var_type), 
1313
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1311
diff
changeset

1351 
var_name, location, description) 
814  1352 

1353 
# Replace the configuration globalvars by those given 

1354 
def SetConfigurationGlobalVars(self, name, vars): 

1355 
if self.Project is not None: 

1356 
# Found the configuration corresponding to name 

1357 
configuration = self.Project.getconfiguration(name) 

1358 
if configuration is not None: 

1359 
# Set configuration global vars 

1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1360 
configuration.setglobalVars([ 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1361 
varlist for vartype, varlist 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1362 
in self.ExtractVarLists(vars)]) 
1411  1363 

814  1364 
# Return the configuration globalvars 
1365 
def GetConfigurationGlobalVars(self, name, debug = False): 

1366 
project = self.GetProject(debug) 

1367 
if project is not None: 

1368 
# Found the configuration corresponding to name 

1369 
configuration = project.getconfiguration(name) 

1370 
if configuration is not None: 

1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

1371 
# Extract variables defined in configuration 
1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

1372 
return self.GetVariableDictionary(configuration, debug) 
1411  1373 

1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

1374 
return [] 
814  1375 

1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1376 
# Return configuration variable names 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1377 
def GetConfigurationVariableNames(self, config_name = None, debug = False): 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1378 
variables = [] 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1379 
project = self.GetProject(debug) 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1380 
if project is not None: 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1381 
for configuration in self.Project.getconfigurations(): 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1382 
if config_name is None or config_name == configuration.getname(): 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1383 
variables.extend( 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1384 
[var.getname() for var in reduce( 
1411  1385 
lambda x, y: x + y, [varlist.getvariable() 
1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1386 
for varlist in configuration.globalVars], 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1387 
[])]) 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1388 
return variables 
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1127
diff
changeset

1389 

814  1390 
# Replace the resource globalvars by those given 
1391 
def SetConfigurationResourceGlobalVars(self, config_name, name, vars): 

1392 
if self.Project is not None: 

1393 
# Found the resource corresponding to name 

1394 
resource = self.Project.getconfigurationResource(config_name, name) 

1395 
# Set resource global vars 

1396 
if resource is not None: 

1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1397 
resource.setglobalVars([ 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1398 
varlist for vartype, varlist 
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset

1399 
in self.ExtractVarLists(vars)]) 
1411  1400 

814  1401 
# Return the resource globalvars 
1402 
def GetConfigurationResourceGlobalVars(self, config_name, name, debug = False): 

1403 
project = self.GetProject(debug) 

1404 
if project is not None: 

1405 
# Found the resource corresponding to name 

1406 
resource = project.getconfigurationResource(config_name, name) 

1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset

1407 
if resource is not None: 
1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
parents:
1306
diff
changeset

1408 
# Extract variables defined in configuration 
1319
748347102c97
Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
1316
diff
changeset

1409 
return self.GetVariableDictionary(resource, debug) 
1411  1410 

1308
ad61268dbdb6
Replaced old pou variable list and variable tree generating by xslt stylesheet
Laurent Bessard
