36 from lxml import etree |
36 from lxml import etree |
37 |
37 |
38 import util.paths as paths |
38 import util.paths as paths |
39 from util.TranslationCatalogs import NoTranslate |
39 from util.TranslationCatalogs import NoTranslate |
40 from plcopen import * |
40 from plcopen import * |
|
41 from plcopen.types_enums import * |
|
42 from plcopen.XSLTModelQuery import _StringValue, _BoolValue, _translate_args |
41 from plcopen.InstancesPathCollector import InstancesPathCollector |
43 from plcopen.InstancesPathCollector import InstancesPathCollector |
42 from plcopen.POUVariablesCollector import POUVariablesCollector |
44 from plcopen.POUVariablesCollector import POUVariablesCollector |
43 from graphics.GraphicCommons import * |
45 from graphics.GraphicCommons import * |
44 from PLCGenerator import * |
46 from PLCGenerator import * |
45 |
47 |
46 duration_model = re.compile("(?:([0-9]{1,2})h)?(?:([0-9]{1,2})m(?!s))?(?:([0-9]{1,2})s)?(?:([0-9]{1,3}(?:\.[0-9]*)?)ms)?") |
48 duration_model = re.compile("(?:([0-9]{1,2})h)?(?:([0-9]{1,2})m(?!s))?(?:([0-9]{1,2})s)?(?:([0-9]{1,3}(?:\.[0-9]*)?)ms)?") |
47 |
49 |
48 ITEMS_EDITABLE = [ |
|
49 ITEM_PROJECT, |
|
50 ITEM_POU, |
|
51 ITEM_VARIABLE, |
|
52 ITEM_TRANSITION, |
|
53 ITEM_ACTION, |
|
54 ITEM_CONFIGURATION, |
|
55 ITEM_RESOURCE, |
|
56 ITEM_DATATYPE |
|
57 ] = range(8) |
|
58 |
|
59 ITEMS_UNEDITABLE = [ |
|
60 ITEM_DATATYPES, |
|
61 ITEM_FUNCTION, |
|
62 ITEM_FUNCTIONBLOCK, |
|
63 ITEM_PROGRAM, |
|
64 ITEM_TRANSITIONS, |
|
65 ITEM_ACTIONS, |
|
66 ITEM_CONFIGURATIONS, |
|
67 ITEM_RESOURCES, |
|
68 ITEM_PROPERTIES |
|
69 ] = range(8, 17) |
|
70 |
|
71 ITEMS_VARIABLE = [ |
|
72 ITEM_VAR_LOCAL, |
|
73 ITEM_VAR_GLOBAL, |
|
74 ITEM_VAR_EXTERNAL, |
|
75 ITEM_VAR_TEMP, |
|
76 ITEM_VAR_INPUT, |
|
77 ITEM_VAR_OUTPUT, |
|
78 ITEM_VAR_INOUT |
|
79 ] = range(17, 24) |
|
80 |
|
81 VAR_CLASS_INFOS = { |
|
82 "Local": ("localVars", ITEM_VAR_LOCAL), |
|
83 "Global": ("globalVars", ITEM_VAR_GLOBAL), |
|
84 "External": ("externalVars", ITEM_VAR_EXTERNAL), |
|
85 "Temp": ("tempVars", ITEM_VAR_TEMP), |
|
86 "Input": ("inputVars", ITEM_VAR_INPUT), |
|
87 "Output": ("outputVars", ITEM_VAR_OUTPUT), |
|
88 "InOut": ("inOutVars", ITEM_VAR_INOUT)} |
|
89 |
|
90 POU_TYPES = { |
|
91 "program": ITEM_PROGRAM, |
|
92 "functionBlock": ITEM_FUNCTIONBLOCK, |
|
93 "function": ITEM_FUNCTION, |
|
94 } |
|
95 |
|
96 LOCATIONS_ITEMS = [LOCATION_CONFNODE, |
|
97 LOCATION_MODULE, |
|
98 LOCATION_GROUP, |
|
99 LOCATION_VAR_INPUT, |
|
100 LOCATION_VAR_OUTPUT, |
|
101 LOCATION_VAR_MEMORY] = range(6) |
|
102 |
|
103 ScriptDirectory = paths.AbsDir(__file__) |
50 ScriptDirectory = paths.AbsDir(__file__) |
104 |
|
105 |
|
106 def GetUneditableNames(): |
|
107 _ = NoTranslate |
|
108 return [_("User-defined POUs"), _("Functions"), _("Function Blocks"), |
|
109 _("Programs"), _("Data Types"), _("Transitions"), _("Actions"), |
|
110 _("Configurations"), _("Resources"), _("Properties")] |
|
111 |
|
112 |
|
113 UNEDITABLE_NAMES = GetUneditableNames() |
|
114 [USER_DEFINED_POUS, FUNCTIONS, FUNCTION_BLOCKS, PROGRAMS, |
|
115 DATA_TYPES, TRANSITIONS, ACTIONS, CONFIGURATIONS, |
|
116 RESOURCES, PROPERTIES] = UNEDITABLE_NAMES |
|
117 |
|
118 |
51 |
119 class LibraryResolver(etree.Resolver): |
52 class LibraryResolver(etree.Resolver): |
120 """Helper object for loading library in xslt stylesheets""" |
53 """Helper object for loading library in xslt stylesheets""" |
121 |
54 |
122 def __init__(self, controller, debug=False): |
55 def __init__(self, controller, debug=False): |
136 else: |
69 else: |
137 for ctn in self.Controller.ConfNodeTypes: |
70 for ctn in self.Controller.ConfNodeTypes: |
138 lib_el.append(deepcopy(ctn["types"])) |
71 lib_el.append(deepcopy(ctn["types"])) |
139 return self.resolve_string(etree.tostring(lib_el), context) |
72 return self.resolve_string(etree.tostring(lib_el), context) |
140 |
73 |
141 # ------------------------------------------------------------------------------- |
|
142 # Helpers functions for translating list of arguments |
|
143 # from xslt to valid arguments |
|
144 # ------------------------------------------------------------------------------- |
|
145 |
|
146 |
|
147 def _StringValue(x): |
|
148 return x |
|
149 |
|
150 |
|
151 def _BoolValue(x): |
|
152 return x in ["true", "0"] |
|
153 |
|
154 |
|
155 def _translate_args(translations, args): |
|
156 return [translate(arg[0]) if len(arg) > 0 else None |
|
157 for translate, arg in |
|
158 zip(translations, args)] |
|
159 |
74 |
160 # ------------------------------------------------------------------------------- |
75 # ------------------------------------------------------------------------------- |
161 # Helpers object for generating pou var list |
76 # Helpers object for generating pou var list |
162 # ------------------------------------------------------------------------------- |
77 # ------------------------------------------------------------------------------- |
163 |
78 |