author | Andrey Skvortsov <andrej.skvortzov@gmail.com> |
Fri, 28 Sep 2018 13:17:30 +0300 | |
changeset 2351 | 467f6daff4e9 |
parent 2248 | d9353e440887 |
child 2263 | 5227f54f6369 |
child 2415 | f7d8891fe708 |
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 |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
39 |
from types import ListType |
1997 | 40 |
from threading import Timer |
20 | 41 |
from datetime import datetime |
725 | 42 |
from weakref import WeakKeyDictionary |
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
|
43 |
from itertools import izip |
725 | 44 |
|
1832
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
45 |
import wx |
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
46 |
|
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
47 |
import features |
725 | 48 |
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
|
49 |
import util.paths as paths |
815
e4f24593a758
Adding support for extending internationalization to extensions
laurent
parents:
814
diff
changeset
|
50 |
from util.misc import CheckPathPerm, GetClassImporter |
742
41a4a560406c
Fixed runtime problems with python 2.6 without wx installed
Edouard Tisserant
parents:
740
diff
changeset
|
51 |
from util.MiniTextControler import MiniTextControler |
726 | 52 |
from util.ProcessLogger import ProcessLogger |
814 | 53 |
from util.BitmapLibrary import GetBitmap |
54 |
from editors.FileManagementPanel import FileManagementPanel |
|
55 |
from editors.ProjectNodeEditor import ProjectNodeEditor |
|
815
e4f24593a758
Adding support for extending internationalization to extensions
laurent
parents:
814
diff
changeset
|
56 |
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
|
57 |
from editors.DebugViewer import DebugViewer, REFRESH_PERIOD |
814 | 58 |
from dialogs import DiscoveryDialog |
738 | 59 |
from PLCControler import PLCControler |
725 | 60 |
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
|
61 |
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
|
62 |
import targets |
1902
2b7e2db31d81
Clarify licensing, and packaging of runtime only files :
Edouard Tisserant
parents:
1881
diff
changeset
|
63 |
from runtime.typemapping import DebugTypesSize, UnpackDebugBuffer |
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
|
64 |
from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage |
725 | 65 |
|
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1672
diff
changeset
|
66 |
base_folder = paths.AbsParentDir(__file__) |
20 | 67 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
68 |
MATIEC_ERROR_MODEL = re.compile( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
69 |
".*\.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
|
70 |
|
738 | 71 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
72 |
def ExtractChildrenTypesFromCatalog(catalog): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
73 |
children_types = [] |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
74 |
for n, d, _h, c in catalog: |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
75 |
if isinstance(c, ListType): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
76 |
children_types.extend(ExtractChildrenTypesFromCatalog(c)) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
77 |
else: |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
78 |
children_types.append((n, GetClassImporter(c), d)) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
79 |
return children_types |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
80 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
81 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
82 |
def ExtractMenuItemsFromCatalog(catalog): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
83 |
menu_items = [] |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
84 |
for n, d, h, c in catalog: |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
85 |
if isinstance(c, ListType): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
86 |
children = ExtractMenuItemsFromCatalog(c) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
87 |
else: |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
88 |
children = [] |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
89 |
menu_items.append((n, d, h, children)) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
90 |
return menu_items |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
91 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
92 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
93 |
def GetAddMenuItems(): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
94 |
return ExtractMenuItemsFromCatalog(features.catalog) |
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 |
|
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
|
97 |
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
|
98 |
|
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
99 |
def __init__(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
|
100 |
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
|
101 |
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
|
102 |
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
|
103 |
self.ieclib_c_path = self.findLibCPath() |
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 |
|
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
|
105 |
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
|
106 |
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
|
107 |
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
|
108 |
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
|
109 |
path = p |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
110 |
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
|
111 |
return path |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
112 |
|
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
|
113 |
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
|
114 |
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
|
115 |
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
|
116 |
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
|
117 |
] |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
118 |
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
|
119 |
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
|
120 |
|
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 |
# 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
|
122 |
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
|
123 |
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
|
124 |
|
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 |
return cmd |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
126 |
|
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
|
127 |
def findLibPath(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
128 |
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
|
129 |
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
|
130 |
"/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
|
131 |
] |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
132 |
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
|
133 |
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
|
134 |
return path |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
135 |
|
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
136 |
def findLibCPath(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
137 |
path = None |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
138 |
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
|
139 |
paths = [ |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
140 |
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
|
141 |
self.ieclib_path] |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
142 |
path = self.findObject( |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
143 |
paths, |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
144 |
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
|
145 |
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
|
146 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
147 |
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
|
148 |
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
|
149 |
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
|
150 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
151 |
buildopt = "" |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
152 |
try: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
153 |
# Invoke compiler. |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
154 |
# Output files are listed to stdout, errors to stderr |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
155 |
_status, result, _err_result = ProcessLogger(None, buildcmd, |
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
156 |
no_stdout=True, |
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
157 |
no_stderr=True).spin() |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
158 |
except Exception: |
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
159 |
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
|
160 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
161 |
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
|
162 |
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
|
163 |
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
|
164 |
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
|
165 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
166 |
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
|
167 |
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
|
168 |
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
|
169 |
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
|
170 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
171 |
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
|
172 |
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
|
173 |
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
|
174 |
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
|
175 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
176 |
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
|
177 |
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
|
178 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
179 |
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
|
180 |
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
|
181 |
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
|
182 |
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
|
183 |
|
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
|
184 |
|
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
185 |
def GetProjectControllerXSD(): |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
186 |
XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
187 |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
188 |
<xsd:element name="BeremizRoot"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
189 |
<xsd:complexType> |
86 | 190 |
<xsd:sequence> |
191 |
<xsd:element name="TargetType"> |
|
192 |
<xsd:complexType> |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
193 |
<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
|
194 |
""" + 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
|
195 |
</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
|
196 |
</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
|
197 |
</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
|
198 |
<xsd:element name="Libraries" minOccurs="0"> |
730 | 199 |
<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
|
200 |
""" + "\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
|
201 |
'"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
|
202 |
'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
|
203 |
('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
|
204 |
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
|
205 |
</xsd:complexType> |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
206 |
</xsd:element>""") if len(features.libraries) > 0 else '') + """ |
86 | 207 |
</xsd:sequence> |
204
f572ab819769
remove URI_location from XSD targets and add to pluginroot XSD
greg
parents:
203
diff
changeset
|
208 |
<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
|
209 |
<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
|
210 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
211 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
212 |
</xsd:schema> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
213 |
""" |
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
214 |
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
|
215 |
|
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
216 |
|
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
217 |
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
|
218 |
|
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
219 |
""" |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
220 |
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
|
221 |
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
|
222 |
- 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
|
223 |
- 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
|
224 |
- 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
|
225 |
- 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
|
226 |
- ... |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
227 |
|
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
228 |
""" |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
229 |
# 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
|
230 |
# 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
|
231 |
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
|
232 |
XSD = GetProjectControllerXSD() |
738 | 233 |
EditorType = ProjectNodeEditor |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
234 |
iec2c_cfg = None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
235 |
|
290
3bd617ae7a05
Local Runtime (LOCAL://) now launched "on demand"
etisserant
parents:
288
diff
changeset
|
236 |
def __init__(self, frame, logger): |
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
237 |
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
|
238 |
ConfigTreeNode.__init__(self) |
227
48c13b84505c
- Some improovements in debug data feedback data
etisserant
parents:
222
diff
changeset
|
239 |
|
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
240 |
if ProjectController.iec2c_cfg is None: |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
241 |
ProjectController.iec2c_cfg = Iec2CSettings() |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
242 |
|
20 | 243 |
self.MandatoryParams = None |
203 | 244 |
self._builder = None |
245 |
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
|
246 |
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
|
247 |
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
|
248 |
self.DebugTicks = [] |
978 | 249 |
self.SetAppFrame(frame, logger) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
250 |
|
203 | 251 |
# Setup debug information |
227
48c13b84505c
- Some improovements in debug data feedback data
etisserant
parents:
222
diff
changeset
|
252 |
self.IECdebug_datas = {} |
222
d0f7d36bf241
Added lock to avoid variable subsciption concurrent to transmission to PLC
etisserant
parents:
217
diff
changeset
|
253 |
|
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
254 |
self.DebugTimer = None |
203 | 255 |
self.ResetIECProgramsAndVariables() |
256 |
||
118 | 257 |
# 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
|
258 |
self.ChangesToSave = False |
23 | 259 |
# root have no parent |
718 | 260 |
self.CTNParent = None |
717 | 261 |
# Keep track of the confnode type name |
718 | 262 |
self.CTNType = "Beremiz" |
263 |
self.Children = {} |
|
738 | 264 |
self._View = None |
717 | 265 |
# After __init__ root confnode is not valid |
20 | 266 |
self.ProjectPath = None |
427 | 267 |
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
|
268 |
self.debug_break = False |
350
a3a5561bde1d
- now call load, start, free PLC from the python Thread
greg
parents:
348
diff
changeset
|
269 |
self.previous_plcstate = None |
717 | 270 |
# copy ConfNodeMethods 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
|
271 |
self.StatusMethods = [dic.copy() for dic in self.StatusMethods] |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
272 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
273 |
def __del__(self): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
274 |
if self.DebugTimer: |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
275 |
self.DebugTimer.cancel() |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
276 |
self.KillDebugThread() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
277 |
|
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
278 |
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
|
279 |
self.Libraries = [] |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
280 |
TypeStack = [] |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
281 |
for libname, clsname, _default in features.libraries: |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
282 |
if self.BeremizRoot.Libraries is not None and \ |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
283 |
getattr(self.BeremizRoot.Libraries, |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
284 |
"Enable_" + libname + "_Library"): |
732 | 285 |
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
|
286 |
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
|
287 |
self.Libraries.append(Lib) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
288 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
289 |
def SetAppFrame(self, frame, logger): |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
290 |
self.AppFrame = frame |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
291 |
self.logger = logger |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
292 |
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
|
293 |
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
|
294 |
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
|
295 |
self.DispatchDebugValuesTimer = None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
296 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
297 |
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
|
298 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
299 |
# 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
|
300 |
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
|
301 |
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
|
302 |
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
|
303 |
self.StatusTimer) |
1395
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
304 |
|
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
305 |
if self._connector is not None: |
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
306 |
frame.LogViewer.SetLogSource(self._connector) |
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
307 |
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
|
308 |
|
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
|
309 |
# 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
|
310 |
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
|
311 |
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
|
312 |
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
|
313 |
self.DispatchDebugValuesTimer) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
314 |
|
717 | 315 |
self.RefreshConfNodesBlockLists() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
316 |
|
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
317 |
def ResetAppFrame(self, logger): |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
318 |
if self.AppFrame is not None: |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
319 |
self.AppFrame.Unbind(wx.EVT_TIMER, self.StatusTimer) |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
320 |
self.StatusTimer = None |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
321 |
self.AppFrame = None |
1793
c2f48d791d9f
fix bug with unfinished debug thread
Surkov Sergey <surkovsv93@gmail.com>
parents:
1789
diff
changeset
|
322 |
self.KillDebugThread() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
323 |
self.logger = logger |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
324 |
|
738 | 325 |
def CTNName(self): |
326 |
return "Project" |
|
327 |
||
718 | 328 |
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
|
329 |
return self.ChangesToSave or not self.ProjectIsSaved() |
118 | 330 |
|
718 | 331 |
def CTNFullName(self): |
656
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
655
diff
changeset
|
332 |
return "" |
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
655
diff
changeset
|
333 |
|
718 | 334 |
def GetCTRoot(self): |
23 | 335 |
return self |
336 |
||
418 | 337 |
def GetIECLibPath(self): |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
338 |
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
|
339 |
|
418 | 340 |
def GetIEC2cPath(self): |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
341 |
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
|
342 |
|
23 | 343 |
def GetCurrentLocation(self): |
344 |
return () |
|
47
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
345 |
|
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
346 |
def GetCurrentName(self): |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
347 |
return "" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
348 |
|
47
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
349 |
def _GetCurrentName(self): |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
350 |
return "" |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
351 |
|
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
352 |
def GetProjectPath(self): |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
353 |
return self.ProjectPath |
51
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
354 |
|
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
355 |
def GetProjectName(self): |
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
356 |
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
|
357 |
|
781
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
358 |
def GetIconName(self): |
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
359 |
return "PROJECT" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
360 |
|
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
361 |
def GetDefaultTargetName(self): |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
362 |
if wx.Platform == '__WXMSW__': |
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
363 |
return "Win32" |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
364 |
else: |
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
365 |
return "Linux" |
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
366 |
|
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
367 |
def GetTarget(self): |
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
368 |
target = self.BeremizRoot.getTargetType() |
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
369 |
if target.getcontent() is None: |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
370 |
temp_root = self.Parser.CreateRoot() |
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
371 |
target = self.Parser.CreateElement("TargetType", "BeremizRoot") |
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
372 |
temp_root.setTargetType(target) |
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
373 |
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
|
374 |
target.setcontent( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
375 |
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
|
376 |
return target |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
377 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1742
diff
changeset
|
378 |
def GetParamsAttributes(self, path=None): |
717 | 379 |
params = ConfigTreeNode.GetParamsAttributes(self, path) |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
380 |
if params[0]["name"] == "BeremizRoot": |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
381 |
for child in params[0]["children"]: |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
382 |
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
|
383 |
child.update( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
384 |
self.GetTarget().getElementInfos("TargetType")) |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
385 |
return params |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
386 |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
387 |
def SetParamsAttribute(self, path, value): |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
388 |
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
|
389 |
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
|
390 |
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
|
391 |
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
|
392 |
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
|
393 |
return res |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
394 |
|
427 | 395 |
# helper func to check project path write permission |
396 |
def CheckProjectPathPerm(self, dosave=True): |
|
397 |
if CheckPathPerm(self.ProjectPath): |
|
398 |
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
|
399 |
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
|
400 |
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
|
401 |
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
|
402 |
_('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
|
403 |
_('Error'), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
404 |
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
|
405 |
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
|
406 |
dialog.Destroy() |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
407 |
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
|
408 |
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
|
409 |
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
|
410 |
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
|
411 |
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
|
412 |
return True |
427 | 413 |
return False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
414 |
|
1061 | 415 |
def _getProjectFilesPath(self, project_path=None): |
416 |
if project_path is not None: |
|
417 |
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
|
418 |
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
|
419 |
self.GetProjectPath(), "project_files") |
757
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
420 |
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
|
421 |
os.mkdir(projectfiles_path) |
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
422 |
return projectfiles_path |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
423 |
|
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
424 |
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
|
425 |
self.ProjectAddConfiguration(config_name) |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
426 |
self.ProjectAddConfigurationResource(config_name, res_name) |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
427 |
|
1708
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
428 |
def SetProjectDefaultConfiguration(self): |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
429 |
# 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
|
430 |
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
|
431 |
self.GetProjectMainConfigurationName()) |
1708
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
432 |
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
|
433 |
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
|
434 |
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
|
435 |
def_task = [ |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
436 |
{'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
|
437 |
def_instance = [ |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
438 |
{'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
|
439 |
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
|
440 |
|
256 | 441 |
def NewProject(self, ProjectPath, BuildPath=None): |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
442 |
""" |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
443 |
Create a new project in an empty folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
444 |
@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
|
445 |
@param PLCParams: properties of the PLCOpen program created |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
446 |
""" |
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
447 |
# Verify that chosen folder is empty |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
448 |
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
|
449 |
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
|
450 |
|
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
451 |
# Create PLCOpen program |
738 | 452 |
self.CreateNewProject( |
453 |
{"projectName": _("Unnamed"), |
|
454 |
"productName": _("Unnamed"), |
|
801
435e49e80832
Update list of messages to be translated for internationalization and french translations
laurent
parents:
796
diff
changeset
|
455 |
"productVersion": "1", |
738 | 456 |
"companyName": _("Unknown"), |
457 |
"creationDateTime": datetime(*localtime()[:6])}) |
|
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
458 |
self.AddProjectDefaultConfiguration() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
459 |
|
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
460 |
# Change XSD into class members |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
461 |
self._AddParamsMembers() |
718 | 462 |
self.Children = {} |
717 | 463 |
# 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
|
464 |
self.ProjectPath = ProjectPath |
427 | 465 |
self._setBuildPath(BuildPath) |
717 | 466 |
# get confnodes bloclist (is that usefull at project creation?) |
467 |
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
|
468 |
# 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
|
469 |
self.SaveProject() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
470 |
return None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
471 |
|
256 | 472 |
def LoadProject(self, ProjectPath, BuildPath=None): |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
473 |
""" |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
474 |
Load a project contained in a folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
475 |
@param ProjectPath: path of the project folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
476 |
""" |
190 | 477 |
if os.path.basename(ProjectPath) == "": |
478 |
ProjectPath = os.path.dirname(ProjectPath) |
|
978 | 479 |
# Verify that project contains a PLCOpen program |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
480 |
plc_file = os.path.join(ProjectPath, "plc.xml") |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
481 |
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
|
482 |
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
|
483 |
# 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
|
484 |
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
|
485 |
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
|
486 |
if self.Project is not None: |
1581
2295fdc5c271
fix translation strings with multiple parameters
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1579
diff
changeset
|
487 |
(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
|
488 |
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
|
489 |
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
|
490 |
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
|
491 |
return error, False |
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
492 |
if len(self.GetProjectConfigNames()) == 0: |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
493 |
self.AddProjectDefaultConfiguration() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
494 |
# Change XSD into class members |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
495 |
self._AddParamsMembers() |
718 | 496 |
self.Children = {} |
717 | 497 |
# 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
|
498 |
self.ProjectPath = ProjectPath |
427 | 499 |
self._setBuildPath(BuildPath) |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
500 |
# If dir have already be made, and file exist |
718 | 501 |
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
|
502 |
# Load the confnode.xml file into parameters members |
203 | 503 |
result = self.LoadXMLParams() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
504 |
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
|
505 |
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
|
506 |
# Load and init all the children |
718 | 507 |
self.LoadChildren() |
717 | 508 |
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
|
509 |
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
|
510 |
return None, False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
511 |
|
738 | 512 |
def RecursiveConfNodeInfos(self, confnode): |
513 |
values = [] |
|
514 |
for CTNChild in confnode.IECSortedChildren(): |
|
515 |
values.append( |
|
516 |
{"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
|
517 |
CTNChild.CTNName()), |
1105
f0e5b475a074
Fixed bug when modifying ConfTreeNode IEC Channel
Laurent Bessard
parents:
1089
diff
changeset
|
518 |
"tagname": CTNChild.CTNFullName(), |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
519 |
"type": ITEM_CONFNODE, |
738 | 520 |
"confnode": CTNChild, |
781
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
521 |
"icon": CTNChild.GetIconName(), |
738 | 522 |
"values": self.RecursiveConfNodeInfos(CTNChild)}) |
523 |
return values |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
524 |
|
738 | 525 |
def GetProjectInfos(self): |
526 |
infos = PLCControler.GetProjectInfos(self) |
|
527 |
configurations = infos["values"].pop(-1) |
|
528 |
resources = None |
|
529 |
for config_infos in configurations["values"]: |
|
530 |
if resources is None: |
|
531 |
resources = config_infos["values"][0] |
|
532 |
else: |
|
533 |
resources["values"].extend(config_infos["values"][0]["values"]) |
|
534 |
if resources is not None: |
|
535 |
infos["values"].append(resources) |
|
536 |
infos["values"].extend(self.RecursiveConfNodeInfos(self)) |
|
537 |
return infos |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
538 |
|
403 | 539 |
def CloseProject(self): |
718 | 540 |
self.ClearChildren() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
541 |
self.ResetAppFrame(None) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
542 |
|
1606
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
543 |
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
|
544 |
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
|
545 |
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
|
546 |
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
|
547 |
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
|
548 |
dialog.ShowModal() |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
549 |
return False |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
550 |
else: |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
551 |
plc_file = os.path.join(new_project_path, "plc.xml") |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
552 |
if os.path.isfile(plc_file): |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
553 |
message = ( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
554 |
_("Selected directory already contains another project. Overwrite? \n")) |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
555 |
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
|
556 |
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
|
557 |
answer = dialog.ShowModal() |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
558 |
return answer == wx.ID_YES |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
559 |
return True |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
560 |
|
1061 | 561 |
def SaveProject(self, from_project_path=None): |
427 | 562 |
if self.CheckProjectPathPerm(False): |
1061 | 563 |
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
|
564 |
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
|
565 |
from_project_path) |
1061 | 566 |
if os.path.isdir(old_projectfiles_path): |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
567 |
shutil.copytree(old_projectfiles_path, |
1061 | 568 |
self._getProjectFilesPath(self.ProjectPath)) |
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
569 |
self.SaveXMLFile(os.path.join(self.ProjectPath, 'plc.xml')) |
1061 | 570 |
result = self.CTNRequestSave(from_project_path) |
427 | 571 |
if result: |
572 |
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
|
573 |
|
1061 | 574 |
def SaveProjectAs(self): |
427 | 575 |
# Ask user to choose a path with write permissions |
529 | 576 |
if wx.Platform == '__WXMSW__': |
577 |
path = os.getenv("USERPROFILE") |
|
578 |
else: |
|
579 |
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
|
580 |
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
|
581 |
self.AppFrame, _("Choose a directory to save project"), path, wx.DD_NEW_DIR_BUTTON) |
427 | 582 |
answer = dirdialog.ShowModal() |
583 |
dirdialog.Destroy() |
|
584 |
if answer == wx.ID_OK: |
|
585 |
newprojectpath = dirdialog.GetPath() |
|
586 |
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
|
587 |
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
|
588 |
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
|
589 |
self.SaveProject(old_project_path) |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
590 |
self._setBuildPath(self.BuildPath) |
427 | 591 |
return True |
592 |
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
|
593 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
594 |
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
|
595 |
self.LoadLibraries() |
1746
45d6f5fba016
clean-up: fix PEP8 E202 whitespace before ')'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
596 |
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
|
597 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
598 |
def GetLibrariesSTCode(self): |
1746
45d6f5fba016
clean-up: fix PEP8 E202 whitespace before ')'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
599 |
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
|
600 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
601 |
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
|
602 |
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
|
603 |
return [], [], () |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
604 |
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
|
605 |
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
|
606 |
self.GetIECLibPath()) |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
607 |
LocatedCCodeAndFlags = [] |
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
608 |
Extras = [] |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
609 |
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
|
610 |
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
|
611 |
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
|
612 |
if len(res) > 2: |
869
abf90a44c265
Fix bug when more than one block library add extra python file
Laurent Bessard
parents:
842
diff
changeset
|
613 |
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
|
614 |
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
|
615 |
|
717 | 616 |
# Update PLCOpenEditor ConfNode Block types from loaded confnodes |
617 |
def RefreshConfNodesBlockLists(self): |
|
718 | 618 |
if getattr(self, "Children", None) is not None: |
717 | 619 |
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
|
620 |
self.AddConfNodeTypesList(self.GetLibrariesTypes()) |
395 | 621 |
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
|
622 |
self.AppFrame.RefreshLibraryPanel() |
395 | 623 |
self.AppFrame.RefreshEditor() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
624 |
|
443
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
625 |
# Update a PLCOpenEditor Pou variable location |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
626 |
def UpdateProjectVariableLocation(self, old_leading, new_leading): |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
627 |
self.Project.updateElementAddress(old_leading, new_leading) |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
628 |
self.BufferProject() |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
629 |
if self.AppFrame is not None: |
468 | 630 |
self.AppFrame.RefreshTitle() |
730 | 631 |
self.AppFrame.RefreshPouInstanceVariablesPanel() |
468 | 632 |
self.AppFrame.RefreshFileMenu() |
633 |
self.AppFrame.RefreshEditMenu() |
|
842 | 634 |
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
|
635 |
|
401
8106a853a7c7
Adding support for displaying plugins available variable into Beremiz plugin tree
laurent
parents:
396
diff
changeset
|
636 |
def GetVariableLocationTree(self): |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
637 |
''' |
717 | 638 |
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
|
639 |
|
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
640 |
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
|
641 |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
642 |
- 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
|
643 |
- 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
|
644 |
''' |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
645 |
children = [] |
718 | 646 |
for child in self.IECSortedChildren(): |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
647 |
children.append(child.GetVariableLocationTree()) |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
648 |
return children |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
649 |
|
717 | 650 |
def ConfNodePath(self): |
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1672
diff
changeset
|
651 |
return paths.AbsDir(__file__) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
652 |
|
718 | 653 |
def CTNPath(self, CTNName=None): |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
654 |
return self.ProjectPath |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
655 |
|
718 | 656 |
def ConfNodeXmlFilePath(self, CTNName=None): |
657 |
return os.path.join(self.CTNPath(CTNName), "beremiz.xml") |
|
18 | 658 |
|
669
472469f4d5ad
Adding support for loading datatypes defined in plugins to allow to use them in PLC program
laurent
parents:
661
diff
changeset
|
659 |
def ParentsTypesFactory(self): |
717 | 660 |
return self.ConfNodeTypesFactory() |
363
e0c4d3549369
Adding support for recursively generate STLibrary and BlockLibrary according to plugin tree
laurent
parents:
361
diff
changeset
|
661 |
|
427 | 662 |
def _setBuildPath(self, buildpath): |
663 |
self.BuildPath = buildpath |
|
664 |
self.DefaultBuildPath = None |
|
665 |
if self._builder is not None: |
|
666 |
self._builder.SetBuildPath(self._getBuildPath()) |
|
667 |
||
20 | 668 |
def _getBuildPath(self): |
427 | 669 |
# BuildPath is defined by user |
670 |
if self.BuildPath is not None: |
|
671 |
return self.BuildPath |
|
672 |
# BuildPath isn't defined by user but already created by default |
|
673 |
if self.DefaultBuildPath is not None: |
|
674 |
return self.DefaultBuildPath |
|
675 |
# Create a build path in project folder if user has permissions |
|
676 |
if CheckPathPerm(self.ProjectPath): |
|
677 |
self.DefaultBuildPath = os.path.join(self.ProjectPath, "build") |
|
678 |
# Create a build path in temp folder |
|
679 |
else: |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
680 |
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
|
681 |
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
|
682 |
|
427 | 683 |
if not os.path.exists(self.DefaultBuildPath): |
684 |
os.makedirs(self.DefaultBuildPath) |
|
685 |
return self.DefaultBuildPath |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
686 |
|
203 | 687 |
def _getExtraFilesPath(self): |
688 |
return os.path.join(self._getBuildPath(), "extra_files") |
|
689 |
||
20 | 690 |
def _getIECcodepath(self): |
691 |
# define name for IEC code file |
|
692 |
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
|
693 |
|
65 | 694 |
def _getIECgeneratedcodepath(self): |
695 |
# define name for IEC generated code file |
|
696 |
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
|
697 |
|
65 | 698 |
def _getIECrawcodepath(self): |
699 |
# define name for IEC raw code file |
|
718 | 700 |
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
|
701 |
|
97 | 702 |
def GetLocations(self): |
703 |
locations = [] |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
704 |
filepath = os.path.join(self._getBuildPath(), "LOCATED_VARIABLES.h") |
97 | 705 |
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
|
706 |
# 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
|
707 |
# 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
|
708 |
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
|
709 |
os.path.join(self._getBuildPath(), "LOCATED_VARIABLES.h")) |
97 | 710 |
# each line of LOCATED_VARIABLES.h declares a located variable |
711 |
lines = [line.strip() for line in location_file.readlines()] |
|
712 |
# 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
|
713 |
LOCATED_MODEL = re.compile( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
714 |
"__LOCATED_VAR\((?P<IEC_TYPE>[A-Z]*),(?P<NAME>[_A-Za-z0-9]*),(?P<DIR>[QMI])(?:,(?P<SIZE>[XBWDL]))?,(?P<LOC>[,0-9]*)\)") |
97 | 715 |
for line in lines: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
716 |
# If line match RE, |
97 | 717 |
result = LOCATED_MODEL.match(line) |
718 |
if result: |
|
719 |
# Get the resulting dict |
|
720 |
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
|
721 |
# 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
|
722 |
# integers |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
723 |
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
|
724 |
# set located size to 'X' if not given |
97 | 725 |
if not resdict['SIZE']: |
726 |
resdict['SIZE'] = 'X' |
|
727 |
# finally store into located variable list |
|
728 |
locations.append(resdict) |
|
729 |
return locations |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
730 |
|
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
731 |
def GetConfNodeGlobalInstances(self): |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
732 |
return self._GlobalInstances() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
733 |
|
203 | 734 |
def _Generate_SoftPLC(self): |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
735 |
if self._Generate_PLC_ST(): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
736 |
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
|
737 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
738 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
739 |
def _Generate_PLC_ST(self): |
20 | 740 |
""" |
64 | 741 |
Generate SoftPLC ST/IL/SFC code out of PLCOpenEditor controller, and compile it with IEC2C |
20 | 742 |
@param buildpath: path where files should be created |
743 |
""" |
|
744 |
||
717 | 745 |
# Update PLCOpenEditor ConfNode Block types before generate ST code |
746 |
self.RefreshConfNodesBlockLists() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
747 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
748 |
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
|
749 |
_("Generating SoftPLC IEC-61131 ST/IL/SFC code...\n")) |
20 | 750 |
# 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
|
751 |
_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
|
752 |
self._getIECgeneratedcodepath()) |
309
6eb074f0dae9
Adding support for cancelling code generation of function with no input connected
lbessard
parents:
304
diff
changeset
|
753 |
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
|
754 |
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
|
755 |
_("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
|
756 |
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
|
757 |
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
|
758 |
if len(errors) > 0: |
20 | 759 |
# Failed ! |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
760 |
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
|
761 |
_("Error in ST/IL/SFC code generator :\n%s\n") % errors[0]) |
20 | 762 |
return False |
65 | 763 |
plc_file = open(self._getIECcodepath(), "w") |
717 | 764 |
# Add ST Library from confnodes |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
765 |
plc_file.write(self.GetLibrariesSTCode()) |
65 | 766 |
if os.path.isfile(self._getIECrawcodepath()): |
767 |
plc_file.write(open(self._getIECrawcodepath(), "r").read()) |
|
768 |
plc_file.write("\n") |
|
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
769 |
plc_file.close() |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
770 |
plc_file = open(self._getIECcodepath(), "r") |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
771 |
self.ProgramOffset = 0 |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
772 |
for dummy in plc_file.xreadlines(): |
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
773 |
self.ProgramOffset += 1 |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
774 |
plc_file.close() |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
775 |
plc_file = open(self._getIECcodepath(), "a") |
65 | 776 |
plc_file.write(open(self._getIECgeneratedcodepath(), "r").read()) |
777 |
plc_file.close() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
778 |
return True |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
779 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
780 |
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
|
781 |
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
|
782 |
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
|
783 |
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
|
784 |
return False |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
785 |
|
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
786 |
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
|
787 |
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
|
788 |
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
|
789 |
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
|
790 |
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
|
791 |
iec2c_libpath, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
792 |
buildpath, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
793 |
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
|
794 |
|
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
|
795 |
try: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
796 |
# Invoke compiler. |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
797 |
# 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
|
798 |
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
|
799 |
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
|
800 |
no_stderr=True).spin() |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
801 |
except Exception, 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
|
802 |
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
|
803 |
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
|
804 |
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
|
805 |
|
20 | 806 |
if status: |
807 |
# Failed ! |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
808 |
|
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
809 |
# 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
|
810 |
# 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
|
811 |
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
|
812 |
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
|
813 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
814 |
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
|
815 |
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
|
816 |
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
|
817 |
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
|
818 |
|
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
819 |
last_section = None |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
820 |
f = open(self._getIECcodepath()) |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
821 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
822 |
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
|
823 |
i = i + 1 |
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
824 |
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
|
825 |
last_section = line |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
826 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
827 |
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
|
828 |
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
|
829 |
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
|
830 |
"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
|
831 |
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
|
832 |
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
|
833 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
834 |
f.close() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
835 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
836 |
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
|
837 |
_("Error : IEC to C compiler returned %d\n") % status) |
20 | 838 |
return False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
839 |
|
20 | 840 |
# 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
|
841 |
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
|
842 |
-2:] == ".c" or fname[-2:] == ".C"] |
20 | 843 |
# remove those that are not to be compiled because included by others |
844 |
C_files.remove("POUS.c") |
|
115 | 845 |
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
|
846 |
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
|
847 |
_("Error : At least one configuration and one resource must be declared in PLC !\n")) |
115 | 848 |
return False |
20 | 849 |
# 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
|
850 |
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
|
851 |
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
|
852 |
|
56bef276055e
Made declaration from beremiz.h available to C pragmas in POUs. Added AtomicCompareExchange to beremiz.h
Edouard Tisserant
parents:
1006
diff
changeset
|
853 |
# 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
|
854 |
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
|
855 |
-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
|
856 |
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
|
857 |
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
|
858 |
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
|
859 |
for H_file in H_files: |
1756
08e4394ff4fb
clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1754
diff
changeset
|
860 |
with file(H_file, 'r') as original: |
08e4394ff4fb
clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1754
diff
changeset
|
861 |
data = original.read() |
08e4394ff4fb
clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1754
diff
changeset
|
862 |
with file(H_file, 'w') as modified: |
08e4394ff4fb
clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1754
diff
changeset
|
863 |
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
|
864 |
|
361 | 865 |
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
|
866 |
# 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
|
867 |
# self._Generate_C |
97 | 868 |
self.PLCGeneratedLocatedVars = self.GetLocations() |
718 | 869 |
# Keep track of generated C files for later use by self.CTNGenerate_C |
18 | 870 |
self.PLCGeneratedCFiles = C_files |
49
45dc6a944ab6
On the long wat towards generated code comilation...
etisserant
parents:
47
diff
changeset
|
871 |
# 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
|
872 |
self.plcCFLAGS = '"-I%s" -Wno-unused-function' % self.iec2c_cfg.getLibCPath() |
18 | 873 |
return True |
874 |
||
203 | 875 |
def GetBuilder(self): |
876 |
""" |
|
877 |
Return a Builder (compile C code into machine code) |
|
878 |
""" |
|
879 |
# Get target, module and class name |
|
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
880 |
targetname = self.GetTarget().getcontent().getLocalTag() |
733
915be999f3f0
targets and connectors are nor extensible
Edouard Tisserant
parents:
732
diff
changeset
|
881 |
targetclass = targets.GetBuilder(targetname) |
203 | 882 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
883 |
# if target already |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
884 |
if self._builder is None or not isinstance(self._builder, targetclass): |
203 | 885 |
# Get classname instance |
886 |
self._builder = targetclass(self) |
|
887 |
return self._builder |
|
888 |
||
677
607731b33026
Fix 'Transfer" button state according to last build result
laurent
parents:
676
diff
changeset
|
889 |
def ResetBuildMD5(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
890 |
builder = self.GetBuilder() |
677
607731b33026
Fix 'Transfer" button state according to last build result
laurent
parents:
676
diff
changeset
|
891 |
if builder is not None: |
607731b33026
Fix 'Transfer" button state according to last build result
laurent
parents:
676
diff
changeset
|
892 |
builder.ResetBinaryCodeMD5() |
607731b33026
Fix 'Transfer" button state according to last build result
laurent
parents:
676
diff
changeset
|
893 |
self.EnableMethod("_Transfer", False) |
607731b33026
Fix 'Transfer" button state according to last build result
laurent
parents:
676
diff
changeset
|
894 |
|
203 | 895 |
def GetLastBuildMD5(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
896 |
builder = self.GetBuilder() |
203 | 897 |
if builder is not None: |
898 |
return builder.GetBinaryCodeMD5() |
|
899 |
else: |
|
900 |
return None |
|
901 |
||
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
902 |
# |
203 | 903 |
# |
904 |
# C CODE GENERATION METHODS |
|
905 |
# |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
906 |
# |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
907 |
|
718 | 908 |
def CTNGenerate_C(self, buildpath, locations): |
203 | 909 |
""" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
910 |
Return C code generated by iec2c compiler |
203 | 911 |
when _generate_softPLC have been called |
912 |
@param locations: ignored |
|
913 |
@return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND |
|
914 |
""" |
|
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
|
915 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
916 |
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
|
917 |
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
|
918 |
"", # 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
|
919 |
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
|
920 |
|
203 | 921 |
def ResetIECProgramsAndVariables(self): |
922 |
""" |
|
923 |
Reset variable and program list that are parsed from |
|
924 |
CSV file generated by IEC2C compiler. |
|
925 |
""" |
|
926 |
self._ProgramList = None |
|
927 |
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
|
928 |
self._DbgVariablesList = None |
532
a822b0b64252
Fixed startin debugger with non empty debug variable list
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
529
diff
changeset
|
929 |
self._IECPathToIdx = {} |
670
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
930 |
self._Ticktime = 0 |
235 | 931 |
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
|
932 |
self.TracedIECTypes = [] |
235 | 933 |
|
203 | 934 |
def GetIECProgramsAndVariables(self): |
935 |
""" |
|
936 |
Parse CSV-like file VARIABLES.csv resulting from IEC2C compiler. |
|
937 |
Each section is marked with a line staring with '//' |
|
938 |
list of all variables used in various POUs |
|
939 |
""" |
|
940 |
if self._ProgramList is None or self._VariablesList is None: |
|
941 |
try: |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
942 |
csvfile = os.path.join(self._getBuildPath(), "VARIABLES.csv") |
203 | 943 |
# describes CSV columns |
944 |
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
|
945 |
VariablesListAttributeName = [ |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
946 |
"num", "vartype", "IEC_path", "C_path", "type"] |
203 | 947 |
self._ProgramList = [] |
948 |
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
|
949 |
self._DbgVariablesList = [] |
203 | 950 |
self._IECPathToIdx = {} |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
951 |
|
203 | 952 |
# Separate sections |
953 |
ListGroup = [] |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
954 |
for line in open(csvfile, 'r').xreadlines(): |
203 | 955 |
strippedline = line.strip() |
956 |
if strippedline.startswith("//"): |
|
957 |
# Start new section |
|
958 |
ListGroup.append([]) |
|
959 |
elif len(strippedline) > 0 and len(ListGroup) > 0: |
|
960 |
# append to this section |
|
961 |
ListGroup[-1].append(strippedline) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
962 |
|
203 | 963 |
# first section contains programs |
964 |
for line in ListGroup[0]: |
|
965 |
# 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
|
966 |
attrs = dict( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
967 |
zip(ProgramsListAttributeName, line.strip().split(';'))) |
1722
89824afffef2
fix some typos
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1708
diff
changeset
|
968 |
# 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
|
969 |
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
|
970 |
attrs["C_path"].split(".", 2)[1:]) |
203 | 971 |
# Push this dictionnary into result. |
972 |
self._ProgramList.append(attrs) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
973 |
|
203 | 974 |
# second section contains all variables |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
975 |
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
|
976 |
Idx = 0 |
203 | 977 |
for line in ListGroup[1]: |
978 |
# 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
|
979 |
attrs = dict( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
980 |
zip(VariablesListAttributeName, line.strip().split(';'))) |
1722
89824afffef2
fix some typos
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1708
diff
changeset
|
981 |
# 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
|
982 |
parts = attrs["C_path"].split(".", 2) |
639
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
983 |
if len(parts) > 2: |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
984 |
config_FB = config_FBs.get(tuple(parts[:2])) |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
985 |
if config_FB: |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
986 |
parts = [config_FB] + parts[2:] |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
987 |
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
|
988 |
else: |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
989 |
attrs["C_path"] = '__'.join(parts[1:]) |
639
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
990 |
else: |
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
991 |
attrs["C_path"] = '__'.join(parts) |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
992 |
if attrs["vartype"] == "FB": |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
993 |
config_FBs[tuple(parts)] = attrs["C_path"] |
1517 | 994 |
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
|
995 |
# 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
|
996 |
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
|
997 |
# 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
|
998 |
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
|
999 |
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
|
1000 |
# 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
|
1001 |
# 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
|
1002 |
# 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
|
1003 |
Idx += 1 |
203 | 1004 |
self._VariablesList.append(attrs) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1005 |
|
670
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1006 |
# third section contains ticktime |
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1007 |
if len(ListGroup) > 2: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1008 |
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
|
1009 |
|
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1010 |
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
|
1011 |
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
|
1012 |
_("Cannot open/parse VARIABLES.csv!\n")) |
203 | 1013 |
self.logger.write_error(traceback.format_exc()) |
1014 |
self.ResetIECProgramsAndVariables() |
|
1015 |
return False |
|
1016 |
||
1017 |
return True |
|
1018 |
||
1019 |
def Generate_plc_debugger(self): |
|
1020 |
""" |
|
1021 |
Generate trace/debug code out of PLC variable list |
|
1022 |
""" |
|
1023 |
self.GetIECProgramsAndVariables() |
|
1024 |
||
1025 |
# 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
|
1026 |
variable_decl_array = [] |
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
|
1027 |
bofs = 0 |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1028 |
for v in self._DbgVariablesList: |
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 |
sz = DebugTypesSize.get(v["type"], 0) |
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 |
variable_decl_array += [ |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1031 |
"{&(%(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
|
1032 |
{ |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1033 |
"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
|
1034 |
"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
|
1035 |
"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
|
1036 |
"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
|
1037 |
"VAR": "%(type)s_ENUM" |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1038 |
}[v["vartype"]] % v + |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1039 |
"}"] |
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
|
1040 |
bofs += sz |
1430 | 1041 |
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
|
1042 |
"buffer_size": bofs, |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1043 |
"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
|
1044 |
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
|
1045 |
"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
|
1046 |
{ |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1047 |
"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
|
1048 |
"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
|
1049 |
"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
|
1050 |
"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
|
1051 |
"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
|
1052 |
"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
|
1053 |
}[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
|
1054 |
for v in self._VariablesList if v["C_path"].find('.') < 0]), |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1055 |
"variable_decl_array": ",\n".join(variable_decl_array) |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1056 |
} |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1057 |
|
203 | 1058 |
return debug_code |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1059 |
|
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
|
1060 |
def Generate_plc_main(self): |
203 | 1061 |
""" |
717 | 1062 |
Use confnodes layout given in LocationCFilesAndCFLAGS to |
1063 |
generate glue code that dispatch calls to all confnodes |
|
203 | 1064 |
""" |
1065 |
# filter location that are related to code that will be called |
|
1066 |
# 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
|
1067 |
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
|
1068 |
[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
|
1069 |
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
|
1070 |
|
203 | 1071 |
# 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
|
1072 |
if not self.BeremizRoot.getDisable_Extensions(): |
1430 | 1073 |
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
|
1074 |
"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
|
1075 |
"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
|
1076 |
"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
|
1077 |
"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
|
1078 |
"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
|
1079 |
"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
|
1080 |
"__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
|
1081 |
"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
|
1082 |
"__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
|
1083 |
"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
|
1084 |
"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
|
1085 |
"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
|
1086 |
# "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
|
1087 |
"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
|
1088 |
"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
|
1089 |
"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
|
1090 |
"__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
|
1091 |
} |
338 | 1092 |
else: |
1430 | 1093 |
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
|
1094 |
"calls_prototypes": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1095 |
"retrieve_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1096 |
"publish_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1097 |
"init_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1098 |
"cleanup_calls": "\n" |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1099 |
} |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1100 |
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
|
1101 |
self.GetTarget().getcontent().getLocalTag()) |
1430 | 1102 |
plc_main_code += targets.GetCode("plc_main_tail.c") |
203 | 1103 |
return plc_main_code |
1104 |
||
623
8cdb533c3c7a
A few new keyboard shortcuts : F4=stop, F5=run, F5=transfer, F7=connect
Edouard Tisserant
parents:
619
diff
changeset
|
1105 |
def _Build(self): |
20 | 1106 |
""" |
717 | 1107 |
Method called by user to (re)build SoftPLC and confnode tree |
20 | 1108 |
""" |
395 | 1109 |
if self.AppFrame is not None: |
1110 |
self.AppFrame.ClearErrors() |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1111 |
self._CloseView(self._IECCodeView) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1112 |
|
20 | 1113 |
buildpath = self._getBuildPath() |
1114 |
||
1115 |
# Eventually create build dir |
|
18 | 1116 |
if not os.path.exists(buildpath): |
1117 |
os.mkdir(buildpath) |
|
203 | 1118 |
|
1119 |
self.logger.flush() |
|
361 | 1120 |
self.logger.write(_("Start build in %s\n") % buildpath) |
203 | 1121 |
|
1122 |
# Generate SoftPLC IEC code |
|
1123 |
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
|
1124 |
self.UpdateButtons() |
203 | 1125 |
|
1126 |
# If IEC code gen fail, bail out. |
|
1127 |
if not IECGenRes: |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1128 |
self.logger.write_error(_("PLC code generation failed !\n")) |
677
607731b33026
Fix 'Transfer" button state according to last build result
laurent
parents:
676
diff
changeset
|
1129 |
self.ResetBuildMD5() |
20 | 1130 |
return False |
1131 |
||
203 | 1132 |
# Reset variable and program list that are parsed from |
1133 |
# CSV file generated by IEC2C compiler. |
|
1134 |
self.ResetIECProgramsAndVariables() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1135 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1136 |
# Collect platform specific C code |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1137 |
# 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
|
1138 |
if not self._Generate_runtime(): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1139 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1140 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1141 |
# Get current or fresh builder |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1142 |
builder = self.GetBuilder() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1143 |
if builder is None: |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1144 |
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
|
1145 |
self.ResetBuildMD5() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1146 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1147 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1148 |
# Build |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1149 |
try: |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1150 |
if not builder.build(): |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1151 |
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
|
1152 |
return False |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1153 |
except Exception: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1154 |
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
|
1155 |
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
|
1156 |
self.ResetBuildMD5() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1157 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1158 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1159 |
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
|
1160 |
# 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
|
1161 |
self.CompareLocalAndRemotePLC() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1162 |
return True |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1163 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1164 |
def _Generate_runtime(self): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1165 |
buildpath = self._getBuildPath() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1166 |
|
717 | 1167 |
# Generate C code and compilation params from confnode hierarchy |
24 | 1168 |
try: |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1169 |
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
|
1170 |
buildpath, |
203 | 1171 |
self.PLCGeneratedLocatedVars) |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1172 |
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
|
1173 |
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
|
1174 |
_("Runtime IO extensions C code generation failed !\n")) |
203 | 1175 |
self.logger.write_error(traceback.format_exc()) |
677
607731b33026
Fix 'Transfer" button state according to last build result
laurent
parents:
676
diff
changeset
|
1176 |
self.ResetBuildMD5() |
24 | 1177 |
return False |
18 | 1178 |
|
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1179 |
# Generate C code and compilation params from liraries |
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1180 |
try: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1181 |
LibCFilesAndCFLAGS, LibLDFLAGS, LibExtraFiles = self.GetLibrariesCCode( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1182 |
buildpath) |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1183 |
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
|
1184 |
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
|
1185 |
_("Runtime library extensions C code generation failed !\n")) |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1186 |
self.logger.write_error(traceback.format_exc()) |
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1187 |
self.ResetBuildMD5() |
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1188 |
return False |
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1189 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1190 |
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
|
1191 |
CTNLocationCFilesAndCFLAGS |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1192 |
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
|
1193 |
ExtraFiles = CTNExtraFiles + LibExtraFiles |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1194 |
|
361 | 1195 |
# Get temporary directory path |
203 | 1196 |
extrafilespath = self._getExtraFilesPath() |
1197 |
# Remove old directory |
|
1198 |
if os.path.exists(extrafilespath): |
|
1199 |
shutil.rmtree(extrafilespath) |
|
1200 |
# Recreate directory |
|
1201 |
os.mkdir(extrafilespath) |
|
1202 |
# 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
|
1203 |
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
|
1204 |
fpath = os.path.join(extrafilespath, fname) |
203 | 1205 |
open(fpath, "wb").write(fobject.read()) |
1206 |
# Now we can forget ExtraFiles (will close files object) |
|
1207 |
del ExtraFiles |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1208 |
|
1001
3f966bbb3fba
Added beremiz.h header file for extensions
Edouard Tisserant
parents:
1000
diff
changeset
|
1209 |
# Header file for extensions |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1210 |
open(os.path.join(buildpath, "beremiz.h"), "w").write( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1211 |
targets.GetHeader()) |
1001
3f966bbb3fba
Added beremiz.h header file for extensions
Edouard Tisserant
parents:
1000
diff
changeset
|
1212 |
|
203 | 1213 |
# Template based part of C code generation |
717 | 1214 |
# files are stacked at the beginning, as files of confnode tree root |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1215 |
c_source = [ |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1216 |
# debugger code |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1217 |
(self.Generate_plc_debugger, "plc_debugger.c", "Debugger"), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1218 |
# init/cleanup/retrieve/publish, run and align code |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1219 |
(self.Generate_plc_main, "plc_main.c", "Common runtime") |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1220 |
] |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1221 |
|
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1222 |
for generator, filename, name in c_source: |
203 | 1223 |
try: |
1224 |
# Do generate |
|
1225 |
code = generator() |
|
335
c5f3f71e7260
fixed bug : buffer overflow when debugging PLC with python blocks
greg
parents:
334
diff
changeset
|
1226 |
if code is None: |
1861
410a3bcbeb29
fix pylint warning '(misplaced-bare-raise) The raise statement is not inside an except clause'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1227 |
raise Exception |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1228 |
code_path = os.path.join(buildpath, filename) |
203 | 1229 |
open(code_path, "w").write(code) |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1230 |
# Insert this file as first file to be compiled at root |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1231 |
# confnode |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1232 |
self.LocationCFilesAndCFLAGS[0][1].insert( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1233 |
0, (code_path, self.plcCFLAGS)) |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1234 |
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
|
1235 |
self.logger.write_error(name + _(" generation failed !\n")) |
203 | 1236 |
self.logger.write_error(traceback.format_exc()) |
677
607731b33026
Fix 'Transfer" button state according to last build result
laurent
parents:
676
diff
changeset
|
1237 |
self.ResetBuildMD5() |
203 | 1238 |
return False |
361 | 1239 |
self.logger.write(_("C code generated successfully.\n")) |
49
45dc6a944ab6
On the long wat towards generated code comilation...
etisserant
parents:
47
diff
changeset
|
1240 |
return True |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1241 |
|
202
cd81a7a6e55c
Adding support for highlighing compiling errors into PLCOpenEditor
lbessard
parents:
199
diff
changeset
|
1242 |
def ShowError(self, logger, from_location, to_location): |
cd81a7a6e55c
Adding support for highlighing compiling errors into PLCOpenEditor
lbessard
parents:
199
diff
changeset
|
1243 |
chunk_infos = self.GetChunkInfos(from_location, to_location) |
cd81a7a6e55c
Adding support for highlighing compiling errors into PLCOpenEditor
lbessard
parents:
199
diff
changeset
|
1244 |
for infos, (start_row, start_col) in chunk_infos: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1245 |
row = 1 if from_location[0] < start_row else ( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1246 |
from_location[0] - start_row) |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1247 |
col = 1 if (start_row != from_location[0]) else ( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1248 |
from_location[1] - start_col) |
1579
418e6bac22e8
fix segmentation fault on clicking red point in compilation console if that compilation error coverts several units in plcopen file
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1574
diff
changeset
|
1249 |
start = (row, col) |
418e6bac22e8
fix segmentation fault on clicking red point in compilation console if that compilation error coverts several units in plcopen file
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1574
diff
changeset
|
1250 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1251 |
row = 1 if to_location[0] < start_row else ( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1252 |
to_location[0] - start_row) |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1253 |
col = 1 if (start_row != to_location[0]) else ( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1254 |
to_location[1] - start_col) |
1579
418e6bac22e8
fix segmentation fault on clicking red point in compilation console if that compilation error coverts several units in plcopen file
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1574
diff
changeset
|
1255 |
end = (row, col) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1256 |
|
396 | 1257 |
if self.AppFrame is not None: |
1258 |
self.AppFrame.ShowError(infos, start, end) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1259 |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1260 |
_IECCodeView = None |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
1261 |
|
203 | 1262 |
def _showIECcode(self): |
716
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1263 |
self._OpenView("IEC code") |
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1264 |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1265 |
_IECRawCodeView = None |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
1266 |
|
716
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1267 |
def _editIECrawcode(self): |
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1268 |
self._OpenView("IEC raw code") |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1269 |
|
782 | 1270 |
_ProjectFilesView = None |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
1271 |
|
782 | 1272 |
def _OpenProjectFiles(self): |
815
e4f24593a758
Adding support for extending internationalization to extensions
laurent
parents:
814
diff
changeset
|
1273 |
self._OpenView("Project Files") |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1274 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1275 |
_FileEditors = {} |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
1276 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1277 |
def _OpenFileEditor(self, filepath): |
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1278 |
self._OpenView(filepath) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1279 |
|
782 | 1280 |
def _OpenView(self, name=None, onlyopened=False): |
716
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1281 |
if name == "IEC code": |
782 | 1282 |
if self._IECCodeView is None: |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1283 |
plc_file = self._getIECcodepath() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1284 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1285 |
self._IECCodeView = IECCodeViewer( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1286 |
self.AppFrame.TabsOpened, "", self.AppFrame, None, instancepath=name) |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1287 |
self._IECCodeView.SetTextSyntax("ALL") |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1288 |
self._IECCodeView.SetKeywords(IEC_KEYWORDS) |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1289 |
try: |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1290 |
text = file(plc_file).read() |
1780
c52d1460cea8
clean-up: fix PEP8 E722 do not use bare except'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1779
diff
changeset
|
1291 |
except Exception: |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1292 |
text = '(* No IEC code have been generated at that time ! *)' |
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1742
diff
changeset
|
1293 |
self._IECCodeView.SetText(text=text) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1294 |
self._IECCodeView.Editor.SetReadOnly(True) |
782 | 1295 |
self._IECCodeView.SetIcon(GetBitmap("ST")) |
806
abf1afc1f04d
Fix bug when closing IECCodeView and IECRawCodeView, reopening them was impossible
laurent
parents:
801
diff
changeset
|
1296 |
setattr(self._IECCodeView, "_OnClose", self.OnCloseEditor) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1297 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1298 |
if self._IECCodeView is not None: |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1299 |
self.AppFrame.EditProjectElement(self._IECCodeView, name) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1300 |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1301 |
return self._IECCodeView |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1302 |
|
716
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1303 |
elif name == "IEC raw code": |
782 | 1304 |
if self._IECRawCodeView is None: |
806
abf1afc1f04d
Fix bug when closing IECCodeView and IECRawCodeView, reopening them was impossible
laurent
parents:
801
diff
changeset
|
1305 |
controler = MiniTextControler(self._getIECrawcodepath(), self) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1306 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1307 |
self._IECRawCodeView = IECCodeViewer( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1308 |
self.AppFrame.TabsOpened, "", self.AppFrame, controler, instancepath=name) |
782 | 1309 |
self._IECRawCodeView.SetTextSyntax("ALL") |
1310 |
self._IECRawCodeView.SetKeywords(IEC_KEYWORDS) |
|
1311 |
self._IECRawCodeView.RefreshView() |
|
1312 |
self._IECRawCodeView.SetIcon(GetBitmap("ST")) |
|
806
abf1afc1f04d
Fix bug when closing IECCodeView and IECRawCodeView, reopening them was impossible
laurent
parents:
801
diff
changeset
|
1313 |
setattr(self._IECRawCodeView, "_OnClose", self.OnCloseEditor) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1314 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1315 |
if self._IECRawCodeView is not None: |
782 | 1316 |
self.AppFrame.EditProjectElement(self._IECRawCodeView, name) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1317 |
|
782 | 1318 |
return self._IECRawCodeView |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1319 |
|
815
e4f24593a758
Adding support for extending internationalization to extensions
laurent
parents:
814
diff
changeset
|
1320 |
elif name == "Project Files": |
782 | 1321 |
if self._ProjectFilesView is None: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1322 |
self._ProjectFilesView = FileManagementPanel( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1323 |
self.AppFrame.TabsOpened, self, name, self._getProjectFilesPath(), True) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1324 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1325 |
extensions = [] |
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1326 |
for extension, name, editor in features.file_editors: |
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1327 |
if extension not in extensions: |
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1328 |
extensions.append(extension) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1329 |
self._ProjectFilesView.SetEditableFileExtensions(extensions) |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1330 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1331 |
if self._ProjectFilesView is not None: |
782 | 1332 |
self.AppFrame.EditProjectElement(self._ProjectFilesView, name) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1333 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1334 |
return self._ProjectFilesView |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1335 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1336 |
elif name is not None and name.find("::") != -1: |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1337 |
filepath, editor_name = name.split("::") |
1775
b45f2768fab1
clean-up: fix PEP8 E713 test for membership should be 'not in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
1338 |
if filepath not in self._FileEditors: |
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1339 |
if os.path.isfile(filepath): |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1340 |
file_extension = os.path.splitext(filepath)[1] |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1341 |
|
796 | 1342 |
editors = dict([(edit_name, edit_class) |
1343 |
for extension, edit_name, edit_class in features.file_editors |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1344 |
if extension == file_extension]) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1345 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1346 |
if editor_name == "": |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1347 |
if len(editors) == 1: |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1348 |
editor_name = editors.keys()[0] |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1349 |
elif len(editors) > 0: |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1350 |
names = editors.keys() |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1351 |
dialog = wx.SingleChoiceDialog( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1352 |
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
|
1353 |
_("Select an editor:"), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1354 |
_("Editor selection"), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1355 |
names, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1356 |
wx.DEFAULT_DIALOG_STYLE | wx.OK | wx.CANCEL) |
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1357 |
if dialog.ShowModal() == wx.ID_OK: |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1358 |
editor_name = names[dialog.GetSelection()] |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1359 |
dialog.Destroy() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1360 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1361 |
if editor_name != "": |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1362 |
name = "::".join([filepath, editor_name]) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1363 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1364 |
editor = editors[editor_name]() |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1365 |
self._FileEditors[filepath] = editor( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1366 |
self.AppFrame.TabsOpened, self, name, self.AppFrame) |
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1367 |
self._FileEditors[filepath].SetIcon(GetBitmap("FILE")) |
897
3cd39bc7dbad
Added support for defining extension file editor as DebugViewer
Laurent Bessard
parents:
883
diff
changeset
|
1368 |
if isinstance(self._FileEditors[filepath], DebugViewer): |
3cd39bc7dbad
Added support for defining extension file editor as DebugViewer
Laurent Bessard
parents:
883
diff
changeset
|
1369 |
self._FileEditors[filepath].SetDataProducer(self) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1370 |
|
1763
bcc07ff2362c
clean-up: fix PEP8 W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1760
diff
changeset
|
1371 |
if filepath in self._FileEditors: |
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1372 |
editor = self._FileEditors[filepath] |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1373 |
self.AppFrame.EditProjectElement(editor, editor.GetTagName()) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1374 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1375 |
return self._FileEditors.get(filepath) |
738 | 1376 |
else: |
786 | 1377 |
return ConfigTreeNode._OpenView(self, self.CTNName(), onlyopened) |
20 | 1378 |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1379 |
def OnCloseEditor(self, view): |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1380 |
ConfigTreeNode.OnCloseEditor(self, view) |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1381 |
if self._IECCodeView == view: |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1382 |
self._IECCodeView = None |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1383 |
if self._IECRawCodeView == view: |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1384 |
self._IECRawCodeView = None |
782 | 1385 |
if self._ProjectFilesView == view: |
1386 |
self._ProjectFilesView = None |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1387 |
if view in self._FileEditors.values(): |
792 | 1388 |
self._FileEditors.pop(view.GetFilePath()) |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1389 |
|
203 | 1390 |
def _Clean(self): |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1391 |
self._CloseView(self._IECCodeView) |
108 | 1392 |
if os.path.isdir(os.path.join(self._getBuildPath())): |
361 | 1393 |
self.logger.write(_("Cleaning the build directory\n")) |
108 | 1394 |
shutil.rmtree(os.path.join(self._getBuildPath())) |
1395 |
else: |
|
361 | 1396 |
self.logger.write_error(_("Build directory already clean\n")) |
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
|
1397 |
# kill the builder |
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
|
1398 |
self._builder = None |
203 | 1399 |
self.CompareLocalAndRemotePLC() |
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1400 |
self.UpdateButtons() |
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1401 |
|
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1402 |
def _UpdateButtons(self): |
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1403 |
self.EnableMethod("_Clean", os.path.exists(self._getBuildPath())) |
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1404 |
self.ShowMethod("_showIECcode", os.path.isfile(self._getIECcodepath())) |
1634
299a1dde6baa
fix second error message in case of error appearing too early to have a wx frame
Edouard Tisserant 7BB06627 <edouard.tisserant@gmail.com>
parents:
1630
diff
changeset
|
1405 |
if self.AppFrame is not None and not self.UpdateMethodsFromPLCStatus(): |
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1406 |
self.AppFrame.RefreshStatusToolBar() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1407 |
|
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1408 |
def UpdateButtons(self): |
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1409 |
wx.CallAfter(self._UpdateButtons) |
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1410 |
|
911
ffa24427396a
Log redirected to console, dump of all available log to console when connecting to PLC
Edouard Tisserant
parents:
906
diff
changeset
|
1411 |
def UpdatePLCLog(self, log_count): |
978 | 1412 |
if log_count: |
1413 |
if self.AppFrame is not None: |
|
1414 |
self.AppFrame.LogViewer.SetLogCounters(log_count) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1415 |
|
2224
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1416 |
DefaultMethods = { |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1417 |
"_Run": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1418 |
"_Stop": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1419 |
"_Transfer": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1420 |
"_Connect": True, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1421 |
"_Disconnect": False |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1422 |
} |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1423 |
|
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1424 |
MethodsFromStatus = { |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1425 |
"Started": {"_Stop": True, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1426 |
"_Transfer": True, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1427 |
"_Connect": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1428 |
"_Disconnect": True}, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1429 |
"Stopped": {"_Run": True, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1430 |
"_Transfer": True, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1431 |
"_Connect": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1432 |
"_Disconnect": True}, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1433 |
"Empty": {"_Transfer": True, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1434 |
"_Connect": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1435 |
"_Disconnect": True}, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1436 |
"Broken": {"_Connect": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1437 |
"_Disconnect": True}, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1438 |
"Disconnected": {}, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1439 |
} |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1440 |
|
203 | 1441 |
def UpdateMethodsFromPLCStatus(self): |
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1442 |
updated = False |
486
2e0fe44044b3
Catch Pyro exception when connection closed and print message
laurent
parents:
483
diff
changeset
|
1443 |
status = None |
203 | 1444 |
if self._connector is not None: |
923
6ef6e0b3a908
Fixed crash (segfault) when logging debug messages
Edouard Tisserant
parents:
922
diff
changeset
|
1445 |
PLCstatus = self._connector.GetPLCstatus() |
6ef6e0b3a908
Fixed crash (segfault) when logging debug messages
Edouard Tisserant
parents:
922
diff
changeset
|
1446 |
if PLCstatus is not None: |
6ef6e0b3a908
Fixed crash (segfault) when logging debug messages
Edouard Tisserant
parents:
922
diff
changeset
|
1447 |
status, log_count = PLCstatus |
6ef6e0b3a908
Fixed crash (segfault) when logging debug messages
Edouard Tisserant
parents:
922
diff
changeset
|
1448 |
self.UpdatePLCLog(log_count) |
486
2e0fe44044b3
Catch Pyro exception when connection closed and print message
laurent
parents:
483
diff
changeset
|
1449 |
if status is None: |
1116
300f98a8d4c6
Fixed bug connector not resetted when connection is lost
Laurent Bessard
parents:
1105
diff
changeset
|
1450 |
self._SetConnector(None, False) |
203 | 1451 |
status = "Disconnected" |
1828
396da88d7b5c
fix unnecessary parens after keyword
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1824
diff
changeset
|
1452 |
if self.previous_plcstate != status: |
2224
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1453 |
allmethods = self.DefaultMethods.copy() |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1454 |
allmethods.update( |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1455 |
self.MethodsFromStatus.get(status, {})) |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1456 |
for method, active in allmethods.items(): |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1457 |
self.ShowMethod(method, active) |
922
60fafd828a30
Better PLC log message time stamp display. Better console information when connecting.
Edouard Tisserant
parents:
921
diff
changeset
|
1458 |
self.previous_plcstate = status |
918 | 1459 |
if self.AppFrame is not None: |
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1460 |
updated = True |
918 | 1461 |
self.AppFrame.RefreshStatusToolBar() |
1000 | 1462 |
if status == "Disconnected": |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1463 |
self.AppFrame.ConnectionStatusBar.SetStatusText( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1464 |
self.GetTextStatus(status), 1) |
1000 | 1465 |
self.AppFrame.ConnectionStatusBar.SetStatusText('', 2) |
1466 |
else: |
|
1467 |
self.AppFrame.ConnectionStatusBar.SetStatusText( |
|
1468 |
_("Connected to URI: %s") % self.BeremizRoot.getURI_location().strip(), 1) |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1469 |
self.AppFrame.ConnectionStatusBar.SetStatusText( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1470 |
self.GetTextStatus(status), 2) |
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1471 |
return updated |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1472 |
|
1587
b1be42401522
add i18n to PLC status
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1473 |
def GetTextStatus(self, status): |
b1be42401522
add i18n to PLC status
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1474 |
msgs = { |
b1be42401522
add i18n to PLC status
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1475 |
"Started": _("Started"), |
b1be42401522
add i18n to PLC status
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1476 |
"Stopped": _("Stopped"), |
b1be42401522
add i18n to PLC status
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1477 |
"Empty": _("Empty"), |
b1be42401522
add i18n to PLC status
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1478 |
"Broken": _("Broken"), |
b1be42401522
add i18n to PLC status
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1479 |
"Disconnected": _("Disconnected") |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1480 |
} |
1587
b1be42401522
add i18n to PLC status
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1481 |
return msgs.get(status, status) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1482 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1742
diff
changeset
|
1483 |
def ShowPLCProgress(self, status="", progress=0): |
1574
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1484 |
self.AppFrame.ProgressStatusBar.Show() |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1485 |
self.AppFrame.ConnectionStatusBar.SetStatusText( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1486 |
self.GetTextStatus(status), 1) |
1574
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1487 |
self.AppFrame.ProgressStatusBar.SetValue(progress) |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1488 |
|
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1489 |
def HidePLCProgress(self): |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1490 |
# clear previous_plcstate to restore status |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1491 |
# in UpdateMethodsFromPLCStatus() |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1492 |
self.previous_plcstate = "" |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1493 |
self.AppFrame.ProgressStatusBar.Hide() |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1494 |
self.UpdateMethodsFromPLCStatus() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1495 |
|
446
1edde533db19
Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents:
440
diff
changeset
|
1496 |
def PullPLCStatusProc(self, event): |
918 | 1497 |
self.UpdateMethodsFromPLCStatus() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1498 |
|
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
|
1499 |
def SnapshotAndResetDebugValuesBuffers(self): |
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1500 |
if self._connector is not None: |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1501 |
plc_status, Traces = self._connector.GetTraceVariables() |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1502 |
# print [dict.keys() for IECPath, (dict, log, status, fvalue) in |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1503 |
# self.IECdebug_datas.items()] |
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1504 |
if plc_status == "Started": |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1505 |
if len(Traces) > 0: |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1506 |
for debug_tick, debug_buff in Traces: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1507 |
debug_vars = UnpackDebugBuffer( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1508 |
debug_buff, self.TracedIECTypes) |
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1509 |
if debug_vars is not None and len(debug_vars) == len(self.TracedIECPath): |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1510 |
for IECPath, values_buffer, value in izip( |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1511 |
self.TracedIECPath, |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1512 |
self.DebugValuesBuffers, |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1513 |
debug_vars): |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1514 |
IECdebug_data = self.IECdebug_datas.get( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1515 |
IECPath, None) |
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1516 |
if IECdebug_data is not None and value 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
|
1517 |
forced = IECdebug_data[2:4] == [ |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1518 |
"Forced", value] |
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1519 |
if not IECdebug_data[4] and len(values_buffer) > 0: |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1520 |
values_buffer[-1] = (value, forced) |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1521 |
else: |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1522 |
values_buffer.append((value, forced)) |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1523 |
self.DebugTicks.append(debug_tick) |
1995
691d119ba20f
Removed DebugThread. Take advantage of the fact that buffering is done in runtime. No need to poll for traces more than ten per second, then use simple wxTimer for that. Also removed Debug Lock since now everything happens in wx' mainloop.
Edouard Tisserant
parents:
1953
diff
changeset
|
1524 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1525 |
buffers, self.DebugValuesBuffers = (self.DebugValuesBuffers, |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
1526 |
[list() for dummy in xrange(len(self.TracedIECPath))]) |
1995
691d119ba20f
Removed DebugThread. Take advantage of the fact that buffering is done in runtime. No need to poll for traces more than ten per second, then use simple wxTimer for that. Also removed Debug Lock since now everything happens in wx' mainloop.
Edouard Tisserant
parents:
1953
diff
changeset
|
1527 |
|
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
|
1528 |
ticks, self.DebugTicks = self.DebugTicks, [] |
1995
691d119ba20f
Removed DebugThread. Take advantage of the fact that buffering is done in runtime. No need to poll for traces more than ten per second, then use simple wxTimer for that. Also removed Debug Lock since now everything happens in wx' mainloop.
Edouard Tisserant
parents:
1953
diff
changeset
|
1529 |
|
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
|
1530 |
return ticks, buffers |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1531 |
|
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1532 |
def RegisterDebugVarToConnector(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1533 |
self.DebugTimer = None |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1534 |
Idxs = [] |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1535 |
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
|
1536 |
self.TracedIECTypes = [] |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1537 |
if self._connector is not None: |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1538 |
IECPathsToPop = [] |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1539 |
for IECPath, data_tuple in self.IECdebug_datas.iteritems(): |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
1540 |
WeakCallableDict, _data_log, _status, fvalue, _buffer_list = data_tuple |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1541 |
if len(WeakCallableDict) == 0: |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1542 |
# Callable Dict is empty. |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1543 |
# This variable is not needed anymore! |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1544 |
IECPathsToPop.append(IECPath) |
355 | 1545 |
elif IECPath != "__tick__": |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1546 |
# Convert |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1547 |
Idx, IEC_Type = self._IECPathToIdx.get( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1548 |
IECPath, (None, None)) |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1549 |
if Idx is not None: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1550 |
if IEC_Type in DebugTypesSize: |
592 | 1551 |
Idxs.append((Idx, IEC_Type, fvalue, IECPath)) |
1552 |
else: |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1553 |
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
|
1554 |
_("Debug: Unsupported type to debug '%s'\n") % IEC_Type) |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1555 |
else: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1556 |
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
|
1557 |
_("Debug: Unknown variable '%s'\n") % IECPath) |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1558 |
for IECPathToPop in IECPathsToPop: |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1559 |
self.IECdebug_datas.pop(IECPathToPop) |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1560 |
|
457 | 1561 |
if Idxs: |
1562 |
Idxs.sort() |
|
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
|
1563 |
IdxsT = zip(*Idxs) |
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
|
1564 |
self.TracedIECPath = IdxsT[3] |
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
|
1565 |
self.TracedIECTypes = IdxsT[1] |
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
|
1566 |
self._connector.SetTraceVariablesList(zip(*IdxsT[0:3])) |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1567 |
else: |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1568 |
self.TracedIECPath = [] |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1569 |
self._connector.SetTraceVariablesList([]) |
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
|
1570 |
self.SnapshotAndResetDebugValuesBuffers() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1571 |
|
1146 | 1572 |
def IsPLCStarted(self): |
1573 |
return self.previous_plcstate == "Started" |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1574 |
|
243 | 1575 |
def ReArmDebugRegisterTimer(self): |
1576 |
if self.DebugTimer is not None: |
|
1577 |
self.DebugTimer.cancel() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1578 |
|
1089
5cd1f8df71aa
Fixed bug when transferring program and a output located variable is forced
Laurent Bessard
parents:
1080
diff
changeset
|
1579 |
# Prevent to call RegisterDebugVarToConnector when PLC is not started |
5cd1f8df71aa
Fixed bug when transferring program and a output located variable is forced
Laurent Bessard
parents:
1080
diff
changeset
|
1580 |
# If an output location var is forced it's leads to segmentation fault in runtime |
5cd1f8df71aa
Fixed bug when transferring program and a output located variable is forced
Laurent Bessard
parents:
1080
diff
changeset
|
1581 |
# Links between PLC located variables and real variables are not ready |
1146 | 1582 |
if self.IsPLCStarted(): |
1089
5cd1f8df71aa
Fixed bug when transferring program and a output located variable is forced
Laurent Bessard
parents:
1080
diff
changeset
|
1583 |
# Timer to prevent rapid-fire when registering many variables |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1584 |
# use wx.CallAfter use keep using same thread. TODO : use wx.Timer |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1585 |
# instead |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1586 |
self.DebugTimer = Timer( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1587 |
0.5, wx.CallAfter, args=[self.RegisterDebugVarToConnector]) |
1089
5cd1f8df71aa
Fixed bug when transferring program and a output located variable is forced
Laurent Bessard
parents:
1080
diff
changeset
|
1588 |
# Rearm anti-rapid-fire timer |
5cd1f8df71aa
Fixed bug when transferring program and a output located variable is forced
Laurent Bessard
parents:
1080
diff
changeset
|
1589 |
self.DebugTimer.start() |
243 | 1590 |
|
463
961bddcfc913
Adding support for forcing PLC variable (still command to PLC to implement)
laurent
parents:
462
diff
changeset
|
1591 |
def GetDebugIECVariableType(self, IECPath): |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
1592 |
_Idx, IEC_Type = self._IECPathToIdx.get(IECPath, (None, None)) |
463
961bddcfc913
Adding support for forcing PLC variable (still command to PLC to implement)
laurent
parents:
462
diff
changeset
|
1593 |
return IEC_Type |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1594 |
|
1430 | 1595 |
def SubscribeDebugIECVariable(self, IECPath, callableobj, buffer_list=False): |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1596 |
""" |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1597 |
Dispatching use a dictionnary linking IEC variable paths |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1598 |
to a WeakKeyDictionary linking |
1430 | 1599 |
weakly referenced callables |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1600 |
""" |
1775
b45f2768fab1
clean-up: fix PEP8 E713 test for membership should be 'not in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
1601 |
if IECPath != "__tick__" and IECPath not in self._IECPathToIdx: |
246 | 1602 |
return None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1603 |
|
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1604 |
# If no entry exist, create a new one with a fresh WeakKeyDictionary |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1605 |
IECdebug_data = self.IECdebug_datas.get(IECPath, None) |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1606 |
if IECdebug_data is None: |
1754
63f4af6bf6d9
clean-up: fix most PEP8 E221 multiple spaces before operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1752
diff
changeset
|
1607 |
IECdebug_data = [ |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1608 |
WeakKeyDictionary(), # Callables |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1609 |
[], # Data storage [(tick, data),...] |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1610 |
"Registered", # Variable status |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1611 |
None, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1612 |
buffer_list] # Forced value |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1613 |
self.IECdebug_datas[IECPath] = IECdebug_data |
1365
debc97102b23
Added support for optimizing debug, preventing to filling buffers with only the last value for debug data consumers that only show the current state
Laurent Bessard
parents:
1364
diff
changeset
|
1614 |
else: |
debc97102b23
Added support for optimizing debug, preventing to filling buffers with only the last value for debug data consumers that only show the current state
Laurent Bessard
parents:
1364
diff
changeset
|
1615 |
IECdebug_data[4] |= buffer_list |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1616 |
|
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1617 |
IECdebug_data[0][callableobj] = buffer_list |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1618 |
|
243 | 1619 |
self.ReArmDebugRegisterTimer() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1620 |
|
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1621 |
return IECdebug_data[1] |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1622 |
|
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1623 |
def UnsubscribeDebugIECVariable(self, IECPath, callableobj): |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1624 |
IECdebug_data = self.IECdebug_datas.get(IECPath, None) |
243 | 1625 |
if IECdebug_data is not None: |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1626 |
IECdebug_data[0].pop(callableobj, None) |
1255
ff59c6a8b793
Fixed bug forced debug variable not released when unsubscribed and re-subscribed while PLC is stopped
Laurent Bessard
parents:
1176
diff
changeset
|
1627 |
if len(IECdebug_data[0]) == 0: |
ff59c6a8b793
Fixed bug forced debug variable not released when unsubscribed and re-subscribed while PLC is stopped
Laurent Bessard
parents:
1176
diff
changeset
|
1628 |
self.IECdebug_datas.pop(IECPath) |
1365
debc97102b23
Added support for optimizing debug, preventing to filling buffers with only the last value for debug data consumers that only show the current state
Laurent Bessard
parents:
1364
diff
changeset
|
1629 |
else: |
debc97102b23
Added support for optimizing debug, preventing to filling buffers with only the last value for debug data consumers that only show the current state
Laurent Bessard
parents:
1364
diff
changeset
|
1630 |
IECdebug_data[4] = reduce( |
1745
f9d32913bad4
clean-up: fix PEP8 E227 missing whitespace around bitwise or shift operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
1631 |
lambda x, y: x | y, |
1430 | 1632 |
IECdebug_data[0].itervalues(), |
1365
debc97102b23
Added support for optimizing debug, preventing to filling buffers with only the last value for debug data consumers that only show the current state
Laurent Bessard
parents:
1364
diff
changeset
|
1633 |
False) |
243 | 1634 |
|
1635 |
self.ReArmDebugRegisterTimer() |
|
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1636 |
|
334
b4131e5d10a4
Adding support for unsubscribe all variables while transferring
lbessard
parents:
328
diff
changeset
|
1637 |
def UnsubscribeAllDebugIECVariable(self): |
1089
5cd1f8df71aa
Fixed bug when transferring program and a output located variable is forced
Laurent Bessard
parents:
1080
diff
changeset
|
1638 |
self.IECdebug_datas = {} |
334
b4131e5d10a4
Adding support for unsubscribe all variables while transferring
lbessard
parents:
328
diff
changeset
|
1639 |
|
355 | 1640 |
self.ReArmDebugRegisterTimer() |
1641 |
||
474 | 1642 |
def ForceDebugIECVariable(self, IECPath, fvalue): |
1775
b45f2768fab1
clean-up: fix PEP8 E713 test for membership should be 'not in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
1643 |
if IECPath not in self.IECdebug_datas: |
474 | 1644 |
return |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1645 |
|
474 | 1646 |
# If no entry exist, create a new one with a fresh WeakKeyDictionary |
1647 |
IECdebug_data = self.IECdebug_datas.get(IECPath, None) |
|
1648 |
IECdebug_data[2] = "Forced" |
|
1649 |
IECdebug_data[3] = fvalue |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1650 |
|
474 | 1651 |
self.ReArmDebugRegisterTimer() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1652 |
|
463
961bddcfc913
Adding support for forcing PLC variable (still command to PLC to implement)
laurent
parents:
462
diff
changeset
|
1653 |
def ReleaseDebugIECVariable(self, IECPath): |
1775
b45f2768fab1
clean-up: fix PEP8 E713 test for membership should be 'not in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
1654 |
if IECPath not in self.IECdebug_datas: |
474 | 1655 |
return |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1656 |
|
474 | 1657 |
# If no entry exist, create a new one with a fresh WeakKeyDictionary |
1658 |
IECdebug_data = self.IECdebug_datas.get(IECPath, None) |
|
1659 |
IECdebug_data[2] = "Registered" |
|
1660 |
IECdebug_data[3] = None |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1661 |
|
474 | 1662 |
self.ReArmDebugRegisterTimer() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1663 |
|
355 | 1664 |
def CallWeakcallables(self, IECPath, function_name, *cargs): |
1665 |
data_tuple = self.IECdebug_datas.get(IECPath, None) |
|
1666 |
if data_tuple 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
|
1667 |
WeakCallableDict, _data_log, _status, _fvalue, buffer_list = data_tuple |
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1668 |
# data_log.append((debug_tick, value)) |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1669 |
for weakcallable, buffer_list in WeakCallableDict.iteritems(): |
355 | 1670 |
function = getattr(weakcallable, function_name, None) |
1671 |
if function is not None: |
|
1365
debc97102b23
Added support for optimizing debug, preventing to filling buffers with only the last value for debug data consumers that only show the current state
Laurent Bessard
parents:
1364
diff
changeset
|
1672 |
if buffer_list: |
1430 | 1673 |
function(*cargs) |
474 | 1674 |
else: |
1430 | 1675 |
function(*tuple([lst[-1] for lst in cargs])) |
334
b4131e5d10a4
Adding support for unsubscribe all variables while transferring
lbessard
parents:
328
diff
changeset
|
1676 |
|
670
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1677 |
def GetTicktime(self): |
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1678 |
return self._Ticktime |
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1679 |
|
699
6ff64cadb1ff
Adding support for executing python scripts on remote runtime
laurent
parents:
696
diff
changeset
|
1680 |
def RemoteExec(self, script, **kwargs): |
6ff64cadb1ff
Adding support for executing python scripts on remote runtime
laurent
parents:
696
diff
changeset
|
1681 |
if self._connector is None: |
703
2f7b3d1de278
Adding support for selecting plugin parameter value from a tree of available values
laurent
parents:
699
diff
changeset
|
1682 |
return -1, "No runtime connected!" |
699
6ff64cadb1ff
Adding support for executing python scripts on remote runtime
laurent
parents:
696
diff
changeset
|
1683 |
return self._connector.RemoteExec(script, **kwargs) |
6ff64cadb1ff
Adding support for executing python scripts on remote runtime
laurent
parents:
696
diff
changeset
|
1684 |
|
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
|
1685 |
def DispatchDebugValuesProc(self, event): |
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
|
1686 |
debug_ticks, buffers = self.SnapshotAndResetDebugValuesBuffers() |
1366
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1365
diff
changeset
|
1687 |
start_time = time.time() |
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
|
1688 |
if len(self.TracedIECPath) == len(buffers): |
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
|
1689 |
for IECPath, values in izip(self.TracedIECPath, buffers): |
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
|
1690 |
if len(values) > 0: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1691 |
self.CallWeakcallables( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1692 |
IECPath, "NewValues", debug_ticks, values) |
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
|
1693 |
if len(debug_ticks) > 0: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1694 |
self.CallWeakcallables( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1695 |
"__tick__", "NewDataAvailable", debug_ticks) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1696 |
|
1366
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1365
diff
changeset
|
1697 |
delay = time.time() - start_time |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1365
diff
changeset
|
1698 |
next_refresh = max(REFRESH_PERIOD - delay, 0.2 * delay) |
1995
691d119ba20f
Removed DebugThread. Take advantage of the fact that buffering is done in runtime. No need to poll for traces more than ten per second, then use simple wxTimer for that. Also removed Debug Lock since now everything happens in wx' mainloop.
Edouard Tisserant
parents:
1953
diff
changeset
|
1699 |
if self.DispatchDebugValuesTimer is not None: |
1366
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1365
diff
changeset
|
1700 |
self.DispatchDebugValuesTimer.Start( |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1365
diff
changeset
|
1701 |
int(next_refresh * 1000), oneShot=True) |
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
|
1702 |
event.Skip() |
235 | 1703 |
|
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
|
1704 |
def KillDebugThread(self): |
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
|
1705 |
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
|
1706 |
self.DispatchDebugValuesTimer.Stop() |
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
|
1707 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1708 |
def _connect_debug(self): |
914
94436558f0ce
More stable logging. Added small one-entry log for loading errors. Test now include python side concurrent logging
Edouard Tisserant
parents:
911
diff
changeset
|
1709 |
self.previous_plcstate = None |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1710 |
if self.AppFrame: |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1711 |
self.AppFrame.ResetGraphicViewers() |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1712 |
self.RegisterDebugVarToConnector() |
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
|
1713 |
if self.DispatchDebugValuesTimer is not None: |
1366
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1365
diff
changeset
|
1714 |
self.DispatchDebugValuesTimer.Start( |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1365
diff
changeset
|
1715 |
int(REFRESH_PERIOD * 1000), oneShot=True) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1716 |
|
462
274e83a5534e
Now debug is not a button anymore
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
461
diff
changeset
|
1717 |
def _Run(self): |
203 | 1718 |
""" |
464
46dd4358e8a8
Fixes in run : messages and refresh
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
463
diff
changeset
|
1719 |
Start PLC |
203 | 1720 |
""" |
350
a3a5561bde1d
- now call load, start, free PLC from the python Thread
greg
parents:
348
diff
changeset
|
1721 |
if self.GetIECProgramsAndVariables(): |
462
274e83a5534e
Now debug is not a button anymore
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
461
diff
changeset
|
1722 |
self._connector.StartPLC() |
464
46dd4358e8a8
Fixes in run : messages and refresh
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
463
diff
changeset
|
1723 |
self.logger.write(_("Starting PLC\n")) |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1724 |
self._connect_debug() |
203 | 1725 |
else: |
464
46dd4358e8a8
Fixes in run : messages and refresh
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
463
diff
changeset
|
1726 |
self.logger.write_error(_("Couldn't start PLC !\n")) |
675
44b35c27e9ff
Adding support for quickly open recent projects in file menu
laurent
parents:
674
diff
changeset
|
1727 |
wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1728 |
|
203 | 1729 |
def _Stop(self): |
1730 |
""" |
|
1731 |
Stop PLC |
|
1732 |
""" |
|
483
bc26c42d2eec
fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents:
481
diff
changeset
|
1733 |
if self._connector is not None and not self._connector.StopPLC(): |
bc26c42d2eec
fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents:
481
diff
changeset
|
1734 |
self.logger.write_error(_("Couldn't stop PLC !\n")) |
bc26c42d2eec
fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents:
481
diff
changeset
|
1735 |
|
689 | 1736 |
# debugthread should die on his own |
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1737 |
# self.KillDebugThread() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1738 |
|
675
44b35c27e9ff
Adding support for quickly open recent projects in file menu
laurent
parents:
674
diff
changeset
|
1739 |
wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
203 | 1740 |
|
1116
300f98a8d4c6
Fixed bug connector not resetted when connection is lost
Laurent Bessard
parents:
1105
diff
changeset
|
1741 |
def _SetConnector(self, connector, update_status=True): |
978 | 1742 |
self._connector = connector |
1743 |
if self.AppFrame is not None: |
|
1744 |
self.AppFrame.LogViewer.SetLogSource(connector) |
|
992 | 1745 |
if connector is not None: |
1396
bc14b43bd27f
Fixed non initialized timer causing exception in some rare cases (continued)
Edouard Tisserant
parents:
1395
diff
changeset
|
1746 |
if self.StatusTimer is not None: |
bc14b43bd27f
Fixed non initialized timer causing exception in some rare cases (continued)
Edouard Tisserant
parents:
1395
diff
changeset
|
1747 |
# Start the status Timer |
1524
70fc5688741e
fix non-working logging at first connection to PLC after Beremiz launch
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1517
diff
changeset
|
1748 |
wx.Yield() |
70fc5688741e
fix non-working logging at first connection to PLC after Beremiz launch
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1517
diff
changeset
|
1749 |
self.StatusTimer.Start(milliseconds=500, oneShot=False) |
992 | 1750 |
else: |
1395
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
1751 |
if self.StatusTimer is not None: |
1396
bc14b43bd27f
Fixed non initialized timer causing exception in some rare cases (continued)
Edouard Tisserant
parents:
1395
diff
changeset
|
1752 |
# Stop the status Timer |
1395
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
1753 |
self.StatusTimer.Stop() |
1116
300f98a8d4c6
Fixed bug connector not resetted when connection is lost
Laurent Bessard
parents:
1105
diff
changeset
|
1754 |
if update_status: |
300f98a8d4c6
Fixed bug connector not resetted when connection is lost
Laurent Bessard
parents:
1105
diff
changeset
|
1755 |
wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
992 | 1756 |
|
203 | 1757 |
def _Connect(self): |
922
60fafd828a30
Better PLC log message time stamp display. Better console information when connecting.
Edouard Tisserant
parents:
921
diff
changeset
|
1758 |
# don't accept re-connetion if already connected |
203 | 1759 |
if self._connector 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
|
1760 |
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
|
1761 |
_("Already connected. Please disconnect\n")) |
203 | 1762 |
return |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1763 |
|
203 | 1764 |
# Get connector uri |
1767
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
1765 |
uri = self.BeremizRoot.getURI_location().strip() |
203 | 1766 |
|
1767 |
# if uri is empty launch discovery dialog |
|
1768 |
if uri == "": |
|
740
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1769 |
try: |
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1770 |
# Launch Service Discovery dialog |
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1771 |
dialog = DiscoveryDialog(self.AppFrame) |
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1772 |
answer = dialog.ShowModal() |
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1773 |
uri = dialog.GetURI() |
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1774 |
dialog.Destroy() |
1780
c52d1460cea8
clean-up: fix PEP8 E722 do not use bare except'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1779
diff
changeset
|
1775 |
except Exception: |
801
435e49e80832
Update list of messages to be translated for internationalization and french translations
laurent
parents:
796
diff
changeset
|
1776 |
self.logger.write_error(_("Local service discovery failed!\n")) |
763
c1104099c151
Now, PYRO:// locations also accept MDNS service names
Edouard Tisserant
parents:
758
diff
changeset
|
1777 |
self.logger.write_error(traceback.format_exc()) |
740
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1778 |
uri = None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1779 |
|
203 | 1780 |
# Nothing choosed or cancel button |
392
6617d3fb43e2
Redesign DiscoveryDialog class to conform to others dialogs
laurent
parents:
382
diff
changeset
|
1781 |
if uri is None or answer == wx.ID_CANCEL: |
6617d3fb43e2
Redesign DiscoveryDialog class to conform to others dialogs
laurent
parents:
382
diff
changeset
|
1782 |
self.logger.write_error(_("Connection canceled!\n")) |
203 | 1783 |
return |
1784 |
else: |
|
1776
81aa8aaccdd4
clean-up: fix PEP8 E122 continuation line missing indentation or outdented
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1775
diff
changeset
|
1785 |
self.BeremizRoot.setURI_location(uri) |
764
f338651eca36
Fix bug project not marked as modified when changing URI_Location using discovery dialog
laurent
parents:
758
diff
changeset
|
1786 |
self.ChangesToSave = True |
746
2e09777a40d3
Fix refresh of ConfTreeNodeEditors content when values change
laurent
parents:
742
diff
changeset
|
1787 |
if self._View is not None: |
2e09777a40d3
Fix refresh of ConfTreeNodeEditors content when values change
laurent
parents:
742
diff
changeset
|
1788 |
self._View.RefreshView() |
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1789 |
if self.AppFrame is not None: |
764
f338651eca36
Fix bug project not marked as modified when changing URI_Location using discovery dialog
laurent
parents:
758
diff
changeset
|
1790 |
self.AppFrame.RefreshTitle() |
f338651eca36
Fix bug project not marked as modified when changing URI_Location using discovery dialog
laurent
parents:
758
diff
changeset
|
1791 |
self.AppFrame.RefreshFileMenu() |
f338651eca36
Fix bug project not marked as modified when changing URI_Location using discovery dialog
laurent
parents:
758
diff
changeset
|
1792 |
self.AppFrame.RefreshEditMenu() |
f338651eca36
Fix bug project not marked as modified when changing URI_Location using discovery dialog
laurent
parents:
758
diff
changeset
|
1793 |
self.AppFrame.RefreshPageTitles() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1794 |
|
203 | 1795 |
# Get connector from uri |
1796 |
try: |
|
978 | 1797 |
self._SetConnector(connectors.ConnectorFactory(uri, self)) |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1798 |
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
|
1799 |
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
|
1800 |
_("Exception while connecting %s!\n") % uri) |
203 | 1801 |
self.logger.write_error(traceback.format_exc()) |
1802 |
||
1803 |
# Did connection success ? |
|
1804 |
if self._connector is None: |
|
1805 |
# Oups. |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1733
diff
changeset
|
1806 |
self.logger.write_error(_("Connection failed to %s!\n") % uri) |
203 | 1807 |
else: |
1808 |
self.CompareLocalAndRemotePLC() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1809 |
|
350
a3a5561bde1d
- now call load, start, free PLC from the python Thread
greg
parents:
348
diff
changeset
|
1810 |
# Init with actual PLC status and print it |
446
1edde533db19
Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents:
440
diff
changeset
|
1811 |
self.UpdateMethodsFromPLCStatus() |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1812 |
if self.previous_plcstate in ["Started", "Stopped"]: |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1813 |
if self.DebugAvailable() and self.GetIECProgramsAndVariables(): |
922
60fafd828a30
Better PLC log message time stamp display. Better console information when connecting.
Edouard Tisserant
parents:
921
diff
changeset
|
1814 |
self.logger.write(_("Debugger ready\n")) |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1815 |
self._connect_debug() |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1816 |
else: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1817 |
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
|
1818 |
_("Debug does not match PLC - stop/transfert/start to re-enable\n")) |
203 | 1819 |
|
1820 |
def CompareLocalAndRemotePLC(self): |
|
1821 |
if self._connector is None: |
|
1822 |
return |
|
1823 |
# We are now connected. Update button status |
|
1824 |
MD5 = self.GetLastBuildMD5() |
|
1825 |
# Check remote target PLC correspondance to that md5 |
|
1826 |
if MD5 is not None: |
|
1827 |
if not self._connector.MatchMD5(MD5): |
|
1779
6cf16e5bfbf9
clean-up: fix PEP8 E115 expected an indented block (comment)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1777
diff
changeset
|
1828 |
# self.logger.write_warning( |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1829 |
# _("Latest build does not match with target, please |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1830 |
# transfer.\n")) |
203 | 1831 |
self.EnableMethod("_Transfer", True) |
1832 |
else: |
|
1779
6cf16e5bfbf9
clean-up: fix PEP8 E115 expected an indented block (comment)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1777
diff
changeset
|
1833 |
# self.logger.write( |
6cf16e5bfbf9
clean-up: fix PEP8 E115 expected an indented block (comment)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1777
diff
changeset
|
1834 |
# _("Latest build matches target, no transfer needed.\n")) |
203 | 1835 |
self.EnableMethod("_Transfer", True) |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1836 |
# warns controller that program match |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1837 |
self.ProgramTransferred() |
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1838 |
# self.EnableMethod("_Transfer", False) |
203 | 1839 |
else: |
1779
6cf16e5bfbf9
clean-up: fix PEP8 E115 expected an indented block (comment)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1777
diff
changeset
|
1840 |
# self.logger.write_warning( |
6cf16e5bfbf9
clean-up: fix PEP8 E115 expected an indented block (comment)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1777
diff
changeset
|
1841 |
# _("Cannot compare latest build to target. Please build.\n")) |
203 | 1842 |
self.EnableMethod("_Transfer", False) |
1843 |
||
1844 |
def _Disconnect(self): |
|
978 | 1845 |
self._SetConnector(None) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1846 |
|
203 | 1847 |
def _Transfer(self): |
1928
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1848 |
if self.IsPLCStarted(): |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1849 |
dialog = wx.MessageDialog( |
1953
5736d25bb393
PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents:
1948
diff
changeset
|
1850 |
self.AppFrame, |
5736d25bb393
PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents:
1948
diff
changeset
|
1851 |
_("Cannot transfer while PLC is running. Stop it now?"), |
5736d25bb393
PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents:
1948
diff
changeset
|
1852 |
style=wx.YES_NO | wx.CENTRE) |
1928
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1853 |
if dialog.ShowModal() == wx.ID_YES: |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1854 |
self._Stop() |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1855 |
else: |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1856 |
return |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1857 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1858 |
# Get the last build PLC's |
203 | 1859 |
MD5 = self.GetLastBuildMD5() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1860 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1861 |
# Check if md5 file is empty : ask user to build PLC |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1862 |
if MD5 is None: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1863 |
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
|
1864 |
_("Failed : Must build before transfer.\n")) |
203 | 1865 |
return False |
1866 |
||
1867 |
# Compare PLC project with PLC on target |
|
1868 |
if self._connector.MatchMD5(MD5): |
|
1869 |
self.logger.write( |
|
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
1870 |
_("Latest build already matches current target. Transfering anyway...\n")) |
203 | 1871 |
|
1872 |
# Get temprary directory path |
|
757
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
1873 |
extrafiles = [] |
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
1874 |
for extrafilespath in [self._getExtraFilesPath(), |
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
1875 |
self._getProjectFilesPath()]: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1876 |
|
757
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
1877 |
extrafiles.extend( |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1878 |
[(name, open(os.path.join(extrafilespath, name), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1879 |
'rb').read()) |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1880 |
for name in os.listdir(extrafilespath)]) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1881 |
|
203 | 1882 |
# Send PLC on target |
1883 |
builder = self.GetBuilder() |
|
1884 |
if builder is not None: |
|
1885 |
data = builder.GetBinaryCode() |
|
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1886 |
if data is not None: |
707
6880c88e499e
Fix bug in debugger when transfer without having build before and and opening debug view before running PLC
laurent
parents:
703
diff
changeset
|
1887 |
if self._connector.NewPLC(MD5, data, extrafiles) and self.GetIECProgramsAndVariables(): |
334
b4131e5d10a4
Adding support for unsubscribe all variables while transferring
lbessard
parents:
328
diff
changeset
|
1888 |
self.UnsubscribeAllDebugIECVariable() |
246 | 1889 |
self.ProgramTransferred() |
692
8b1ed486f374
Adding support for not closing debug tabs and remove variable in variable debug panel if instance still exist in newly transfered program
laurent
parents:
689
diff
changeset
|
1890 |
if self.AppFrame is not None: |
8b1ed486f374
Adding support for not closing debug tabs and remove variable in variable debug panel if instance still exist in newly transfered program
laurent
parents:
689
diff
changeset
|
1891 |
self.AppFrame.CloseObsoleteDebugTabs() |
746
2e09777a40d3
Fix refresh of ConfTreeNodeEditors content when values change
laurent
parents:
742
diff
changeset
|
1892 |
self.AppFrame.RefreshPouInstanceVariablesPanel() |
361 | 1893 |
self.logger.write(_("Transfer completed successfully.\n")) |
1752
d14ff9d7eb76
clean-up: fix PEP8 E703 statement ends with a semicolon
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1751
diff
changeset
|
1894 |
self.AppFrame.LogViewer.ResetLogCounters() |
203 | 1895 |
else: |
361 | 1896 |
self.logger.write_error(_("Transfer failed\n")) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1897 |
self.HidePLCProgress() |
203 | 1898 |
else: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1899 |
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
|
1900 |
_("No PLC to transfer (did build succeed ?)\n")) |
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
1901 |
|
675
44b35c27e9ff
Adding support for quickly open recent projects in file menu
laurent
parents:
674
diff
changeset
|
1902 |
wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
105
434aed8dc58d
Added ability to override plugin methods with arbitrary python code (methods.py) when loading plugins
etisserant
parents:
97
diff
changeset
|
1903 |
|
738 | 1904 |
StatusMethods = [ |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1905 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1906 |
"bitmap": "Build", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1907 |
"name": _("Build"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1908 |
"tooltip": _("Build project into build folder"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1909 |
"method": "_Build" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1910 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1911 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1912 |
"bitmap": "Clean", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1913 |
"name": _("Clean"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1914 |
"tooltip": _("Clean project build folder"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1915 |
"method": "_Clean", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1916 |
"enabled": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1917 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1918 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1919 |
"bitmap": "Run", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1920 |
"name": _("Run"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1921 |
"tooltip": _("Start PLC"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1922 |
"method": "_Run", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1923 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1924 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1925 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1926 |
"bitmap": "Stop", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1927 |
"name": _("Stop"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1928 |
"tooltip": _("Stop Running PLC"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1929 |
"method": "_Stop", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1930 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1931 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1932 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1933 |
"bitmap": "Connect", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1934 |
"name": _("Connect"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1935 |
"tooltip": _("Connect to the target PLC"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1936 |
"method": "_Connect" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1937 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1938 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1939 |
"bitmap": "Transfer", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1940 |
"name": _("Transfer"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1941 |
"tooltip": _("Transfer PLC"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1942 |
"method": "_Transfer", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1943 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1944 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1945 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1946 |
"bitmap": "Disconnect", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1947 |
"name": _("Disconnect"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1948 |
"tooltip": _("Disconnect from PLC"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1949 |
"method": "_Disconnect", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1950 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1951 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1952 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1953 |
"bitmap": "ShowIECcode", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1954 |
"name": _("Show code"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1955 |
"tooltip": _("Show IEC code generated by PLCGenerator"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1956 |
"method": "_showIECcode", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1957 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1958 |
}, |
738 | 1959 |
] |
1960 |
||
1961 |
ConfNodeMethods = [ |
|
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1962 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1963 |
"bitmap": "editIECrawcode", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1964 |
"name": _("Raw IEC code"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1965 |
"tooltip": _("Edit raw IEC code added to code generated by PLCGenerator"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1966 |
"method": "_editIECrawcode" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1967 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1968 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1969 |
"bitmap": "ManageFolder", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1970 |
"name": _("Project Files"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1971 |
"tooltip": _("Open a file explorer to manage project files"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1972 |
"method": "_OpenProjectFiles" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1973 |
}, |
65 | 1974 |
] |
738 | 1975 |
|
1976 |
def EnableMethod(self, method, value): |
|
1977 |
for d in self.StatusMethods: |
|
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1978 |
if d["method"] == method: |
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1979 |
d["enabled"] = value |
738 | 1980 |
return True |
1981 |
return False |
|
1982 |
||
1983 |
def ShowMethod(self, method, value): |
|
1984 |
for d in self.StatusMethods: |
|
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1985 |
if d["method"] == method: |
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1986 |
d["shown"] = value |
738 | 1987 |
return True |
1988 |
return False |
|
1989 |
||
1990 |
def CallMethod(self, method): |
|
1991 |
for d in self.StatusMethods: |
|
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1992 |
if d["method"] == method and d.get("enabled", True) and d.get("shown", True): |
738 | 1993 |
getattr(self, method)() |