author | usveticic |
Wed, 05 Aug 2020 15:20:10 +0200 | |
branch | svghmi |
changeset 3016 | 085a678715d0 |
parent 2992 | d48ad9c3ec91 |
child 3063 | 466c3df67835 |
permissions | -rw-r--r-- |
1511
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1503
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:
1503
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:
1503
diff
changeset
|
3 |
|
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1503
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:
1503
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:
1503
diff
changeset
|
6 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1503
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:
1511
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:
1503
diff
changeset
|
9 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1503
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:
1503
diff
changeset
|
11 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1503
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:
1503
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:
1503
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:
1503
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:
1503
diff
changeset
|
16 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1503
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:
1503
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:
1503
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:
1503
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:
1503
diff
changeset
|
21 |
# |
91538d0c242c
add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1503
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:
1503
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:
1503
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:
1503
diff
changeset
|
25 |
|
1853
47a3f39bead0
fix pylint warning "(relative-import) Relative import 'Y', should be 'X.Y'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
26 |
|
47a3f39bead0
fix pylint warning "(relative-import) Relative import 'Y', should be 'X.Y'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
27 |
from __future__ import absolute_import |
1732
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
28 |
import os |
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1680
diff
changeset
|
29 |
import re |
2434
07f48018b6f5
python3 support: pylint, W1612 # (unicode-builtin) unicode built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2418
diff
changeset
|
30 |
from builtins import str as text |
07f48018b6f5
python3 support: pylint, W1612 # (unicode-builtin) unicode built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2418
diff
changeset
|
31 |
|
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1511
diff
changeset
|
32 |
import util.paths as paths |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
33 |
from xmlclass import GenerateParserFromXSD |
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
34 |
|
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
35 |
from CodeFileTreeNode import CodeFile |
1853
47a3f39bead0
fix pylint warning "(relative-import) Relative import 'Y', should be 'X.Y'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
36 |
from py_ext.PythonEditor import PythonEditor |
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
37 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
38 |
|
1097 | 39 |
class PythonFileCTNMixin(CodeFile): |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
40 |
|
1124
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
41 |
CODEFILE_NAME = "PyFile" |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
42 |
SECTIONS_NAMES = [ |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
43 |
"globals", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
44 |
"init", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
45 |
"cleanup", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
46 |
"start", |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
47 |
"stop"] |
657
340c0b9caeca
Adding support for integrating Python code Editor into Beremiz frame.
laurent
parents:
654
diff
changeset
|
48 |
EditorType = PythonEditor |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
49 |
|
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
50 |
def __init__(self): |
1097 | 51 |
CodeFile.__init__(self) |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
52 |
|
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
53 |
filepath = self.PythonFileName() |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
54 |
|
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
55 |
if os.path.isfile(filepath): |
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1511
diff
changeset
|
56 |
PythonParser = GenerateParserFromXSD(paths.AbsNeighbourFile(__file__, "py_ext_xsd.xsd")) |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
57 |
|
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
58 |
xmlfile = open(filepath, 'r') |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
59 |
pythonfile_xml = xmlfile.read() |
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
60 |
xmlfile.close() |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
61 |
|
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
62 |
pythonfile_xml = pythonfile_xml.replace( |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
63 |
'xmlns="http://www.w3.org/2001/XMLSchema"', |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
64 |
'xmlns:xhtml="http://www.w3.org/1999/xhtml"') |
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
65 |
for cre, repl in [ |
2439
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2434
diff
changeset
|
66 |
(re.compile(r"(?<!<xhtml:p>)(?:<!\[CDATA\[)"), "<xhtml:p><![CDATA["), |
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2434
diff
changeset
|
67 |
(re.compile(r"(?:]]>)(?!</xhtml:p>)"), "]]></xhtml:p>")]: |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
68 |
pythonfile_xml = cre.sub(repl, pythonfile_xml) |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
69 |
|
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
|
70 |
try: |
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
|
71 |
python_code, error = PythonParser.LoadXMLString(pythonfile_xml) |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
72 |
if error is None: |
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
|
73 |
self.CodeFile.globals.setanyText(python_code.getanyText()) |
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
|
74 |
os.remove(filepath) |
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
|
75 |
self.CreateCodeFileBuffer(False) |
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
|
76 |
self.OnCTNSave() |
2418
5587c490a070
Use python 3 compatible exception syntax everywhere
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1902
diff
changeset
|
77 |
except Exception as exc: |
2434
07f48018b6f5
python3 support: pylint, W1612 # (unicode-builtin) unicode built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2418
diff
changeset
|
78 |
error = text(exc) |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
79 |
|
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
|
80 |
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
|
81 |
self.GetCTRoot().logger.write_error( |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
82 |
_("Couldn't import old %s file.") % self.CTNName()) |
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
83 |
|
1097 | 84 |
def CodeFileName(self): |
85 |
return os.path.join(self.CTNPath(), "pyfile.xml") |
|
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
86 |
|
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
87 |
def PythonFileName(self): |
721 | 88 |
return os.path.join(self.CTNPath(), "py_ext.xml") |
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
89 |
|
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
90 |
PreSectionsTexts = {} |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
91 |
PostSectionsTexts = {} |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1748
diff
changeset
|
92 |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
93 |
def GetSection(self, section): |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
94 |
return self.PreSectionsTexts.get(section, "") + "\n" + \ |
1315
ff14a66bbd12
Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents:
1160
diff
changeset
|
95 |
getattr(self.CodeFile, section).getanyText() + "\n" + \ |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
96 |
self.PostSectionsTexts.get(section, "") |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
97 |
|
2991
ddf6144a56cf
Prevent global python_poll blocks to be created when accidentally adding content to C-File OnChange column.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2681
diff
changeset
|
98 |
def CTNGlobalInstances(self): |
ddf6144a56cf
Prevent global python_poll blocks to be created when accidentally adding content to C-File OnChange column.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2681
diff
changeset
|
99 |
variables = self.CodeFileVariables(self.CodeFile) |
ddf6144a56cf
Prevent global python_poll blocks to be created when accidentally adding content to C-File OnChange column.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2681
diff
changeset
|
100 |
ret = [(variable.getname(), |
ddf6144a56cf
Prevent global python_poll blocks to be created when accidentally adding content to C-File OnChange column.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2681
diff
changeset
|
101 |
variable.gettype(), |
ddf6144a56cf
Prevent global python_poll blocks to be created when accidentally adding content to C-File OnChange column.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2681
diff
changeset
|
102 |
variable.getinitial()) |
ddf6144a56cf
Prevent global python_poll blocks to be created when accidentally adding content to C-File OnChange column.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2681
diff
changeset
|
103 |
for variable in variables] |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
104 |
location_str = "_".join(map(str, self.GetCurrentLocation())) |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
105 |
ret.append(("On_"+location_str+"_Change", "python_poll", "")) |
2991
ddf6144a56cf
Prevent global python_poll blocks to be created when accidentally adding content to C-File OnChange column.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2681
diff
changeset
|
106 |
return ret |
ddf6144a56cf
Prevent global python_poll blocks to be created when accidentally adding content to C-File OnChange column.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2681
diff
changeset
|
107 |
|
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
108 |
def CTNGenerate_C(self, buildpath, locations): |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
109 |
# location string for that CTN |
1833
2269739dd098
fix unnecessary lambda and enable corresponding pylint check
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1777
diff
changeset
|
110 |
location_str = "_".join(map(str, self.GetCurrentLocation())) |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
111 |
configname = self.GetCTRoot().GetProjectConfigNames()[0] |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
112 |
|
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
113 |
def _onchangecode(var): |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
114 |
return var.getonchange() + "('" + var.getname() + "')" |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
115 |
|
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
116 |
def _onchange(var): |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
117 |
return repr(var.getonchange()) \ |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
118 |
if var.getonchange() else None |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
119 |
|
1447
d6b878525ceb
Fixed systematically loading PLC binary at startup even without -a parameter. Extended py_ext extensions instances variable description (PLCGlobalsDesc). Now contains list of variables organizd by extension, with extension name
Edouard Tisserant
parents:
1436
diff
changeset
|
120 |
pyextname = self.CTNName() |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
121 |
varinfos = map( |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
122 |
lambda variable: { |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
123 |
"name": variable.getname(), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
124 |
"desc": repr(variable.getdesc()), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
125 |
"onchangecode": _onchangecode(variable), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
126 |
"onchange": _onchange(variable), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
127 |
"opts": repr(variable.getopts()), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
128 |
"configname": configname.upper(), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
129 |
"uppername": variable.getname().upper(), |
2681
abc2088aac4e
Py_ext: use non-derived type when generating C code for handling Python PLC globals.
Edouard Tisserant
parents:
2679
diff
changeset
|
130 |
"IECtype": self.GetCTRoot().GetBaseType(variable.gettype()), |
1901
e8cf68d69447
Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents:
1897
diff
changeset
|
131 |
"initial": repr(variable.getinitial()), |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
132 |
"pyextname": pyextname |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
133 |
}, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
134 |
self.CodeFile.variables.variable) |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
135 |
|
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
136 |
onchange_var_count = len([None for varinfo in varinfos if varinfo["onchange"]]) |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
137 |
|
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
138 |
# python side PLC global variables access stub |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
139 |
globalstubs = "\n".join([ |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
140 |
"""\ |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
141 |
_%(name)s_ctype, _%(name)s_unpack, _%(name)s_pack = \\ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
142 |
TypeTranslator["%(IECtype)s"] |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
143 |
_PySafeGetPLCGlob_%(name)s = PLCBinary.__SafeGetPLCGlob_%(name)s |
1145
203f4eff3313
Fixed PLC global var access from python. Added test in tests/python
Edouard Tisserant
parents:
1144
diff
changeset
|
144 |
_PySafeGetPLCGlob_%(name)s.restype = None |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
145 |
_PySafeGetPLCGlob_%(name)s.argtypes = [ctypes.POINTER(_%(name)s_ctype)] |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
146 |
_PySafeSetPLCGlob_%(name)s = PLCBinary.__SafeSetPLCGlob_%(name)s |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
147 |
_PySafeSetPLCGlob_%(name)s.restype = None |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
148 |
_PySafeSetPLCGlob_%(name)s.argtypes = [ctypes.POINTER(_%(name)s_ctype)] |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
149 |
_%(pyextname)sGlobalsDesc.append(( |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
150 |
"%(name)s", |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
151 |
"%(IECtype)s", |
1897
62f9cae9a25f
Extend python<->PLC global variable description "GlobalDesc" to support Initial value setting.
Edouard Tisserant
parents:
1878
diff
changeset
|
152 |
%(initial)s, |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
153 |
%(desc)s, |
1449
5f09fa31d7b0
Added __ext_name__ variable accessible from user python code, reflecting extension name. Fixed contend of OnChange field in PLCGlobalsDesc
Edouard Tisserant
parents:
1448
diff
changeset
|
154 |
%(onchange)s, |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
155 |
%(opts)s)) |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
156 |
""" % varinfo for varinfo in varinfos]) |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
157 |
|
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
158 |
on_change_func_body = "\n".join([""" |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
159 |
if changes.next(): |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
160 |
# %(name)s |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
161 |
try: |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
162 |
%(onchangecode)s |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
163 |
except Exception as e: |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
164 |
errors.append("%(name)s: "+str(e)) |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
165 |
""" % varinfo for varinfo in varinfos if varinfo["onchange"]]) |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
166 |
# Runtime calls (start, stop, init, and cleanup) |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
167 |
rtcalls = "" |
1124
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
168 |
for section in self.SECTIONS_NAMES: |
b1705000eba1
Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents:
1120
diff
changeset
|
169 |
if section != "globals": |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
170 |
rtcalls += "def _runtime_%s_%s():\n" % (location_str, section) |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
171 |
sectiontext = self.GetSection(section).strip() |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
172 |
if sectiontext: |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
173 |
rtcalls += ' ' + \ |
1154
da9ccfceff31
Fixed build error with python <-> PLCglobals variables declared with no initial value
Edouard Tisserant
parents:
1148
diff
changeset
|
174 |
sectiontext.replace('\n', '\n ')+"\n\n" |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
175 |
else: |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
176 |
rtcalls += " pass\n\n" |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
177 |
|
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
178 |
globalsection = self.GetSection("globals") |
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
179 |
|
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
180 |
loc_dict = { |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
181 |
"pyextname": pyextname, |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
182 |
"globalstubs": globalstubs, |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
183 |
"globalsection": globalsection, |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
184 |
"rtcalls": rtcalls, |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
185 |
"location_str": location_str, |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
186 |
"on_change_func_body":on_change_func_body, |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
187 |
"onchange_var_count": onchange_var_count |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
188 |
} |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
189 |
|
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
190 |
PyFileContent = """\ |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
191 |
#!/usr/bin/env python |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
192 |
# -*- coding: utf-8 -*- |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
193 |
## Code generated by Beremiz python mixin confnode |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
194 |
## |
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
195 |
|
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
196 |
## Code for PLC global variable access |
1902
2b7e2db31d81
Clarify licensing, and packaging of runtime only files :
Edouard Tisserant
parents:
1901
diff
changeset
|
197 |
from runtime.typemapping import TypeTranslator |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
198 |
import ctypes |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
199 |
|
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
200 |
_PySafeGetChanges_%(pyextname)s = PLCBinary.PySafeGetChanges_%(location_str)s |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
201 |
_PySafeGetChanges_%(pyextname)s.restype = ctypes.POINTER(ctypes.c_int * %(onchange_var_count)d) |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
202 |
_PySafeGetChanges_%(pyextname)s.argtypes = None |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
203 |
|
1447
d6b878525ceb
Fixed systematically loading PLC binary at startup even without -a parameter. Extended py_ext extensions instances variable description (PLCGlobalsDesc). Now contains list of variables organizd by extension, with extension name
Edouard Tisserant
parents:
1436
diff
changeset
|
204 |
_%(pyextname)sGlobalsDesc = [] |
1449
5f09fa31d7b0
Added __ext_name__ variable accessible from user python code, reflecting extension name. Fixed contend of OnChange field in PLCGlobalsDesc
Edouard Tisserant
parents:
1448
diff
changeset
|
205 |
__ext_name__ = "%(pyextname)s" |
1452 | 206 |
PLCGlobalsDesc.append(( "%(pyextname)s" , _%(pyextname)sGlobalsDesc )) |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
207 |
%(globalstubs)s |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
208 |
|
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
209 |
## User code in "global" scope |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
210 |
%(globalsection)s |
366
cd90e4c10261
Move python evaluator to create a python plugin containing any related python module
laurent
parents:
diff
changeset
|
211 |
|
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
212 |
## Beremiz python runtime calls |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
213 |
%(rtcalls)s |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
214 |
|
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
215 |
def On_%(pyextname)s_Change(): |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
216 |
changesP = _PySafeGetChanges_%(pyextname)s() |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
217 |
if not changesP: |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
218 |
raise Exception("PySafeGetChanges returned NULL!") |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
219 |
changes = iter(changesP.contents) |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
220 |
errors = [] |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
221 |
%(on_change_func_body)s |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
222 |
if len(errors)>0 : |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
223 |
raise Exception("Exception in %(pyextname)s OnChange call:\\\\n" + "\\\\n".join(errors)) |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
224 |
|
1449
5f09fa31d7b0
Added __ext_name__ variable accessible from user python code, reflecting extension name. Fixed contend of OnChange field in PLCGlobalsDesc
Edouard Tisserant
parents:
1448
diff
changeset
|
225 |
del __ext_name__ |
5f09fa31d7b0
Added __ext_name__ variable accessible from user python code, reflecting extension name. Fixed contend of OnChange field in PLCGlobalsDesc
Edouard Tisserant
parents:
1448
diff
changeset
|
226 |
|
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
227 |
""" % loc_dict |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
228 |
|
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
229 |
# write generated content to python file |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
230 |
runtimefile_path = os.path.join(buildpath, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
231 |
"runtime_%s.py" % location_str) |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
232 |
runtimefile = open(runtimefile_path, 'w') |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
233 |
runtimefile.write(PyFileContent.encode('utf-8')) |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
234 |
runtimefile.close() |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
235 |
|
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
236 |
# C code for safe global variables access |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
237 |
|
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
238 |
vardecfmt = """\ |
1154
da9ccfceff31
Fixed build error with python <-> PLCglobals variables declared with no initial value
Edouard Tisserant
parents:
1148
diff
changeset
|
239 |
extern __IEC_%(IECtype)s_t %(configname)s__%(uppername)s; |
da9ccfceff31
Fixed build error with python <-> PLCglobals variables declared with no initial value
Edouard Tisserant
parents:
1148
diff
changeset
|
240 |
IEC_%(IECtype)s __%(name)s_rbuffer = __INIT_%(IECtype)s; |
da9ccfceff31
Fixed build error with python <-> PLCglobals variables declared with no initial value
Edouard Tisserant
parents:
1148
diff
changeset
|
241 |
IEC_%(IECtype)s __%(name)s_wbuffer; |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
242 |
long __%(name)s_rlock = 0; |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
243 |
long __%(name)s_wlock = 0; |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
244 |
int __%(name)s_wbuffer_written = 0; |
1154
da9ccfceff31
Fixed build error with python <-> PLCglobals variables declared with no initial value
Edouard Tisserant
parents:
1148
diff
changeset
|
245 |
void __SafeGetPLCGlob_%(name)s(IEC_%(IECtype)s *pvalue){ |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
246 |
while(AtomicCompareExchange(&__%(name)s_rlock, 0, 1)); |
1145
203f4eff3313
Fixed PLC global var access from python. Added test in tests/python
Edouard Tisserant
parents:
1144
diff
changeset
|
247 |
*pvalue = __%(name)s_rbuffer; |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
248 |
AtomicCompareExchange((long*)&__%(name)s_rlock, 1, 0); |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
249 |
} |
1160
e9e9d3193894
Fixed GCC warnings when building stub code for python PLC globals access
Edouard Tisserant
parents:
1154
diff
changeset
|
250 |
void __SafeSetPLCGlob_%(name)s(IEC_%(IECtype)s *value){ |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
251 |
while(AtomicCompareExchange(&__%(name)s_wlock, 0, 1)); |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
252 |
__%(name)s_wbuffer = *value; |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
253 |
__%(name)s_wbuffer_written = 1; |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
254 |
AtomicCompareExchange((long*)&__%(name)s_wlock, 1, 0); |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
255 |
} |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
256 |
|
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
257 |
""" |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
258 |
|
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
259 |
vardeconchangefmt = """\ |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
260 |
int __%(name)s_rbuffer_written = 0; |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
261 |
""" |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
262 |
|
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
263 |
varretfmt = """\ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
264 |
if(!AtomicCompareExchange(&__%(name)s_wlock, 0, 1)){ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
265 |
if(__%(name)s_wbuffer_written == 1){ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
266 |
%(configname)s__%(uppername)s.value = __%(name)s_wbuffer; |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
267 |
__%(name)s_wbuffer_written = 0; |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
268 |
} |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
269 |
AtomicCompareExchange((long*)&__%(name)s_wlock, 1, 0); |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
270 |
} |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
271 |
""" |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
272 |
varpubfmt = """\ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
273 |
if(!AtomicCompareExchange(&__%(name)s_rlock, 0, 1)){ |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
274 |
__%(name)s_rbuffer = __GET_VAR(%(configname)s__%(uppername)s); |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
275 |
AtomicCompareExchange((long*)&__%(name)s_rlock, 1, 0); |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
276 |
} |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
277 |
""" |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
278 |
|
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
279 |
varpubonchangefmt = """\ |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
280 |
if(!AtomicCompareExchange(&__%(name)s_rlock, 0, 1)){ |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
281 |
IEC_%(IECtype)s tmp = __GET_VAR(%(configname)s__%(uppername)s); |
2679
2783906d5792
Runtime: STRING type for Python PLC Globals was making problem with strings, since generated code wasn't doing comparison properly.
Edouard Tisserant
parents:
2442
diff
changeset
|
282 |
if(NE_%(IECtype)s(1, NULL, __%(name)s_rbuffer, tmp)){ |
2783906d5792
Runtime: STRING type for Python PLC Globals was making problem with strings, since generated code wasn't doing comparison properly.
Edouard Tisserant
parents:
2442
diff
changeset
|
283 |
__%(name)s_rbuffer = tmp; |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
284 |
/* mark variable as changed */ |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
285 |
__%(name)s_rbuffer_written = 1; |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
286 |
some_change = 1; |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
287 |
} |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
288 |
AtomicCompareExchange((long*)&__%(name)s_rlock, 1, 0); |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
289 |
} |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
290 |
""" |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
291 |
|
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
292 |
varcollectchangefmt = """\ |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
293 |
while(AtomicCompareExchange(&__%(name)s_wlock, 0, 1)); |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
294 |
pysafe_changes[change_index++] = __%(name)s_rbuffer_written; |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
295 |
/* mark variable as unchanged */ |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
296 |
__%(name)s_rbuffer_written = 0; |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
297 |
AtomicCompareExchange((long*)&__%(name)s_wlock, 1, 0); |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
298 |
|
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
299 |
""" |
1452 | 300 |
vardec = "\n".join([(vardecfmt + vardeconchangefmt |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1740
diff
changeset
|
301 |
if varinfo["onchange"] else vardecfmt) % varinfo |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
302 |
for varinfo in varinfos]) |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
303 |
varret = "\n".join([varretfmt % varinfo for varinfo in varinfos]) |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
304 |
varpub = "\n".join([(varpubonchangefmt if varinfo["onchange"] else |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
305 |
varpubfmt) % varinfo |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
306 |
for varinfo in varinfos]) |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
307 |
varcollectchange = "\n".join([varcollectchangefmt % varinfo |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
308 |
for varinfo in varinfos if varinfo["onchange"]]) |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
309 |
|
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
310 |
pysafe_pypoll_code = "On_"+pyextname+"_Change()" |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
311 |
|
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
312 |
loc_dict = { |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
313 |
"vardec": vardec, |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
314 |
"varret": varret, |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
315 |
"varpub": varpub, |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
316 |
"location_str": location_str, |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
317 |
"pysafe_pypoll_code": '"'+pysafe_pypoll_code+'"', |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
318 |
"pysafe_pypoll_code_len": len(pysafe_pypoll_code), |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
319 |
"varcollectchange": varcollectchange, |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
320 |
"onchange_var_count": onchange_var_count |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
321 |
} |
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
322 |
|
1452 | 323 |
# TODO : use config name obtained from model instead of default |
324 |
# "config.h". User cannot change config name, but project imported |
|
325 |
# or created in older beremiz vesion could use different name. |
|
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
326 |
PyCFileContent = """\ |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
327 |
/* |
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
328 |
* Code generated by Beremiz py_ext confnode |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
329 |
* for safe global variables access |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
330 |
*/ |
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
331 |
#include "iec_types_all.h" |
1448
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
332 |
#include "POUS.h" |
20ff66dcc31d
Added more columns in variable list of extensions' code editors - updating python's PLCGlobals from PLC logic can trigger asynchronous 'OnChange' python call
Edouard Tisserant
parents:
1447
diff
changeset
|
333 |
#include "config.h" |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
334 |
#include "beremiz.h" |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
335 |
|
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
336 |
PYTHON_POLL* __%(location_str)s_notifier; |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
337 |
|
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
338 |
/* User variables reference */ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
339 |
%(vardec)s |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
340 |
|
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
341 |
/* Beremiz confnode functions */ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
342 |
int __init_%(location_str)s(int argc,char **argv){ |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
343 |
__%(location_str)s_notifier = __GET_GLOBAL_ON_%(location_str)s_CHANGE(); |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
344 |
__SET_VAR(__%(location_str)s_notifier->,TRIG,,__BOOL_LITERAL(TRUE)); |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
345 |
__SET_VAR(__%(location_str)s_notifier->,CODE,,__STRING_LITERAL(%(pysafe_pypoll_code_len)d,%(pysafe_pypoll_code)s)); |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
346 |
|
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
347 |
return 0; |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
348 |
} |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
349 |
|
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
350 |
void __cleanup_%(location_str)s(void){ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
351 |
} |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
352 |
|
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
353 |
void __retrieve_%(location_str)s(void){ |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
354 |
%(varret)s |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
355 |
} |
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
356 |
|
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
357 |
void __publish_%(location_str)s(void){ |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
358 |
int some_change = 0; |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
359 |
%(varpub)s |
2992
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
360 |
// call python part if there was at least a change |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
361 |
if(some_change){ |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
362 |
PYTHON_POLL_body__(__%(location_str)s_notifier); |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
363 |
} |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
364 |
} |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
365 |
|
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
366 |
static int pysafe_changes[%(onchange_var_count)d]; |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
367 |
void* PySafeGetChanges_%(location_str)s(void){ |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
368 |
int change_index=0; |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
369 |
%(varcollectchange)s |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
370 |
return (void*)&pysafe_changes[0]; |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
371 |
} |
d48ad9c3ec91
Python Runtime : stil untested optimization of Python Safe Globals.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2991
diff
changeset
|
372 |
|
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1833
diff
changeset
|
373 |
""" % loc_dict |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
374 |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
375 |
Gen_PyCfile_path = os.path.join(buildpath, "PyCFile_%s.c" % location_str) |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
376 |
pycfile = open(Gen_PyCfile_path, 'w') |
1144
21475ee0e688
Added stub code and declarations for bidirectional access to PLC globals from python code (untested)
Edouard Tisserant
parents:
1132
diff
changeset
|
377 |
pycfile.write(PyCFileContent) |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
378 |
pycfile.close() |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
379 |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
380 |
matiec_CFLAGS = '"-I%s"' % os.path.abspath( |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
381 |
self.GetCTRoot().GetIECLibPath()) |
1436
e15ca67197b9
py_ext user python code can now know about global variables shared with PLC. updated tests/python accordingly
Edouard Tisserant
parents:
1330
diff
changeset
|
382 |
|
1503
3a238c0c5993
fix regression introduced by changeset: 1431:28e9d479aa65 [Use '-p' command line option when running matiec (iec2c)]
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1475
diff
changeset
|
383 |
return ([(Gen_PyCfile_path, matiec_CFLAGS)], |
1132
28f96aa9c070
Rewrote py_ext and wxglade generators in a clean factored way, added C skeleton for python access to PLC global vars
Edouard Tisserant
parents:
1124
diff
changeset
|
384 |
"", |
1145
203f4eff3313
Fixed PLC global var access from python. Added test in tests/python
Edouard Tisserant
parents:
1144
diff
changeset
|
385 |
True, |
2442
b13f021c68a5
python3 support: pylint, W1607 # (file-builtin) file built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2439
diff
changeset
|
386 |
("runtime_%s.py" % location_str, open(runtimefile_path, "rb"))) |