author | Edouard Tisserant |
Wed, 19 Jan 2022 11:41:04 +0100 | |
changeset 3417 | 9b9775d230f5 |
parent 3396 | 8c8cb5c9ff38 |
child 3421 | 70ef15fca028 |
permissions | -rw-r--r-- |
1511
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
1 |
#!/usr/bin/env python |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
2 |
# -*- coding: utf-8 -*- |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
3 |
|
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
4 |
# This file is part of Beremiz, a Integrated Development Environment for |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
5 |
# programming IEC 61131-3 automates supporting plcopen standard and CanFestival. |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
6 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
7 |
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD |
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1672
diff
changeset
|
8 |
# Copyright (C) 2017: Andrey Skvortsov |
1511
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
9 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
10 |
# See COPYING file for copyrights details. |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
11 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
12 |
# This program is free software; you can redistribute it and/or |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
13 |
# modify it under the terms of the GNU General Public License |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
14 |
# as published by the Free Software Foundation; either version 2 |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
15 |
# of the License, or (at your option) any later version. |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
16 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
17 |
# This program is distributed in the hope that it will be useful, |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
18 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
19 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
20 |
# GNU General Public License for more details. |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
21 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
22 |
# You should have received a copy of the GNU General Public License |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
23 |
# along with this program; if not, write to the Free Software |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
24 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1484
diff
changeset
|
25 |
|
14
eb9fdd316a40
More precise design for plugins.... to be continued...
etisserant
parents:
13
diff
changeset
|
26 |
""" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
27 |
Beremiz Project Controller |
14
eb9fdd316a40
More precise design for plugins.... to be continued...
etisserant
parents:
13
diff
changeset
|
28 |
""" |
1881
091005ec69c4
fix pylint py3k conversion warning: "(no-absolute-import) import missing `from __future__ import absolute_import`"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1878
diff
changeset
|
29 |
|
091005ec69c4
fix pylint py3k conversion warning: "(no-absolute-import) import missing `from __future__ import absolute_import`"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1878
diff
changeset
|
30 |
|
091005ec69c4
fix pylint py3k conversion warning: "(no-absolute-import) import missing `from __future__ import absolute_import`"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1878
diff
changeset
|
31 |
from __future__ import absolute_import |
1732
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
32 |
import os |
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
33 |
import traceback |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
34 |
import time |
1834
cd42b426028b
fix ungrouped imports from package X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
35 |
from time import localtime |
14
eb9fdd316a40
More precise design for plugins.... to be continued...
etisserant
parents:
13
diff
changeset
|
36 |
import shutil |
1732
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
37 |
import re |
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
38 |
import tempfile |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
39 |
import hashlib |
20 | 40 |
from datetime import datetime |
725 | 41 |
from weakref import WeakKeyDictionary |
2456
7373e3048167
python3 support: pylint,W1610 # (reduce-builtin) reduce built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2450
diff
changeset
|
42 |
from functools import reduce |
3257
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
43 |
from itertools import izip |
2506
8dbdf20f795b
fix 'SaveAs' in case of overwriting existing project
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2505
diff
changeset
|
44 |
from distutils.dir_util import copy_tree |
2432
dbc065a2f7a5
python3 support: pylint, W1613 # (xrange-builtin) xrange built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2418
diff
changeset
|
45 |
from six.moves import xrange |
725 | 46 |
|
1832
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
47 |
import wx |
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
48 |
|
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
49 |
import features |
725 | 50 |
import connectors |
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1672
diff
changeset
|
51 |
import util.paths as paths |
815
e4f24593a758
Adding support for extending internationalization to extensions
laurent
parents:
814
diff
changeset
|
52 |
from util.misc import CheckPathPerm, GetClassImporter |
742
41a4a560406c
Fixed runtime problems with python 2.6 without wx installed
Edouard Tisserant
parents:
740
diff
changeset
|
53 |
from util.MiniTextControler import MiniTextControler |
726 | 54 |
from util.ProcessLogger import ProcessLogger |
814 | 55 |
from util.BitmapLibrary import GetBitmap |
56 |
from editors.FileManagementPanel import FileManagementPanel |
|
57 |
from editors.ProjectNodeEditor import ProjectNodeEditor |
|
815
e4f24593a758
Adding support for extending internationalization to extensions
laurent
parents:
814
diff
changeset
|
58 |
from editors.IECCodeViewer import IECCodeViewer |
1363
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
59 |
from editors.DebugViewer import DebugViewer, REFRESH_PERIOD |
2337
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
60 |
from dialogs import UriEditor, IDManager |
738 | 61 |
from PLCControler import PLCControler |
725 | 62 |
from plcopen.structures import IEC_KEYWORDS |
1948
b9a3f771aaab
Moved some definitions away from controller class, and adaped references them through all code.
Edouard Tisserant
parents:
1928
diff
changeset
|
63 |
from plcopen.types_enums import ComputeConfigurationResourceName, ITEM_CONFNODE |
1834
cd42b426028b
fix ungrouped imports from package X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
64 |
import targets |
1902
2b7e2db31d81
Clarify licensing, and packaging of runtime only files :
Edouard Tisserant
parents:
1881
diff
changeset
|
65 |
from runtime.typemapping import DebugTypesSize, UnpackDebugBuffer |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
66 |
from runtime import PlcStatus |
2645
d15a997859b1
Solve import order problem when POULibrary imports ConfigTreeNode because of UserAddressedException. Now UserAddressedException is declared in POULibrary.py, as a quick and dirty fix, but some independant module should be created for beremiz exceptions in general.
Edouard Tisserant
parents:
2640
diff
changeset
|
67 |
from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage |
d15a997859b1
Solve import order problem when POULibrary imports ConfigTreeNode because of UserAddressedException. Now UserAddressedException is declared in POULibrary.py, as a quick and dirty fix, but some independant module should be created for beremiz exceptions in general.
Edouard Tisserant
parents:
2640
diff
changeset
|
68 |
from POULibrary import UserAddressedException |
725 | 69 |
|
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1672
diff
changeset
|
70 |
base_folder = paths.AbsParentDir(__file__) |
20 | 71 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
72 |
MATIEC_ERROR_MODEL = re.compile( |
2439
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
73 |
r".*\.st:(\d+)-(\d+)\.\.(\d+)-(\d+): (?:error)|(?:warning) : (.*)$") |
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
74 |
|
738 | 75 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
76 |
def ExtractChildrenTypesFromCatalog(catalog): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
77 |
children_types = [] |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
78 |
for n, d, _h, c in catalog: |
2450
5024c19ca8f0
python3 support: pylint, W1652 # (deprecated-types-field) Accessing a deprecated fields on the types module
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2449
diff
changeset
|
79 |
if isinstance(c, list): |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
80 |
children_types.extend(ExtractChildrenTypesFromCatalog(c)) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
81 |
else: |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
82 |
children_types.append((n, GetClassImporter(c), d)) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
83 |
return children_types |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
84 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
85 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
86 |
def ExtractMenuItemsFromCatalog(catalog): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
87 |
menu_items = [] |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
88 |
for n, d, h, c in catalog: |
2450
5024c19ca8f0
python3 support: pylint, W1652 # (deprecated-types-field) Accessing a deprecated fields on the types module
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2449
diff
changeset
|
89 |
if isinstance(c, list): |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
90 |
children = ExtractMenuItemsFromCatalog(c) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
91 |
else: |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
92 |
children = [] |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
93 |
menu_items.append((n, d, h, children)) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
94 |
return menu_items |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
95 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
96 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
97 |
def GetAddMenuItems(): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
98 |
return ExtractMenuItemsFromCatalog(features.catalog) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
99 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
100 |
|
1831
56b48961cc68
fix (old-style-class) Old-style class defined error for most parts of
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1828
diff
changeset
|
101 |
class Iec2CSettings(object): |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
102 |
|
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
103 |
def __init__(self, controler): |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
104 |
self.iec2c = None |
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
105 |
self.iec2c_buildopts = None |
1754
63f4af6bf6d9
clean-up: fix most PEP8 E221 multiple spaces before operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1752
diff
changeset
|
106 |
self.ieclib_path = self.findLibPath() |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
107 |
self.ieclib_c_path = self.findLibCPath() |
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
108 |
self.controler = controler |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
109 |
|
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
110 |
def findObject(self, paths, test): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
111 |
path = None |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
112 |
for p in paths: |
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
113 |
if test(p): |
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
114 |
path = p |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
115 |
break |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
116 |
return path |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
117 |
|
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
118 |
def findCmd(self): |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
119 |
cmd = "iec2c" + (".exe" if wx.Platform == '__WXMSW__' else "") |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
120 |
paths = [ |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
121 |
os.path.join(base_folder, "matiec") |
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
122 |
] |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
123 |
path = self.findObject( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
124 |
paths, lambda p: os.path.isfile(os.path.join(p, cmd))) |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
125 |
|
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
126 |
# otherwise use iec2c from PATH |
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
127 |
if path is not None: |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
128 |
cmd = os.path.join(path, cmd) |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
129 |
|
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
130 |
return cmd |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
131 |
|
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
132 |
def findLibPath(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
133 |
paths = [ |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
134 |
os.path.join(base_folder, "matiec", "lib"), |
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
135 |
"/usr/lib/matiec" |
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
136 |
] |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
137 |
path = self.findObject( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
138 |
paths, lambda p: os.path.isfile(os.path.join(p, "ieclib.txt"))) |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
139 |
return path |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
140 |
|
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
141 |
def findLibCPath(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
142 |
path = None |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
143 |
if self.ieclib_path is not None: |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
144 |
paths = [ |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
145 |
os.path.join(self.ieclib_path, "C"), |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
146 |
self.ieclib_path] |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
147 |
path = self.findObject( |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
148 |
paths, |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
149 |
lambda p: os.path.isfile(os.path.join(p, "iec_types.h"))) |
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
150 |
return path |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
151 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
152 |
def findSupportedOptions(self): |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1733
diff
changeset
|
153 |
buildcmd = "\"%s\" -h" % (self.getCmd()) |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
154 |
options = ["-f", "-l", "-p"] |
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
155 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
156 |
buildopt = "" |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
157 |
try: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
158 |
# Invoke compiler. |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
159 |
# Output files are listed to stdout, errors to stderr |
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
160 |
_status, result, _err_result = ProcessLogger(self.controler.logger, buildcmd, |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
161 |
no_stdout=True, |
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
162 |
no_stderr=True).spin() |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
163 |
except Exception: |
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
164 |
self.controler.logger.write_error(_("Couldn't launch IEC compiler to determine compatible options.\n")) |
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
165 |
return buildopt |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
166 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
167 |
for opt in options: |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
168 |
if opt in result: |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
169 |
buildopt = buildopt + " " + opt |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
170 |
return buildopt |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
171 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
172 |
def getCmd(self): |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
173 |
if self.iec2c is None: |
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
174 |
self.iec2c = self.findCmd() |
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
175 |
return self.iec2c |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
176 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
177 |
def getOptions(self): |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
178 |
if self.iec2c_buildopts is None: |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
179 |
self.iec2c_buildopts = self.findSupportedOptions() |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
180 |
return self.iec2c_buildopts |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
181 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
182 |
def getLibPath(self): |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
183 |
return self.ieclib_path |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
184 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
185 |
def getLibCPath(self): |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
186 |
if self.ieclib_c_path is None: |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
187 |
self.ieclib_c_path = self.findLibCPath() |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
188 |
return self.ieclib_c_path |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
189 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1746
diff
changeset
|
190 |
|
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
191 |
def GetProjectControllerXSD(): |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
192 |
XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
193 |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
194 |
<xsd:element name="BeremizRoot"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
195 |
<xsd:complexType> |
86 | 196 |
<xsd:sequence> |
197 |
<xsd:element name="TargetType"> |
|
198 |
<xsd:complexType> |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
199 |
<xsd:choice minOccurs="0"> |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
200 |
""" + targets.GetTargetChoices() + """ |
106
9810689febb0
Added plugins creation helpstrings, changed GUI layout (more compact), solved staticbitmap issues on win32, re-designed some icons...
etisserant
parents:
105
diff
changeset
|
201 |
</xsd:choice> |
9810689febb0
Added plugins creation helpstrings, changed GUI layout (more compact), solved staticbitmap issues on win32, re-designed some icons...
etisserant
parents:
105
diff
changeset
|
202 |
</xsd:complexType> |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
203 |
</xsd:element>""" + ((""" |
1413
dd89016a5028
Fixed crash at project load when features.libraries is empty (i.e. no libraries are provided).
Edouard Tisserant
parents:
1407
diff
changeset
|
204 |
<xsd:element name="Libraries" minOccurs="0"> |
730 | 205 |
<xsd:complexType> |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
206 |
""" + "\n".join(['<xsd:attribute name=' + |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
207 |
'"Enable_' + libname + '_Library" ' + |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
208 |
'type="xsd:boolean" use="optional" default="' + |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
209 |
('true' if default else 'false') + '"/>' |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
210 |
for libname, _lib, default in features.libraries]) + """ |
1413
dd89016a5028
Fixed crash at project load when features.libraries is empty (i.e. no libraries are provided).
Edouard Tisserant
parents:
1407
diff
changeset
|
211 |
</xsd:complexType> |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
212 |
</xsd:element>""") if len(features.libraries) > 0 else '') + """ |
86 | 213 |
</xsd:sequence> |
204
f572ab819769
remove URI_location from XSD targets and add to pluginroot XSD
greg
parents:
203
diff
changeset
|
214 |
<xsd:attribute name="URI_location" type="xsd:string" use="optional" default=""/> |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
215 |
<xsd:attribute name="Disable_Extensions" type="xsd:boolean" use="optional" default="false"/> |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
216 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
217 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
218 |
</xsd:schema> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
219 |
""" |
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
220 |
return XSD |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
221 |
|
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
222 |
|
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
223 |
class ProjectController(ConfigTreeNode, PLCControler): |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
224 |
|
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
225 |
""" |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
226 |
This class define Root object of the confnode tree. |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
227 |
It is responsible of : |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
228 |
- Managing project directory |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
229 |
- Building project |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
230 |
- Handling PLCOpenEditor controler and view |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
231 |
- Loading user confnodes and instanciante them as children |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
232 |
- ... |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
233 |
|
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
234 |
""" |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
235 |
# For root object, available Children Types are modules of the confnode |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
236 |
# packages. |
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
237 |
CTNChildrenTypes = ExtractChildrenTypesFromCatalog(features.catalog) |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
238 |
XSD = GetProjectControllerXSD() |
738 | 239 |
EditorType = ProjectNodeEditor |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
240 |
iec2c_cfg = None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
241 |
|
290
3bd617ae7a05
Local Runtime (LOCAL://) now launched "on demand"
etisserant
parents:
288
diff
changeset
|
242 |
def __init__(self, frame, logger): |
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
243 |
PLCControler.__init__(self) |
1836
d42b6cf00fa6
fix error __init__ method from base class is not called
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
244 |
ConfigTreeNode.__init__(self) |
227
48c13b84505c
- Some improovements in debug data feedback data
etisserant
parents:
222
diff
changeset
|
245 |
|
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
246 |
if ProjectController.iec2c_cfg is None: |
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
247 |
ProjectController.iec2c_cfg = Iec2CSettings(self) |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
248 |
|
20 | 249 |
self.MandatoryParams = None |
203 | 250 |
self._builder = None |
251 |
self._connector = None |
|
1363
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
252 |
self.DispatchDebugValuesTimer = None |
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
253 |
self.DebugValuesBuffers = [] |
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
254 |
self.DebugTicks = [] |
978 | 255 |
self.SetAppFrame(frame, logger) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
256 |
|
203 | 257 |
# Setup debug information |
227
48c13b84505c
- Some improovements in debug data feedback data
etisserant
parents:
222
diff
changeset
|
258 |
self.IECdebug_datas = {} |
222
d0f7d36bf241
Added lock to avoid variable subsciption concurrent to transmission to PLC
etisserant
parents:
217
diff
changeset
|
259 |
|
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
260 |
self.DebugUpdatePending = False |
203 | 261 |
self.ResetIECProgramsAndVariables() |
262 |
||
118 | 263 |
# In both new or load scenario, no need to save |
350
a3a5561bde1d
- now call load, start, free PLC from the python Thread
greg
parents:
348
diff
changeset
|
264 |
self.ChangesToSave = False |
23 | 265 |
# root have no parent |
718 | 266 |
self.CTNParent = None |
717 | 267 |
# Keep track of the confnode type name |
718 | 268 |
self.CTNType = "Beremiz" |
269 |
self.Children = {} |
|
738 | 270 |
self._View = None |
717 | 271 |
# After __init__ root confnode is not valid |
20 | 272 |
self.ProjectPath = None |
427 | 273 |
self._setBuildPath(None) |
286
a2a8a52b0d4f
Minor changes to get better cleanup of debug and python_eval threads, accross multiple debug sessions and PLC runs.
etisserant
parents:
283
diff
changeset
|
274 |
self.debug_break = False |
350
a3a5561bde1d
- now call load, start, free PLC from the python Thread
greg
parents:
348
diff
changeset
|
275 |
self.previous_plcstate = None |
2263 | 276 |
# copy StatusMethods so that it can be later customized |
754
a8c258f7bdcf
Fix bug in StatusToolBar items state when close and opening another project
laurent
parents:
746
diff
changeset
|
277 |
self.StatusMethods = [dic.copy() for dic in self.StatusMethods] |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
278 |
self.DebugToken = None |
3395
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
279 |
self.LastComplainDebugToken = None |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
280 |
self.debug_status = PlcStatus.Stopped |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
281 |
|
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
282 |
self.IECcodeDigest = None |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
283 |
self.LastBuiltIECcodeDigest = None |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
284 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
285 |
def __del__(self): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
286 |
self.KillDebugThread() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
287 |
|
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
288 |
def LoadLibraries(self): |
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
289 |
self.Libraries = [] |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
290 |
TypeStack = [] |
2462
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
291 |
for libname, clsname, lib_enabled in features.libraries: |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
292 |
if self.BeremizRoot.Libraries is not None: |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
293 |
enable_attr = getattr(self.BeremizRoot.Libraries, |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
294 |
"Enable_" + libname + "_Library") |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
295 |
if enable_attr is not None: |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
296 |
lib_enabled = enable_attr |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
297 |
|
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
298 |
if lib_enabled: |
732 | 299 |
Lib = GetClassImporter(clsname)()(self, libname, TypeStack) |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
300 |
TypeStack.append(Lib.GetTypes()) |
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
301 |
self.Libraries.append(Lib) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
302 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
303 |
def SetAppFrame(self, frame, logger): |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
304 |
self.AppFrame = frame |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
305 |
self.logger = logger |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
306 |
self.StatusTimer = None |
1363
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
307 |
if self.DispatchDebugValuesTimer is not None: |
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
308 |
self.DispatchDebugValuesTimer.Stop() |
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
309 |
self.DispatchDebugValuesTimer = None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
310 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
311 |
if frame is not None: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
312 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
313 |
# Timer to pull PLC status |
1363
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
314 |
self.StatusTimer = wx.Timer(self.AppFrame, -1) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
315 |
self.AppFrame.Bind(wx.EVT_TIMER, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
316 |
self.PullPLCStatusProc, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
317 |
self.StatusTimer) |
1395
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
318 |
|
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
319 |
if self._connector is not None: |
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
320 |
frame.LogViewer.SetLogSource(self._connector) |
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
321 |
self.StatusTimer.Start(milliseconds=500, oneShot=False) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
322 |
|
1363
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
323 |
# Timer to dispatch debug values to consumers |
e87e0166d0a7
Added new debug process separating non-wx thread extracting debug values from connector and 10 Hz wx timer refreshing Beremiz debug Viewers and communicating throw double-buffering, to avoid segmentation faults and optimize CPU usage
Laurent Bessard
parents:
1330
diff
changeset
|
324 |
self.DispatchDebugValuesTimer = wx.Timer(self.AppFrame, -1) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
325 |
self.AppFrame.Bind(wx.EVT_TIMER, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
326 |
self.DispatchDebugValuesProc, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
327 |
self.DispatchDebugValuesTimer) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
328 |
|
717 | 329 |
self.RefreshConfNodesBlockLists() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
330 |
|
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
331 |
def ResetAppFrame(self, logger): |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
332 |
if self.AppFrame is not None: |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
333 |
self.AppFrame.Unbind(wx.EVT_TIMER, self.StatusTimer) |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
334 |
self.StatusTimer = None |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
335 |
self.AppFrame = None |
1793
c2f48d791d9f
fix bug with unfinished debug thread
Surkov Sergey <surkovsv93@gmail.com>
parents:
1789
diff
changeset
|
336 |
self.KillDebugThread() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
337 |
self.logger = logger |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
338 |
|
738 | 339 |
def CTNName(self): |
340 |
return "Project" |
|
341 |
||
718 | 342 |
def CTNTestModified(self): |
1757
0de89da92ee0
clean-up: fix PEP8 E111 indentation is not a multiple of four
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1756
diff
changeset
|
343 |
return self.ChangesToSave or not self.ProjectIsSaved() |
118 | 344 |
|
718 | 345 |
def CTNFullName(self): |
656
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
655
diff
changeset
|
346 |
return "" |
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
655
diff
changeset
|
347 |
|
718 | 348 |
def GetCTRoot(self): |
23 | 349 |
return self |
350 |
||
418 | 351 |
def GetIECLibPath(self): |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
352 |
return self.iec2c_cfg.getLibCPath() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
353 |
|
418 | 354 |
def GetIEC2cPath(self): |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
355 |
return self.iec2c_cfg.getCmd() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
356 |
|
23 | 357 |
def GetCurrentLocation(self): |
358 |
return () |
|
47
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
359 |
|
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
360 |
def GetCurrentName(self): |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
361 |
return "" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
362 |
|
47
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
363 |
def _GetCurrentName(self): |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
364 |
return "" |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
365 |
|
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
366 |
def GetProjectPath(self): |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
367 |
return self.ProjectPath |
51
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
368 |
|
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
369 |
def GetProjectName(self): |
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
370 |
return os.path.split(self.ProjectPath)[1] |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
371 |
|
781
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
372 |
def GetIconName(self): |
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
373 |
return "PROJECT" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
374 |
|
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
375 |
def GetDefaultTargetName(self): |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
376 |
if wx.Platform == '__WXMSW__': |
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
377 |
return "Win32" |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
378 |
else: |
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
379 |
return "Linux" |
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
380 |
|
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
381 |
def GetTarget(self): |
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
382 |
target = self.BeremizRoot.getTargetType() |
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
383 |
if target.getcontent() is None: |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
384 |
temp_root = self.Parser.CreateRoot() |
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
385 |
target = self.Parser.CreateElement("TargetType", "BeremizRoot") |
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
386 |
temp_root.setTargetType(target) |
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
387 |
target_name = self.GetDefaultTargetName() |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
388 |
target.setcontent( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
389 |
self.Parser.CreateElement(target_name, "TargetType")) |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
390 |
return target |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
391 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1742
diff
changeset
|
392 |
def GetParamsAttributes(self, path=None): |
717 | 393 |
params = ConfigTreeNode.GetParamsAttributes(self, path) |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
394 |
if params[0]["name"] == "BeremizRoot": |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
395 |
for child in params[0]["children"]: |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
396 |
if child["name"] == "TargetType" and child["value"] == '': |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
397 |
child.update( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
398 |
self.GetTarget().getElementInfos("TargetType")) |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
399 |
return params |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
400 |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
401 |
def SetParamsAttribute(self, path, value): |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
402 |
if path.startswith("BeremizRoot.TargetType.") and self.BeremizRoot.getTargetType().getcontent() is None: |
607
c68b662e0c2a
Bug when changing parameters in TargetType section in Beremiz project configuration fixed
laurent
parents:
604
diff
changeset
|
403 |
self.BeremizRoot.setTargetType(self.GetTarget()) |
1080
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
404 |
res = ConfigTreeNode.SetParamsAttribute(self, path, value) |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
405 |
if path.startswith("BeremizRoot.Libraries."): |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
406 |
wx.CallAfter(self.RefreshConfNodesBlockLists) |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
407 |
return res |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
408 |
|
427 | 409 |
# helper func to check project path write permission |
3351
88dbdebd10fc
IDE: Add a "Tutorials and Examples" sub menu to "File" menu to directly open projects in /exemples directory. Move 'python' and 'first_steps' projecvts from /tests to /exemple
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3302
diff
changeset
|
410 |
def CheckProjectPathPerm(self): |
427 | 411 |
if CheckPathPerm(self.ProjectPath): |
412 |
return True |
|
1080
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
413 |
if self.AppFrame is not None: |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
414 |
dialog = wx.MessageDialog( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
415 |
self.AppFrame, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
416 |
_('You must have permission to work on the project\nWork on a project copy ?'), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
417 |
_('Error'), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
418 |
wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) |
1080
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
419 |
answer = dialog.ShowModal() |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
420 |
dialog.Destroy() |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
421 |
if answer == wx.ID_YES: |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
422 |
if self.SaveProjectAs(): |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
423 |
self.AppFrame.RefreshTitle() |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
424 |
self.AppFrame.RefreshFileMenu() |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
425 |
self.AppFrame.RefreshPageTitles() |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
426 |
return True |
427 | 427 |
return False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
428 |
|
1061 | 429 |
def _getProjectFilesPath(self, project_path=None): |
430 |
if project_path is not None: |
|
431 |
return os.path.join(project_path, "project_files") |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
432 |
projectfiles_path = os.path.join( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
433 |
self.GetProjectPath(), "project_files") |
757
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
434 |
if not os.path.exists(projectfiles_path): |
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
435 |
os.mkdir(projectfiles_path) |
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
436 |
return projectfiles_path |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
437 |
|
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
438 |
def AddProjectDefaultConfiguration(self, config_name="config", res_name="resource1"): |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
439 |
self.ProjectAddConfiguration(config_name) |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
440 |
self.ProjectAddConfigurationResource(config_name, res_name) |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
441 |
|
1708
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
442 |
def SetProjectDefaultConfiguration(self): |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
443 |
# Sets default task and instance for new project |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
444 |
config = self.Project.getconfiguration( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
445 |
self.GetProjectMainConfigurationName()) |
1708
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
446 |
resource = config.getresource()[0].getname() |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
447 |
config = config.getname() |
1948
b9a3f771aaab
Moved some definitions away from controller class, and adaped references them through all code.
Edouard Tisserant
parents:
1928
diff
changeset
|
448 |
resource_tagname = ComputeConfigurationResourceName(config, resource) |
1708
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
449 |
def_task = [ |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
450 |
{'Priority': '0', 'Single': '', 'Interval': 'T#20ms', 'Name': 'task0', 'Triggering': 'Cyclic'}] |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
451 |
def_instance = [ |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
452 |
{'Task': def_task[0].get('Name'), 'Type': self.GetProjectPouNames()[0], 'Name': 'instance0'}] |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
453 |
self.SetEditedResourceInfos(resource_tagname, def_task, def_instance) |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
454 |
|
256 | 455 |
def NewProject(self, ProjectPath, BuildPath=None): |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
456 |
""" |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
457 |
Create a new project in an empty folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
458 |
@param ProjectPath: path of the folder where project have to be created |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
459 |
@param PLCParams: properties of the PLCOpen program created |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
460 |
""" |
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
461 |
# Verify that chosen folder is empty |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
462 |
if not os.path.isdir(ProjectPath) or len(os.listdir(ProjectPath)) > 0: |
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
463 |
return _("Chosen folder isn't empty. You can't use it for a new project!") |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
464 |
|
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
465 |
# Create PLCOpen program |
738 | 466 |
self.CreateNewProject( |
467 |
{"projectName": _("Unnamed"), |
|
468 |
"productName": _("Unnamed"), |
|
801
435e49e80832
Update list of messages to be translated for internationalization and french translations
laurent
parents:
796
diff
changeset
|
469 |
"productVersion": "1", |
738 | 470 |
"companyName": _("Unknown"), |
471 |
"creationDateTime": datetime(*localtime()[:6])}) |
|
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
472 |
self.AddProjectDefaultConfiguration() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
473 |
|
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
474 |
# Change XSD into class members |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
475 |
self._AddParamsMembers() |
718 | 476 |
self.Children = {} |
717 | 477 |
# Keep track of the root confnode (i.e. project path) |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
478 |
self.ProjectPath = ProjectPath |
427 | 479 |
self._setBuildPath(BuildPath) |
717 | 480 |
# get confnodes bloclist (is that usefull at project creation?) |
481 |
self.RefreshConfNodesBlockLists() |
|
114
2e3d8d4480e7
Now .xml files are automatically created when creating a new project no need to save explicitely.
etisserant
parents:
113
diff
changeset
|
482 |
# this will create files base XML files |
2e3d8d4480e7
Now .xml files are automatically created when creating a new project no need to save explicitely.
etisserant
parents:
113
diff
changeset
|
483 |
self.SaveProject() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
484 |
return None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
485 |
|
256 | 486 |
def LoadProject(self, ProjectPath, BuildPath=None): |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
487 |
""" |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
488 |
Load a project contained in a folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
489 |
@param ProjectPath: path of the project folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
490 |
""" |
190 | 491 |
if os.path.basename(ProjectPath) == "": |
492 |
ProjectPath = os.path.dirname(ProjectPath) |
|
978 | 493 |
# Verify that project contains a PLCOpen program |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
494 |
plc_file = os.path.join(ProjectPath, "plc.xml") |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
495 |
if not os.path.isfile(plc_file): |
1602
95ecb26fdc4e
fix bug with recent projects menu, remove path to the project from menu, if project directory doesn't exist
Sergey Surkov <surkovsv93@gmail.com>
parents:
1587
diff
changeset
|
496 |
return _("Chosen folder doesn't contain a program. It's not a valid project!"), True |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
497 |
# Load PLCOpen file |
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:
1315
diff
changeset
|
498 |
error = self.OpenXMLFile(plc_file) |
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:
1315
diff
changeset
|
499 |
if error is not None: |
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:
1315
diff
changeset
|
500 |
if self.Project is not None: |
1581
2295fdc5c271
fix translation strings with multiple parameters
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1579
diff
changeset
|
501 |
(fname_err, lnum, src) = (("PLC",) + error) |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
502 |
self.logger.write_warning( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
503 |
XSDSchemaErrorMessage.format(a1=fname_err, a2=lnum, a3=src)) |
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:
1315
diff
changeset
|
504 |
else: |
1602
95ecb26fdc4e
fix bug with recent projects menu, remove path to the project from menu, if project directory doesn't exist
Sergey Surkov <surkovsv93@gmail.com>
parents:
1587
diff
changeset
|
505 |
return error, False |
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
506 |
if len(self.GetProjectConfigNames()) == 0: |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
507 |
self.AddProjectDefaultConfiguration() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
508 |
# Change XSD into class members |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
509 |
self._AddParamsMembers() |
718 | 510 |
self.Children = {} |
717 | 511 |
# Keep track of the root confnode (i.e. project path) |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
512 |
self.ProjectPath = ProjectPath |
427 | 513 |
self._setBuildPath(BuildPath) |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
514 |
# If dir have already be made, and file exist |
718 | 515 |
if os.path.isdir(self.CTNPath()) and os.path.isfile(self.ConfNodeXmlFilePath()): |
1733
dea107dce0c4
clean-up: fix some PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
516 |
# Load the confnode.xml file into parameters members |
203 | 517 |
result = self.LoadXMLParams() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
518 |
if result: |
1602
95ecb26fdc4e
fix bug with recent projects menu, remove path to the project from menu, if project directory doesn't exist
Sergey Surkov <surkovsv93@gmail.com>
parents:
1587
diff
changeset
|
519 |
return result, False |
1733
dea107dce0c4
clean-up: fix some PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
520 |
# Load and init all the children |
718 | 521 |
self.LoadChildren() |
717 | 522 |
self.RefreshConfNodesBlockLists() |
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
523 |
self.UpdateButtons() |
1602
95ecb26fdc4e
fix bug with recent projects menu, remove path to the project from menu, if project directory doesn't exist
Sergey Surkov <surkovsv93@gmail.com>
parents:
1587
diff
changeset
|
524 |
return None, False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
525 |
|
738 | 526 |
def RecursiveConfNodeInfos(self, confnode): |
527 |
values = [] |
|
528 |
for CTNChild in confnode.IECSortedChildren(): |
|
529 |
values.append( |
|
530 |
{"name": "%s: %s" % (CTNChild.GetFullIEC_Channel(), |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
531 |
CTNChild.CTNName()), |
1105
f0e5b475a074
Fixed bug when modifying ConfTreeNode IEC Channel
Laurent Bessard
parents:
1089
diff
changeset
|
532 |
"tagname": CTNChild.CTNFullName(), |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
533 |
"type": ITEM_CONFNODE, |
738 | 534 |
"confnode": CTNChild, |
781
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
535 |
"icon": CTNChild.GetIconName(), |
738 | 536 |
"values": self.RecursiveConfNodeInfos(CTNChild)}) |
537 |
return values |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
538 |
|
738 | 539 |
def GetProjectInfos(self): |
540 |
infos = PLCControler.GetProjectInfos(self) |
|
541 |
configurations = infos["values"].pop(-1) |
|
542 |
resources = None |
|
543 |
for config_infos in configurations["values"]: |
|
544 |
if resources is None: |
|
545 |
resources = config_infos["values"][0] |
|
546 |
else: |
|
547 |
resources["values"].extend(config_infos["values"][0]["values"]) |
|
548 |
if resources is not None: |
|
549 |
infos["values"].append(resources) |
|
550 |
infos["values"].extend(self.RecursiveConfNodeInfos(self)) |
|
551 |
return infos |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
552 |
|
403 | 553 |
def CloseProject(self): |
718 | 554 |
self.ClearChildren() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
555 |
self.ResetAppFrame(None) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
556 |
|
1606
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
557 |
def CheckNewProjectPath(self, old_project_path, new_project_path): |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
558 |
if old_project_path == new_project_path: |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
559 |
message = (_("Save path is the same as path of a project! \n")) |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
560 |
dialog = wx.MessageDialog( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
561 |
self.AppFrame, message, _("Error"), wx.OK | wx.ICON_ERROR) |
1606
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
562 |
dialog.ShowModal() |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
563 |
return False |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
564 |
else: |
2505
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
565 |
if not CheckPathPerm(new_project_path): |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
566 |
dialog = wx.MessageDialog( |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
567 |
self.AppFrame, |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
568 |
_('No write permissions in selected directory! \n'), |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
569 |
_("Error"), wx.OK | wx.ICON_ERROR) |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
570 |
dialog.ShowModal() |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
571 |
return False |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
572 |
if not os.path.isdir(new_project_path) or len(os.listdir(new_project_path)) > 0: |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
573 |
plc_file = os.path.join(new_project_path, "plc.xml") |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
574 |
if os.path.isfile(plc_file): |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
575 |
message = _("Selected directory already contains another project. Overwrite? \n") |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
576 |
else: |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
577 |
message = _("Selected directory isn't empty. Continue? \n") |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
578 |
dialog = wx.MessageDialog( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
579 |
self.AppFrame, message, _("Error"), wx.YES_NO | wx.ICON_ERROR) |
1606
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
580 |
answer = dialog.ShowModal() |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
581 |
return answer == wx.ID_YES |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
582 |
return True |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
583 |
|
1061 | 584 |
def SaveProject(self, from_project_path=None): |
3351
88dbdebd10fc
IDE: Add a "Tutorials and Examples" sub menu to "File" menu to directly open projects in /exemples directory. Move 'python' and 'first_steps' projecvts from /tests to /exemple
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3302
diff
changeset
|
585 |
if self.CheckProjectPathPerm(): |
1061 | 586 |
if from_project_path is not None: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
587 |
old_projectfiles_path = self._getProjectFilesPath( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
588 |
from_project_path) |
1061 | 589 |
if os.path.isdir(old_projectfiles_path): |
2506
8dbdf20f795b
fix 'SaveAs' in case of overwriting existing project
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2505
diff
changeset
|
590 |
copy_tree(old_projectfiles_path, |
8dbdf20f795b
fix 'SaveAs' in case of overwriting existing project
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2505
diff
changeset
|
591 |
self._getProjectFilesPath(self.ProjectPath)) |
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
592 |
self.SaveXMLFile(os.path.join(self.ProjectPath, 'plc.xml')) |
1061 | 593 |
result = self.CTNRequestSave(from_project_path) |
427 | 594 |
if result: |
595 |
self.logger.write_error(result) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
596 |
|
1061 | 597 |
def SaveProjectAs(self): |
427 | 598 |
# Ask user to choose a path with write permissions |
529 | 599 |
if wx.Platform == '__WXMSW__': |
600 |
path = os.getenv("USERPROFILE") |
|
601 |
else: |
|
602 |
path = os.getenv("HOME") |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
603 |
dirdialog = wx.DirDialog( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
604 |
self.AppFrame, _("Choose a directory to save project"), path, wx.DD_NEW_DIR_BUTTON) |
427 | 605 |
answer = dirdialog.ShowModal() |
606 |
dirdialog.Destroy() |
|
607 |
if answer == wx.ID_OK: |
|
608 |
newprojectpath = dirdialog.GetPath() |
|
609 |
if os.path.isdir(newprojectpath): |
|
1606
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
610 |
if self.CheckNewProjectPath(self.ProjectPath, newprojectpath): |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
611 |
self.ProjectPath, old_project_path = newprojectpath, self.ProjectPath |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
612 |
self.SaveProject(old_project_path) |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
613 |
self._setBuildPath(self.BuildPath) |
427 | 614 |
return True |
615 |
return False |
|
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
616 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
617 |
def GetLibrariesTypes(self): |
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
618 |
self.LoadLibraries() |
1746
45d6f5fba016
clean-up: fix PEP8 E202 whitespace before ')'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
619 |
return [lib.GetTypes() for lib in self.Libraries] |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
620 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
621 |
def GetLibrariesSTCode(self): |
1746
45d6f5fba016
clean-up: fix PEP8 E202 whitespace before ')'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
622 |
return "\n".join([lib.GetSTCode() for lib in self.Libraries]) |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
623 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
624 |
def GetLibrariesCCode(self, buildpath): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
625 |
if len(self.Libraries) == 0: |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
626 |
return [], [], () |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
627 |
self.GetIECProgramsAndVariables() |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
628 |
LibIECCflags = '"-I%s" -Wno-unused-function' % os.path.abspath( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
629 |
self.GetIECLibPath()) |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
630 |
LocatedCCodeAndFlags = [] |
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
631 |
Extras = [] |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
632 |
for lib in self.Libraries: |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
633 |
res = lib.Generate_C(buildpath, self._VariablesList, LibIECCflags) |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
634 |
LocatedCCodeAndFlags.append(res[:2]) |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
635 |
if len(res) > 2: |
869
abf90a44c265
Fix bug when more than one block library add extra python file
Laurent Bessard
parents:
842
diff
changeset
|
636 |
Extras.extend(res[2:]) |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
637 |
return map(list, zip(*LocatedCCodeAndFlags)) + [tuple(Extras)] |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
638 |
|
717 | 639 |
# Update PLCOpenEditor ConfNode Block types from loaded confnodes |
640 |
def RefreshConfNodesBlockLists(self): |
|
718 | 641 |
if getattr(self, "Children", None) is not None: |
717 | 642 |
self.ClearConfNodeTypes() |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
643 |
self.AddConfNodeTypesList(self.GetLibrariesTypes()) |
395 | 644 |
if self.AppFrame is not None: |
716
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
645 |
self.AppFrame.RefreshLibraryPanel() |
395 | 646 |
self.AppFrame.RefreshEditor() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
647 |
|
443
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
648 |
# Update a PLCOpenEditor Pou variable location |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
649 |
def UpdateProjectVariableLocation(self, old_leading, new_leading): |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
650 |
self.Project.updateElementAddress(old_leading, new_leading) |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
651 |
self.BufferProject() |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
652 |
if self.AppFrame is not None: |
468 | 653 |
self.AppFrame.RefreshTitle() |
730 | 654 |
self.AppFrame.RefreshPouInstanceVariablesPanel() |
468 | 655 |
self.AppFrame.RefreshFileMenu() |
656 |
self.AppFrame.RefreshEditMenu() |
|
842 | 657 |
wx.CallAfter(self.AppFrame.RefreshEditor) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
658 |
|
401
8106a853a7c7
Adding support for displaying plugins available variable into Beremiz plugin tree
laurent
parents:
396
diff
changeset
|
659 |
def GetVariableLocationTree(self): |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
660 |
''' |
717 | 661 |
This function is meant to be overridden by confnodes. |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
662 |
|
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
663 |
It should returns an list of dictionaries |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
664 |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
665 |
- IEC_type is an IEC type like BOOL/BYTE/SINT/... |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
666 |
- location is a string of this variable's location, like "%IX0.0.0" |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
667 |
''' |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
668 |
children = [] |
718 | 669 |
for child in self.IECSortedChildren(): |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
670 |
children.append(child.GetVariableLocationTree()) |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
671 |
return children |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
672 |
|
718 | 673 |
def CTNPath(self, CTNName=None): |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
674 |
return self.ProjectPath |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
675 |
|
718 | 676 |
def ConfNodeXmlFilePath(self, CTNName=None): |
677 |
return os.path.join(self.CTNPath(CTNName), "beremiz.xml") |
|
18 | 678 |
|
669
472469f4d5ad
Adding support for loading datatypes defined in plugins to allow to use them in PLC program
laurent
parents:
661
diff
changeset
|
679 |
def ParentsTypesFactory(self): |
717 | 680 |
return self.ConfNodeTypesFactory() |
363
e0c4d3549369
Adding support for recursively generate STLibrary and BlockLibrary according to plugin tree
laurent
parents:
361
diff
changeset
|
681 |
|
427 | 682 |
def _setBuildPath(self, buildpath): |
683 |
self.BuildPath = buildpath |
|
684 |
self.DefaultBuildPath = None |
|
685 |
if self._builder is not None: |
|
686 |
self._builder.SetBuildPath(self._getBuildPath()) |
|
687 |
||
20 | 688 |
def _getBuildPath(self): |
427 | 689 |
# BuildPath is defined by user |
690 |
if self.BuildPath is not None: |
|
691 |
return self.BuildPath |
|
692 |
# BuildPath isn't defined by user but already created by default |
|
693 |
if self.DefaultBuildPath is not None: |
|
694 |
return self.DefaultBuildPath |
|
695 |
# Create a build path in project folder if user has permissions |
|
696 |
if CheckPathPerm(self.ProjectPath): |
|
697 |
self.DefaultBuildPath = os.path.join(self.ProjectPath, "build") |
|
698 |
# Create a build path in temp folder |
|
699 |
else: |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
700 |
self.DefaultBuildPath = os.path.join( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
701 |
tempfile.mkdtemp(), os.path.basename(self.ProjectPath), "build") |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
702 |
|
427 | 703 |
if not os.path.exists(self.DefaultBuildPath): |
704 |
os.makedirs(self.DefaultBuildPath) |
|
705 |
return self.DefaultBuildPath |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
706 |
|
203 | 707 |
def _getExtraFilesPath(self): |
708 |
return os.path.join(self._getBuildPath(), "extra_files") |
|
709 |
||
20 | 710 |
def _getIECcodepath(self): |
711 |
# define name for IEC code file |
|
712 |
return os.path.join(self._getBuildPath(), "plc.st") |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
713 |
|
65 | 714 |
def _getIECgeneratedcodepath(self): |
715 |
# define name for IEC generated code file |
|
716 |
return os.path.join(self._getBuildPath(), "generated_plc.st") |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
717 |
|
65 | 718 |
def _getIECrawcodepath(self): |
719 |
# define name for IEC raw code file |
|
718 | 720 |
return os.path.join(self.CTNPath(), "raw_plc.st") |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
721 |
|
97 | 722 |
def GetLocations(self): |
723 |
locations = [] |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
724 |
filepath = os.path.join(self._getBuildPath(), "LOCATED_VARIABLES.h") |
97 | 725 |
if os.path.isfile(filepath): |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
726 |
# IEC2C compiler generate a list of located variables : |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
727 |
# LOCATED_VARIABLES.h |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
728 |
location_file = open( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
729 |
os.path.join(self._getBuildPath(), "LOCATED_VARIABLES.h")) |
97 | 730 |
# each line of LOCATED_VARIABLES.h declares a located variable |
731 |
lines = [line.strip() for line in location_file.readlines()] |
|
732 |
# This regular expression parses the lines genereated by IEC2C |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
733 |
LOCATED_MODEL = re.compile( |
2439
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
734 |
r"__LOCATED_VAR\((?P<IEC_TYPE>[A-Z]*),(?P<NAME>[_A-Za-z0-9]*),(?P<DIR>[QMI])(?:,(?P<SIZE>[XBWDL]))?,(?P<LOC>[,0-9]*)\)") |
97 | 735 |
for line in lines: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
736 |
# If line match RE, |
97 | 737 |
result = LOCATED_MODEL.match(line) |
738 |
if result: |
|
739 |
# Get the resulting dict |
|
740 |
resdict = result.groupdict() |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
741 |
# rewrite string for variadic location as a tuple of |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
742 |
# integers |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
743 |
resdict['LOC'] = tuple(map(int, resdict['LOC'].split(','))) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
744 |
# set located size to 'X' if not given |
97 | 745 |
if not resdict['SIZE']: |
746 |
resdict['SIZE'] = 'X' |
|
747 |
# finally store into located variable list |
|
748 |
locations.append(resdict) |
|
749 |
return locations |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
750 |
|
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
751 |
def GetConfNodeGlobalInstances(self): |
3266
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
752 |
LibGlobals = [] |
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
753 |
for lib in self.Libraries: |
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
754 |
LibGlobals += lib.GlobalInstances() |
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
755 |
CTNGlobals = self._GlobalInstances() |
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
756 |
return LibGlobals + CTNGlobals |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
757 |
|
203 | 758 |
def _Generate_SoftPLC(self): |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
759 |
if self._Generate_PLC_ST(): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
760 |
return self._Compile_ST_to_SoftPLC() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
761 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
762 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
763 |
def _Generate_PLC_ST(self): |
20 | 764 |
""" |
64 | 765 |
Generate SoftPLC ST/IL/SFC code out of PLCOpenEditor controller, and compile it with IEC2C |
20 | 766 |
@param buildpath: path where files should be created |
767 |
""" |
|
768 |
||
717 | 769 |
# Update PLCOpenEditor ConfNode Block types before generate ST code |
770 |
self.RefreshConfNodesBlockLists() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
771 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
772 |
self.logger.write( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
773 |
_("Generating SoftPLC IEC-61131 ST/IL/SFC code...\n")) |
20 | 774 |
# ask PLCOpenEditor controller to write ST/IL/SFC code file |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
775 |
_program, errors, warnings = self.GenerateProgram( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
776 |
self._getIECgeneratedcodepath()) |
309
6eb074f0dae9
Adding support for cancelling code generation of function with no input connected
lbessard
parents:
304
diff
changeset
|
777 |
if len(warnings) > 0: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
778 |
self.logger.write_warning( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
779 |
_("Warnings in ST/IL/SFC code generator :\n")) |
309
6eb074f0dae9
Adding support for cancelling code generation of function with no input connected
lbessard
parents:
304
diff
changeset
|
780 |
for warning in warnings: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1733
diff
changeset
|
781 |
self.logger.write_warning("%s\n" % warning) |
309
6eb074f0dae9
Adding support for cancelling code generation of function with no input connected
lbessard
parents:
304
diff
changeset
|
782 |
if len(errors) > 0: |
20 | 783 |
# Failed ! |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
784 |
self.logger.write_error( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
785 |
_("Error in ST/IL/SFC code generator :\n%s\n") % errors[0]) |
20 | 786 |
return False |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
787 |
|
717 | 788 |
# Add ST Library from confnodes |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
789 |
IECCodeContent = self.GetLibrariesSTCode() |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
790 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
791 |
IECrawcodepath = self._getIECrawcodepath() |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
792 |
if os.path.isfile(IECrawcodepath): |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
793 |
IECCodeContent += open(IECrawcodepath, "r").read() + "\n" |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
794 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
795 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
796 |
# Compute offset before ST resulting of transformation from user POUs |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
797 |
self.ProgramOffset = IECCodeContent.count("\n") |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
798 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
799 |
IECCodeContent += open(self._getIECgeneratedcodepath(), "r").read() |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
800 |
|
3380
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
801 |
IECcodepath = self._getIECcodepath() |
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
802 |
|
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
803 |
if not os.path.exists(IECcodepath): |
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
804 |
self.LastBuiltIECcodeDigest = None |
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
805 |
|
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
806 |
with open(IECcodepath, "w") as plc_file: |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
807 |
plc_file.write(IECCodeContent) |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
808 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
809 |
hasher = hashlib.md5() |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
810 |
hasher.update(IECCodeContent) |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
811 |
self.IECcodeDigest = hasher.hexdigest() |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
812 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
813 |
return True |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
814 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
815 |
def _Compile_ST_to_SoftPLC(self): |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
816 |
iec2c_libpath = self.iec2c_cfg.getLibPath() |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
817 |
if iec2c_libpath is None: |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
818 |
self.logger.write_error(_("matiec installation is not found\n")) |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
819 |
return False |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
820 |
|
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
821 |
if self.LastBuiltIECcodeDigest == self.IECcodeDigest: |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
822 |
self.logger.write(_("IEC program did no change, not re-compiling into C code.\n")) |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
823 |
return True |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
824 |
|
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
825 |
self.logger.write(_("Compiling IEC Program into C code...\n")) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
826 |
buildpath = self._getBuildPath() |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1733
diff
changeset
|
827 |
buildcmd = "\"%s\" %s -I \"%s\" -T \"%s\" \"%s\"" % ( |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
828 |
self.iec2c_cfg.getCmd(), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
829 |
self.iec2c_cfg.getOptions(), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
830 |
iec2c_libpath, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
831 |
buildpath, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
832 |
self._getIECcodepath()) |
1451
94e620cbd9de
Added Ronan Bignaux (genesis) patch to use wxversion. Fixed side effects with sys.path. Other cosmetic fixes about path included.
Edouard Tisserant
parents:
1448
diff
changeset
|
833 |
|
94e620cbd9de
Added Ronan Bignaux (genesis) patch to use wxversion. Fixed side effects with sys.path. Other cosmetic fixes about path included.
Edouard Tisserant
parents:
1448
diff
changeset
|
834 |
try: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
835 |
# Invoke compiler. |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
836 |
# Output files are listed to stdout, errors to stderr |
1451
94e620cbd9de
Added Ronan Bignaux (genesis) patch to use wxversion. Fixed side effects with sys.path. Other cosmetic fixes about path included.
Edouard Tisserant
parents:
1448
diff
changeset
|
837 |
status, result, err_result = ProcessLogger(self.logger, buildcmd, |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
838 |
no_stdout=True, |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
839 |
no_stderr=True).spin() |
2418
5587c490a070
Use python 3 compatible exception syntax everywhere
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2416
diff
changeset
|
840 |
except Exception as e: |
1451
94e620cbd9de
Added Ronan Bignaux (genesis) patch to use wxversion. Fixed side effects with sys.path. Other cosmetic fixes about path included.
Edouard Tisserant
parents:
1448
diff
changeset
|
841 |
self.logger.write_error(buildcmd + "\n") |
94e620cbd9de
Added Ronan Bignaux (genesis) patch to use wxversion. Fixed side effects with sys.path. Other cosmetic fixes about path included.
Edouard Tisserant
parents:
1448
diff
changeset
|
842 |
self.logger.write_error(repr(e) + "\n") |
94e620cbd9de
Added Ronan Bignaux (genesis) patch to use wxversion. Fixed side effects with sys.path. Other cosmetic fixes about path included.
Edouard Tisserant
parents:
1448
diff
changeset
|
843 |
return False |
94e620cbd9de
Added Ronan Bignaux (genesis) patch to use wxversion. Fixed side effects with sys.path. Other cosmetic fixes about path included.
Edouard Tisserant
parents:
1448
diff
changeset
|
844 |
|
20 | 845 |
if status: |
846 |
# Failed ! |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
847 |
|
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
848 |
# parse iec2c's error message. if it contains a line number, |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
849 |
# then print those lines from the generated IEC file. |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
850 |
for err_line in err_result.split('\n'): |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
851 |
self.logger.write_warning(err_line + "\n") |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
852 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
853 |
m_result = MATIEC_ERROR_MODEL.match(err_line) |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
854 |
if m_result is not None: |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
855 |
first_line, _first_column, last_line, _last_column, _error = m_result.groups() |
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
856 |
first_line, last_line = int(first_line), int(last_line) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
857 |
|
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
858 |
last_section = None |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
859 |
f = open(self._getIECcodepath()) |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
860 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
861 |
for i, line in enumerate(f.readlines()): |
661
5d3da49e8029
Fixing bug in displaying lines of code at the origin of matiec errors
laurent
parents:
656
diff
changeset
|
862 |
i = i + 1 |
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
863 |
if line[0] not in '\t \r\n': |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
864 |
last_section = line |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
865 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
866 |
if first_line <= i <= last_line: |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
867 |
if last_section is not None: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
868 |
self.logger.write_warning( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
869 |
"In section: " + last_section) |
1737
a39c2918c015
clean-up: fix PEP8 E261 at least two spaces before inline comment
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
870 |
last_section = None # only write section once |
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
871 |
self.logger.write_warning("%04d: %s" % (i, line)) |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
872 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
873 |
f.close() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
874 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
875 |
self.logger.write_error( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
876 |
_("Error : IEC to C compiler returned %d\n") % status) |
20 | 877 |
return False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
878 |
|
20 | 879 |
# Now extract C files of stdout |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
880 |
C_files = [fname for fname in result.splitlines() if fname[ |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
881 |
-2:] == ".c" or fname[-2:] == ".C"] |
20 | 882 |
# remove those that are not to be compiled because included by others |
883 |
C_files.remove("POUS.c") |
|
115 | 884 |
if not C_files: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
885 |
self.logger.write_error( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
886 |
_("Error : At least one configuration and one resource must be declared in PLC !\n")) |
115 | 887 |
return False |
20 | 888 |
# transform those base names to full names with path |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
889 |
C_files = map( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
890 |
lambda filename: os.path.join(buildpath, filename), C_files) |
1050
56bef276055e
Made declaration from beremiz.h available to C pragmas in POUs. Added AtomicCompareExchange to beremiz.h
Edouard Tisserant
parents:
1006
diff
changeset
|
891 |
|
56bef276055e
Made declaration from beremiz.h available to C pragmas in POUs. Added AtomicCompareExchange to beremiz.h
Edouard Tisserant
parents:
1006
diff
changeset
|
892 |
# prepend beremiz include to configuration header |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
893 |
H_files = [fname for fname in result.splitlines() if fname[ |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
894 |
-2:] == ".h" or fname[-2:] == ".H"] |
1050
56bef276055e
Made declaration from beremiz.h available to C pragmas in POUs. Added AtomicCompareExchange to beremiz.h
Edouard Tisserant
parents:
1006
diff
changeset
|
895 |
H_files.remove("LOCATED_VARIABLES.h") |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
896 |
H_files = map( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
897 |
lambda filename: os.path.join(buildpath, filename), H_files) |
1050
56bef276055e
Made declaration from beremiz.h available to C pragmas in POUs. Added AtomicCompareExchange to beremiz.h
Edouard Tisserant
parents:
1006
diff
changeset
|
898 |
for H_file in H_files: |
2442
b13f021c68a5
python3 support: pylint, W1607 # (file-builtin) file built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2441
diff
changeset
|
899 |
with open(H_file, 'r') as original: |
1756
08e4394ff4fb
clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1754
diff
changeset
|
900 |
data = original.read() |
2442
b13f021c68a5
python3 support: pylint, W1607 # (file-builtin) file built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2441
diff
changeset
|
901 |
with open(H_file, 'w') as modified: |
1756
08e4394ff4fb
clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1754
diff
changeset
|
902 |
modified.write('#include "beremiz.h"\n' + data) |
1050
56bef276055e
Made declaration from beremiz.h available to C pragmas in POUs. Added AtomicCompareExchange to beremiz.h
Edouard Tisserant
parents:
1006
diff
changeset
|
903 |
|
361 | 904 |
self.logger.write(_("Extracting Located Variables...\n")) |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
905 |
# Keep track of generated located variables for later use by |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
906 |
# self._Generate_C |
97 | 907 |
self.PLCGeneratedLocatedVars = self.GetLocations() |
718 | 908 |
# Keep track of generated C files for later use by self.CTNGenerate_C |
18 | 909 |
self.PLCGeneratedCFiles = C_files |
49
45dc6a944ab6
On the long wat towards generated code comilation...
etisserant
parents:
47
diff
changeset
|
910 |
# compute CFLAGS for plc |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
911 |
self.plcCFLAGS = '"-I%s" -Wno-unused-function' % self.iec2c_cfg.getLibCPath() |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
912 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
913 |
self.LastBuiltIECcodeDigest = self.IECcodeDigest |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3351
diff
changeset
|
914 |
|
18 | 915 |
return True |
916 |
||
203 | 917 |
def GetBuilder(self): |
918 |
""" |
|
919 |
Return a Builder (compile C code into machine code) |
|
920 |
""" |
|
921 |
# Get target, module and class name |
|
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
922 |
targetname = self.GetTarget().getcontent().getLocalTag() |
733
915be999f3f0
targets and connectors are nor extensible
Edouard Tisserant
parents:
732
diff
changeset
|
923 |
targetclass = targets.GetBuilder(targetname) |
203 | 924 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
925 |
# if target already |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
926 |
if self._builder is None or not isinstance(self._builder, targetclass): |
203 | 927 |
# Get classname instance |
928 |
self._builder = targetclass(self) |
|
929 |
return self._builder |
|
930 |
||
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
931 |
# |
203 | 932 |
# |
933 |
# C CODE GENERATION METHODS |
|
934 |
# |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
935 |
# |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
936 |
|
718 | 937 |
def CTNGenerate_C(self, buildpath, locations): |
203 | 938 |
""" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
939 |
Return C code generated by iec2c compiler |
203 | 940 |
when _generate_softPLC have been called |
941 |
@param locations: ignored |
|
942 |
@return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND |
|
943 |
""" |
|
283
d0e6fc0701fb
Added "runtime.py", a file that is executed in python thread in runtime, before handling python_eval FBs requests. Added small python editor taken from wxPython demo, and appropriate icon and button to launch it.
etisserant
parents:
280
diff
changeset
|
944 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
945 |
return ([(C_file_name, self.plcCFLAGS) |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
946 |
for C_file_name in self.PLCGeneratedCFiles], |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
947 |
"", # no ldflags |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
948 |
False) # do not expose retreive/publish calls |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
949 |
|
203 | 950 |
def ResetIECProgramsAndVariables(self): |
951 |
""" |
|
952 |
Reset variable and program list that are parsed from |
|
953 |
CSV file generated by IEC2C compiler. |
|
954 |
""" |
|
955 |
self._ProgramList = None |
|
956 |
self._VariablesList = None |
|
1432
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
957 |
self._DbgVariablesList = None |
532
a822b0b64252
Fixed startin debugger with non empty debug variable list
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
529
diff
changeset
|
958 |
self._IECPathToIdx = {} |
670
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
959 |
self._Ticktime = 0 |
235 | 960 |
self.TracedIECPath = [] |
1433
4a45f6642523
Moved trace buffer unpacking in the IDE. Latest traced variable samples are now passed as a single string
Edouard Tisserant
parents:
1432
diff
changeset
|
961 |
self.TracedIECTypes = [] |
235 | 962 |
|
203 | 963 |
def GetIECProgramsAndVariables(self): |
964 |
""" |
|
965 |
Parse CSV-like file VARIABLES.csv resulting from IEC2C compiler. |
|
966 |
Each section is marked with a line staring with '//' |
|
967 |
list of all variables used in various POUs |
|
968 |
""" |
|
969 |
if self._ProgramList is None or self._VariablesList is None: |
|
970 |
try: |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
971 |
csvfile = os.path.join(self._getBuildPath(), "VARIABLES.csv") |
203 | 972 |
# describes CSV columns |
973 |
ProgramsListAttributeName = ["num", "C_path", "type"] |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
974 |
VariablesListAttributeName = [ |
3396
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
975 |
"num", "vartype", "IEC_path", "C_path", "type", "derived", "retain"] |
203 | 976 |
self._ProgramList = [] |
977 |
self._VariablesList = [] |
|
1432
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
978 |
self._DbgVariablesList = [] |
203 | 979 |
self._IECPathToIdx = {} |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
980 |
|
203 | 981 |
# Separate sections |
982 |
ListGroup = [] |
|
2441
c553769a65af
python3 support: pylint, W1659 # (xreadlines-attribute) Accessing a removed xreadlines attribute
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2439
diff
changeset
|
983 |
for line in open(csvfile, 'r').readlines(): |
203 | 984 |
strippedline = line.strip() |
985 |
if strippedline.startswith("//"): |
|
986 |
# Start new section |
|
987 |
ListGroup.append([]) |
|
988 |
elif len(strippedline) > 0 and len(ListGroup) > 0: |
|
989 |
# append to this section |
|
990 |
ListGroup[-1].append(strippedline) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
991 |
|
203 | 992 |
# first section contains programs |
993 |
for line in ListGroup[0]: |
|
994 |
# Split and Maps each field to dictionnary entries |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
995 |
attrs = dict( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
996 |
zip(ProgramsListAttributeName, line.strip().split(';'))) |
1722
89824afffef2
fix some typos
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1708
diff
changeset
|
997 |
# Truncate "C_path" to remove conf an resources names |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
998 |
attrs["C_path"] = '__'.join( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
999 |
attrs["C_path"].split(".", 2)[1:]) |
203 | 1000 |
# Push this dictionnary into result. |
1001 |
self._ProgramList.append(attrs) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1002 |
|
203 | 1003 |
# second section contains all variables |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1004 |
config_FBs = {} |
1432
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
1005 |
Idx = 0 |
203 | 1006 |
for line in ListGroup[1]: |
1007 |
# Split and Maps each field to dictionnary entries |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1008 |
attrs = dict( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1009 |
zip(VariablesListAttributeName, line.strip().split(';'))) |
1722
89824afffef2
fix some typos
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1708
diff
changeset
|
1010 |
# Truncate "C_path" to remove conf an resources names |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1011 |
parts = attrs["C_path"].split(".", 2) |
639
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
1012 |
if len(parts) > 2: |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1013 |
config_FB = config_FBs.get(tuple(parts[:2])) |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1014 |
if config_FB: |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1015 |
parts = [config_FB] + parts[2:] |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1016 |
attrs["C_path"] = '.'.join(parts) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1017 |
else: |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1018 |
attrs["C_path"] = '__'.join(parts[1:]) |
639
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
1019 |
else: |
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
1020 |
attrs["C_path"] = '__'.join(parts) |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1021 |
if attrs["vartype"] == "FB": |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1022 |
config_FBs[tuple(parts)] = attrs["C_path"] |
1517 | 1023 |
if attrs["vartype"] != "FB" and attrs["type"] in DebugTypesSize: |
1432
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
1024 |
# Push this dictionnary into result. |
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
1025 |
self._DbgVariablesList.append(attrs) |
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
1026 |
# Fill in IEC<->C translation dicts |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1027 |
IEC_path = attrs["IEC_path"] |
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1028 |
self._IECPathToIdx[IEC_path] = (Idx, attrs["type"]) |
1432
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
1029 |
# Ignores numbers given in CSV file |
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
1030 |
# Idx=int(attrs["num"]) |
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
1031 |
# Count variables only, ignore FBs |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1032 |
Idx += 1 |
203 | 1033 |
self._VariablesList.append(attrs) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1034 |
|
670
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1035 |
# third section contains ticktime |
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1036 |
if len(ListGroup) > 2: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1037 |
self._Ticktime = int(ListGroup[2][0]) |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1038 |
|
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1039 |
except Exception: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1040 |
self.logger.write_error( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1041 |
_("Cannot open/parse VARIABLES.csv!\n")) |
203 | 1042 |
self.logger.write_error(traceback.format_exc()) |
1043 |
self.ResetIECProgramsAndVariables() |
|
1044 |
return False |
|
1045 |
||
1046 |
return True |
|
1047 |
||
1048 |
def Generate_plc_debugger(self): |
|
1049 |
""" |
|
1050 |
Generate trace/debug code out of PLC variable list |
|
1051 |
""" |
|
1052 |
self.GetIECProgramsAndVariables() |
|
1053 |
||
1054 |
# prepare debug code |
|
1432
8872223a675b
Optimized plc_debug.c generated code. Should produce smaller code size. Added statically initialized array for PLC tracable variable description.
Edouard Tisserant
parents:
1430
diff
changeset
|
1055 |
variable_decl_array = [] |
3396
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1056 |
retain_indexes = [] |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1057 |
for i, v in enumerate(self._DbgVariablesList): |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1058 |
variable_decl_array.append( |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1059 |
"{&(%(C_path)s), " % v + |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1060 |
{ |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1061 |
"EXT": "%(type)s_P_ENUM", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1062 |
"IN": "%(type)s_P_ENUM", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1063 |
"MEM": "%(type)s_O_ENUM", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1064 |
"OUT": "%(type)s_O_ENUM", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1065 |
"VAR": "%(type)s_ENUM" |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1066 |
}[v["vartype"]] % v + |
3396
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1067 |
"}") |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1068 |
|
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1069 |
if v["retain"] == "1": |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1070 |
retain_indexes.append("/* "+v["C_path"]+" */ "+str(i)) |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1071 |
|
1430 | 1072 |
debug_code = targets.GetCode("plc_debug.c") % { |
1777
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1073 |
"programs_declarations": "\n".join(["extern %(type)s %(C_path)s;" % |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1074 |
p for p in self._ProgramList]), |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1075 |
"extern_variables_declarations": "\n".join([ |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1076 |
{ |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1077 |
"EXT": "extern __IEC_%(type)s_p %(C_path)s;", |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1078 |
"IN": "extern __IEC_%(type)s_p %(C_path)s;", |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1079 |
"MEM": "extern __IEC_%(type)s_p %(C_path)s;", |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1080 |
"OUT": "extern __IEC_%(type)s_p %(C_path)s;", |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1081 |
"VAR": "extern __IEC_%(type)s_t %(C_path)s;", |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1082 |
"FB": "extern %(type)s %(C_path)s;" |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1083 |
}[v["vartype"]] % v |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1084 |
for v in self._VariablesList if v["C_path"].find('.') < 0]), |
2632
534387caf43d
variable access code moved from plc_debug.c to targets/var_access.c for easiewr re-use in ext.
Edouard Tisserant
parents:
2631
diff
changeset
|
1085 |
"variable_decl_array": ",\n".join(variable_decl_array), |
3396
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1086 |
"retain_vardsc_index_array": ",\n".join(retain_indexes), |
2632
534387caf43d
variable access code moved from plc_debug.c to targets/var_access.c for easiewr re-use in ext.
Edouard Tisserant
parents:
2631
diff
changeset
|
1087 |
"var_access_code": targets.GetCode("var_access.c") |
1777
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1088 |
} |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1089 |
|
203 | 1090 |
return debug_code |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1091 |
|
985
cd8dadcef426
Re-organized C code templates for plc_main. Moved logging out of plc_debug. Factorized redundant _common_ticktime external declaration
Edouard Tisserant
parents:
978
diff
changeset
|
1092 |
def Generate_plc_main(self): |
203 | 1093 |
""" |
717 | 1094 |
Use confnodes layout given in LocationCFilesAndCFLAGS to |
1095 |
generate glue code that dispatch calls to all confnodes |
|
203 | 1096 |
""" |
1097 |
# filter location that are related to code that will be called |
|
1098 |
# in retreive, publish, init, cleanup |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1099 |
locstrs = map(lambda x: "_".join(map(str, x)), |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
1100 |
[loc for loc, _Cfiles, DoCalls in |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1101 |
self.LocationCFilesAndCFLAGS if loc and DoCalls]) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1102 |
|
203 | 1103 |
# Generate main, based on template |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1104 |
if not self.BeremizRoot.getDisable_Extensions(): |
1430 | 1105 |
plc_main_code = targets.GetCode("plc_main_head.c") % { |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1106 |
"calls_prototypes": "\n".join([( |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1107 |
"int __init_%(s)s(int argc,char **argv);\n" + |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1108 |
"void __cleanup_%(s)s(void);\n" + |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1109 |
"void __retrieve_%(s)s(void);\n" + |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1110 |
"void __publish_%(s)s(void);") % {'s': locstr} for locstr in locstrs]), |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1111 |
"retrieve_calls": "\n ".join([ |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1112 |
"__retrieve_%s();" % locstr for locstr in locstrs]), |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1113 |
"publish_calls": "\n ".join([ # Call publish in reverse order |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1114 |
"__publish_%s();" % locstrs[i - 1] for i in xrange(len(locstrs), 0, -1)]), |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1115 |
"init_calls": "\n ".join([ |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1116 |
"init_level=%d; " % (i + 1) + |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1117 |
"if((res = __init_%s(argc,argv))){" % locstr + |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1118 |
# "printf(\"%s\"); "%locstr + #for debug |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1119 |
"return res;}" for i, locstr in enumerate(locstrs)]), |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1120 |
"cleanup_calls": "\n ".join([ |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1121 |
"if(init_level >= %d) " % i + |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1122 |
"__cleanup_%s();" % locstrs[i - 1] for i in xrange(len(locstrs), 0, -1)]) |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1123 |
} |
338 | 1124 |
else: |
1430 | 1125 |
plc_main_code = targets.GetCode("plc_main_head.c") % { |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1126 |
"calls_prototypes": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1127 |
"retrieve_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1128 |
"publish_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1129 |
"init_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1130 |
"cleanup_calls": "\n" |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1131 |
} |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1132 |
plc_main_code += targets.GetTargetCode( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1133 |
self.GetTarget().getcontent().getLocalTag()) |
1430 | 1134 |
plc_main_code += targets.GetCode("plc_main_tail.c") |
203 | 1135 |
return plc_main_code |
1136 |
||
623
8cdb533c3c7a
A few new keyboard shortcuts : F4=stop, F5=run, F5=transfer, F7=connect
Edouard Tisserant
parents:
619
diff
changeset
|
1137 |
def _Build(self): |
20 | 1138 |
""" |
717 | 1139 |
Method called by user to (re)build SoftPLC and confnode tree |
20 | 1140 |
""" |
395 | 1141 |
if self.AppFrame is not None: |
1142 |
self.AppFrame.ClearErrors() |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1143 |
self._CloseView(self._IECCodeView) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1144 |
|
20 | 1145 |
buildpath = self._getBuildPath() |
1146 |
||
1147 |
# Eventually create build dir |
|
18 | 1148 |
if not os.path.exists(buildpath): |
1149 |
os.mkdir(buildpath) |
|
203 | 1150 |
|
1151 |
self.logger.flush() |
|
361 | 1152 |
self.logger.write(_("Start build in %s\n") % buildpath) |
203 | 1153 |
|
1154 |
# Generate SoftPLC IEC code |
|
1155 |
IECGenRes = self._Generate_SoftPLC() |
|
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1156 |
self.UpdateButtons() |
203 | 1157 |
|
1158 |
# If IEC code gen fail, bail out. |
|
1159 |
if not IECGenRes: |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1160 |
self.logger.write_error(_("PLC code generation failed !\n")) |
20 | 1161 |
return False |
1162 |
||
203 | 1163 |
# Reset variable and program list that are parsed from |
1164 |
# CSV file generated by IEC2C compiler. |
|
1165 |
self.ResetIECProgramsAndVariables() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1166 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1167 |
# Collect platform specific C code |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1168 |
# Code and other files from extension |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1169 |
if not self._Generate_runtime(): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1170 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1171 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1172 |
# Get current or fresh builder |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1173 |
builder = self.GetBuilder() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1174 |
if builder is None: |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1175 |
self.logger.write_error(_("Fatal : cannot get builder.\n")) |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1176 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1177 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1178 |
# Build |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1179 |
try: |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1180 |
if not builder.build(): |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1181 |
self.logger.write_error(_("C Build failed.\n")) |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1182 |
return False |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1183 |
except Exception: |
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1184 |
builder.ResetBinaryMD5() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1185 |
self.logger.write_error(_("C Build crashed !\n")) |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1186 |
self.logger.write_error(traceback.format_exc()) |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1187 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1188 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1189 |
self.logger.write(_("Successfully built.\n")) |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1190 |
# Update GUI status about need for transfer |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1191 |
self.CompareLocalAndRemotePLC() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1192 |
return True |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1193 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1194 |
def _Generate_runtime(self): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1195 |
buildpath = self._getBuildPath() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1196 |
|
2631
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1197 |
# CTN code gen is expected AFTER Libraries code gen, |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1198 |
# at least SVGHMI relies on it. |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1199 |
|
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1200 |
# Generate C code and compilation params from liraries |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1201 |
try: |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1202 |
LibCFilesAndCFLAGS, LibLDFLAGS, LibExtraFiles = self.GetLibrariesCCode( |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1203 |
buildpath) |
2640
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1204 |
except UserAddressedException as e: |
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1205 |
self.logger.write_error(e.message) |
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1206 |
return False |
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1207 |
except Exception as e: |
2631
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1208 |
self.logger.write_error( |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1209 |
_("Runtime library extensions C code generation failed !\n")) |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1210 |
self.logger.write_error(traceback.format_exc()) |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1211 |
return False |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1212 |
|
717 | 1213 |
# Generate C code and compilation params from confnode hierarchy |
24 | 1214 |
try: |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1215 |
CTNLocationCFilesAndCFLAGS, CTNLDFLAGS, CTNExtraFiles = self._Generate_C( |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1216 |
buildpath, |
203 | 1217 |
self.PLCGeneratedLocatedVars) |
2640
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1218 |
except UserAddressedException as e: |
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1219 |
self.logger.write_error(e.message) |
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1220 |
return False |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1221 |
except Exception: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1222 |
self.logger.write_error( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1223 |
_("Runtime IO extensions C code generation failed !\n")) |
203 | 1224 |
self.logger.write_error(traceback.format_exc()) |
24 | 1225 |
return False |
18 | 1226 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1227 |
self.LocationCFilesAndCFLAGS = LibCFilesAndCFLAGS + \ |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1228 |
CTNLocationCFilesAndCFLAGS |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1229 |
self.LDFLAGS = CTNLDFLAGS + LibLDFLAGS |
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1230 |
ExtraFiles = CTNExtraFiles + LibExtraFiles |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1231 |
|
361 | 1232 |
# Get temporary directory path |
203 | 1233 |
extrafilespath = self._getExtraFilesPath() |
1234 |
# Remove old directory |
|
1235 |
if os.path.exists(extrafilespath): |
|
1236 |
shutil.rmtree(extrafilespath) |
|
1237 |
# Recreate directory |
|
1238 |
os.mkdir(extrafilespath) |
|
1239 |
# Then write the files |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1240 |
for fname, fobject in ExtraFiles: |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1241 |
fpath = os.path.join(extrafilespath, fname) |
203 | 1242 |
open(fpath, "wb").write(fobject.read()) |
1243 |
# Now we can forget ExtraFiles (will close files object) |
|
1244 |
del ExtraFiles |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1245 |
|
1001 |