author | Edouard Tisserant <edouard@beremiz.fr> |
Wed, 10 Jul 2024 11:10:05 +0200 | |
changeset 3985 | d0c5d77a33af |
parent 3887 | 2df45e4bd500 |
child 3969 | 22870ae8d8e1 |
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 |
|
3810
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
30 |
import sys |
1732
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
31 |
import os |
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
32 |
import traceback |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
33 |
import time |
1834
cd42b426028b
fix ungrouped imports from package X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
34 |
from time import localtime |
14
eb9fdd316a40
More precise design for plugins.... to be continued...
etisserant
parents:
13
diff
changeset
|
35 |
import shutil |
1732
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
36 |
import re |
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
37 |
import tempfile |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
38 |
import hashlib |
3833
73a44957c381
IDE: fix py3/wxpy4 related deprecation warnings
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3816
diff
changeset
|
39 |
import shutil |
20 | 40 |
from datetime import datetime |
725 | 41 |
from weakref import WeakKeyDictionary |
2456
7373e3048167
python3 support: pylint,W1610 # (reduce-builtin) reduce built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2450
diff
changeset
|
42 |
from functools import reduce |
3879
17d0d1641090
IDE: Libraries in OrderedDict for access by name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3874
diff
changeset
|
43 |
from collections import OrderedDict |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
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 |
2337
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
58 |
from dialogs import UriEditor, IDManager |
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 |
3887
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
63 |
from runtime.typemapping import DebugTypesSize, UnpackDebugBuffer, ValueToIECBytes |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
64 |
from runtime import PlcStatus |
2645
d15a997859b1
Solve import order problem when POULibrary imports ConfigTreeNode because of UserAddressedException. Now UserAddressedException is declared in POULibrary.py, as a quick and dirty fix, but some independant module should be created for beremiz exceptions in general.
Edouard Tisserant
parents:
2640
diff
changeset
|
65 |
from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage |
d15a997859b1
Solve import order problem when POULibrary imports ConfigTreeNode because of UserAddressedException. Now UserAddressedException is declared in POULibrary.py, as a quick and dirty fix, but some independant module should be created for beremiz exceptions in general.
Edouard Tisserant
parents:
2640
diff
changeset
|
66 |
from POULibrary import UserAddressedException |
725 | 67 |
|
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1672
diff
changeset
|
68 |
base_folder = paths.AbsParentDir(__file__) |
20 | 69 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
70 |
MATIEC_ERROR_MODEL = re.compile( |
2439
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
71 |
r".*\.st:(\d+)-(\d+)\.\.(\d+)-(\d+): (?:error)|(?:warning) : (.*)$") |
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
72 |
|
738 | 73 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
74 |
def ExtractChildrenTypesFromCatalog(catalog): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
75 |
children_types = [] |
3874
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
76 |
for name, displayname, _helpstr, moduleclassname in catalog: |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
77 |
if isinstance(moduleclassname, list): |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
78 |
children_types.extend(ExtractChildrenTypesFromCatalog(moduleclassname)) |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
79 |
else: |
3874
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
80 |
children_types.append((name, GetClassImporter(moduleclassname), displayname)) |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
81 |
return children_types |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
82 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
83 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
84 |
def ExtractMenuItemsFromCatalog(catalog): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
85 |
menu_items = [] |
3874
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
86 |
for name, displayname, helpstr, moduleclassname in catalog: |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
87 |
if isinstance(moduleclassname, list): |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
88 |
children = ExtractMenuItemsFromCatalog(moduleclassname) |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
89 |
else: |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
90 |
children = [] |
3874
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
91 |
menu_items.append((name, displayname, helpstr, children)) |
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
92 |
return menu_items |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
93 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
94 |
|
1282
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
95 |
def GetAddMenuItems(): |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
96 |
return ExtractMenuItemsFromCatalog(features.catalog) |
f427352f9727
Added support for left panel add menu with multiple levels
laurent
parents:
1262
diff
changeset
|
97 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
98 |
|
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
|
99 |
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
|
100 |
|
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
101 |
def __init__(self, controler): |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
102 |
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
|
103 |
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
|
104 |
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
|
105 |
self.ieclib_c_path = self.findLibCPath() |
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
106 |
self.controler = controler |
1685
578a46fb6b30
if there is no users matiec installation, then use system path to run iec2c
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
107 |
|
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 |
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
|
109 |
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
|
110 |
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
|
111 |
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
|
112 |
path = p |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
113 |
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
|
114 |
return path |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
115 |
|
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 |
def findCmd(self): |
3780
fdd7f9938e59
fix platform identification when running CLI under Win32
GP Orcullo <kinsamanka@gmail.com>
parents:
3778
diff
changeset
|
117 |
cmd = "iec2c" + (".exe" if os.name == 'nt' else "") |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
118 |
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
|
119 |
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
|
120 |
] |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
121 |
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
|
122 |
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
|
123 |
|
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 |
# 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
|
125 |
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
|
126 |
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
|
127 |
|
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
|
128 |
return cmd |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
129 |
|
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
|
130 |
def findLibPath(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
131 |
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
|
132 |
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
|
133 |
"/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
|
134 |
] |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
135 |
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
|
136 |
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
|
137 |
return path |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
138 |
|
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
139 |
def findLibCPath(self): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
140 |
path = None |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
141 |
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
|
142 |
paths = [ |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
143 |
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
|
144 |
self.ieclib_path] |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
145 |
path = self.findObject( |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
146 |
paths, |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
147 |
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
|
148 |
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
|
149 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
150 |
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
|
151 |
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
|
152 |
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
|
153 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
154 |
buildopt = "" |
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
155 |
try: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
156 |
# Invoke compiler. |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
157 |
# Output files are listed to stdout, errors to stderr |
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
158 |
_status, result, _err_result = ProcessLogger(self.controler.logger, buildcmd, |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
159 |
no_stdout=True, |
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
160 |
no_stderr=True).spin() |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
161 |
except Exception: |
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
162 |
self.controler.logger.write_error(_("Couldn't launch IEC compiler to determine compatible options.\n")) |
1630
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
163 |
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
|
164 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
165 |
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
|
166 |
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
|
167 |
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
|
168 |
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
|
169 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
170 |
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
|
171 |
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
|
172 |
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
|
173 |
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
|
174 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
175 |
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
|
176 |
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
|
177 |
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
|
178 |
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
|
179 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
180 |
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
|
181 |
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
|
182 |
|
f0030c3cd6ab
detect iec2c options and ieclib path only once during the first build
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1606
diff
changeset
|
183 |
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
|
184 |
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
|
185 |
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
|
186 |
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
|
187 |
|
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
|
188 |
|
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
189 |
def GetProjectControllerXSD(): |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
190 |
XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
191 |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
192 |
<xsd:element name="BeremizRoot"> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
193 |
<xsd:complexType> |
86 | 194 |
<xsd:sequence> |
195 |
<xsd:element name="TargetType"> |
|
196 |
<xsd:complexType> |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
197 |
<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
|
198 |
""" + 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
|
199 |
</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
|
200 |
</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
|
201 |
</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
|
202 |
<xsd:element name="Libraries" minOccurs="0"> |
730 | 203 |
<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
|
204 |
""" + "\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
|
205 |
'"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
|
206 |
'type="xsd:boolean" use="optional" default="' + |
3874
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
207 |
('false' if type(default)==str or default==False else 'true') + '"/>' |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
208 |
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
|
209 |
</xsd:complexType> |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
210 |
</xsd:element>""") if len(features.libraries) > 0 else '') + """ |
86 | 211 |
</xsd:sequence> |
204
f572ab819769
remove URI_location from XSD targets and add to pluginroot XSD
greg
parents:
203
diff
changeset
|
212 |
<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
|
213 |
<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
|
214 |
</xsd:complexType> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
215 |
</xsd:element> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
216 |
</xsd:schema> |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
217 |
""" |
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
218 |
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
|
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 |
|
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
221 |
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
|
222 |
|
1824
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
223 |
""" |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
224 |
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
|
225 |
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
|
226 |
- 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
|
227 |
- 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
|
228 |
- 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
|
229 |
- 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
|
230 |
- ... |
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
231 |
|
5765bea3dbd1
make it possible to update XSD schema in project controller after new
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1793
diff
changeset
|
232 |
""" |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
233 |
# 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
|
234 |
# 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
|
235 |
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
|
236 |
XSD = GetProjectControllerXSD() |
738 | 237 |
EditorType = ProjectNodeEditor |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
238 |
iec2c_cfg = None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
239 |
|
290
3bd617ae7a05
Local Runtime (LOCAL://) now launched "on demand"
etisserant
parents:
288
diff
changeset
|
240 |
def __init__(self, frame, logger): |
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
241 |
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
|
242 |
ConfigTreeNode.__init__(self) |
227
48c13b84505c
- Some improovements in debug data feedback data
etisserant
parents:
222
diff
changeset
|
243 |
|
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
244 |
if ProjectController.iec2c_cfg is None: |
2729
4e0cd7806776
IDE: Iec2CSettings: Log wasn't available in case of exception when launching iec2c.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2712
diff
changeset
|
245 |
ProjectController.iec2c_cfg = Iec2CSettings(self) |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
246 |
|
20 | 247 |
self.MandatoryParams = None |
203 | 248 |
self._builder = None |
249 |
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
|
250 |
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
|
251 |
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
|
252 |
self.DebugTicks = [] |
978 | 253 |
self.SetAppFrame(frame, logger) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
254 |
|
203 | 255 |
# Setup debug information |
227
48c13b84505c
- Some improovements in debug data feedback data
etisserant
parents:
222
diff
changeset
|
256 |
self.IECdebug_datas = {} |
222
d0f7d36bf241
Added lock to avoid variable subsciption concurrent to transmission to PLC
etisserant
parents:
217
diff
changeset
|
257 |
|
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
258 |
self.DebugUpdatePending = False |
203 | 259 |
self.ResetIECProgramsAndVariables() |
260 |
||
118 | 261 |
# 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
|
262 |
self.ChangesToSave = False |
23 | 263 |
# root have no parent |
718 | 264 |
self.CTNParent = None |
717 | 265 |
# Keep track of the confnode type name |
718 | 266 |
self.CTNType = "Beremiz" |
267 |
self.Children = {} |
|
738 | 268 |
self._View = None |
717 | 269 |
# After __init__ root confnode is not valid |
20 | 270 |
self.ProjectPath = None |
427 | 271 |
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
|
272 |
self.debug_break = False |
350
a3a5561bde1d
- now call load, start, free PLC from the python Thread
greg
parents:
348
diff
changeset
|
273 |
self.previous_plcstate = None |
2263 | 274 |
# copy StatusMethods so that it can be later customized |
754
a8c258f7bdcf
Fix bug in StatusToolBar items state when close and opening another project
laurent
parents:
746
diff
changeset
|
275 |
self.StatusMethods = [dic.copy() for dic in self.StatusMethods] |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
276 |
self.DebugToken = None |
3395
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
277 |
self.LastComplainDebugToken = None |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
278 |
self.debug_status = PlcStatus.Stopped |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
279 |
|
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
280 |
self.IECcodeDigest = None |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
281 |
self.LastBuiltIECcodeDigest = None |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
282 |
|
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
283 |
def LoadLibraries(self): |
3879
17d0d1641090
IDE: Libraries in OrderedDict for access by name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3874
diff
changeset
|
284 |
self.Libraries = OrderedDict() |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
285 |
TypeStack = [] |
3874
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
286 |
for libname, clsname, default in features.libraries: |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
287 |
lib_enabled = False if type(default)==str else default |
2462
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
288 |
if self.BeremizRoot.Libraries is not None: |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
289 |
enable_attr = getattr(self.BeremizRoot.Libraries, |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
290 |
"Enable_" + libname + "_Library") |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
291 |
if enable_attr is not None: |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
292 |
lib_enabled = enable_attr |
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
293 |
|
ed6b0e905fcb
Fix failing PLC build when building freshly created project that use default libraries blocks. When controller loads libraries according to attibutes in project files (BeremizRoot/Enable_{libname}_Library), use known default if attribute is missing.
Edouard Tisserant
parents:
2459
diff
changeset
|
294 |
if lib_enabled: |
732 | 295 |
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
|
296 |
TypeStack.append(Lib.GetTypes()) |
3879
17d0d1641090
IDE: Libraries in OrderedDict for access by name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3874
diff
changeset
|
297 |
self.Libraries[libname] = Lib |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
298 |
|
3874
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
299 |
def CTNAddChild(self, CTNName, CTNType, IEC_Channel=0): |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
300 |
""" |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
301 |
Project controller applies libraries requirements when adding new CTN |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
302 |
""" |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
303 |
res = ConfigTreeNode.CTNAddChild(self, CTNName, CTNType, IEC_Channel) |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
304 |
|
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
305 |
# find library associated with new CTN, if any |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
306 |
associated_lib = {default:libname |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
307 |
for libname, _clsname, default |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
308 |
in features.libraries}.get(CTNType, None) |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
309 |
|
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
310 |
# if any, then enable it if it wasn't and inform user |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
311 |
if associated_lib is not None: |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
312 |
# FIXME: This should be done with GetParamsAttribute |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
313 |
# but it fails with missing optional attributes |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
314 |
attrname = "Enable_" + associated_lib + "_Library" |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
315 |
libobj = self.BeremizRoot.Libraries |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
316 |
lib_enabled = False if libobj is None else getattr(libobj, attrname) |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
317 |
if not lib_enabled: |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
318 |
# use SetParamsAttribute to trigger reload of libs |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
319 |
self.SetParamsAttribute("BeremizRoot.Libraries.Enable_" + associated_lib + "_Library", True) |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
320 |
msg = _("Enabled {a1} library, required by {a2} extension\n").format( |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
321 |
a1=associated_lib, a2=CTNType) |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
322 |
self.GetCTRoot().logger.write(msg) |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
323 |
|
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
324 |
return res |
48d66d3fb3a6
IDE: Auto-select required libraries when adding extension
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3865
diff
changeset
|
325 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
326 |
def SetAppFrame(self, frame, logger): |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
327 |
self.AppFrame = frame |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
328 |
self.logger = logger |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
329 |
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
|
330 |
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
|
331 |
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
|
332 |
self.DispatchDebugValuesTimer = None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
333 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
334 |
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
|
335 |
|
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
336 |
# 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
|
337 |
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
|
338 |
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
|
339 |
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
|
340 |
self.StatusTimer) |
1395
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
341 |
|
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
342 |
if self._connector is not None: |
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
343 |
frame.LogViewer.SetLogSource(self._connector) |
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
344 |
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
|
345 |
|
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
|
346 |
# 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
|
347 |
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
|
348 |
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
|
349 |
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
|
350 |
self.DispatchDebugValuesTimer) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
351 |
|
717 | 352 |
self.RefreshConfNodesBlockLists() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
353 |
|
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
354 |
def ResetAppFrame(self, logger): |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
355 |
if self.AppFrame is not None: |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
356 |
self.AppFrame.Unbind(wx.EVT_TIMER, self.StatusTimer) |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
357 |
self.StatusTimer = None |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
358 |
self.AppFrame = None |
1793
c2f48d791d9f
fix bug with unfinished debug thread
Surkov Sergey <surkovsv93@gmail.com>
parents:
1789
diff
changeset
|
359 |
self.KillDebugThread() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
360 |
self.logger = logger |
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
361 |
|
738 | 362 |
def CTNName(self): |
363 |
return "Project" |
|
364 |
||
718 | 365 |
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
|
366 |
return self.ChangesToSave or not self.ProjectIsSaved() |
118 | 367 |
|
718 | 368 |
def CTNFullName(self): |
656
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
655
diff
changeset
|
369 |
return "" |
c1792dfc8c7e
Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents:
655
diff
changeset
|
370 |
|
718 | 371 |
def GetCTRoot(self): |
23 | 372 |
return self |
373 |
||
418 | 374 |
def GetIECLibPath(self): |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
375 |
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
|
376 |
|
418 | 377 |
def GetIEC2cPath(self): |
1789
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
378 |
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
|
379 |
|
23 | 380 |
def GetCurrentLocation(self): |
381 |
return () |
|
47
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
382 |
|
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
383 |
def GetCurrentName(self): |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
384 |
return "" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
385 |
|
47
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
386 |
def _GetCurrentName(self): |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
387 |
return "" |
fd45c291fed0
PLC and plugins compilation with gcc now starts (and fail).
etisserant
parents:
41
diff
changeset
|
388 |
|
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
389 |
def GetProjectPath(self): |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
390 |
return self.ProjectPath |
51
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
391 |
|
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
392 |
def GetProjectName(self): |
c31c55601556
Added project linking, and plugin init,cleanup,retrive and publish method calls in main
etisserant
parents:
49
diff
changeset
|
393 |
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
|
394 |
|
781
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
395 |
def GetIconName(self): |
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
396 |
return "PROJECT" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
397 |
|
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
398 |
def GetDefaultTargetName(self): |
3810
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
399 |
if sys.platform.startswith('linux'): |
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
400 |
return "Linux" |
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
401 |
elif sys.platform.startswith('darwin'): |
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
402 |
return "OSX" |
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
403 |
elif sys.platform.startswith('win32'): |
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
404 |
return "Win32" |
3810
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
405 |
|
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
406 |
# Fall back to Linux as default target |
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
407 |
return "Linux" |
eafb8f000584
Fix wrong default target being picked in CLI build
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3780
diff
changeset
|
408 |
|
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
409 |
|
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
410 |
def GetTarget(self): |
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
411 |
target = self.BeremizRoot.getTargetType() |
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
412 |
if target.getcontent() is None: |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
413 |
temp_root = self.Parser.CreateRoot() |
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
414 |
target = self.Parser.CreateElement("TargetType", "BeremizRoot") |
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
415 |
temp_root.setTargetType(target) |
510
8038c08b9874
Getting default target when no target defined fixed
laurent
parents:
506
diff
changeset
|
416 |
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
|
417 |
target.setcontent( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
418 |
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
|
419 |
return target |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
420 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1742
diff
changeset
|
421 |
def GetParamsAttributes(self, path=None): |
717 | 422 |
params = ConfigTreeNode.GetParamsAttributes(self, path) |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
423 |
if params[0]["name"] == "BeremizRoot": |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
424 |
for child in params[0]["children"]: |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
425 |
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
|
426 |
child.update( |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
427 |
self.GetTarget().getElementInfos("TargetType")) |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
428 |
return params |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
429 |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
430 |
def SetParamsAttribute(self, path, value): |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
431 |
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
|
432 |
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
|
433 |
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
|
434 |
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
|
435 |
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
|
436 |
return res |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
437 |
|
427 | 438 |
# helper func to check project path write permission |
3318
aee9e98c856a
IDE: Add a "Tutorials and Examples" sub menu to "File" menu to directly open projects in /exemples directory. Move 'python' and 'first_steps' projecvts from /tests to /exemple
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3302
diff
changeset
|
439 |
def CheckProjectPathPerm(self): |
427 | 440 |
if CheckPathPerm(self.ProjectPath): |
441 |
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
|
442 |
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
|
443 |
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
|
444 |
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
|
445 |
_('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
|
446 |
_('Error'), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
447 |
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
|
448 |
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
|
449 |
dialog.Destroy() |
5ec20f56b1d2
Fixed bug list of ConfNodes blocks not refreshed when a library was enable or disable
Laurent Bessard
parents:
1072
diff
changeset
|
450 |
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
|
451 |
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
|
452 |
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
|
453 |
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
|
454 |
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
|
455 |
return True |
427 | 456 |
return False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
457 |
|
1061 | 458 |
def _getProjectFilesPath(self, project_path=None): |
459 |
if project_path is not None: |
|
460 |
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
|
461 |
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
|
462 |
self.GetProjectPath(), "project_files") |
757
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
463 |
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
|
464 |
os.mkdir(projectfiles_path) |
3151495ae5bb
Adding support for importing into project some files to be transfered with PLC
laurent
parents:
754
diff
changeset
|
465 |
return projectfiles_path |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
466 |
|
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
467 |
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
|
468 |
self.ProjectAddConfiguration(config_name) |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
469 |
self.ProjectAddConfigurationResource(config_name, res_name) |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
470 |
|
1708
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
471 |
def SetProjectDefaultConfiguration(self): |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
472 |
# 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
|
473 |
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
|
474 |
self.GetProjectMainConfigurationName()) |
1708
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
475 |
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
|
476 |
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
|
477 |
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
|
478 |
def_task = [ |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
479 |
{'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
|
480 |
def_instance = [ |
24416137cda7
add dialog "add program", that appears after creating new project
Surkov Sergey <surkovsv93@gmail.com>
parents:
1685
diff
changeset
|
481 |
{'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
|
482 |
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
|
483 |
|
256 | 484 |
def NewProject(self, ProjectPath, BuildPath=None): |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
485 |
""" |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
486 |
Create a new project in an empty folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
487 |
@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
|
488 |
@param PLCParams: properties of the PLCOpen program created |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
489 |
""" |
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
490 |
# Verify that chosen folder is empty |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
491 |
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
|
492 |
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
|
493 |
|
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
494 |
# Create PLCOpen program |
738 | 495 |
self.CreateNewProject( |
496 |
{"projectName": _("Unnamed"), |
|
497 |
"productName": _("Unnamed"), |
|
801
435e49e80832
Update list of messages to be translated for internationalization and french translations
laurent
parents:
796
diff
changeset
|
498 |
"productVersion": "1", |
738 | 499 |
"companyName": _("Unknown"), |
500 |
"creationDateTime": datetime(*localtime()[:6])}) |
|
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
501 |
self.AddProjectDefaultConfiguration() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
502 |
|
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
503 |
# Change XSD into class members |
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
504 |
self._AddParamsMembers() |
718 | 505 |
self.Children = {} |
717 | 506 |
# 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
|
507 |
self.ProjectPath = ProjectPath |
427 | 508 |
self._setBuildPath(BuildPath) |
717 | 509 |
# get confnodes bloclist (is that usefull at project creation?) |
510 |
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
|
511 |
# 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
|
512 |
self.SaveProject() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
513 |
return None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
514 |
|
256 | 515 |
def LoadProject(self, ProjectPath, BuildPath=None): |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
516 |
""" |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
517 |
Load a project contained in a folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
518 |
@param ProjectPath: path of the project folder |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
519 |
""" |
190 | 520 |
if os.path.basename(ProjectPath) == "": |
521 |
ProjectPath = os.path.dirname(ProjectPath) |
|
978 | 522 |
# Verify that project contains a PLCOpen program |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
523 |
plc_file = os.path.join(ProjectPath, "plc.xml") |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
524 |
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
|
525 |
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
|
526 |
# 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
|
527 |
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
|
528 |
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
|
529 |
if self.Project is not None: |
1581
2295fdc5c271
fix translation strings with multiple parameters
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1579
diff
changeset
|
530 |
(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
|
531 |
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
|
532 |
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
|
533 |
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
|
534 |
return error, False |
839
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
535 |
if len(self.GetProjectConfigNames()) == 0: |
25ba9d74afb1
Adding support for adding default configuration on opened project without any
Laurent Bessard
parents:
815
diff
changeset
|
536 |
self.AddProjectDefaultConfiguration() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
537 |
# Change XSD into class members |
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
538 |
self._AddParamsMembers() |
718 | 539 |
self.Children = {} |
717 | 540 |
# 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
|
541 |
self.ProjectPath = ProjectPath |
427 | 542 |
self._setBuildPath(BuildPath) |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
543 |
# If dir have already be made, and file exist |
718 | 544 |
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
|
545 |
# Load the confnode.xml file into parameters members |
203 | 546 |
result = self.LoadXMLParams() |
17
ee8cb104dbe0
First commit of Beremiz new version with plugin support
lbessard
parents:
16
diff
changeset
|
547 |
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
|
548 |
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
|
549 |
# Load and init all the children |
718 | 550 |
self.LoadChildren() |
717 | 551 |
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
|
552 |
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
|
553 |
return None, False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
554 |
|
738 | 555 |
def RecursiveConfNodeInfos(self, confnode): |
556 |
values = [] |
|
557 |
for CTNChild in confnode.IECSortedChildren(): |
|
558 |
values.append( |
|
559 |
{"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
|
560 |
CTNChild.CTNName()), |
1105
f0e5b475a074
Fixed bug when modifying ConfTreeNode IEC Channel
Laurent Bessard
parents:
1089
diff
changeset
|
561 |
"tagname": CTNChild.CTNFullName(), |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
562 |
"type": ITEM_CONFNODE, |
738 | 563 |
"confnode": CTNChild, |
781
cdc6393705ce
Adding support using plcopeneditor bitmap library for icon request
laurent
parents:
774
diff
changeset
|
564 |
"icon": CTNChild.GetIconName(), |
738 | 565 |
"values": self.RecursiveConfNodeInfos(CTNChild)}) |
566 |
return values |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
567 |
|
738 | 568 |
def GetProjectInfos(self): |
569 |
infos = PLCControler.GetProjectInfos(self) |
|
570 |
configurations = infos["values"].pop(-1) |
|
571 |
resources = None |
|
572 |
for config_infos in configurations["values"]: |
|
573 |
if resources is None: |
|
574 |
resources = config_infos["values"][0] |
|
575 |
else: |
|
576 |
resources["values"].extend(config_infos["values"][0]["values"]) |
|
577 |
if resources is not None: |
|
578 |
infos["values"].append(resources) |
|
579 |
infos["values"].extend(self.RecursiveConfNodeInfos(self)) |
|
580 |
return infos |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
581 |
|
403 | 582 |
def CloseProject(self): |
718 | 583 |
self.ClearChildren() |
417
a895ae50b737
Adding support for declaring PluginRoot outside of Beremiz
laurent
parents:
415
diff
changeset
|
584 |
self.ResetAppFrame(None) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
585 |
|
1606
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
586 |
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
|
587 |
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
|
588 |
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
|
589 |
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
|
590 |
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
|
591 |
dialog.ShowModal() |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
592 |
return False |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
593 |
else: |
2505
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
594 |
if not CheckPathPerm(new_project_path): |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
595 |
dialog = wx.MessageDialog( |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
596 |
self.AppFrame, |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
597 |
_('No write permissions in selected directory! \n'), |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
598 |
_("Error"), wx.OK | wx.ICON_ERROR) |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
599 |
dialog.ShowModal() |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
600 |
return False |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
601 |
if not os.path.isdir(new_project_path) or len(os.listdir(new_project_path)) > 0: |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
602 |
plc_file = os.path.join(new_project_path, "plc.xml") |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
603 |
if os.path.isfile(plc_file): |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
604 |
message = _("Selected directory already contains another project. Overwrite? \n") |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
605 |
else: |
3487fd4fb9bf
fix 'SaveAs' to non-empty directory and directory without write permissions
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2456
diff
changeset
|
606 |
message = _("Selected directory isn't empty. Continue? \n") |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
607 |
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
|
608 |
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
|
609 |
answer = dialog.ShowModal() |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
610 |
return answer == wx.ID_YES |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
611 |
return True |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
612 |
|
1061 | 613 |
def SaveProject(self, from_project_path=None): |
3318
aee9e98c856a
IDE: Add a "Tutorials and Examples" sub menu to "File" menu to directly open projects in /exemples directory. Move 'python' and 'first_steps' projecvts from /tests to /exemple
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3302
diff
changeset
|
614 |
if self.CheckProjectPathPerm(): |
1061 | 615 |
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
|
616 |
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
|
617 |
from_project_path) |
1061 | 618 |
if os.path.isdir(old_projectfiles_path): |
3833
73a44957c381
IDE: fix py3/wxpy4 related deprecation warnings
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3816
diff
changeset
|
619 |
shutil.copytree(old_projectfiles_path, |
2506
8dbdf20f795b
fix 'SaveAs' in case of overwriting existing project
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2505
diff
changeset
|
620 |
self._getProjectFilesPath(self.ProjectPath)) |
41
1608a434fb8c
Adding support for refreshing PLCOpenEditor block list
lbessard
parents:
40
diff
changeset
|
621 |
self.SaveXMLFile(os.path.join(self.ProjectPath, 'plc.xml')) |
1061 | 622 |
result = self.CTNRequestSave(from_project_path) |
427 | 623 |
if result: |
624 |
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
|
625 |
|
1061 | 626 |
def SaveProjectAs(self): |
427 | 627 |
# Ask user to choose a path with write permissions |
529 | 628 |
if wx.Platform == '__WXMSW__': |
629 |
path = os.getenv("USERPROFILE") |
|
630 |
else: |
|
631 |
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
|
632 |
dirdialog = wx.DirDialog( |
3480
078d72552c3e
IDE: fix saveAs dialog
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3476
diff
changeset
|
633 |
self.AppFrame, _("Create or choose an empty directory to save project"), path, wx.DD_NEW_DIR_BUTTON) |
427 | 634 |
answer = dirdialog.ShowModal() |
3480
078d72552c3e
IDE: fix saveAs dialog
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3476
diff
changeset
|
635 |
newprojectpath = dirdialog.GetPath() |
427 | 636 |
dirdialog.Destroy() |
637 |
if answer == wx.ID_OK: |
|
638 |
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
|
639 |
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
|
640 |
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
|
641 |
self.SaveProject(old_project_path) |
99a02c6161b6
add check of new project path in Save As
Sergey Surkov <surkovsv93@gmail.com>
parents:
1602
diff
changeset
|
642 |
self._setBuildPath(self.BuildPath) |
427 | 643 |
return True |
644 |
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
|
645 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
646 |
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
|
647 |
self.LoadLibraries() |
3879
17d0d1641090
IDE: Libraries in OrderedDict for access by name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3874
diff
changeset
|
648 |
return [lib.GetTypes() for lib in self.Libraries.values()] |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
649 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
650 |
def GetLibrariesSTCode(self): |
3879
17d0d1641090
IDE: Libraries in OrderedDict for access by name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3874
diff
changeset
|
651 |
return "\n".join([lib.GetSTCode() for lib in self.Libraries.values()]) |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
652 |
|
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
653 |
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
|
654 |
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
|
655 |
return [], [], () |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
656 |
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
|
657 |
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
|
658 |
self.GetIECLibPath()) |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
659 |
LocatedCCodeAndFlags = [] |
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
660 |
Extras = [] |
3879
17d0d1641090
IDE: Libraries in OrderedDict for access by name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3874
diff
changeset
|
661 |
for lib in self.Libraries.values(): |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
662 |
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
|
663 |
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
|
664 |
if len(res) > 2: |
869
abf90a44c265
Fix bug when more than one block library add extra python file
Laurent Bessard
parents:
842
diff
changeset
|
665 |
Extras.extend(res[2:]) |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
666 |
return list(map(list, 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
|
667 |
|
717 | 668 |
# Update PLCOpenEditor ConfNode Block types from loaded confnodes |
669 |
def RefreshConfNodesBlockLists(self): |
|
718 | 670 |
if getattr(self, "Children", None) is not None: |
717 | 671 |
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
|
672 |
self.AddConfNodeTypesList(self.GetLibrariesTypes()) |
395 | 673 |
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
|
674 |
self.AppFrame.RefreshLibraryPanel() |
395 | 675 |
self.AppFrame.RefreshEditor() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
676 |
|
443
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
677 |
# Update a PLCOpenEditor Pou variable location |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
678 |
def UpdateProjectVariableLocation(self, old_leading, new_leading): |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
679 |
self.Project.updateElementAddress(old_leading, new_leading) |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
680 |
self.BufferProject() |
34c9788bd933
Adding support for updating located variables when changing plugin IEC_Channel
laurent
parents:
440
diff
changeset
|
681 |
if self.AppFrame is not None: |
468 | 682 |
self.AppFrame.RefreshTitle() |
730 | 683 |
self.AppFrame.RefreshPouInstanceVariablesPanel() |
468 | 684 |
self.AppFrame.RefreshFileMenu() |
685 |
self.AppFrame.RefreshEditMenu() |
|
842 | 686 |
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
|
687 |
|
401
8106a853a7c7
Adding support for displaying plugins available variable into Beremiz plugin tree
laurent
parents:
396
diff
changeset
|
688 |
def GetVariableLocationTree(self): |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
689 |
''' |
717 | 690 |
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
|
691 |
|
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
692 |
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
|
693 |
|
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
694 |
- 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
|
695 |
- 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
|
696 |
''' |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
697 |
children = [] |
718 | 698 |
for child in self.IECSortedChildren(): |
411
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
699 |
children.append(child.GetVariableLocationTree()) |
8261c8f1e365
Bug on Debug trying to start (and stop) before PLC started fixed.
laurent
parents:
403
diff
changeset
|
700 |
return children |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
701 |
|
718 | 702 |
def CTNPath(self, CTNName=None): |
13
f1f0edbeb313
More precise design for plugins.... to be continued...
etisserant
parents:
diff
changeset
|
703 |
return self.ProjectPath |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
704 |
|
718 | 705 |
def ConfNodeXmlFilePath(self, CTNName=None): |
706 |
return os.path.join(self.CTNPath(CTNName), "beremiz.xml") |
|
18 | 707 |
|
669
472469f4d5ad
Adding support for loading datatypes defined in plugins to allow to use them in PLC program
laurent
parents:
661
diff
changeset
|
708 |
def ParentsTypesFactory(self): |
717 | 709 |
return self.ConfNodeTypesFactory() |
363
e0c4d3549369
Adding support for recursively generate STLibrary and BlockLibrary according to plugin tree
laurent
parents:
361
diff
changeset
|
710 |
|
427 | 711 |
def _setBuildPath(self, buildpath): |
712 |
self.BuildPath = buildpath |
|
713 |
self.DefaultBuildPath = None |
|
714 |
if self._builder is not None: |
|
715 |
self._builder.SetBuildPath(self._getBuildPath()) |
|
716 |
||
20 | 717 |
def _getBuildPath(self): |
427 | 718 |
# BuildPath is defined by user |
719 |
if self.BuildPath is not None: |
|
720 |
return self.BuildPath |
|
721 |
# BuildPath isn't defined by user but already created by default |
|
722 |
if self.DefaultBuildPath is not None: |
|
723 |
return self.DefaultBuildPath |
|
724 |
# Create a build path in project folder if user has permissions |
|
725 |
if CheckPathPerm(self.ProjectPath): |
|
726 |
self.DefaultBuildPath = os.path.join(self.ProjectPath, "build") |
|
727 |
# Create a build path in temp folder |
|
728 |
else: |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
729 |
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
|
730 |
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
|
731 |
|
427 | 732 |
if not os.path.exists(self.DefaultBuildPath): |
733 |
os.makedirs(self.DefaultBuildPath) |
|
734 |
return self.DefaultBuildPath |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
735 |
|
203 | 736 |
def _getExtraFilesPath(self): |
737 |
return os.path.join(self._getBuildPath(), "extra_files") |
|
738 |
||
20 | 739 |
def _getIECcodepath(self): |
740 |
# define name for IEC code file |
|
741 |
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
|
742 |
|
65 | 743 |
def _getIECgeneratedcodepath(self): |
744 |
# define name for IEC generated code file |
|
745 |
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
|
746 |
|
65 | 747 |
def _getIECrawcodepath(self): |
748 |
# define name for IEC raw code file |
|
718 | 749 |
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
|
750 |
|
97 | 751 |
def GetLocations(self): |
752 |
locations = [] |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
753 |
filepath = os.path.join(self._getBuildPath(), "LOCATED_VARIABLES.h") |
97 | 754 |
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
|
755 |
# 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
|
756 |
# 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
|
757 |
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
|
758 |
os.path.join(self._getBuildPath(), "LOCATED_VARIABLES.h")) |
97 | 759 |
# each line of LOCATED_VARIABLES.h declares a located variable |
760 |
lines = [line.strip() for line in location_file.readlines()] |
|
761 |
# 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
|
762 |
LOCATED_MODEL = re.compile( |
2439
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
763 |
r"__LOCATED_VAR\((?P<IEC_TYPE>[A-Z]*),(?P<NAME>[_A-Za-z0-9]*),(?P<DIR>[QMI])(?:,(?P<SIZE>[XBWDL]))?,(?P<LOC>[,0-9]*)\)") |
97 | 764 |
for line in lines: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
765 |
# If line match RE, |
97 | 766 |
result = LOCATED_MODEL.match(line) |
767 |
if result: |
|
768 |
# Get the resulting dict |
|
769 |
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
|
770 |
# 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
|
771 |
# integers |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
772 |
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
|
773 |
# set located size to 'X' if not given |
97 | 774 |
if not resdict['SIZE']: |
775 |
resdict['SIZE'] = 'X' |
|
776 |
# finally store into located variable list |
|
777 |
locations.append(resdict) |
|
778 |
return locations |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
779 |
|
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
780 |
def GetConfNodeGlobalInstances(self): |
3266
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
781 |
LibGlobals = [] |
3879
17d0d1641090
IDE: Libraries in OrderedDict for access by name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3874
diff
changeset
|
782 |
for lib in self.Libraries.values(): |
3266
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
783 |
LibGlobals += lib.GlobalInstances() |
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
784 |
CTNGlobals = self._GlobalInstances() |
aff5cedb35ba
IDE: Allow POU Libraries to inject PLC Configurations globals during build.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3262
diff
changeset
|
785 |
return LibGlobals + CTNGlobals |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
786 |
|
203 | 787 |
def _Generate_SoftPLC(self): |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
788 |
if self._Generate_PLC_ST(): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
789 |
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
|
790 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
791 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
792 |
def _Generate_PLC_ST(self): |
20 | 793 |
""" |
64 | 794 |
Generate SoftPLC ST/IL/SFC code out of PLCOpenEditor controller, and compile it with IEC2C |
20 | 795 |
@param buildpath: path where files should be created |
796 |
""" |
|
797 |
||
717 | 798 |
# Update PLCOpenEditor ConfNode Block types before generate ST code |
799 |
self.RefreshConfNodesBlockLists() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
800 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
801 |
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
|
802 |
_("Generating SoftPLC IEC-61131 ST/IL/SFC code...\n")) |
20 | 803 |
# 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
|
804 |
_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
|
805 |
self._getIECgeneratedcodepath()) |
309
6eb074f0dae9
Adding support for cancelling code generation of function with no input connected
lbessard
parents:
304
diff
changeset
|
806 |
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
|
807 |
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
|
808 |
_("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
|
809 |
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
|
810 |
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
|
811 |
if len(errors) > 0: |
20 | 812 |
# Failed ! |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
813 |
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
|
814 |
_("Error in ST/IL/SFC code generator :\n%s\n") % errors[0]) |
20 | 815 |
return False |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
816 |
|
717 | 817 |
# Add ST Library from confnodes |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
818 |
IECCodeContent = self.GetLibrariesSTCode() |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
819 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
820 |
IECrawcodepath = self._getIECrawcodepath() |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
821 |
if os.path.isfile(IECrawcodepath): |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
822 |
IECCodeContent += open(IECrawcodepath, "r").read() + "\n" |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
823 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
824 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
825 |
# Compute offset before ST resulting of transformation from user POUs |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
826 |
self.ProgramOffset = IECCodeContent.count("\n") |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
827 |
|
3421
70ef15fca028
IDE: follow-up on change in 83ed4ea362db - added workaround when matiec generated files contain unexpected characters.
Edouard Tisserant
parents:
3396
diff
changeset
|
828 |
POUsIECCodeContent = open(self._getIECgeneratedcodepath(), "r").read() |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
829 |
|
3380
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
830 |
IECcodepath = self._getIECcodepath() |
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
831 |
|
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
832 |
if not os.path.exists(IECcodepath): |
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
833 |
self.LastBuiltIECcodeDigest = None |
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
834 |
|
794e39598e46
Follow-up on 83ed4ea362db 'IDE: prevent invoking matiec when IEC code did not change since last build' : build unconditionally after clean
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3376
diff
changeset
|
835 |
with open(IECcodepath, "w") as plc_file: |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
836 |
plc_file.write(IECCodeContent) |
3421
70ef15fca028
IDE: follow-up on change in 83ed4ea362db - added workaround when matiec generated files contain unexpected characters.
Edouard Tisserant
parents:
3396
diff
changeset
|
837 |
plc_file.write(POUsIECCodeContent) |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
838 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
839 |
hasher = hashlib.md5() |
3755 | 840 |
hasher.update(IECCodeContent.encode()) |
841 |
hasher.update(POUsIECCodeContent.encode()) |
|
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
842 |
self.IECcodeDigest = hasher.hexdigest() |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
843 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
844 |
return True |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
845 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
846 |
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
|
847 |
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
|
848 |
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
|
849 |
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
|
850 |
return False |
492e2cd6157e
fix problem when Beremiz is running without matiec installed
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
851 |
|
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
852 |
if self.LastBuiltIECcodeDigest == self.IECcodeDigest: |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
853 |
self.logger.write(_("IEC program did no change, not re-compiling into C code.\n")) |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
854 |
return True |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
855 |
|
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
856 |
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
|
857 |
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
|
858 |
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
|
859 |
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
|
860 |
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
|
861 |
iec2c_libpath, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
862 |
buildpath, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
863 |
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
|
864 |
|
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
|
865 |
try: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
866 |
# Invoke compiler. |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
867 |
# 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
|
868 |
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
|
869 |
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
|
870 |
no_stderr=True).spin() |
2418
5587c490a070
Use python 3 compatible exception syntax everywhere
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2416
diff
changeset
|
871 |
except Exception as e: |
1451
94e620cbd9de
Added Ronan Bignaux (genesis) patch to use wxversion. Fixed side effects with sys.path. Other cosmetic fixes about path included.
Edouard Tisserant
parents:
1448
diff
changeset
|
872 |
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
|
873 |
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
|
874 |
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
|
875 |
|
20 | 876 |
if status: |
877 |
# Failed ! |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
878 |
|
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
879 |
# 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
|
880 |
# 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
|
881 |
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
|
882 |
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
|
883 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
884 |
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
|
885 |
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
|
886 |
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
|
887 |
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
|
888 |
|
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
889 |
last_section = None |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
890 |
f = open(self._getIECcodepath()) |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
891 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
892 |
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
|
893 |
i = i + 1 |
356
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
894 |
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
|
895 |
last_section = line |
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
896 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
897 |
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
|
898 |
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
|
899 |
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
|
900 |
"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
|
901 |
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
|
902 |
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
|
903 |
|
e9698d0ee5f3
Adding support for printing lines where matiec failed in Log console (thanks to Brendan)
lbessard
parents:
355
diff
changeset
|
904 |
f.close() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
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 |
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
|
907 |
_("Error : IEC to C compiler returned %d\n") % status) |
20 | 908 |
return False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
909 |
|
20 | 910 |
# 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
|
911 |
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
|
912 |
-2:] == ".c" or fname[-2:] == ".C"] |
20 | 913 |
# remove those that are not to be compiled because included by others |
914 |
C_files.remove("POUS.c") |
|
115 | 915 |
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
|
916 |
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
|
917 |
_("Error : At least one configuration and one resource must be declared in PLC !\n")) |
115 | 918 |
return False |
20 | 919 |
# transform those base names to full names with path |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
920 |
C_files = [os.path.join(buildpath, filename) for filename in 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
|
921 |
|
56bef276055e
Made declaration from beremiz.h available to C pragmas in POUs. Added AtomicCompareExchange to beremiz.h
Edouard Tisserant
parents:
1006
diff
changeset
|
922 |
# 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
|
923 |
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
|
924 |
-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
|
925 |
H_files.remove("LOCATED_VARIABLES.h") |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
926 |
H_files = [os.path.join(buildpath, filename) for filename in 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
|
927 |
for H_file in H_files: |
2442
b13f021c68a5
python3 support: pylint, W1607 # (file-builtin) file built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2441
diff
changeset
|
928 |
with open(H_file, 'r') as original: |
1756
08e4394ff4fb
clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1754
diff
changeset
|
929 |
data = original.read() |
2442
b13f021c68a5
python3 support: pylint, W1607 # (file-builtin) file built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2441
diff
changeset
|
930 |
with open(H_file, 'w') as modified: |
1756
08e4394ff4fb
clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1754
diff
changeset
|
931 |
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
|
932 |
|
361 | 933 |
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
|
934 |
# 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
|
935 |
# self._Generate_C |
97 | 936 |
self.PLCGeneratedLocatedVars = self.GetLocations() |
718 | 937 |
# Keep track of generated C files for later use by self.CTNGenerate_C |
18 | 938 |
self.PLCGeneratedCFiles = C_files |
49
45dc6a944ab6
On the long wat towards generated code comilation...
etisserant
parents:
47
diff
changeset
|
939 |
# 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
|
940 |
self.plcCFLAGS = '"-I%s" -Wno-unused-function' % self.iec2c_cfg.getLibCPath() |
3376
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
941 |
|
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
942 |
self.LastBuiltIECcodeDigest = self.IECcodeDigest |
83ed4ea362db
IDE: prevent invoking matiec when IEC code did not change since last build.
Edouard Tisserant
parents:
3318
diff
changeset
|
943 |
|
18 | 944 |
return True |
945 |
||
203 | 946 |
def GetBuilder(self): |
947 |
""" |
|
948 |
Return a Builder (compile C code into machine code) |
|
949 |
""" |
|
950 |
# Get target, module and class name |
|
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1282
diff
changeset
|
951 |
targetname = self.GetTarget().getcontent().getLocalTag() |
733
915be999f3f0
targets and connectors are nor extensible
Edouard Tisserant
parents:
732
diff
changeset
|
952 |
targetclass = targets.GetBuilder(targetname) |
203 | 953 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
954 |
# if target already |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
955 |
if self._builder is None or not isinstance(self._builder, targetclass): |
203 | 956 |
# Get classname instance |
957 |
self._builder = targetclass(self) |
|
958 |
return self._builder |
|
959 |
||
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
960 |
# |
203 | 961 |
# |
962 |
# C CODE GENERATION METHODS |
|
963 |
# |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
964 |
# |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
965 |
|
718 | 966 |
def CTNGenerate_C(self, buildpath, locations): |
203 | 967 |
""" |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
968 |
Return C code generated by iec2c compiler |
203 | 969 |
when _generate_softPLC have been called |
970 |
@param locations: ignored |
|
971 |
@return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND |
|
972 |
""" |
|
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
|
973 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
974 |
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
|
975 |
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
|
976 |
"", # 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
|
977 |
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
|
978 |
|
203 | 979 |
def ResetIECProgramsAndVariables(self): |
980 |
""" |
|
981 |
Reset variable and program list that are parsed from |
|
982 |
CSV file generated by IEC2C compiler. |
|
983 |
""" |
|
984 |
self._ProgramList = None |
|
985 |
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
|
986 |
self._DbgVariablesList = None |
532
a822b0b64252
Fixed startin debugger with non empty debug variable list
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
529
diff
changeset
|
987 |
self._IECPathToIdx = {} |
670
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
988 |
self._Ticktime = 0 |
235 | 989 |
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
|
990 |
self.TracedIECTypes = [] |
235 | 991 |
|
203 | 992 |
def GetIECProgramsAndVariables(self): |
993 |
""" |
|
994 |
Parse CSV-like file VARIABLES.csv resulting from IEC2C compiler. |
|
995 |
Each section is marked with a line staring with '//' |
|
996 |
list of all variables used in various POUs |
|
997 |
""" |
|
998 |
if self._ProgramList is None or self._VariablesList is None: |
|
999 |
try: |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1000 |
csvfile = os.path.join(self._getBuildPath(), "VARIABLES.csv") |
203 | 1001 |
# describes CSV columns |
1002 |
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
|
1003 |
VariablesListAttributeName = [ |
3396
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1004 |
"num", "vartype", "IEC_path", "C_path", "type", "derived", "retain"] |
203 | 1005 |
self._ProgramList = [] |
1006 |
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
|
1007 |
self._DbgVariablesList = [] |
203 | 1008 |
self._IECPathToIdx = {} |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1009 |
|
203 | 1010 |
# Separate sections |
1011 |
ListGroup = [] |
|
2441
c553769a65af
python3 support: pylint, W1659 # (xreadlines-attribute) Accessing a removed xreadlines attribute
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2439
diff
changeset
|
1012 |
for line in open(csvfile, 'r').readlines(): |
203 | 1013 |
strippedline = line.strip() |
1014 |
if strippedline.startswith("//"): |
|
1015 |
# Start new section |
|
1016 |
ListGroup.append([]) |
|
1017 |
elif len(strippedline) > 0 and len(ListGroup) > 0: |
|
1018 |
# append to this section |
|
1019 |
ListGroup[-1].append(strippedline) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1020 |
|
203 | 1021 |
# first section contains programs |
1022 |
for line in ListGroup[0]: |
|
1023 |
# 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
|
1024 |
attrs = dict( |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1025 |
list(zip(ProgramsListAttributeName, line.strip().split(';')))) |
1722
89824afffef2
fix some typos
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1708
diff
changeset
|
1026 |
# 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
|
1027 |
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
|
1028 |
attrs["C_path"].split(".", 2)[1:]) |
203 | 1029 |
# Push this dictionnary into result. |
1030 |
self._ProgramList.append(attrs) |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1031 |
|
203 | 1032 |
# second section contains all variables |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1033 |
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
|
1034 |
Idx = 0 |
203 | 1035 |
for line in ListGroup[1]: |
1036 |
# 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
|
1037 |
attrs = dict( |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1038 |
list(zip(VariablesListAttributeName, line.strip().split(';')))) |
1722
89824afffef2
fix some typos
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1708
diff
changeset
|
1039 |
# 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
|
1040 |
parts = attrs["C_path"].split(".", 2) |
639
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
1041 |
if len(parts) > 2: |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1042 |
config_FB = config_FBs.get(tuple(parts[:2])) |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1043 |
if config_FB: |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1044 |
parts = [config_FB] + parts[2:] |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1045 |
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
|
1046 |
else: |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1047 |
attrs["C_path"] = '__'.join(parts[1:]) |
639
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
1048 |
else: |
85dad46ae0f6
Fixing bug that prevent to use global variables in configuration
laurent
parents:
630
diff
changeset
|
1049 |
attrs["C_path"] = '__'.join(parts) |
883
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1050 |
if attrs["vartype"] == "FB": |
235a9ec83b95
Adding support for defining specific global variables for ConfTreeNodes
Laurent Bessard
parents:
869
diff
changeset
|
1051 |
config_FBs[tuple(parts)] = attrs["C_path"] |
1517 | 1052 |
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
|
1053 |
# 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
|
1054 |
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
|
1055 |
# 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
|
1056 |
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
|
1057 |
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
|
1058 |
# 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
|
1059 |
# 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
|
1060 |
# 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
|
1061 |
Idx += 1 |
203 | 1062 |
self._VariablesList.append(attrs) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1063 |
|
670
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1064 |
# third section contains ticktime |
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1065 |
if len(ListGroup) > 2: |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1066 |
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
|
1067 |
|
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1068 |
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
|
1069 |
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
|
1070 |
_("Cannot open/parse VARIABLES.csv!\n")) |
203 | 1071 |
self.logger.write_error(traceback.format_exc()) |
1072 |
self.ResetIECProgramsAndVariables() |
|
1073 |
return False |
|
1074 |
||
1075 |
return True |
|
1076 |
||
1077 |
def Generate_plc_debugger(self): |
|
1078 |
""" |
|
1079 |
Generate trace/debug code out of PLC variable list |
|
1080 |
""" |
|
1081 |
self.GetIECProgramsAndVariables() |
|
1082 |
||
1083 |
# 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
|
1084 |
variable_decl_array = [] |
3396
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1085 |
retain_indexes = [] |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1086 |
for i, v in enumerate(self._DbgVariablesList): |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1087 |
variable_decl_array.append( |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1088 |
"{&(%(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
|
1089 |
{ |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1090 |
"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
|
1091 |
"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
|
1092 |
"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
|
1093 |
"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
|
1094 |
"VAR": "%(type)s_ENUM" |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1095 |
}[v["vartype"]] % v + |
3396
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1096 |
"}") |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1097 |
|
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1098 |
if v["retain"] == "1": |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1099 |
retain_indexes.append("/* "+v["C_path"]+" */ "+str(i)) |
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1100 |
|
1430 | 1101 |
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
|
1102 |
"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
|
1103 |
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
|
1104 |
"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
|
1105 |
{ |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1106 |
"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
|
1107 |
"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
|
1108 |
"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
|
1109 |
"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
|
1110 |
"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
|
1111 |
"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
|
1112 |
}[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
|
1113 |
for v in self._VariablesList if v["C_path"].find('.') < 0]), |
2632
534387caf43d
variable access code moved from plc_debug.c to targets/var_access.c for easiewr re-use in ext.
Edouard Tisserant
parents:
2631
diff
changeset
|
1114 |
"variable_decl_array": ",\n".join(variable_decl_array), |
3396
8c8cb5c9ff38
Runtime: Now retain uses a list based on data available in VARIABLES.csv instead of traversing the whole instance tree looking for RETAIN flag.
Edouard Tisserant
parents:
3395
diff
changeset
|
1115 |
"retain_vardsc_index_array": ",\n".join(retain_indexes), |
2632
534387caf43d
variable access code moved from plc_debug.c to targets/var_access.c for easiewr re-use in ext.
Edouard Tisserant
parents:
2631
diff
changeset
|
1116 |
"var_access_code": targets.GetCode("var_access.c") |
1777
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1776
diff
changeset
|
1117 |
} |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1118 |
|
203 | 1119 |
return debug_code |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1120 |
|
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
|
1121 |
def Generate_plc_main(self): |
203 | 1122 |
""" |
717 | 1123 |
Use confnodes layout given in LocationCFilesAndCFLAGS to |
1124 |
generate glue code that dispatch calls to all confnodes |
|
203 | 1125 |
""" |
1126 |
# filter location that are related to code that will be called |
|
1127 |
# in retreive, publish, init, cleanup |
|
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1128 |
locstrs = ["_".join(map(str, x)) for x in [loc for loc, _Cfiles, DoCalls in |
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1129 |
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
|
1130 |
|
203 | 1131 |
# 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
|
1132 |
if not self.BeremizRoot.getDisable_Extensions(): |
1430 | 1133 |
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
|
1134 |
"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
|
1135 |
"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
|
1136 |
"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
|
1137 |
"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
|
1138 |
"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
|
1139 |
"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
|
1140 |
"__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
|
1141 |
"publish_calls": "\n ".join([ # Call publish in reverse order |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1142 |
"__publish_%s();" % locstrs[i - 1] for i in range(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
|
1143 |
"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
|
1144 |
"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
|
1145 |
"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
|
1146 |
# "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
|
1147 |
"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
|
1148 |
"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
|
1149 |
"if(init_level >= %d) " % i + |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1150 |
"__cleanup_%s();" % locstrs[i - 1] for i in range(len(locstrs), 0, -1)]) |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1151 |
} |
338 | 1152 |
else: |
1430 | 1153 |
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
|
1154 |
"calls_prototypes": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1155 |
"retrieve_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1156 |
"publish_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1157 |
"init_calls": "\n", |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1158 |
"cleanup_calls": "\n" |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1159 |
} |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1160 |
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
|
1161 |
self.GetTarget().getcontent().getLocalTag()) |
1430 | 1162 |
plc_main_code += targets.GetCode("plc_main_tail.c") |
203 | 1163 |
return plc_main_code |
1164 |
||
623
8cdb533c3c7a
A few new keyboard shortcuts : F4=stop, F5=run, F5=transfer, F7=connect
Edouard Tisserant
parents:
619
diff
changeset
|
1165 |
def _Build(self): |
20 | 1166 |
""" |
717 | 1167 |
Method called by user to (re)build SoftPLC and confnode tree |
20 | 1168 |
""" |
395 | 1169 |
if self.AppFrame is not None: |
1170 |
self.AppFrame.ClearErrors() |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1171 |
self._CloseView(self._IECCodeView) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1172 |
|
20 | 1173 |
buildpath = self._getBuildPath() |
1174 |
||
1175 |
# Eventually create build dir |
|
18 | 1176 |
if not os.path.exists(buildpath): |
1177 |
os.mkdir(buildpath) |
|
203 | 1178 |
|
1179 |
self.logger.flush() |
|
361 | 1180 |
self.logger.write(_("Start build in %s\n") % buildpath) |
203 | 1181 |
|
1182 |
# Generate SoftPLC IEC code |
|
1183 |
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
|
1184 |
self.UpdateButtons() |
203 | 1185 |
|
1186 |
# If IEC code gen fail, bail out. |
|
1187 |
if not IECGenRes: |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1188 |
self.logger.write_error(_("PLC code generation failed !\n")) |
20 | 1189 |
return False |
1190 |
||
203 | 1191 |
# Reset variable and program list that are parsed from |
1192 |
# CSV file generated by IEC2C compiler. |
|
1193 |
self.ResetIECProgramsAndVariables() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1194 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1195 |
# Collect platform specific C code |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1196 |
# 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
|
1197 |
if not self._Generate_runtime(): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1198 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1199 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1200 |
# Get current or fresh builder |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1201 |
builder = self.GetBuilder() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1202 |
if builder is None: |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1203 |
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
|
1204 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1205 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1206 |
# Build |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1207 |
try: |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
1208 |
if not builder.build(): |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1209 |
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
|
1210 |
return False |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1211 |
except Exception: |
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1212 |
builder.ResetBinaryMD5() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1213 |
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
|
1214 |
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
|
1215 |
return False |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1216 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1217 |
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
|
1218 |
# 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
|
1219 |
self.CompareLocalAndRemotePLC() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1220 |
return True |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1221 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1222 |
def _Generate_runtime(self): |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1223 |
buildpath = self._getBuildPath() |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1224 |
|
2631
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1225 |
# CTN code gen is expected AFTER Libraries code gen, |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1226 |
# at least SVGHMI relies on it. |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1227 |
|
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1228 |
# Generate C code and compilation params from liraries |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1229 |
try: |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1230 |
LibCFilesAndCFLAGS, LibLDFLAGS, LibExtraFiles = self.GetLibrariesCCode( |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1231 |
buildpath) |
2640
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1232 |
except UserAddressedException as e: |
3816
032bf4f225d0
Py3 usual encoding, ints and exceptions fixes.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3810
diff
changeset
|
1233 |
self.logger.write_error(str(e)) |
2640
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1234 |
return False |
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1235 |
except Exception as e: |
2631
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1236 |
self.logger.write_error( |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1237 |
_("Runtime library extensions C code generation failed !\n")) |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1238 |
self.logger.write_error(traceback.format_exc()) |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1239 |
return False |
b5402859dfad
Swap CTN code gen and Libraries code generation order. In general library part of an extension needs to be computed before CTN part.
Edouard Tisserant
parents:
2621
diff
changeset
|
1240 |
|
717 | 1241 |
# Generate C code and compilation params from confnode hierarchy |
24 | 1242 |
try: |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1243 |
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
|
1244 |
buildpath, |
203 | 1245 |
self.PLCGeneratedLocatedVars) |
2640
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1246 |
except UserAddressedException as e: |
3816
032bf4f225d0
Py3 usual encoding, ints and exceptions fixes.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3810
diff
changeset
|
1247 |
self.logger.write_error(str(e)) |
2640
1b4b335e19ea
Add FatalError() method to ConfigTreeNode.
Edouard Tisserant
parents:
2632
diff
changeset
|
1248 |
return False |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1249 |
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
|
1250 |
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
|
1251 |
_("Runtime IO extensions C code generation failed !\n")) |
203 | 1252 |
self.logger.write_error(traceback.format_exc()) |
24 | 1253 |
return False |
18 | 1254 |
|
3612
428fb2472f43
OPC-UA: add logging to help user to understang what went wrong when connecting.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3580
diff
changeset
|
1255 |
# Extensions also need plcCFLAGS in case they include beremiz.h |
428fb2472f43
OPC-UA: add logging to help user to understang what went wrong when connecting.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3580
diff
changeset
|
1256 |
CTNLocationCFilesAndCFLAGS = [ |
428fb2472f43
OPC-UA: add logging to help user to understang what went wrong when connecting.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3580
diff
changeset
|
1257 |
(loc, [ |
428fb2472f43
OPC-UA: add logging to help user to understang what went wrong when connecting.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3580
diff
changeset
|
1258 |
(code, self.plcCFLAGS+" "+cflags) |
428fb2472f43
OPC-UA: add logging to help user to understang what went wrong when connecting.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3580
diff
changeset
|
1259 |
for code,cflags in code_and_cflags], do_calls) |
428fb2472f43
OPC-UA: add logging to help user to understang what went wrong when connecting.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3580
diff
changeset
|
1260 |
for loc, code_and_cflags, do_calls in CTNLocationCFilesAndCFLAGS] |
428fb2472f43
OPC-UA: add logging to help user to understang what went wrong when connecting.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3580
diff
changeset
|
1261 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1262 |
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
|
1263 |
CTNLocationCFilesAndCFLAGS |
728
e0424e96e3fd
refactoring - library support is not anymore attached to configtree nodes, but handles by project controller
Edouard Tisserant
parents:
726
diff
changeset
|
1264 |
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
|
1265 |
ExtraFiles = CTNExtraFiles + LibExtraFiles |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1266 |
|
361 | 1267 |
# Get temporary directory path |
203 | 1268 |
extrafilespath = self._getExtraFilesPath() |
1269 |
# Remove old directory |
|
1270 |
if os.path.exists(extrafilespath): |
|
1271 |
shutil.rmtree(extrafilespath) |
|
1272 |
# Recreate directory |
|
1273 |
os.mkdir(extrafilespath) |
|
1274 |
# 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
|
1275 |
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
|
1276 |
fpath = os.path.join(extrafilespath, fname) |
203 | 1277 |
open(fpath, "wb").write(fobject.read()) |
1278 |
# Now we can forget ExtraFiles (will close files object) |
|
1279 |
del ExtraFiles |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1280 |
|
1001
3f966bbb3fba
Added beremiz.h header file for extensions
Edouard Tisserant
parents:
1000
diff
changeset
|
1281 |
# 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
|
1282 |
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
|
1283 |
targets.GetHeader()) |
1001
3f966bbb3fba
Added beremiz.h header file for extensions
Edouard Tisserant
parents:
1000
diff
changeset
|
1284 |
|
203 | 1285 |
# Template based part of C code generation |
717 | 1286 |
# 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
|
1287 |
c_source = [ |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1288 |
# debugger code |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1289 |
(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
|
1290 |
# 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
|
1291 |
(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
|
1292 |
] |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1293 |
|
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1294 |
for generator, filename, name in c_source: |
203 | 1295 |
try: |
1296 |
# Do generate |
|
1297 |
code = generator() |
|
335
c5f3f71e7260
fixed bug : buffer overflow when debugging PLC with python blocks
greg
parents:
334
diff
changeset
|
1298 |
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
|
1299 |
raise Exception |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1300 |
code_path = os.path.join(buildpath, filename) |
203 | 1301 |
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
|
1302 |
# 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
|
1303 |
# confnode |
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1304 |
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
|
1305 |
0, (code_path, self.plcCFLAGS)) |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1836
diff
changeset
|
1306 |
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
|
1307 |
self.logger.write_error(name + _(" generation failed !\n")) |
203 | 1308 |
self.logger.write_error(traceback.format_exc()) |
1309 |
return False |
|
361 | 1310 |
self.logger.write(_("C code generated successfully.\n")) |
49
45dc6a944ab6
On the long wat towards generated code comilation...
etisserant
parents:
47
diff
changeset
|
1311 |
return True |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1312 |
|
202
cd81a7a6e55c
Adding support for highlighing compiling errors into PLCOpenEditor
lbessard
parents:
199
diff
changeset
|
1313 |
def ShowError(self, logger, from_location, to_location): |
cd81a7a6e55c
Adding support for highlighing compiling errors into PLCOpenEditor
lbessard
parents:
199
diff
changeset
|
1314 |
chunk_infos = self.GetChunkInfos(from_location, to_location) |
cd81a7a6e55c
Adding support for highlighing compiling errors into PLCOpenEditor
lbessard
parents:
199
diff
changeset
|
1315 |
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
|
1316 |
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
|
1317 |
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
|
1318 |
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
|
1319 |
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
|
1320 |
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
|
1321 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1322 |
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
|
1323 |
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
|
1324 |
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
|
1325 |
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
|
1326 |
end = (row, col) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1327 |
|
396 | 1328 |
if self.AppFrame is not None: |
1329 |
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
|
1330 |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1331 |
_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
|
1332 |
|
2337
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
1333 |
def _showIDManager(self): |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
1334 |
dlg = IDManager(self.AppFrame, self) |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
1335 |
dlg.ShowModal() |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
1336 |
dlg.Destroy() |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
1337 |
|
203 | 1338 |
def _showIECcode(self): |
716
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1339 |
self._OpenView("IEC code") |
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1340 |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1341 |
_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
|
1342 |
|
716
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1343 |
def _editIECrawcode(self): |
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1344 |
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
|
1345 |
|
782 | 1346 |
_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
|
1347 |
|
782 | 1348 |
def _OpenProjectFiles(self): |
815
e4f24593a758
Adding support for extending internationalization to extensions
laurent
parents:
814
diff
changeset
|
1349 |
self._OpenView("Project Files") |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1350 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1351 |
_FileEditors = {} |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
1352 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1353 |
def _OpenFileEditor(self, filepath): |
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1354 |
self._OpenView(filepath) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1355 |
|
782 | 1356 |
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
|
1357 |
if name == "IEC code": |
3747
1db10e9df882
IDE: fix exception when re-opening previously closed tab
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3612
diff
changeset
|
1358 |
if not self._IECCodeView: |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1359 |
plc_file = self._getIECcodepath() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1360 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1361 |
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
|
1362 |
self.AppFrame.TabsOpened, "", self.AppFrame, None, instancepath=name) |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1363 |
self._IECCodeView.SetTextSyntax("ALL") |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1364 |
self._IECCodeView.SetKeywords(IEC_KEYWORDS) |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1365 |
try: |
2442
b13f021c68a5
python3 support: pylint, W1607 # (file-builtin) file built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2441
diff
changeset
|
1366 |
text = open(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
|
1367 |
except Exception: |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1368 |
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
|
1369 |
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
|
1370 |
self._IECCodeView.Editor.SetReadOnly(True) |
782 | 1371 |
self._IECCodeView.SetIcon(GetBitmap("ST")) |
806
abf1afc1f04d
Fix bug when closing IECCodeView and IECRawCodeView, reopening them was impossible
laurent
parents:
801
diff
changeset
|
1372 |
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
|
1373 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1374 |
if self._IECCodeView is not None: |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1375 |
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
|
1376 |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1377 |
return self._IECCodeView |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1378 |
|
716
180e4a7d945c
Adding search field for finding function or function block in library tree
laurent
parents:
715
diff
changeset
|
1379 |
elif name == "IEC raw code": |
3747
1db10e9df882
IDE: fix exception when re-opening previously closed tab
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3612
diff
changeset
|
1380 |
if not self._IECRawCodeView: |
806
abf1afc1f04d
Fix bug when closing IECCodeView and IECRawCodeView, reopening them was impossible
laurent
parents:
801
diff
changeset
|
1381 |
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
|
1382 |
|
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1383 |
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
|
1384 |
self.AppFrame.TabsOpened, "", self.AppFrame, controler, instancepath=name) |
782 | 1385 |
self._IECRawCodeView.SetTextSyntax("ALL") |
1386 |
self._IECRawCodeView.SetKeywords(IEC_KEYWORDS) |
|
1387 |
self._IECRawCodeView.RefreshView() |
|
1388 |
self._IECRawCodeView.SetIcon(GetBitmap("ST")) |
|
806
abf1afc1f04d
Fix bug when closing IECCodeView and IECRawCodeView, reopening them was impossible
laurent
parents:
801
diff
changeset
|
1389 |
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
|
1390 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1391 |
if self._IECRawCodeView is not None: |
782 | 1392 |
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
|
1393 |
|
782 | 1394 |
return self._IECRawCodeView |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1395 |
|
815
e4f24593a758
Adding support for extending internationalization to extensions
laurent
parents:
814
diff
changeset
|
1396 |
elif name == "Project Files": |
3747
1db10e9df882
IDE: fix exception when re-opening previously closed tab
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3612
diff
changeset
|
1397 |
if not self._ProjectFilesView: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1398 |
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
|
1399 |
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
|
1400 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1401 |
extensions = [] |
2415
f7d8891fe708
cleanup: pylint, R1704 # (redefined-argument-from-local) Redefining argument with the local name 'Y'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2248
diff
changeset
|
1402 |
for extension, _name, _editor in features.file_editors: |
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1403 |
if extension not in extensions: |
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1404 |
extensions.append(extension) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1405 |
self._ProjectFilesView.SetEditableFileExtensions(extensions) |
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1406 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1407 |
if self._ProjectFilesView is not None: |
782 | 1408 |
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
|
1409 |
|
784
a1d970365e41
Adding support for beremiz extensions to define custom file editors for project files
laurent
parents:
782
diff
changeset
|
1410 |
return self._ProjectFilesView |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1411 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1412 |
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
|
1413 |
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
|
1414 |
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
|
1415 |
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
|
1416 |
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
|
1417 |
|
796 | 1418 |
editors = dict([(edit_name, edit_class) |
1419 |
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
|
1420 |
if extension == file_extension]) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1421 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1422 |
if editor_name == "": |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1423 |
if len(editors) == 1: |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1424 |
editor_name = list(editors.keys())[0] |
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1425 |
elif len(editors) > 0: |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1426 |
names = list(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
|
1427 |
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
|
1428 |
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
|
1429 |
_("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
|
1430 |
_("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
|
1431 |
names, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1432 |
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
|
1433 |
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
|
1434 |
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
|
1435 |
dialog.Destroy() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1436 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1437 |
if editor_name != "": |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1438 |
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
|
1439 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1440 |
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
|
1441 |
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
|
1442 |
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
|
1443 |
self._FileEditors[filepath].SetIcon(GetBitmap("FILE")) |
897
3cd39bc7dbad
Added support for defining extension file editor as DebugViewer
Laurent Bessard
parents:
883
diff
changeset
|
1444 |
if isinstance(self._FileEditors[filepath], DebugViewer): |
3cd39bc7dbad
Added support for defining extension file editor as DebugViewer
Laurent Bessard
parents:
883
diff
changeset
|
1445 |
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
|
1446 |
|
1763
bcc07ff2362c
clean-up: fix PEP8 W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1760
diff
changeset
|
1447 |
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
|
1448 |
editor = self._FileEditors[filepath] |
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1449 |
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
|
1450 |
|
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1451 |
return self._FileEditors.get(filepath) |
738 | 1452 |
else: |
786 | 1453 |
return ConfigTreeNode._OpenView(self, self.CTNName(), onlyopened) |
20 | 1454 |
|
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1455 |
def OnCloseEditor(self, view): |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1456 |
ConfigTreeNode.OnCloseEditor(self, view) |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1457 |
if self._IECCodeView == view: |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1458 |
self._IECCodeView = None |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1459 |
if self._IECRawCodeView == view: |
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1460 |
self._IECRawCodeView = None |
782 | 1461 |
if self._ProjectFilesView == view: |
1462 |
self._ProjectFilesView = None |
|
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1463 |
if view in list(self._FileEditors.values()): |
792 | 1464 |
self._FileEditors.pop(view.GetFilePath()) |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1465 |
|
203 | 1466 |
def _Clean(self): |
774
78b5fa92dd1c
Fix bug when opening and closing confnode extra viewers
laurent
parents:
770
diff
changeset
|
1467 |
self._CloseView(self._IECCodeView) |
108 | 1468 |
if os.path.isdir(os.path.join(self._getBuildPath())): |
361 | 1469 |
self.logger.write(_("Cleaning the build directory\n")) |
108 | 1470 |
shutil.rmtree(os.path.join(self._getBuildPath())) |
1471 |
else: |
|
361 | 1472 |
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
|
1473 |
# 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
|
1474 |
self._builder = None |
203 | 1475 |
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
|
1476 |
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
|
1477 |
|
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1478 |
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
|
1479 |
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
|
1480 |
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
|
1481 |
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
|
1482 |
self.AppFrame.RefreshStatusToolBar() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1483 |
|
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1484 |
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
|
1485 |
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
|
1486 |
|
911
ffa24427396a
Log redirected to console, dump of all available log to console when connecting to PLC
Edouard Tisserant
parents:
906
diff
changeset
|
1487 |
def UpdatePLCLog(self, log_count): |
978 | 1488 |
if log_count: |
1489 |
if self.AppFrame is not None: |
|
1490 |
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
|
1491 |
|
2224
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1492 |
DefaultMethods = { |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1493 |
"_Run": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1494 |
"_Stop": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1495 |
"_Transfer": False, |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1496 |
"_Connect": True, |
2594
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
1497 |
"_Repair": False, |
2224
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1498 |
"_Disconnect": False |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1499 |
} |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1500 |
|
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1501 |
MethodsFromStatus = { |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1502 |
PlcStatus.Started: {"_Stop": True, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1503 |
"_Transfer": True, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1504 |
"_Connect": False, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1505 |
"_Disconnect": True}, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1506 |
PlcStatus.Stopped: {"_Run": True, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1507 |
"_Transfer": True, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1508 |
"_Connect": False, |
2652
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
1509 |
"_Disconnect": True, |
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
1510 |
"_Repair": True}, |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1511 |
PlcStatus.Empty: {"_Transfer": True, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1512 |
"_Connect": False, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1513 |
"_Disconnect": True}, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1514 |
PlcStatus.Broken: {"_Connect": False, |
2594
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
1515 |
"_Repair": True, |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1516 |
"_Disconnect": True}, |
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1517 |
PlcStatus.Disconnected: {}, |
2224
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1518 |
} |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1519 |
|
203 | 1520 |
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
|
1521 |
updated = False |
2602
19dc6b830e7d
If call to GetPLCstatus can't be executed in PLC, then obtained status is disconnected. Status on "None" is not relevant anymore, and is replaced by Disconnected.
Edouard Tisserant
parents:
2596
diff
changeset
|
1522 |
status = PlcStatus.Disconnected |
203 | 1523 |
if self._connector is not None: |
923
6ef6e0b3a908
Fixed crash (segfault) when logging debug messages
Edouard Tisserant
parents:
922
diff
changeset
|
1524 |
PLCstatus = self._connector.GetPLCstatus() |
6ef6e0b3a908
Fixed crash (segfault) when logging debug messages
Edouard Tisserant
parents:
922
diff
changeset
|
1525 |
if PLCstatus is not None: |
6ef6e0b3a908
Fixed crash (segfault) when logging debug messages
Edouard Tisserant
parents:
922
diff
changeset
|
1526 |
status, log_count = PLCstatus |
6ef6e0b3a908
Fixed crash (segfault) when logging debug messages
Edouard Tisserant
parents:
922
diff
changeset
|
1527 |
self.UpdatePLCLog(log_count) |
2602
19dc6b830e7d
If call to GetPLCstatus can't be executed in PLC, then obtained status is disconnected. Status on "None" is not relevant anymore, and is replaced by Disconnected.
Edouard Tisserant
parents:
2596
diff
changeset
|
1528 |
if status == PlcStatus.Disconnected: |
1116
300f98a8d4c6
Fixed bug connector not resetted when connection is lost
Laurent Bessard
parents:
1105
diff
changeset
|
1529 |
self._SetConnector(None, False) |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1530 |
status = PlcStatus.Disconnected |
1828
396da88d7b5c
fix unnecessary parens after keyword
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1824
diff
changeset
|
1531 |
if self.previous_plcstate != status: |
2224
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1532 |
allmethods = self.DefaultMethods.copy() |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1533 |
allmethods.update( |
ebd83ec387f9
Customizable update of toolbar buttons (i.e. 'methods') according to PLCStatus
Edouard Tisserant
parents:
1997
diff
changeset
|
1534 |
self.MethodsFromStatus.get(status, {})) |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1535 |
for method, active in list(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
|
1536 |
self.ShowMethod(method, active) |
922
60fafd828a30
Better PLC log message time stamp display. Better console information when connecting.
Edouard Tisserant
parents:
921
diff
changeset
|
1537 |
self.previous_plcstate = status |
918 | 1538 |
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
|
1539 |
updated = True |
918 | 1540 |
self.AppFrame.RefreshStatusToolBar() |
3865
c1754cd1c298
IDE: Fix status bar update when conection lost
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3833
diff
changeset
|
1541 |
texts = [_(PlcStatus.Disconnected), ''] \ |
c1754cd1c298
IDE: Fix status bar update when conection lost
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3833
diff
changeset
|
1542 |
if status == PlcStatus.Disconnected or self._connector is None else \ |
c1754cd1c298
IDE: Fix status bar update when conection lost
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3833
diff
changeset
|
1543 |
[_("Connected to URI: %s") % self.BeremizRoot.getURI_location().strip(), _(status)] |
c1754cd1c298
IDE: Fix status bar update when conection lost
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3833
diff
changeset
|
1544 |
for i,txt in enumerate(texts): |
c1754cd1c298
IDE: Fix status bar update when conection lost
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3833
diff
changeset
|
1545 |
self.AppFrame.ConnectionStatusBar.SetStatusText(txt, i+1) |
1555
dac6002ff58e
fix issue with non-updated button 'generated IECCode' after Build and Clean
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1551
diff
changeset
|
1546 |
return updated |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1547 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1742
diff
changeset
|
1548 |
def ShowPLCProgress(self, status="", progress=0): |
1574
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1549 |
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
|
1550 |
self.AppFrame.ConnectionStatusBar.SetStatusText( |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1551 |
_(status), 1) |
1574
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1552 |
self.AppFrame.ProgressStatusBar.SetValue(progress) |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1553 |
|
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1554 |
def HidePLCProgress(self): |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1555 |
# clear previous_plcstate to restore status |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1556 |
# in UpdateMethodsFromPLCStatus() |
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1557 |
self.previous_plcstate = "" |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1558 |
if self.AppFrame is not None: |
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1559 |
self.AppFrame.ProgressStatusBar.Hide() |
1574
ce9c0e68389c
add progress bar to status bar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1555
diff
changeset
|
1560 |
self.UpdateMethodsFromPLCStatus() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1722
diff
changeset
|
1561 |
|
446
1edde533db19
Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents:
440
diff
changeset
|
1562 |
def PullPLCStatusProc(self, event): |
918 | 1563 |
self.UpdateMethodsFromPLCStatus() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1564 |
|
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
|
1565 |
def SnapshotAndResetDebugValuesBuffers(self): |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1566 |
debug_status = PlcStatus.Disconnected |
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1567 |
if self._connector is not None and self.DebugToken is not None: |
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1568 |
debug_status, Traces = self._connector.GetTraceVariables(self.DebugToken) |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1569 |
# 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
|
1570 |
# self.IECdebug_datas.items()] |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1571 |
if debug_status == PlcStatus.Started: |
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1572 |
if len(Traces) > 0: |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1573 |
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
|
1574 |
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
|
1575 |
debug_buff, self.TracedIECTypes) |
3257
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1576 |
if debug_vars is not None: |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1577 |
for IECPath, values_buffer, value in zip( |
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1578 |
self.TracedIECPath, |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1579 |
self.DebugValuesBuffers, |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1580 |
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
|
1581 |
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
|
1582 |
IECPath, None) |
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1583 |
if IECdebug_data is not None and value is not None: |
2512
69cef4e37ef9
Fix non-marking as manually forced floating point variable if the value isn't integer
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2506
diff
changeset
|
1584 |
forced = (IECdebug_data[2] == "Forced") \ |
69cef4e37ef9
Fix non-marking as manually forced floating point variable if the value isn't integer
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2506
diff
changeset
|
1585 |
and (value is not None) and \ |
69cef4e37ef9
Fix non-marking as manually forced floating point variable if the value isn't integer
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2506
diff
changeset
|
1586 |
(IECdebug_data[3] is not None) |
69cef4e37ef9
Fix non-marking as manually forced floating point variable if the value isn't integer
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2506
diff
changeset
|
1587 |
|
1996
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1588 |
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
|
1589 |
values_buffer[-1] = (value, forced) |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1590 |
else: |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1591 |
values_buffer.append((value, forced)) |
4ae9c4447947
Add safety check to prevent exception when disconnecting while debugging
Edouard Tisserant
parents:
1995
diff
changeset
|
1592 |
self.DebugTicks.append(debug_tick) |
3395
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1593 |
else: |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1594 |
# complain if trace is incomplete, but only once per debug session |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1595 |
if self.LastComplainDebugToken != self.DebugToken : |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1596 |
self.logger.write_warning( |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1597 |
_("Debug: target couldn't trace all requested variables.\n")) |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1598 |
self.LastComplainDebugToken = self.DebugToken |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1599 |
|
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1600 |
|
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
|
1601 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1602 |
buffers, self.DebugValuesBuffers = (self.DebugValuesBuffers, |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1603 |
[list() for dummy in range(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
|
1604 |
|
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
|
1605 |
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
|
1606 |
|
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1607 |
return debug_status, ticks, buffers |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1608 |
|
3395
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1609 |
RegisterDebugVariableErrorCodes = { |
3577
6c7a7b22bec9
IDE+Runtime: fix exception when reconnecting with non-empty trace/force list.
Edouard Tisserant
parents:
3480
diff
changeset
|
1610 |
# Connector only can return None |
6c7a7b22bec9
IDE+Runtime: fix exception when reconnecting with non-empty trace/force list.
Edouard Tisserant
parents:
3480
diff
changeset
|
1611 |
None : _("Debug: connection problem.\n"), |
3395
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1612 |
# TRACE_LIST_OVERFLOW |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1613 |
1 : _("Debug: Too many variables traced. Max 1024.\n"), |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1614 |
# FORCE_LIST_OVERFLOW |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1615 |
2 : _("Debug: Too many variables forced. Max 256.\n"), |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1616 |
# FORCE_BUFFER_OVERFLOW |
3577
6c7a7b22bec9
IDE+Runtime: fix exception when reconnecting with non-empty trace/force list.
Edouard Tisserant
parents:
3480
diff
changeset
|
1617 |
3 : _("Debug: Cumulated forced variables size too large. Max 1KB.\n"), |
3887
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
1618 |
# FORCE_INVALID |
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
1619 |
3 : _("Debug: Invalid forced value.\n"), |
3577
6c7a7b22bec9
IDE+Runtime: fix exception when reconnecting with non-empty trace/force list.
Edouard Tisserant
parents:
3480
diff
changeset
|
1620 |
# DEBUG_SUSPENDED |
3887
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
1621 |
5 : _("Debug: suspended.\n") |
3395
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1622 |
} |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1623 |
|
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1624 |
def RegisterDebugVarToConnector(self): |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1625 |
Idxs = [] |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1626 |
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
|
1627 |
self.TracedIECTypes = [] |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1628 |
if self._connector is not None and self.debug_status != PlcStatus.Broken: |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1629 |
IECPathsToPop = [] |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1630 |
for IECPath, data_tuple in self.IECdebug_datas.items(): |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
1631 |
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
|
1632 |
if len(WeakCallableDict) == 0: |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1633 |
# Callable Dict is empty. |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1634 |
# This variable is not needed anymore! |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1635 |
IECPathsToPop.append(IECPath) |
355 | 1636 |
elif IECPath != "__tick__": |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1637 |
# Convert |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1638 |
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
|
1639 |
IECPath, (None, None)) |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1640 |
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
|
1641 |
if IEC_Type in DebugTypesSize: |
3887
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
1642 |
Idxs.append( |
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
1643 |
(Idx, IEC_Type, IECPath, |
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
1644 |
ValueToIECBytes(IEC_Type, fvalue))) |
592 | 1645 |
else: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1646 |
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
|
1647 |
_("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
|
1648 |
else: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1649 |
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
|
1650 |
_("Debug: Unknown variable '%s'\n") % IECPath) |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1651 |
for IECPathToPop in IECPathsToPop: |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1652 |
self.IECdebug_datas.pop(IECPathToPop) |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1653 |
|
457 | 1654 |
if Idxs: |
1655 |
Idxs.sort() |
|
3887
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
1656 |
Idxs, self.TracedIECTypes, self.TracedIECPath, Fvalues, = list(zip(*Idxs)) |
2df45e4bd500
Fix variable forcing. Now works with eRPC. PLCObject API changed.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3879
diff
changeset
|
1657 |
res = self._connector.SetTraceVariablesList(list(zip(Idxs, Fvalues))) |
3395
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1658 |
if res is not None and res > 0: |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1659 |
self.DebugToken = res |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1660 |
else: |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1661 |
self.DebugToken = None |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1662 |
self.logger.write_warning( |
93ad018fb602
RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
Edouard Tisserant
parents:
3380
diff
changeset
|
1663 |
self.RegisterDebugVariableErrorCodes.get( |
3577
6c7a7b22bec9
IDE+Runtime: fix exception when reconnecting with non-empty trace/force list.
Edouard Tisserant
parents:
3480
diff
changeset
|
1664 |
-res if res is not None else None, |
6c7a7b22bec9
IDE+Runtime: fix exception when reconnecting with non-empty trace/force list.
Edouard Tisserant
parents:
3480
diff
changeset
|
1665 |
_("Debug: Unknown error"))) |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1666 |
else: |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1667 |
self.TracedIECPath = [] |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1668 |
self._connector.SetTraceVariablesList([]) |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1669 |
self.DebugToken = None |
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1670 |
self.debug_status, _debug_ticks, _buffers = self.SnapshotAndResetDebugValuesBuffers() |
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1671 |
self.DebugUpdatePending = False |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1672 |
|
1146 | 1673 |
def IsPLCStarted(self): |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1674 |
return self.previous_plcstate == PlcStatus.Started |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1675 |
|
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1676 |
def AppendDebugUpdate(self): |
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1677 |
if not self.DebugUpdatePending : |
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1678 |
wx.CallAfter(self.RegisterDebugVarToConnector) |
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1679 |
self.DebugUpdatePending = True |
243 | 1680 |
|
463
961bddcfc913
Adding support for forcing PLC variable (still command to PLC to implement)
laurent
parents:
462
diff
changeset
|
1681 |
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
|
1682 |
_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
|
1683 |
return IEC_Type |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1684 |
|
1430 | 1685 |
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
|
1686 |
""" |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1687 |
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
|
1688 |
to a WeakKeyDictionary linking |
1430 | 1689 |
weakly referenced callables |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1690 |
""" |
1775
b45f2768fab1
clean-up: fix PEP8 E713 test for membership should be 'not in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
1691 |
if IECPath != "__tick__" and IECPath not in self._IECPathToIdx: |
246 | 1692 |
return None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1693 |
|
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1694 |
# 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
|
1695 |
IECdebug_data = self.IECdebug_datas.get(IECPath, None) |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1696 |
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
|
1697 |
IECdebug_data = [ |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1698 |
WeakKeyDictionary(), # Callables |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1861
diff
changeset
|
1699 |
[], # 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
|
1700 |
"Registered", # Variable status |
3257
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1701 |
None, # Forced value |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1702 |
buffer_list] |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1703 |
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
|
1704 |
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
|
1705 |
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
|
1706 |
|
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
1707 |
IECdebug_data[0][callableobj] = buffer_list |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1708 |
|
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1709 |
self.AppendDebugUpdate() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1710 |
|
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1711 |
return IECdebug_data[1] |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1712 |
|
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1713 |
def UnsubscribeDebugIECVariable(self, IECPath, callableobj): |
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1714 |
IECdebug_data = self.IECdebug_datas.get(IECPath, None) |
243 | 1715 |
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
|
1716 |
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
|
1717 |
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
|
1718 |
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
|
1719 |
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
|
1720 |
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
|
1721 |
lambda x, y: x | y, |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1722 |
iter(IECdebug_data[0].values()), |
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
|
1723 |
False) |
243 | 1724 |
|
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1725 |
self.AppendDebugUpdate() |
239
112b4bc523b3
Fixed bad IPC choice for debugger/PLC/control thread collaboration
etisserant
parents:
236
diff
changeset
|
1726 |
|
334
b4131e5d10a4
Adding support for unsubscribe all variables while transferring
lbessard
parents:
328
diff
changeset
|
1727 |
def UnsubscribeAllDebugIECVariable(self): |
1089
5cd1f8df71aa
Fixed bug when transferring program and a output located variable is forced
Laurent Bessard
parents:
1080
diff
changeset
|
1728 |
self.IECdebug_datas = {} |
334
b4131e5d10a4
Adding support for unsubscribe all variables while transferring
lbessard
parents:
328
diff
changeset
|
1729 |
|
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1730 |
self.AppendDebugUpdate() |
355 | 1731 |
|
474 | 1732 |
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
|
1733 |
if IECPath not in self.IECdebug_datas: |
474 | 1734 |
return |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1735 |
|
474 | 1736 |
# If no entry exist, create a new one with a fresh WeakKeyDictionary |
1737 |
IECdebug_data = self.IECdebug_datas.get(IECPath, None) |
|
1738 |
IECdebug_data[2] = "Forced" |
|
1739 |
IECdebug_data[3] = fvalue |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1740 |
|
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1741 |
self.AppendDebugUpdate() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1742 |
|
463
961bddcfc913
Adding support for forcing PLC variable (still command to PLC to implement)
laurent
parents:
462
diff
changeset
|
1743 |
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
|
1744 |
if IECPath not in self.IECdebug_datas: |
474 | 1745 |
return |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1746 |
|
474 | 1747 |
# If no entry exist, create a new one with a fresh WeakKeyDictionary |
1748 |
IECdebug_data = self.IECdebug_datas.get(IECPath, None) |
|
1749 |
IECdebug_data[2] = "Registered" |
|
1750 |
IECdebug_data[3] = None |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1751 |
|
2708
ea2aaeaaac4e
DEBUG: (IDE side) fixed wrong implementation of anti-rapid-fire leading to systematic delay in subscribing
Edouard Tisserant
parents:
2652
diff
changeset
|
1752 |
self.AppendDebugUpdate() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1753 |
|
355 | 1754 |
def CallWeakcallables(self, IECPath, function_name, *cargs): |
1755 |
data_tuple = self.IECdebug_datas.get(IECPath, None) |
|
1756 |
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
|
1757 |
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
|
1758 |
# data_log.append((debug_tick, value)) |
3750
f62625418bff
automated conversion using 2to3-3.9 tool
GP Orcullo <kinsamanka@gmail.com>
parents:
3747
diff
changeset
|
1759 |
for weakcallable, buffer_list in WeakCallableDict.items(): |
355 | 1760 |
function = getattr(weakcallable, function_name, None) |
1761 |
if function is not None: |
|
3476
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1762 |
# FIXME: apparently, despite of weak ref objects, |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1763 |
# some dead C/C++ wx object are still reachable from here |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1764 |
# leading to RuntimeError exception |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1765 |
try: |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1766 |
if buffer_list: |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1767 |
function(*cargs) |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1768 |
else: |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1769 |
function(*tuple([lst[-1] for lst in cargs])) |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1770 |
except RuntimeError: |
46a7aac382ef
IDE: Workaround exception caused by dead C/C++ swig-wrapped object when debug still try to update view after close.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3421
diff
changeset
|
1771 |
pass |
334
b4131e5d10a4
Adding support for unsubscribe all variables while transferring
lbessard
parents:
328
diff
changeset
|
1772 |
|
670
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1773 |
def GetTicktime(self): |
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1774 |
return self._Ticktime |
fb03cb6da95c
Adding support for extracting Common_Ticktime from VARIABLES.csv
laurent
parents:
669
diff
changeset
|
1775 |
|
699
6ff64cadb1ff
Adding support for executing python scripts on remote runtime
laurent
parents:
696
diff
changeset
|
1776 |
def RemoteExec(self, script, **kwargs): |
6ff64cadb1ff
Adding support for executing python scripts on remote runtime
laurent
parents:
696
diff
changeset
|
1777 |
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
|
1778 |
return -1, "No runtime connected!" |
699
6ff64cadb1ff
Adding support for executing python scripts on remote runtime
laurent
parents:
696
diff
changeset
|
1779 |
return self._connector.RemoteExec(script, **kwargs) |
6ff64cadb1ff
Adding support for executing python scripts on remote runtime
laurent
parents:
696
diff
changeset
|
1780 |
|
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
|
1781 |
def DispatchDebugValuesProc(self, event): |
3257
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1782 |
event.Skip() |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1783 |
start_time = time.time() |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1784 |
self.debug_status, debug_ticks, buffers = self.SnapshotAndResetDebugValuesBuffers() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1785 |
|
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1786 |
if self.debug_status == PlcStatus.Broken: |
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1787 |
self.logger.write_warning( |
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1788 |
_("Debug: token rejected - other debug took over - reconnect to recover\n")) |
3257
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1789 |
return |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1790 |
|
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1791 |
for IECPath, values in zip(self.TracedIECPath, buffers): |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1792 |
if len(values) > 0: |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1793 |
self.CallWeakcallables( |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1794 |
IECPath, "NewValues", debug_ticks, values) |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1795 |
if len(debug_ticks) > 0: |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1796 |
self.CallWeakcallables( |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1797 |
"__tick__", "NewDataAvailable", debug_ticks) |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1798 |
|
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1799 |
delay = time.time() - start_time |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1800 |
next_refresh = max(REFRESH_PERIOD - delay, 0.2 * delay) |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1801 |
if self.DispatchDebugValuesTimer is not None: |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1802 |
res = self.DispatchDebugValuesTimer.Start( |
095c73591b7e
IDE: Cleaned up some useless tests in variable trace data handling code, changed from bare numpy arrays to RingBuffers inorder to avoid RAM outage and crash after long tracing session.
Edouard Tisserant
parents:
3239
diff
changeset
|
1803 |
int(next_refresh * 1000), oneShot=True) |
235 | 1804 |
|
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
|
1805 |
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
|
1806 |
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
|
1807 |
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
|
1808 |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1809 |
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
|
1810 |
self.previous_plcstate = None |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1811 |
if self.AppFrame: |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1812 |
self.AppFrame.ResetGraphicViewers() |
2485
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1813 |
|
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1814 |
self.debug_status = PlcStatus.Started |
ef327451d067
Add a debugger token to SetTraceVariables and GetTraceVariables to prevent crash an inconsistant data in case of multiple connections. Last connection now takes over existing connections's debug, and first connected IDE gets a wrning.
Edouard Tisserant
parents:
2481
diff
changeset
|
1815 |
|
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1816 |
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
|
1817 |
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
|
1818 |
self.DispatchDebugValuesTimer.Start( |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1365
diff
changeset
|
1819 |
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
|
1820 |
|
462
274e83a5534e
Now debug is not a button anymore
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
461
diff
changeset
|
1821 |
def _Run(self): |
203 | 1822 |
""" |
464
46dd4358e8a8
Fixes in run : messages and refresh
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
463
diff
changeset
|
1823 |
Start PLC |
203 | 1824 |
""" |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1825 |
success = False |
350
a3a5561bde1d
- now call load, start, free PLC from the python Thread
greg
parents:
348
diff
changeset
|
1826 |
if self.GetIECProgramsAndVariables(): |
462
274e83a5534e
Now debug is not a button anymore
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
461
diff
changeset
|
1827 |
self._connector.StartPLC() |
464
46dd4358e8a8
Fixes in run : messages and refresh
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
463
diff
changeset
|
1828 |
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
|
1829 |
self._connect_debug() |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1830 |
success = True |
203 | 1831 |
else: |
464
46dd4358e8a8
Fixes in run : messages and refresh
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
463
diff
changeset
|
1832 |
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
|
1833 |
wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1834 |
return success |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1835 |
|
203 | 1836 |
def _Stop(self): |
1837 |
""" |
|
1838 |
Stop PLC |
|
1839 |
""" |
|
483
bc26c42d2eec
fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents:
481
diff
changeset
|
1840 |
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
|
1841 |
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
|
1842 |
|
689 | 1843 |
# 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
|
1844 |
# self.KillDebugThread() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1845 |
|
675
44b35c27e9ff
Adding support for quickly open recent projects in file menu
laurent
parents:
674
diff
changeset
|
1846 |
wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
203 | 1847 |
|
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1848 |
def StartLocalRuntime(self): |
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1849 |
if self.AppFrame: |
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1850 |
return self.AppFrame.StartLocalRuntime() |
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1851 |
|
1116
300f98a8d4c6
Fixed bug connector not resetted when connection is lost
Laurent Bessard
parents:
1105
diff
changeset
|
1852 |
def _SetConnector(self, connector, update_status=True): |
978 | 1853 |
self._connector = connector |
1854 |
if self.AppFrame is not None: |
|
1855 |
self.AppFrame.LogViewer.SetLogSource(connector) |
|
992 | 1856 |
if connector is not None: |
1396
bc14b43bd27f
Fixed non initialized timer causing exception in some rare cases (continued)
Edouard Tisserant
parents:
1395
diff
changeset
|
1857 |
if self.StatusTimer is not None: |
bc14b43bd27f
Fixed non initialized timer causing exception in some rare cases (continued)
Edouard Tisserant
parents:
1395
diff
changeset
|
1858 |
# 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
|
1859 |
self.StatusTimer.Start(milliseconds=500, oneShot=False) |
992 | 1860 |
else: |
1395
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
1861 |
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
|
1862 |
# Stop the status Timer |
1395
bcd1e909076c
Fixed non initialized timer causing exception in some rare cases
Edouard Tisserant
parents:
1387
diff
changeset
|
1863 |
self.StatusTimer.Stop() |
1116
300f98a8d4c6
Fixed bug connector not resetted when connection is lost
Laurent Bessard
parents:
1105
diff
changeset
|
1864 |
if update_status: |
300f98a8d4c6
Fixed bug connector not resetted when connection is lost
Laurent Bessard
parents:
1105
diff
changeset
|
1865 |
wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
992 | 1866 |
|
203 | 1867 |
def _Connect(self): |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1868 |
success = False |
922
60fafd828a30
Better PLC log message time stamp display. Better console information when connecting.
Edouard Tisserant
parents:
921
diff
changeset
|
1869 |
# don't accept re-connetion if already connected |
203 | 1870 |
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
|
1871 |
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
|
1872 |
_("Already connected. Please disconnect\n")) |
203 | 1873 |
return |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1874 |
|
203 | 1875 |
# 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
|
1876 |
uri = self.BeremizRoot.getURI_location().strip() |
203 | 1877 |
|
1878 |
# if uri is empty launch discovery dialog |
|
1879 |
if uri == "": |
|
740
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1880 |
try: |
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1881 |
# Launch Service Discovery dialog |
2334
d1470c052662
Added early implementation of IDManager.py. For now only used to select ID in URIEditor
Edouard Tisserant
parents:
2332
diff
changeset
|
1882 |
dialog = UriEditor(self.AppFrame, self) |
740
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1883 |
answer = dialog.ShowModal() |
2481
6cd7dae360d4
fixed exception happening when connecting to empty URI, and set URI through URI Editor Dialog popping up becaue empty.
Edouard Tisserant
parents:
2469
diff
changeset
|
1884 |
uri = str(dialog.GetURI()) |
740
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1885 |
dialog.Destroy() |
1780
c52d1460cea8
clean-up: fix PEP8 E722 do not use bare except'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1779
diff
changeset
|
1886 |
except Exception: |
801
435e49e80832
Update list of messages to be translated for internationalization and french translations
laurent
parents:
796
diff
changeset
|
1887 |
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
|
1888 |
self.logger.write_error(traceback.format_exc()) |
740
cee825fbe9b3
fixed exception when launching discovery dialog without network
Edouard Tisserant
parents:
738
diff
changeset
|
1889 |
uri = None |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1890 |
|
203 | 1891 |
# Nothing choosed or cancel button |
392
6617d3fb43e2
Redesign DiscoveryDialog class to conform to others dialogs
laurent
parents:
382
diff
changeset
|
1892 |
if uri is None or answer == wx.ID_CANCEL: |
6617d3fb43e2
Redesign DiscoveryDialog class to conform to others dialogs
laurent
parents:
382
diff
changeset
|
1893 |
self.logger.write_error(_("Connection canceled!\n")) |
203 | 1894 |
return |
1895 |
else: |
|
1776
81aa8aaccdd4
clean-up: fix PEP8 E122 continuation line missing indentation or outdented
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1775
diff
changeset
|
1896 |
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
|
1897 |
self.ChangesToSave = True |
746
2e09777a40d3
Fix refresh of ConfTreeNodeEditors content when values change
laurent
parents:
742
diff
changeset
|
1898 |
if self._View is not None: |
2e09777a40d3
Fix refresh of ConfTreeNodeEditors content when values change
laurent
parents:
742
diff
changeset
|
1899 |
self._View.RefreshView() |
789
b1b1a8f85e2f
Adding support for saving editor choosen when editing project file for reloading project layout
laurent
parents:
786
diff
changeset
|
1900 |
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
|
1901 |
self.AppFrame.RefreshTitle() |
f338651eca36
Fix bug project not marked as modified when changing URI_Location using discovery dialog
laurent
parents:
758
diff
changeset
|
1902 |
self.AppFrame.RefreshFileMenu() |
f338651eca36
Fix bug project not marked as modified when changing URI_Location using discovery dialog
laurent
parents:
758
diff
changeset
|
1903 |
self.AppFrame.RefreshEditMenu() |
f338651eca36
Fix bug project not marked as modified when changing URI_Location using discovery dialog
laurent
parents:
758
diff
changeset
|
1904 |
self.AppFrame.RefreshPageTitles() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1905 |
|
203 | 1906 |
# Get connector from uri |
1907 |
try: |
|
978 | 1908 |
self._SetConnector(connectors.ConnectorFactory(uri, self)) |
2469
e8760be772d5
Make easier to read console error message in case of connection problem.
Edouard Tisserant
parents:
2464
diff
changeset
|
1909 |
except Exception as e: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1910 |
self.logger.write_error( |
2492
7dd551ac2fa0
check_sources.sh makes me become even less productive
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2487
diff
changeset
|
1911 |
_("Exception while connecting to '{uri}': {ex}\n").format( |
7dd551ac2fa0
check_sources.sh makes me become even less productive
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2487
diff
changeset
|
1912 |
uri=uri, ex=e)) |
203 | 1913 |
|
1914 |
# Did connection success ? |
|
1915 |
if self._connector is None: |
|
1916 |
# Oups. |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1733
diff
changeset
|
1917 |
self.logger.write_error(_("Connection failed to %s!\n") % uri) |
203 | 1918 |
else: |
1919 |
self.CompareLocalAndRemotePLC() |
|
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1920 |
|
350
a3a5561bde1d
- now call load, start, free PLC from the python Thread
greg
parents:
348
diff
changeset
|
1921 |
# Init with actual PLC status and print it |
446
1edde533db19
Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents:
440
diff
changeset
|
1922 |
self.UpdateMethodsFromPLCStatus() |
2416
1ca207782dde
Use predefined constants for PlcStatus instead of string literals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2415
diff
changeset
|
1923 |
if self.previous_plcstate in [PlcStatus.Started, PlcStatus.Stopped]: |
465
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1924 |
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
|
1925 |
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
|
1926 |
self._connect_debug() |
67d32a91d70b
Fixes in debug + reconnect to running PLC
Edouard TISSERANT <edouard.tisserant@gmail.com>
parents:
464
diff
changeset
|
1927 |
else: |
2248
d9353e440887
autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents:
2245
diff
changeset
|
1928 |
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
|
1929 |
_("Debug does not match PLC - stop/transfert/start to re-enable\n")) |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1930 |
success = True |
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1931 |
return success |
203 | 1932 |
|
1933 |
def CompareLocalAndRemotePLC(self): |
|
1934 |
if self._connector is None: |
|
1935 |
return |
|
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1936 |
builder = self.GetBuilder() |
2492
7dd551ac2fa0
check_sources.sh makes me become even less productive
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2487
diff
changeset
|
1937 |
if builder is None: |
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1938 |
return |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1939 |
MD5 = builder.GetBinaryMD5() |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1940 |
if MD5 is None: |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1941 |
return |
203 | 1942 |
# Check remote target PLC correspondance to that md5 |
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1943 |
if self._connector.MatchMD5(MD5): |
2464
10437c6c294e
Empirically reverted calls done just after NewPLC back to the order as it was before chunked transfer. Apparently I broke something... To be continued
Edouard Tisserant
parents:
2463
diff
changeset
|
1944 |
self.logger.write( |
10437c6c294e
Empirically reverted calls done just after NewPLC back to the order as it was before chunked transfer. Apparently I broke something... To be continued
Edouard Tisserant
parents:
2463
diff
changeset
|
1945 |
_("Latest build matches with connected target.\n")) |
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1946 |
self.ProgramTransferred() |
203 | 1947 |
else: |
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1948 |
self.logger.write( |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1949 |
_("Latest build does not match with connected target.\n")) |
203 | 1950 |
|
1951 |
def _Disconnect(self): |
|
978 | 1952 |
self._SetConnector(None) |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1953 |
|
203 | 1954 |
def _Transfer(self): |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
1955 |
success = False |
1928
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1956 |
if self.IsPLCStarted(): |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1957 |
dialog = wx.MessageDialog( |
1953
5736d25bb393
PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents:
1948
diff
changeset
|
1958 |
self.AppFrame, |
5736d25bb393
PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents:
1948
diff
changeset
|
1959 |
_("Cannot transfer while PLC is running. Stop it now?"), |
5736d25bb393
PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents:
1948
diff
changeset
|
1960 |
style=wx.YES_NO | wx.CENTRE) |
1928
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1961 |
if dialog.ShowModal() == wx.ID_YES: |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1962 |
self._Stop() |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1963 |
else: |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1964 |
return |
ef6902c824f2
Ask to stop PLC before transfer if it is running
Edouard Tisserant
parents:
1902
diff
changeset
|
1965 |
|
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1966 |
builder = self.GetBuilder() |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1967 |
if builder is None: |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1968 |
self.logger.write_error(_("Fatal : cannot get builder.\n")) |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1969 |
return False |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1970 |
|
2492
7dd551ac2fa0
check_sources.sh makes me become even less productive
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2487
diff
changeset
|
1971 |
# recover md5 from last build |
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1972 |
MD5 = builder.GetBinaryMD5() |
1407
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1973 |
|
cf3d2b53dd68
Organized controller's _Build sub-methods layout. Many (unwanted) white space changes.
Edouard Tisserant
parents:
1401
diff
changeset
|
1974 |
# 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
|
1975 |
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
|
1976 |
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
|
1977 |
_("Failed : Must build before transfer.\n")) |
203 | 1978 |
return False |
1979 |
||
1980 |
# Compare PLC project with PLC on target |
|
1981 |
if self._connector.MatchMD5(MD5): |
|
1982 |
self.logger.write( |
|
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
1983 |
_("Latest build already matches current target. Transfering anyway...\n")) |
203 | 1984 |
|
2463
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1985 |
# purge any non-finished transfer |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1986 |
# note: this would abord any runing transfer with error |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1987 |
self._connector.PurgeBlobs() |
8742337a9fe3
Chunk based transfer for PLC binary and extra files, and some collateral code refactoring.
Edouard Tisserant
parents:
2462
diff
changeset
|
1988 |
|
2621
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1989 |
try: |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1990 |
# transfer extra files |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1991 |
extrafiles = [] |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1992 |
for extrafilespath in [self._getExtraFilesPath(), |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1993 |
self._getProjectFilesPath()]: |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1994 |
|
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1995 |
for name in os.listdir(extrafilespath): |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1996 |
extrafiles.append(( |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1997 |
name, |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1998 |
self._connector.BlobFromFile( |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
1999 |
# use file name as a seed to avoid collisions |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2000 |
# with files having same content |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2001 |
os.path.join(extrafilespath, name), name))) |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2002 |
|
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2003 |
# Send PLC on target |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2004 |
object_path = builder.GetBinaryPath() |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2005 |
# arbitrarily use MD5 as a seed, could be any string |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2006 |
object_blob = self._connector.BlobFromFile(object_path, MD5) |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2007 |
except IOError as e: |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2008 |
self.HidePLCProgress() |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2009 |
self.logger.write_error(repr(e)) |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2010 |
else: |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2011 |
self.HidePLCProgress() |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2012 |
self.logger.write(_("PLC data transfered successfully.\n")) |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2013 |
|
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2014 |
if self._connector.NewPLC(MD5, object_blob, extrafiles): |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2015 |
if self.GetIECProgramsAndVariables(): |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2016 |
self.UnsubscribeAllDebugIECVariable() |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2017 |
self.ProgramTransferred() |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
2018 |
if self.AppFrame is not None: |
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
2019 |
self.AppFrame.CloseObsoleteDebugTabs() |
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
2020 |
self.AppFrame.RefreshPouInstanceVariablesPanel() |
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
2021 |
self.AppFrame.LogViewer.ResetLogCounters() |
2621
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2022 |
self.logger.write(_("PLC installed successfully.\n")) |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
2023 |
success = True |
2621
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2024 |
else: |
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2025 |
self.logger.write_error(_("Missing debug data\n")) |
203 | 2026 |
else: |
2621
af09744a468e
Better error handling when blob transfer fail
Edouard Tisserant
parents:
2620
diff
changeset
|
2027 |
self.logger.write_error(_("PLC couldn't be installed\n")) |
415
339fa2542481
improved english spelling and grammar and internationalization updated
laurent
parents:
414
diff
changeset
|
2028 |
|
675
44b35c27e9ff
Adding support for quickly open recent projects in file menu
laurent
parents:
674
diff
changeset
|
2029 |
wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
3501
fa291393aac7
Added preliminary CLI. Supports building a project, transfering and running on PLC.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3480
diff
changeset
|
2030 |
return success |
105
434aed8dc58d
Added ability to override plugin methods with arbitrary python code (methods.py) when loading plugins
etisserant
parents:
97
diff
changeset
|
2031 |
|
2594
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2032 |
def _Repair(self): |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2033 |
dialog = wx.MessageDialog( |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2034 |
self.AppFrame, |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2035 |
_('Delete target PLC application?'), |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2036 |
_('Repair'), |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2037 |
wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2038 |
answer = dialog.ShowModal() |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2039 |
dialog.Destroy() |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2040 |
if answer == wx.ID_YES: |
2596
779e8dbf1ee1
Added RepairPLC() to PLCObject. For now just calling PurgePLC and quit PLC runtime.
Edouard Tisserant
parents:
2594
diff
changeset
|
2041 |
self._connector.RepairPLC() |
2594
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2042 |
|
738 | 2043 |
StatusMethods = [ |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2044 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2045 |
"bitmap": "Build", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2046 |
"name": _("Build"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2047 |
"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
|
2048 |
"method": "_Build" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2049 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2050 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2051 |
"bitmap": "Clean", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2052 |
"name": _("Clean"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2053 |
"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
|
2054 |
"method": "_Clean", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2055 |
"enabled": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2056 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2057 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2058 |
"bitmap": "Run", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2059 |
"name": _("Run"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2060 |
"tooltip": _("Start PLC"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2061 |
"method": "_Run", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2062 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2063 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2064 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2065 |
"bitmap": "Stop", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2066 |
"name": _("Stop"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2067 |
"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
|
2068 |
"method": "_Stop", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2069 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2070 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2071 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2072 |
"bitmap": "Connect", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2073 |
"name": _("Connect"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2074 |
"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
|
2075 |
"method": "_Connect" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2076 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2077 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2078 |
"bitmap": "Transfer", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2079 |
"name": _("Transfer"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2080 |
"tooltip": _("Transfer PLC"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2081 |
"method": "_Transfer", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2082 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2083 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2084 |
{ |
2652
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
2085 |
"bitmap": "Disconnect", |
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
2086 |
"name": _("Disconnect"), |
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
2087 |
"tooltip": _("Disconnect from PLC"), |
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
2088 |
"method": "_Disconnect", |
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
2089 |
"shown": False, |
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
2090 |
}, |
269149e78302
IDE: Main toolbar : Show repair button also in stop mode. Move repair button after disconnect button.
Edouard Tisserant
parents:
2645
diff
changeset
|
2091 |
{ |
2594
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2092 |
"bitmap": "Repair", |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2093 |
"name": _("Repair"), |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2094 |
"tooltip": _("Repair broken PLC"), |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2095 |
"method": "_Repair", |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2096 |
"shown": False, |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2097 |
}, |
f1e182818434
Added PurgePLC() method to PLCObject, to be invoked when PLC Status is broken. It clears PLC shared object an extra files and force status to Empty. Added correponding Repair button to toolbar, visible only when PLC status is broken.
Edouard Tisserant
parents:
2521
diff
changeset
|
2098 |
{ |
2337
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
2099 |
"bitmap": "IDManager", |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
2100 |
"name": _("ID Manager"), |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
2101 |
"tooltip": _("Manage secure connection identities"), |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
2102 |
"method": "_showIDManager", |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
2103 |
}, |
8689ce77076f
Added toolbar button to launch ID Manager dialog.
Edouard Tisserant
parents:
2334
diff
changeset
|
2104 |
{ |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2105 |
"bitmap": "ShowIECcode", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2106 |
"name": _("Show code"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2107 |
"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
|
2108 |
"method": "_showIECcode", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2109 |
"shown": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2110 |
}, |
738 | 2111 |
] |
2112 |
||
2113 |
ConfNodeMethods = [ |
|
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2114 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2115 |
"bitmap": "editIECrawcode", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2116 |
"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
|
2117 |
"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
|
2118 |
"method": "_editIECrawcode" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2119 |
}, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2120 |
{ |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2121 |
"bitmap": "ManageFolder", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2122 |
"name": _("Project Files"), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2123 |
"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
|
2124 |
"method": "_OpenProjectFiles" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1737
diff
changeset
|
2125 |
}, |
65 | 2126 |
] |
738 | 2127 |
|
2128 |
def EnableMethod(self, method, value): |
|
2129 |
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
|
2130 |
if d["method"] == method: |
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
2131 |
d["enabled"] = value |
738 | 2132 |
return True |
2133 |
return False |
|
2134 |
||
2135 |
def ShowMethod(self, method, value): |
|
2136 |
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
|
2137 |
if d["method"] == method: |
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
2138 |
d["shown"] = value |
738 | 2139 |
return True |
2140 |
return False |
|
2141 |
||
2142 |
def CallMethod(self, method): |
|
2143 |
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
|
2144 |
if d["method"] == method and d.get("enabled", True) and d.get("shown", True): |
738 | 2145 |
getattr(self, method)() |