Added Cycletools to __init__ and Switched VCS and IDE

Switched from Mercurial to GIT
Switched from eric6 to pyCharm
This commit is contained in:
2019-10-20 14:30:36 +02:00
parent 34f1437cac
commit 11ceb6f4a2
29 changed files with 470 additions and 5650 deletions

118
.gitignore vendored Normal file
View File

@@ -0,0 +1,118 @@
# ---> Python
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
/test/
/make.conf

View File

@@ -1,23 +0,0 @@
glob:.eric6project
glob:_eric6project
glob:.eric5project
glob:_eric5project
glob:.eric4project
glob:_eric4project
glob:.ropeproject
glob:_ropeproject
glob:.directory
glob:**.pyc
glob:**.pyo
glob:**.orig
glob:**.bak
glob:**.rej
glob:**~
glob:cur
glob:tmp
glob:__pycache__
glob:**.DS_Store
syntax: glob
test/*
deb/*
dist/*

17
.idea/$CACHE_FILE$ generated Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectInspectionProfilesVisibleTreeState">
<entry key="Project Default">
<profile-state>
<expanded-state>
<State />
</expanded-state>
<selected-state>
<State>
<id>Angular</id>
</State>
</selected-state>
</profile-state>
</entry>
</component>
</project>

2
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,2 @@
# Default ignored files
/workspace.xml

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/revpimodio2.iml" filepath="$PROJECT_DIR$/.idea/revpimodio2.iml" />
</modules>
</component>
</project>

11
.idea/revpimodio2.iml generated Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.6" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@@ -1,53 +0,0 @@
<!DOCTYPE html>
<html><head>
<title>revpimodio2</title>
<meta charset="UTF-8">
</head>
<body style="background-color:#FFFFFF;color:#000000">
<h1 style="background-color:#FFFFFF;color:#0000FF">
revpimodio2</h1>
<p>
Stellt alle Klassen fuer den RevolutionPi zur Verfuegung.
</p><p>
Webpage: https://revpimodio.org/
</p><p>
Stellt Klassen fuer die einfache Verwendung des Revolution Pis der
Kunbus GmbH (https://revolution.kunbus.de/) zur Verfuegung. Alle I/Os werden
aus der piCtory Konfiguration eingelesen und mit deren Namen direkt zugreifbar
gemacht. Fuer Gateways sind eigene IOs ueber mehrere Bytes konfigurierbar
Mit den definierten Namen greift man direkt auf die gewuenschten Daten zu.
Auf alle IOs kann der Benutzer Funktionen als Events registrieren. Diese
fuehrt das Modul bei Datenaenderung aus.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Modules</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="revpimodio2.__init__.html">revpimodio2</a></td>
<td>Stellt alle Klassen fuer den RevolutionPi zur Verfuegung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="revpimodio2.app.html">app</a></td>
<td>Bildet die App Sektion von piCtory ab.</td>
</tr><tr>
<td><a style="color:#0000FF" href="revpimodio2.device.html">device</a></td>
<td>Modul fuer die Verwaltung der Devices.</td>
</tr><tr>
<td><a style="color:#0000FF" href="revpimodio2.helper.html">helper</a></td>
<td>RevPiModIO Helperklassen und Tools.</td>
</tr><tr>
<td><a style="color:#0000FF" href="revpimodio2.io.html">io</a></td>
<td>RevPiModIO Modul fuer die Verwaltung der IOs.</td>
</tr><tr>
<td><a style="color:#0000FF" href="revpimodio2.modio.html">modio</a></td>
<td>RevPiModIO Hauptklasse fuer piControl0 Zugriff.</td>
</tr><tr>
<td><a style="color:#0000FF" href="revpimodio2.netio.html">netio</a></td>
<td>RevPiModIO Hauptklasse fuer Netzwerkzugriff.</td>
</tr><tr>
<td><a style="color:#0000FF" href="revpimodio2.summary.html">summary</a></td>
<td>Bildet die Summary-Sektion von piCtory ab.</td>
</tr>
</table>
</body></html>

View File

@@ -1,20 +0,0 @@
<!DOCTYPE html>
<html><head>
<title>Table of contents</title>
<meta charset="UTF-8">
</head>
<body style="background-color:#FFFFFF;color:#000000">
<h1 style="background-color:#FFFFFF;color:#0000FF">
Table of contents</h1>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Packages</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="index-revpimodio2.html">revpimodio2</a></td>
<td>Stellt alle Klassen fuer den RevolutionPi zur Verfuegung.</td>
</tr>
</table>
</body></html>

View File

@@ -1,116 +0,0 @@
<!DOCTYPE html>
<html><head>
<title>revpimodio2.__init__</title>
<meta charset="UTF-8">
</head>
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
<h1 style="background-color:#FFFFFF;color:#0000FF">
revpimodio2.__init__</h1>
<p>
Stellt alle Klassen fuer den RevolutionPi zur Verfuegung.
</p><p>
Webpage: https://revpimodio.org/
</p><p>
Stellt Klassen fuer die einfache Verwendung des Revolution Pis der
Kunbus GmbH (https://revolution.kunbus.de/) zur Verfuegung. Alle I/Os werden
aus der piCtory Konfiguration eingelesen und mit deren Namen direkt zugreifbar
gemacht. Fuer Gateways sind eigene IOs ueber mehrere Bytes konfigurierbar
Mit den definierten Namen greift man direkt auf die gewuenschten Daten zu.
Auf alle IOs kann der Benutzer Funktionen als Events registrieren. Diese
fuehrt das Modul bei Datenaenderung aus.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3>
<table>
<tr><td>BOTH</td></tr><tr><td>FALLING</td></tr><tr><td>GREEN</td></tr><tr><td>INP</td></tr><tr><td>MEM</td></tr><tr><td>OFF</td></tr><tr><td>OUT</td></tr><tr><td>RED</td></tr><tr><td>RISING</td></tr><tr><td>__all__</td></tr><tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr><tr><td>__name__</td></tr><tr><td>__version__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#DeviceNotFoundError">DeviceNotFoundError</a></td>
<td>Fehler wenn ein Device nicht gefunden wird.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Functions</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#acheck">acheck</a></td>
<td>Check type of given arguments.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#consttostr">consttostr</a></td>
<td>Gibt <class 'str'> fuer Konstanten zurueck.</td>
</tr>
</table>
<hr /><hr />
<a NAME="DeviceNotFoundError" ID="DeviceNotFoundError"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">DeviceNotFoundError</h2>
<p>
Fehler wenn ein Device nicht gefunden wird.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
Exception
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="acheck" ID="acheck"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">acheck</h2>
<b>acheck</b>(<i>check_type, **kwargs</i>)
<p>
Check type of given arguments.
</p><p>
Use the argument name as keyword and the argument itself as value.
</p><dl>
<dt><i>check_type</i></dt>
<dd>
Type to check
</dd><dt><i>kwargs</i></dt>
<dd>
Arguments to check
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="consttostr" ID="consttostr"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">consttostr</h2>
<b>consttostr</b>(<i>value</i>)
<p>
Gibt <class 'str'> fuer Konstanten zurueck.
</p><p>
Diese Funktion ist erforderlich, da enum in Python 3.2 nicht existiert.
</p><dl>
<dt><i>value</i></dt>
<dd>
Konstantenwert
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
<class 'str'> Name der Konstanten
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr />
</body></html>

View File

@@ -1,76 +0,0 @@
<!DOCTYPE html>
<html><head>
<title>revpimodio2.app</title>
<meta charset="UTF-8">
</head>
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
<h1 style="background-color:#FFFFFF;color:#0000FF">
revpimodio2.app</h1>
<p>
Bildet die App Sektion von piCtory ab.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3>
<table>
<tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#App">App</a></td>
<td>Bildet die App Sektion der config.rsc ab.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Functions</h3>
<table>
<tr><td>None</td></tr>
</table>
<hr /><hr />
<a NAME="App" ID="App"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">App</h2>
<p>
Bildet die App Sektion der config.rsc ab.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
object
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#App.__init__">App</a></td>
<td>Instantiiert die App-Klasse.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="App.__init__" ID="App.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
App (Constructor)</h3>
<b>App</b>(<i>app</i>)
<p>
Instantiiert die App-Klasse.
</p><dl>
<dt><i>app</i></dt>
<dd>
piCtory Appinformationen
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr />
</body></html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,578 +0,0 @@
<!DOCTYPE html>
<html><head>
<title>revpimodio2.helper</title>
<meta charset="UTF-8">
</head>
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
<h1 style="background-color:#FFFFFF;color:#0000FF">
revpimodio2.helper</h1>
<p>
RevPiModIO Helperklassen und Tools.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3>
<table>
<tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#Cycletools">Cycletools</a></td>
<td>Werkzeugkasten fuer Cycleloop-Funktion.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#EventCallback">EventCallback</a></td>
<td>Thread fuer das interne Aufrufen von Event-Funktionen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ProcimgWriter">ProcimgWriter</a></td>
<td>Klasse fuer Synchroniseriungs-Thread.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Var">Var</a></td>
<td></td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Functions</h3>
<table>
<tr><td>None</td></tr>
</table>
<hr /><hr />
<a NAME="Cycletools" ID="Cycletools"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">Cycletools</h2>
<p>
Werkzeugkasten fuer Cycleloop-Funktion.
</p><p>
Diese Klasse enthaelt Werkzeuge fuer Zyklusfunktionen, wie Taktmerker
und Flankenmerker.
Zu beachten ist, dass die Flankenmerker beim ersten Zyklus alle den Wert
True haben! Ueber den Merker Cycletools.first kann ermittelt werden,
ob es sich um den ersten Zyklus handelt.
</p><p>
Taktmerker flag1c, flag5c, flag10c, usw. haben den als Zahl angegebenen
Wert an Zyklen jeweils False und True.
Beispiel: flag5c hat 5 Zyklen den Wert False und in den naechsten 5 Zyklen
den Wert True.
</p><p>
Flankenmerker flank5c, flank10c, usw. haben immer im, als Zahl angebenen
Zyklus fuer einen Zyklusdurchlauf den Wert True, sonst False.
Beispiel: flank5c hat immer alle 5 Zyklen den Wert True.
</p><p>
Diese Merker koennen z.B. verwendet werden um, an Outputs angeschlossene,
Lampen synchron blinken zu lassen.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
None
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#Cycletools.__init__">Cycletools</a></td>
<td>Init Cycletools class.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools._docycle">_docycle</a></td>
<td>Zyklusarbeiten.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.get_tof">get_tof</a></td>
<td>Wert der Ausschaltverzoegerung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.get_tofc">get_tofc</a></td>
<td>Wert der Ausschaltverzoegerung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.get_ton">get_ton</a></td>
<td>Einschaltverzoegerung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.get_tonc">get_tonc</a></td>
<td>Einschaltverzoegerung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.get_tp">get_tp</a></td>
<td>Impulstimer.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.get_tpc">get_tpc</a></td>
<td>Impulstimer.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.set_tof">set_tof</a></td>
<td>Startet bei Aufruf einen ausschaltverzoegerten Timer.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.set_tofc">set_tofc</a></td>
<td>Startet bei Aufruf einen ausschaltverzoegerten Timer.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.set_ton">set_ton</a></td>
<td>Startet einen einschaltverzoegerten Timer.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.set_tonc">set_tonc</a></td>
<td>Startet einen einschaltverzoegerten Timer.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.set_tp">set_tp</a></td>
<td>Startet einen Impuls Timer.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Cycletools.set_tpc">set_tpc</a></td>
<td>Startet einen Impuls Timer.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="Cycletools.__init__" ID="Cycletools.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools (Constructor)</h3>
<b>Cycletools</b>(<i>cycletime</i>)
<p>
Init Cycletools class.
</p><a NAME="Cycletools._docycle" ID="Cycletools._docycle"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools._docycle</h3>
<b>_docycle</b>(<i></i>)
<p>
Zyklusarbeiten.
</p><a NAME="Cycletools.get_tof" ID="Cycletools.get_tof"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.get_tof</h3>
<b>get_tof</b>(<i>name</i>)
<p>
Wert der Ausschaltverzoegerung.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name des Timers
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
Wert <class 'bool'> der Ausschaltverzoegerung
</dd>
</dl><a NAME="Cycletools.get_tofc" ID="Cycletools.get_tofc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.get_tofc</h3>
<b>get_tofc</b>(<i>name</i>)
<p>
Wert der Ausschaltverzoegerung.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name des Timers
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
Wert <class 'bool'> der Ausschaltverzoegerung
</dd>
</dl><a NAME="Cycletools.get_ton" ID="Cycletools.get_ton"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.get_ton</h3>
<b>get_ton</b>(<i>name</i>)
<p>
Einschaltverzoegerung.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name des Timers
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
Wert <class 'bool'> der Einschaltverzoegerung
</dd>
</dl><a NAME="Cycletools.get_tonc" ID="Cycletools.get_tonc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.get_tonc</h3>
<b>get_tonc</b>(<i>name</i>)
<p>
Einschaltverzoegerung.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name des Timers
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
Wert <class 'bool'> der Einschaltverzoegerung
</dd>
</dl><a NAME="Cycletools.get_tp" ID="Cycletools.get_tp"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.get_tp</h3>
<b>get_tp</b>(<i>name</i>)
<p>
Impulstimer.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name des Timers
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
Wert <class 'bool'> des Impulses
</dd>
</dl><a NAME="Cycletools.get_tpc" ID="Cycletools.get_tpc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.get_tpc</h3>
<b>get_tpc</b>(<i>name</i>)
<p>
Impulstimer.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name des Timers
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
Wert <class 'bool'> des Impulses
</dd>
</dl><a NAME="Cycletools.set_tof" ID="Cycletools.set_tof"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.set_tof</h3>
<b>set_tof</b>(<i>name, milliseconds</i>)
<p>
Startet bei Aufruf einen ausschaltverzoegerten Timer.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name fuer Zugriff auf Timer
</dd><dt><i>milliseconds</i></dt>
<dd>
Verzoegerung in Millisekunden
</dd>
</dl><a NAME="Cycletools.set_tofc" ID="Cycletools.set_tofc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.set_tofc</h3>
<b>set_tofc</b>(<i>name, cycles</i>)
<p>
Startet bei Aufruf einen ausschaltverzoegerten Timer.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name fuer Zugriff auf Timer
</dd><dt><i>cycles</i></dt>
<dd>
Zyklusanzahl, der Verzoegerung wenn nicht neu gestartet
</dd>
</dl><a NAME="Cycletools.set_ton" ID="Cycletools.set_ton"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.set_ton</h3>
<b>set_ton</b>(<i>name, milliseconds</i>)
<p>
Startet einen einschaltverzoegerten Timer.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name fuer Zugriff auf Timer
</dd><dt><i>milliseconds</i></dt>
<dd>
Millisekunden, der Verzoegerung wenn neu gestartet
</dd>
</dl><a NAME="Cycletools.set_tonc" ID="Cycletools.set_tonc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.set_tonc</h3>
<b>set_tonc</b>(<i>name, cycles</i>)
<p>
Startet einen einschaltverzoegerten Timer.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name fuer Zugriff auf Timer
</dd><dt><i>cycles</i></dt>
<dd>
Zyklusanzahl, der Verzoegerung wenn neu gestartet
</dd>
</dl><a NAME="Cycletools.set_tp" ID="Cycletools.set_tp"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.set_tp</h3>
<b>set_tp</b>(<i>name, milliseconds</i>)
<p>
Startet einen Impuls Timer.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name fuer Zugriff auf Timer
</dd><dt><i>milliseconds</i></dt>
<dd>
Millisekunden, die der Impuls anstehen soll
</dd>
</dl><a NAME="Cycletools.set_tpc" ID="Cycletools.set_tpc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Cycletools.set_tpc</h3>
<b>set_tpc</b>(<i>name, cycles</i>)
<p>
Startet einen Impuls Timer.
</p><dl>
<dt><i>name</i></dt>
<dd>
Eindeutiger Name fuer Zugriff auf Timer
</dd><dt><i>cycles</i></dt>
<dd>
Zyklusanzahl, die der Impuls anstehen soll
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="EventCallback" ID="EventCallback"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">EventCallback</h2>
<p>
Thread fuer das interne Aufrufen von Event-Funktionen.
</p><p>
Der Eventfunktion, welche dieser Thread aufruft, wird der Thread selber
als Parameter uebergeben. Darauf muss bei der definition der Funktion
geachtet werden z.B. "def event(th):". Bei umfangreichen Funktionen kann
dieser ausgewertet werden um z.B. doppeltes Starten zu verhindern.
Ueber EventCallback.ioname kann der Name des IO-Objekts abgerufen werden,
welches das Event ausgeloest hast. EventCallback.iovalue gibt den Wert des
IO-Objekts zum Ausloesezeitpunkt zurueck.
Der Thread stellt das EventCallback.exit Event als Abbruchbedingung fuer
die aufgerufene Funktion zur Verfuegung.
Durch Aufruf der Funktion EventCallback.stop() wird das exit-Event gesetzt
und kann bei Schleifen zum Abbrechen verwendet werden.
Mit dem .exit() Event auch eine Wartefunktion realisiert
werden: "th.exit.wait(0.5)" - Wartet 500ms oder bricht sofort ab, wenn
fuer den Thread .stop() aufgerufen wird.
</p><p>
while not th.exit.is_set():
# IO-Arbeiten
th.exit.wait(0.5)
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
Thread
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#EventCallback.__init__">EventCallback</a></td>
<td>Init EventCallback class.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#EventCallback.run">run</a></td>
<td>Ruft die registrierte Funktion auf.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#EventCallback.stop">stop</a></td>
<td>Setzt das exit-Event mit dem die Funktion beendet werden kann.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="EventCallback.__init__" ID="EventCallback.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
EventCallback (Constructor)</h3>
<b>EventCallback</b>(<i>func, name, value</i>)
<p>
Init EventCallback class.
</p><dl>
<dt><i>func</i></dt>
<dd>
Funktion die beim Start aufgerufen werden soll
</dd><dt><i>name</i></dt>
<dd>
IO-Name
</dd><dt><i>value</i></dt>
<dd>
IO-Value zum Zeitpunkt des Events
</dd>
</dl><a NAME="EventCallback.run" ID="EventCallback.run"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
EventCallback.run</h3>
<b>run</b>(<i></i>)
<p>
Ruft die registrierte Funktion auf.
</p><a NAME="EventCallback.stop" ID="EventCallback.stop"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
EventCallback.stop</h3>
<b>stop</b>(<i></i>)
<p>
Setzt das exit-Event mit dem die Funktion beendet werden kann.
</p>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="ProcimgWriter" ID="ProcimgWriter"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">ProcimgWriter</h2>
<p>
Klasse fuer Synchroniseriungs-Thread.
</p><p>
Diese Klasse wird als Thread gestartet, wenn das Prozessabbild zyklisch
synchronisiert werden soll. Diese Funktion wird hauptsaechlich fuer das
Event-Handling verwendet.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
Thread
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr><tr><td>refresh</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#ProcimgWriter.__init__">ProcimgWriter</a></td>
<td>Init ProcimgWriter class.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ProcimgWriter.__check_change">__check_change</a></td>
<td>Findet Aenderungen fuer die Eventueberwachung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ProcimgWriter.__exec_th">__exec_th</a></td>
<td>Laeuft als Thread, der Events als Thread startet.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ProcimgWriter._collect_events">_collect_events</a></td>
<td>Aktiviert oder Deaktiviert die Eventueberwachung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ProcimgWriter.get_refresh">get_refresh</a></td>
<td>Gibt Zykluszeit zurueck.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ProcimgWriter.run">run</a></td>
<td>Startet die automatische Prozessabbildsynchronisierung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ProcimgWriter.set_refresh">set_refresh</a></td>
<td>Setzt die Zykluszeit in Millisekunden.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ProcimgWriter.stop">stop</a></td>
<td>Beendet die automatische Prozessabbildsynchronisierung.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="ProcimgWriter.__init__" ID="ProcimgWriter.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgWriter (Constructor)</h3>
<b>ProcimgWriter</b>(<i>parentmodio</i>)
<p>
Init ProcimgWriter class.
</p><dl>
<dt><i>parentmodio</i></dt>
<dd>
Parent Object
</dd>
</dl><a NAME="ProcimgWriter.__check_change" ID="ProcimgWriter.__check_change"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgWriter.__check_change</h3>
<b>__check_change</b>(<i>dev</i>)
<p>
Findet Aenderungen fuer die Eventueberwachung.
</p><a NAME="ProcimgWriter.__exec_th" ID="ProcimgWriter.__exec_th"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgWriter.__exec_th</h3>
<b>__exec_th</b>(<i></i>)
<p>
Laeuft als Thread, der Events als Thread startet.
</p><a NAME="ProcimgWriter._collect_events" ID="ProcimgWriter._collect_events"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgWriter._collect_events</h3>
<b>_collect_events</b>(<i>value</i>)
<p>
Aktiviert oder Deaktiviert die Eventueberwachung.
</p><dl>
<dt><i>value</i></dt>
<dd>
True aktiviert / False deaktiviert
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
True, wenn Anforderung erfolgreich war
</dd>
</dl><a NAME="ProcimgWriter.get_refresh" ID="ProcimgWriter.get_refresh"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgWriter.get_refresh</h3>
<b>get_refresh</b>(<i></i>)
<p>
Gibt Zykluszeit zurueck.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'int'> Zykluszeit in Millisekunden
</dd>
</dl><a NAME="ProcimgWriter.run" ID="ProcimgWriter.run"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgWriter.run</h3>
<b>run</b>(<i></i>)
<p>
Startet die automatische Prozessabbildsynchronisierung.
</p><a NAME="ProcimgWriter.set_refresh" ID="ProcimgWriter.set_refresh"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgWriter.set_refresh</h3>
<b>set_refresh</b>(<i>value</i>)
<p>
Setzt die Zykluszeit in Millisekunden.
</p><dl>
<dt><i>value</i></dt>
<dd>
<class 'int'> Millisekunden
</dd>
</dl><a NAME="ProcimgWriter.stop" ID="ProcimgWriter.stop"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgWriter.stop</h3>
<b>stop</b>(<i></i>)
<p>
Beendet die automatische Prozessabbildsynchronisierung.
</p>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="Var" ID="Var"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">Var</h2>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
None
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr />
</body></html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,799 +0,0 @@
<!DOCTYPE html>
<html><head>
<title>revpimodio2.modio</title>
<meta charset="UTF-8">
</head>
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
<h1 style="background-color:#FFFFFF;color:#0000FF">
revpimodio2.modio</h1>
<p>
RevPiModIO Hauptklasse fuer piControl0 Zugriff.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3>
<table>
<tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#RevPiModIO">RevPiModIO</a></td>
<td>Klasse fuer die Verwaltung der piCtory Konfiguration.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIODriver">RevPiModIODriver</a></td>
<td>Klasse um eigene Treiber fuer die virtuellen Devices zu erstellen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIOSelected">RevPiModIOSelected</a></td>
<td>Klasse fuer die Verwaltung einzelner Devices aus piCtory.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Functions</h3>
<table>
<tr><td>None</td></tr>
</table>
<hr /><hr />
<a NAME="RevPiModIO" ID="RevPiModIO"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">RevPiModIO</h2>
<p>
Klasse fuer die Verwaltung der piCtory Konfiguration.
</p><p>
Diese Klasse uebernimmt die gesamte Konfiguration aus piCtory und bilded
die Devices und IOs ab. Sie uebernimmt die exklusive Verwaltung des
Prozessabbilds und stellt sicher, dass die Daten synchron sind.
Sollten nur einzelne Devices gesteuert werden, verwendet man
RevPiModIOSelected() und uebergibt bei Instantiierung eine Liste mit
Device Positionen oder Device Namen.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
object
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr><tr><td>configrsc</td></tr><tr><td>cycletime</td></tr><tr><td>debug</td></tr><tr><td>ioerrors</td></tr><tr><td>length</td></tr><tr><td>maxioerrors</td></tr><tr><td>monitoring</td></tr><tr><td>procimg</td></tr><tr><td>replace_io_file</td></tr><tr><td>simulator</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#RevPiModIO.__init__">RevPiModIO</a></td>
<td>Instantiiert die Grundfunktionen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.__del__">__del__</a></td>
<td>Zerstoert alle Klassen um aufzuraeumen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.__evt_exit">__evt_exit</a></td>
<td>Eventhandler fuer Programmende.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._configure">_configure</a></td>
<td>Verarbeitet die piCtory Konfigurationsdatei.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._configure_replace_io">_configure_replace_io</a></td>
<td>Importiert ersetzte IOs in diese Instanz.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._create_myfh">_create_myfh</a></td>
<td>Erstellt FileObject mit Pfad zum procimg.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_configrsc">_get_configrsc</a></td>
<td>Getter function.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_cpreplaceio">_get_cpreplaceio</a></td>
<td>Laed die replace_io_file Konfiguration und verarbeitet sie.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_cycletime">_get_cycletime</a></td>
<td>Gibt Aktualisierungsrate in ms der Prozessabbildsynchronisierung aus.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_debug">_get_debug</a></td>
<td>Gibt Status des Debugflags zurueck.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_ioerrors">_get_ioerrors</a></td>
<td>Getter function.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_length">_get_length</a></td>
<td>Getter function.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_maxioerrors">_get_maxioerrors</a></td>
<td>Getter function.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_monitoring">_get_monitoring</a></td>
<td>Getter function.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_procimg">_get_procimg</a></td>
<td>Getter function.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_replace_io_file">_get_replace_io_file</a></td>
<td>Gibt Pfad zur verwendeten replace IO Datei aus.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._get_simulator">_get_simulator</a></td>
<td>Getter function.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._gotioerror">_gotioerror</a></td>
<td>IOError Verwaltung fuer Prozessabbildzugriff.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._set_cycletime">_set_cycletime</a></td>
<td>Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._set_debug">_set_debug</a></td>
<td>Setzt debugging Status um mehr Meldungen zu erhalten oder nicht.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._set_maxioerrors">_set_maxioerrors</a></td>
<td>Setzt Anzahl der maximal erlaubten Fehler bei Prozessabbildzugriff.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO._simulate_ioctl">_simulate_ioctl</a></td>
<td>Simuliert IOCTL Funktionen auf procimg Datei.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.autorefresh_all">autorefresh_all</a></td>
<td>Setzt alle Devices in autorefresh Funktion.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.cleanup">cleanup</a></td>
<td>Beendet autorefresh und alle Threads.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.cycleloop">cycleloop</a></td>
<td>Startet den Cycleloop.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.exit">exit</a></td>
<td>Beendet mainloop() und optional autorefresh.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.export_replaced_ios">export_replaced_ios</a></td>
<td>Exportiert ersetzte IOs dieser Instanz.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.get_jconfigrsc">get_jconfigrsc</a></td>
<td>Laedt die piCtory Konfiguration und erstellt ein <class 'dict'>.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.handlesignalend">handlesignalend</a></td>
<td>Signalhandler fuer Programmende verwalten.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.mainloop">mainloop</a></td>
<td>Startet den Mainloop mit Eventueberwachung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.readprocimg">readprocimg</a></td>
<td>Einlesen aller Inputs aller/eines Devices vom Prozessabbild.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.resetioerrors">resetioerrors</a></td>
<td>Setzt aktuellen IOError-Zaehler auf 0 zurueck.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.setdefaultvalues">setdefaultvalues</a></td>
<td>Alle Outputbuffer werden auf die piCtory default Werte gesetzt.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.syncoutputs">syncoutputs</a></td>
<td>Lesen aller aktuell gesetzten Outputs im Prozessabbild.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.writeprocimg">writeprocimg</a></td>
<td>Schreiben aller Outputs aller Devices ins Prozessabbild.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="RevPiModIO.__init__" ID="RevPiModIO.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO (Constructor)</h3>
<b>RevPiModIO</b>(<i>autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert die Grundfunktionen.
</p><dl>
<dt><i>autorefresh</i></dt>
<dd>
Wenn True, alle Devices zu autorefresh hinzufuegen
</dd><dt><i>monitoring</i></dt>
<dd>
In- und Outputs werden gelesen, niemals geschrieben
</dd><dt><i>syncoutputs</i></dt>
<dd>
Aktuell gesetzte Outputs vom Prozessabbild einlesen
</dd><dt><i>procimg</i></dt>
<dd>
Abweichender Pfad zum Prozessabbild
</dd><dt><i>configrsc</i></dt>
<dd>
Abweichender Pfad zur piCtory Konfigurationsdatei
</dd><dt><i>simulator</i></dt>
<dd>
Laedt das Modul als Simulator und vertauscht IOs
</dd><dt><i>debug</i></dt>
<dd>
Gibt alle Warnungen inkl. Zyklusprobleme aus
</dd><dt><i>replace_io_file</i></dt>
<dd>
Replace IO Konfiguration aus Datei laden
</dd><dt><i>direct_output</i></dt>
<dd>
Write outputs immediately to process image (slow)
</dd>
</dl><a NAME="RevPiModIO.__del__" ID="RevPiModIO.__del__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.__del__</h3>
<b>__del__</b>(<i></i>)
<p>
Zerstoert alle Klassen um aufzuraeumen.
</p><a NAME="RevPiModIO.__evt_exit" ID="RevPiModIO.__evt_exit"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.__evt_exit</h3>
<b>__evt_exit</b>(<i>signum, sigframe</i>)
<p>
Eventhandler fuer Programmende.
</p><dl>
<dt><i>signum</i></dt>
<dd>
Signalnummer
</dd><dt><i>sigframe</i></dt>
<dd>
Signalframe
</dd>
</dl><a NAME="RevPiModIO._configure" ID="RevPiModIO._configure"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._configure</h3>
<b>_configure</b>(<i>jconfigrsc</i>)
<p>
Verarbeitet die piCtory Konfigurationsdatei.
</p><dl>
<dt><i>jconfigrsc:</i></dt>
<dd>
Data to build IOs as <class 'dict'> of JSON
</dd>
</dl><a NAME="RevPiModIO._configure_replace_io" ID="RevPiModIO._configure_replace_io"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._configure_replace_io</h3>
<b>_configure_replace_io</b>(<i>creplaceio</i>)
<p>
Importiert ersetzte IOs in diese Instanz.
</p><p>
Importiert ersetzte IOs, welche vorher mit .export_replaced_ios(...)
in eine Datei exportiert worden sind. Diese IOs werden in dieser
Instanz wiederhergestellt.
</p><dl>
<dt><i>ireplaceio:</i></dt>
<dd>
Data to replace ios as <class 'ConfigParser'>
</dd>
</dl><a NAME="RevPiModIO._create_myfh" ID="RevPiModIO._create_myfh"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._create_myfh</h3>
<b>_create_myfh</b>(<i></i>)
<p>
Erstellt FileObject mit Pfad zum procimg.
return FileObject
</p><a NAME="RevPiModIO._get_configrsc" ID="RevPiModIO._get_configrsc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_configrsc</h3>
<b>_get_configrsc</b>(<i></i>)
<p>
Getter function.
</p><dl>
<dt>Returns:</dt>
<dd>
Pfad der verwendeten piCtory Konfiguration
</dd>
</dl><a NAME="RevPiModIO._get_cpreplaceio" ID="RevPiModIO._get_cpreplaceio"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_cpreplaceio</h3>
<b>_get_cpreplaceio</b>(<i></i>)
<p>
Laed die replace_io_file Konfiguration und verarbeitet sie.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'ConfigParser'> der replace io daten
</dd>
</dl><a NAME="RevPiModIO._get_cycletime" ID="RevPiModIO._get_cycletime"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_cycletime</h3>
<b>_get_cycletime</b>(<i></i>)
<p>
Gibt Aktualisierungsrate in ms der Prozessabbildsynchronisierung aus.
</p><dl>
<dt>Returns:</dt>
<dd>
Millisekunden
</dd>
</dl><a NAME="RevPiModIO._get_debug" ID="RevPiModIO._get_debug"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_debug</h3>
<b>_get_debug</b>(<i></i>)
<p>
Gibt Status des Debugflags zurueck.
</p><dl>
<dt>Returns:</dt>
<dd>
Status des Debugflags
</dd>
</dl><a NAME="RevPiModIO._get_ioerrors" ID="RevPiModIO._get_ioerrors"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_ioerrors</h3>
<b>_get_ioerrors</b>(<i></i>)
<p>
Getter function.
</p><dl>
<dt>Returns:</dt>
<dd>
Aktuelle Anzahl gezaehlter Fehler
</dd>
</dl><a NAME="RevPiModIO._get_length" ID="RevPiModIO._get_length"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_length</h3>
<b>_get_length</b>(<i></i>)
<p>
Getter function.
</p><dl>
<dt>Returns:</dt>
<dd>
Laenge in Bytes der Devices
</dd>
</dl><a NAME="RevPiModIO._get_maxioerrors" ID="RevPiModIO._get_maxioerrors"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_maxioerrors</h3>
<b>_get_maxioerrors</b>(<i></i>)
<p>
Getter function.
</p><dl>
<dt>Returns:</dt>
<dd>
Anzahl erlaubte Fehler
</dd>
</dl><a NAME="RevPiModIO._get_monitoring" ID="RevPiModIO._get_monitoring"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_monitoring</h3>
<b>_get_monitoring</b>(<i></i>)
<p>
Getter function.
</p><dl>
<dt>Returns:</dt>
<dd>
True, wenn als Monitoring gestartet
</dd>
</dl><a NAME="RevPiModIO._get_procimg" ID="RevPiModIO._get_procimg"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_procimg</h3>
<b>_get_procimg</b>(<i></i>)
<p>
Getter function.
</p><dl>
<dt>Returns:</dt>
<dd>
Pfad des verwendeten Prozessabbilds
</dd>
</dl><a NAME="RevPiModIO._get_replace_io_file" ID="RevPiModIO._get_replace_io_file"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_replace_io_file</h3>
<b>_get_replace_io_file</b>(<i></i>)
<p>
Gibt Pfad zur verwendeten replace IO Datei aus.
</p><dl>
<dt>Returns:</dt>
<dd>
Pfad zur replace IO Datei
</dd>
</dl><a NAME="RevPiModIO._get_simulator" ID="RevPiModIO._get_simulator"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._get_simulator</h3>
<b>_get_simulator</b>(<i></i>)
<p>
Getter function.
</p><dl>
<dt>Returns:</dt>
<dd>
True, wenn als Simulator gestartet
</dd>
</dl><a NAME="RevPiModIO._gotioerror" ID="RevPiModIO._gotioerror"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._gotioerror</h3>
<b>_gotioerror</b>(<i>action, e=None, show_warn=True</i>)
<p>
IOError Verwaltung fuer Prozessabbildzugriff.
</p><dl>
<dt><i>action</i></dt>
<dd>
Zusatzinformationen zum loggen
</dd><dt><i>e</i></dt>
<dd>
Exception to log if debug is enabled
</dd><dt><i>show_warn</i></dt>
<dd>
Warnung anzeigen
</dd>
</dl><a NAME="RevPiModIO._set_cycletime" ID="RevPiModIO._set_cycletime"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._set_cycletime</h3>
<b>_set_cycletime</b>(<i>milliseconds</i>)
<p>
Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.
</p><dl>
<dt><i>milliseconds</i></dt>
<dd>
<class 'int'> in Millisekunden
</dd>
</dl><a NAME="RevPiModIO._set_debug" ID="RevPiModIO._set_debug"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._set_debug</h3>
<b>_set_debug</b>(<i>value</i>)
<p>
Setzt debugging Status um mehr Meldungen zu erhalten oder nicht.
</p><dl>
<dt><i>value</i></dt>
<dd>
Wenn True, werden umfangreiche Medungen angezeigt
</dd>
</dl><a NAME="RevPiModIO._set_maxioerrors" ID="RevPiModIO._set_maxioerrors"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._set_maxioerrors</h3>
<b>_set_maxioerrors</b>(<i>value</i>)
<p>
Setzt Anzahl der maximal erlaubten Fehler bei Prozessabbildzugriff.
</p><dl>
<dt><i>value</i></dt>
<dd>
Anzahl erlaubte Fehler
</dd>
</dl><a NAME="RevPiModIO._simulate_ioctl" ID="RevPiModIO._simulate_ioctl"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO._simulate_ioctl</h3>
<b>_simulate_ioctl</b>(<i>request, arg=b''</i>)
<p>
Simuliert IOCTL Funktionen auf procimg Datei.
</p><dl>
<dt><i>request</i></dt>
<dd>
IO Request
</dd><dt><i>arg:</i></dt>
<dd>
Request argument
</dd>
</dl><a NAME="RevPiModIO.autorefresh_all" ID="RevPiModIO.autorefresh_all"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.autorefresh_all</h3>
<b>autorefresh_all</b>(<i></i>)
<p>
Setzt alle Devices in autorefresh Funktion.
</p><a NAME="RevPiModIO.cleanup" ID="RevPiModIO.cleanup"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.cleanup</h3>
<b>cleanup</b>(<i></i>)
<p>
Beendet autorefresh und alle Threads.
</p><a NAME="RevPiModIO.cycleloop" ID="RevPiModIO.cycleloop"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.cycleloop</h3>
<b>cycleloop</b>(<i>func, cycletime=50</i>)
<p>
Startet den Cycleloop.
</p><p>
Der aktuelle Programmthread wird hier bis Aufruf von
.exit() "gefangen". Er fuehrt nach jeder Aktualisierung
des Prozessabbilds die uebergebene Funktion "func" aus und arbeitet sie
ab. Waehrend der Ausfuehrung der Funktion wird das Prozessabbild nicht
weiter aktualisiert. Die Inputs behalten bis zum Ende den aktuellen
Wert. Gesetzte Outputs werden nach Ende des Funktionsdurchlaufs in das
Prozessabbild geschrieben.
</p><p>
Verlassen wird der Cycleloop, wenn die aufgerufene Funktion einen
Rueckgabewert nicht gleich None liefert (z.B. return True), oder durch
Aufruf von .exit().
</p><p>
HINWEIS: Die Aktualisierungszeit und die Laufzeit der Funktion duerfen
die eingestellte autorefresh Zeit, bzw. uebergebene cycletime nicht
ueberschreiten!
</p><p>
Ueber den Parameter cycletime wird die gewuenschte Zukluszeit der
uebergebenen Funktion gesetzt. Der Standardwert betraegt
50 Millisekunden, in denen das Prozessabild eingelesen, die uebergebene
Funktion ausgefuert und das Prozessabbild geschrieben wird.
</p><dl>
<dt><i>func</i></dt>
<dd>
Funktion, die ausgefuehrt werden soll
</dd><dt><i>cycletime</i></dt>
<dd>
Zykluszeit in Millisekunden - Standardwert 50 ms
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
None
</dd>
</dl><a NAME="RevPiModIO.exit" ID="RevPiModIO.exit"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.exit</h3>
<b>exit</b>(<i>full=True</i>)
<p>
Beendet mainloop() und optional autorefresh.
</p><p>
Wenn sich das Programm im mainloop() befindet, wird durch Aufruf
von exit() die Kontrolle wieder an das Hauptprogramm zurueckgegeben.
</p><p>
Der Parameter full ist mit True vorbelegt und entfernt alle Devices aus
dem autorefresh. Der Thread fuer die Prozessabbildsynchronisierung
wird dann gestoppt und das Programm kann sauber beendet werden.
</p><dl>
<dt><i>full</i></dt>
<dd>
Entfernt auch alle Devices aus autorefresh
</dd>
</dl><a NAME="RevPiModIO.export_replaced_ios" ID="RevPiModIO.export_replaced_ios"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.export_replaced_ios</h3>
<b>export_replaced_ios</b>(<i>filename="replace_ios.conf"</i>)
<p>
Exportiert ersetzte IOs dieser Instanz.
</p><p>
Exportiert alle ersetzten IOs, welche mit .replace_io(...) angelegt
wurden. Die Datei kann z.B. fuer RevPiPyLoad verwndet werden um Daten
in den neuen Formaten per MQTT zu uebertragen oder mit RevPiPyControl
anzusehen.
</p><dl>
<dt><i>filename</i></dt>
<dd>
Dateiname fuer Exportdatei
</dd>
</dl><a NAME="RevPiModIO.get_jconfigrsc" ID="RevPiModIO.get_jconfigrsc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.get_jconfigrsc</h3>
<b>get_jconfigrsc</b>(<i></i>)
<p>
Laedt die piCtory Konfiguration und erstellt ein <class 'dict'>.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'dict'> der piCtory Konfiguration
</dd>
</dl><a NAME="RevPiModIO.handlesignalend" ID="RevPiModIO.handlesignalend"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.handlesignalend</h3>
<b>handlesignalend</b>(<i>cleanupfunc=None</i>)
<p>
Signalhandler fuer Programmende verwalten.
</p><p>
Wird diese Funktion aufgerufen, uebernimmt RevPiModIO die SignalHandler
fuer SIGINT und SIGTERM. Diese werden Empfangen, wenn das
Betriebssystem oder der Benutzer das Steuerungsprogramm sauber beenden
will.
</p><p>
Die optionale Funktion "cleanupfunc" wird als letztes nach dem letzten
Einlesen der Inputs ausgefuehrt. Dort gesetzte Outputs werden nach
Ablauf der Funktion ein letztes Mal geschrieben.
Gedacht ist dies fuer Aufraeumarbeiten, wie z.B. das abschalten der
LEDs am RevPi-Core.
</p><p>
Nach einmaligem Empfangen eines der Signale und dem Beenden der
RevPiModIO Thrads / Funktionen werden die SignalHandler wieder
freigegeben.
</p><dl>
<dt><i>cleanupfunc</i></dt>
<dd>
Funktion wird nach dem letzten Lesen der Inputs
ausgefuehrt, gefolgt vom letzten Schreiben der Outputs
</dd>
</dl><a NAME="RevPiModIO.mainloop" ID="RevPiModIO.mainloop"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.mainloop</h3>
<b>mainloop</b>(<i>blocking=True</i>)
<p>
Startet den Mainloop mit Eventueberwachung.
</p><p>
Der aktuelle Programmthread wird hier bis Aufruf von
RevPiDevicelist.exit() "gefangen" (es sei denn blocking=False). Er
durchlaeuft die Eventueberwachung und prueft Aenderungen der, mit
einem Event registrierten, IOs. Wird eine Veraenderung erkannt,
fuert das Programm die dazugehoerigen Funktionen der Reihe nach aus.
</p><p>
Wenn der Parameter "blocking" mit False angegeben wird, aktiviert
dies die Eventueberwachung und blockiert das Programm NICHT an der
Stelle des Aufrufs. Eignet sich gut fuer die GUI Programmierung, wenn
Events vom RevPi benoetigt werden, aber das Programm weiter ausgefuehrt
werden soll.
</p><dl>
<dt><i>blocking</i></dt>
<dd>
Wenn False, blockiert das Programm hier NICHT
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
None
</dd>
</dl><a NAME="RevPiModIO.readprocimg" ID="RevPiModIO.readprocimg"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.readprocimg</h3>
<b>readprocimg</b>(<i>device=None</i>)
<p>
Einlesen aller Inputs aller/eines Devices vom Prozessabbild.
</p><p>
Devices mit aktiverem autorefresh werden ausgenommen!
</p><dl>
<dt><i>device</i></dt>
<dd>
nur auf einzelnes Device anwenden
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
True, wenn Arbeiten an allen Devices erfolgreich waren
</dd>
</dl><a NAME="RevPiModIO.resetioerrors" ID="RevPiModIO.resetioerrors"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.resetioerrors</h3>
<b>resetioerrors</b>(<i></i>)
<p>
Setzt aktuellen IOError-Zaehler auf 0 zurueck.
</p><a NAME="RevPiModIO.setdefaultvalues" ID="RevPiModIO.setdefaultvalues"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.setdefaultvalues</h3>
<b>setdefaultvalues</b>(<i>device=None</i>)
<p>
Alle Outputbuffer werden auf die piCtory default Werte gesetzt.
</p><dl>
<dt><i>device</i></dt>
<dd>
nur auf einzelnes Device anwenden
</dd>
</dl><a NAME="RevPiModIO.syncoutputs" ID="RevPiModIO.syncoutputs"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.syncoutputs</h3>
<b>syncoutputs</b>(<i>device=None</i>)
<p>
Lesen aller aktuell gesetzten Outputs im Prozessabbild.
</p><p>
Devices mit aktiverem autorefresh werden ausgenommen!
</p><dl>
<dt><i>device</i></dt>
<dd>
nur auf einzelnes Device anwenden
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
True, wenn Arbeiten an allen Devices erfolgreich waren
</dd>
</dl><a NAME="RevPiModIO.writeprocimg" ID="RevPiModIO.writeprocimg"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO.writeprocimg</h3>
<b>writeprocimg</b>(<i>device=None</i>)
<p>
Schreiben aller Outputs aller Devices ins Prozessabbild.
</p><p>
Devices mit aktiverem autorefresh werden ausgenommen!
</p><dl>
<dt><i>device</i></dt>
<dd>
nur auf einzelnes Device anwenden
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
True, wenn Arbeiten an allen Devices erfolgreich waren
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="RevPiModIODriver" ID="RevPiModIODriver"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">RevPiModIODriver</h2>
<p>
Klasse um eigene Treiber fuer die virtuellen Devices zu erstellen.
</p><p>
Mit dieser Klasse werden nur angegebene Virtuelle Devices mit RevPiModIO
verwaltet. Bei Instantiierung werden automatisch die Inputs und Outputs
verdreht, um das Schreiben der Inputs zu ermoeglichen. Die Daten koennen
dann ueber logiCAD an den Devices abgerufen werden.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
RevPiModIOSelected
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#RevPiModIODriver.__init__">RevPiModIODriver</a></td>
<td>Instantiiert die Grundfunktionen.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="RevPiModIODriver.__init__" ID="RevPiModIODriver.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIODriver (Constructor)</h3>
<b>RevPiModIODriver</b>(<i>virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert die Grundfunktionen.
</p><p>
Parameter 'monitoring' und 'simulator' stehen hier nicht zur
Verfuegung, da diese automatisch gesetzt werden.
</p><dl>
<dt><i>virtdev</i></dt>
<dd>
Virtuelles Device oder mehrere als <class 'list'>
</dd>
</dl><dl>
<dt><b>See Also:</b></dt>
<dd>
<a style="color:#0000FF" href="#RevPiModIO.__init__">RevPiModIO.__init__(...)</a>
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="RevPiModIOSelected" ID="RevPiModIOSelected"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">RevPiModIOSelected</h2>
<p>
Klasse fuer die Verwaltung einzelner Devices aus piCtory.
</p><p>
Diese Klasse uebernimmt nur angegebene Devices der piCtory Konfiguration
und bilded sie inkl. IOs ab. Sie uebernimmt die exklusive Verwaltung des
Adressbereichs im Prozessabbild an dem sich die angegebenen Devices
befinden und stellt sicher, dass die Daten synchron sind.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
RevPiModIO
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#RevPiModIOSelected.__init__">RevPiModIOSelected</a></td>
<td>Instantiiert nur fuer angegebene Devices die Grundfunktionen.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="RevPiModIOSelected.__init__" ID="RevPiModIOSelected.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIOSelected (Constructor)</h3>
<b>RevPiModIOSelected</b>(<i>deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert nur fuer angegebene Devices die Grundfunktionen.
</p><p>
Der Parameter deviceselection kann eine einzelne
Device Position / einzelner Device Name sein oder eine Liste mit
mehreren Positionen / Namen
</p><dl>
<dt><i>deviceselection</i></dt>
<dd>
Positionsnummer oder Devicename
</dd>
</dl><dl>
<dt><b>See Also:</b></dt>
<dd>
<a style="color:#0000FF" href="#RevPiModIO.__init__">RevPiModIO.__init__(...)</a>
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr />
</body></html>

View File

@@ -1,806 +0,0 @@
<!DOCTYPE html>
<html><head>
<title>revpimodio2.netio</title>
<meta charset="UTF-8">
</head>
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
<h1 style="background-color:#FFFFFF;color:#0000FF">
revpimodio2.netio</h1>
<p>
RevPiModIO Hauptklasse fuer Netzwerkzugriff.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3>
<table>
<tr><td>HASH_FAIL</td></tr><tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr><tr><td>_sysdeldirty</td></tr><tr><td>_sysexit</td></tr><tr><td>_sysflush</td></tr><tr><td>_syspictory</td></tr><tr><td>_syspictoryh</td></tr><tr><td>_sysreplaceio</td></tr><tr><td>_sysreplaceioh</td></tr><tr><td>_syssync</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#AclException">AclException</a></td>
<td>Probleme mit Berechtigungen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#ConfigChanged">ConfigChanged</a></td>
<td>Aenderung der piCtory oder replace_ios Datei.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH">NetFH</a></td>
<td>Netzwerk File Handler fuer das Prozessabbild.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO">RevPiNetIO</a></td>
<td>Klasse fuer die Verwaltung der piCtory Konfiguration ueber das Netzwerk.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIODriver">RevPiNetIODriver</a></td>
<td>Klasse um eigene Treiber fuer die virtuellen Devices zu erstellen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIOSelected">RevPiNetIOSelected</a></td>
<td>Klasse fuer die Verwaltung einzelner Devices aus piCtory.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Functions</h3>
<table>
<tr><td>None</td></tr>
</table>
<hr /><hr />
<a NAME="AclException" ID="AclException"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">AclException</h2>
<p>
Probleme mit Berechtigungen.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
Exception
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="ConfigChanged" ID="ConfigChanged"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">ConfigChanged</h2>
<p>
Aenderung der piCtory oder replace_ios Datei.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
Exception
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="NetFH" ID="NetFH"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">NetFH</h2>
<p>
Netzwerk File Handler fuer das Prozessabbild.
</p><p>
Dieses FileObject-like Object verwaltet das Lesen und Schriben des
Prozessabbilds ueber das Netzwerk. Ein entfernter Revolution Pi kann
so gesteuert werden.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
Thread
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr><tr><td>closed</td></tr><tr><td>config_changed</td></tr><tr><td>name</td></tr><tr><td>reconnecting</td></tr><tr><td>timeout</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#NetFH.__init__">NetFH</a></td>
<td>Init NetFH-class.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.__check_acl">__check_acl</a></td>
<td>Pueft ob ACL auf RevPi den Vorgang erlaubt oder wirft exception.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.__del__">__del__</a></td>
<td>NetworkFileHandler beenden.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.__set_systimeout">__set_systimeout</a></td>
<td>Systemfunktion fuer Timeoutberechnung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH._connect">_connect</a></td>
<td>Stellt die Verbindung zu einem RevPiSlave her.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH._direct_send">_direct_send</a></td>
<td>Fuer debugging direktes Senden von Daten.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.clear_dirtybytes">clear_dirtybytes</a></td>
<td>Entfernt die konfigurierten Dirtybytes vom RevPi Slave.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.close">close</a></td>
<td>Verbindung trennen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.flush">flush</a></td>
<td>Schreibpuffer senden.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.get_closed">get_closed</a></td>
<td>Pruefen ob Verbindung geschlossen ist.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.get_config_changed">get_config_changed</a></td>
<td>Pruefen ob RevPi Konfiguration geaendert wurde.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.get_name">get_name</a></td>
<td>Verbindugnsnamen zurueckgeben.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.get_reconnecting">get_reconnecting</a></td>
<td>Interner reconnect aktiv wegen Netzwerkfehlern.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.get_timeout">get_timeout</a></td>
<td>Gibt aktuellen Timeout zurueck.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.ioctl">ioctl</a></td>
<td>IOCTL Befehle ueber das Netzwerk senden.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.read">read</a></td>
<td>Daten ueber das Netzwerk lesen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.readpictory">readpictory</a></td>
<td>Ruft die piCtory Konfiguration ab.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.readreplaceio">readreplaceio</a></td>
<td>Ruft die replace_io Konfiguration ab.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.run">run</a></td>
<td>Handler fuer Synchronisierung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.seek">seek</a></td>
<td>Springt an angegebene Position.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.set_dirtybytes">set_dirtybytes</a></td>
<td>Konfiguriert Dirtybytes fuer Prozessabbild bei Verbindungsfehler.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.set_timeout">set_timeout</a></td>
<td>Setzt Timeoutwert fuer Verbindung.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.tell">tell</a></td>
<td>Gibt aktuelle Position zurueck.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#NetFH.write">write</a></td>
<td>Daten ueber das Netzwerk schreiben.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="NetFH.__init__" ID="NetFH.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH (Constructor)</h3>
<b>NetFH</b>(<i>address, check_replace_ios, timeout=500</i>)
<p>
Init NetFH-class.
</p><dl>
<dt><i>address</i></dt>
<dd>
IP Adresse, Port des RevPi als <class 'tuple'>
</dd><dt><i>check_replace_ios</i></dt>
<dd>
Prueft auf Veraenderungen der Datei
</dd><dt><i>timeout</i></dt>
<dd>
Timeout in Millisekunden der Verbindung
</dd>
</dl><a NAME="NetFH.__check_acl" ID="NetFH.__check_acl"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.__check_acl</h3>
<b>__check_acl</b>(<i>bytecode</i>)
<p>
Pueft ob ACL auf RevPi den Vorgang erlaubt oder wirft exception.
</p><a NAME="NetFH.__del__" ID="NetFH.__del__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.__del__</h3>
<b>__del__</b>(<i></i>)
<p>
NetworkFileHandler beenden.
</p><a NAME="NetFH.__set_systimeout" ID="NetFH.__set_systimeout"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.__set_systimeout</h3>
<b>__set_systimeout</b>(<i>value</i>)
<p>
Systemfunktion fuer Timeoutberechnung.
</p><dl>
<dt><i>value</i></dt>
<dd>
Timeout in Millisekunden 100 - 60000
</dd>
</dl><a NAME="NetFH._connect" ID="NetFH._connect"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH._connect</h3>
<b>_connect</b>(<i></i>)
<p>
Stellt die Verbindung zu einem RevPiSlave her.
</p><a NAME="NetFH._direct_send" ID="NetFH._direct_send"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH._direct_send</h3>
<b>_direct_send</b>(<i>send_bytes, recv_count</i>)
<p>
Fuer debugging direktes Senden von Daten.
</p><dl>
<dt><i>send_bytes</i></dt>
<dd>
Bytes, die gesendet werden sollen
</dd><dt><i>recv_count</i></dt>
<dd>
Anzahl der Empfangsbytes
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
Empfangende Bytes
</dd>
</dl><a NAME="NetFH.clear_dirtybytes" ID="NetFH.clear_dirtybytes"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.clear_dirtybytes</h3>
<b>clear_dirtybytes</b>(<i>position=None</i>)
<p>
Entfernt die konfigurierten Dirtybytes vom RevPi Slave.
</p><dl>
<dt><i>position</i></dt>
<dd>
Startposition der Dirtybytes
</dd>
</dl><a NAME="NetFH.close" ID="NetFH.close"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.close</h3>
<b>close</b>(<i></i>)
<p>
Verbindung trennen.
</p><a NAME="NetFH.flush" ID="NetFH.flush"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.flush</h3>
<b>flush</b>(<i></i>)
<p>
Schreibpuffer senden.
</p><a NAME="NetFH.get_closed" ID="NetFH.get_closed"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.get_closed</h3>
<b>get_closed</b>(<i></i>)
<p>
Pruefen ob Verbindung geschlossen ist.
</p><dl>
<dt>Returns:</dt>
<dd>
True, wenn Verbindung geschlossen ist
</dd>
</dl><a NAME="NetFH.get_config_changed" ID="NetFH.get_config_changed"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.get_config_changed</h3>
<b>get_config_changed</b>(<i></i>)
<p>
Pruefen ob RevPi Konfiguration geaendert wurde.
</p><dl>
<dt>Returns:</dt>
<dd>
True, wenn RevPi Konfiguration geaendert ist
</dd>
</dl><a NAME="NetFH.get_name" ID="NetFH.get_name"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.get_name</h3>
<b>get_name</b>(<i></i>)
<p>
Verbindugnsnamen zurueckgeben.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'str'> IP:PORT
</dd>
</dl><a NAME="NetFH.get_reconnecting" ID="NetFH.get_reconnecting"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.get_reconnecting</h3>
<b>get_reconnecting</b>(<i></i>)
<p>
Interner reconnect aktiv wegen Netzwerkfehlern.
</p><dl>
<dt>Returns:</dt>
<dd>
True, wenn reconnect aktiv
</dd>
</dl><a NAME="NetFH.get_timeout" ID="NetFH.get_timeout"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.get_timeout</h3>
<b>get_timeout</b>(<i></i>)
<p>
Gibt aktuellen Timeout zurueck.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'int'> in Millisekunden
</dd>
</dl><a NAME="NetFH.ioctl" ID="NetFH.ioctl"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.ioctl</h3>
<b>ioctl</b>(<i>request, arg=b''</i>)
<p>
IOCTL Befehle ueber das Netzwerk senden.
</p><dl>
<dt><i>request</i></dt>
<dd>
Request as <class 'int'>
</dd><dt><i>arg</i></dt>
<dd>
Argument as <class 'byte'>
</dd>
</dl><a NAME="NetFH.read" ID="NetFH.read"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.read</h3>
<b>read</b>(<i>length</i>)
<p>
Daten ueber das Netzwerk lesen.
</p><dl>
<dt><i>length</i></dt>
<dd>
Anzahl der Bytes
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
Gelesene <class 'bytes'>
</dd>
</dl><a NAME="NetFH.readpictory" ID="NetFH.readpictory"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.readpictory</h3>
<b>readpictory</b>(<i></i>)
<p>
Ruft die piCtory Konfiguration ab.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'bytes'> piCtory Datei
</dd>
</dl><a NAME="NetFH.readreplaceio" ID="NetFH.readreplaceio"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.readreplaceio</h3>
<b>readreplaceio</b>(<i></i>)
<p>
Ruft die replace_io Konfiguration ab.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'bytes'> replace_io_file
</dd>
</dl><a NAME="NetFH.run" ID="NetFH.run"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.run</h3>
<b>run</b>(<i></i>)
<p>
Handler fuer Synchronisierung.
</p><a NAME="NetFH.seek" ID="NetFH.seek"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.seek</h3>
<b>seek</b>(<i>position</i>)
<p>
Springt an angegebene Position.
</p><dl>
<dt><i>position</i></dt>
<dd>
An diese Position springen
</dd>
</dl><a NAME="NetFH.set_dirtybytes" ID="NetFH.set_dirtybytes"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.set_dirtybytes</h3>
<b>set_dirtybytes</b>(<i>position, dirtybytes</i>)
<p>
Konfiguriert Dirtybytes fuer Prozessabbild bei Verbindungsfehler.
</p><dl>
<dt><i>positon</i></dt>
<dd>
Startposition zum Schreiben
</dd><dt><i>dirtybytes</i></dt>
<dd>
<class 'bytes'> die geschrieben werden sollen
</dd>
</dl><a NAME="NetFH.set_timeout" ID="NetFH.set_timeout"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.set_timeout</h3>
<b>set_timeout</b>(<i>value</i>)
<p>
Setzt Timeoutwert fuer Verbindung.
</p><dl>
<dt><i>value</i></dt>
<dd>
Timeout in Millisekunden
</dd>
</dl><a NAME="NetFH.tell" ID="NetFH.tell"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.tell</h3>
<b>tell</b>(<i></i>)
<p>
Gibt aktuelle Position zurueck.
</p><dl>
<dt>Returns:</dt>
<dd>
int aktuelle Position
</dd>
</dl><a NAME="NetFH.write" ID="NetFH.write"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
NetFH.write</h3>
<b>write</b>(<i>bytebuff</i>)
<p>
Daten ueber das Netzwerk schreiben.
</p><dl>
<dt><i>bytebuff</i></dt>
<dd>
Bytes zum schreiben
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
<class 'int'> Anzahl geschriebener bytes
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="RevPiNetIO" ID="RevPiNetIO"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">RevPiNetIO</h2>
<p>
Klasse fuer die Verwaltung der piCtory Konfiguration ueber das Netzwerk.
</p><p>
Diese Klasse uebernimmt die gesamte Konfiguration aus piCtory und bilded
die Devices und IOs ab. Sie uebernimmt die exklusive Verwaltung des
Prozessabbilds und stellt sicher, dass die Daten synchron sind.
Sollten nur einzelne Devices gesteuert werden, verwendet man
RevPiModIOSelected() und uebergibt bei Instantiierung eine Liste mit
Device Positionen oder Device Namen.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
_RevPiModIO
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr><tr><td>config_changed</td></tr><tr><td>reconnecting</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#RevPiNetIO.__init__">RevPiNetIO</a></td>
<td>Instantiiert die Grundfunktionen.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO._create_myfh">_create_myfh</a></td>
<td>Erstellt NetworkFileObject.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO._get_cpreplaceio">_get_cpreplaceio</a></td>
<td>Laed die replace_io Konfiguration ueber das Netzwerk.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO.disconnect">disconnect</a></td>
<td>Trennt Verbindungen und beendet autorefresh inkl.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO.exit">exit</a></td>
<td>Beendet mainloop() und optional autorefresh.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO.get_config_changed">get_config_changed</a></td>
<td>Pruefen ob RevPi Konfiguration geaendert wurde.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO.get_jconfigrsc">get_jconfigrsc</a></td>
<td>Laedt die piCotry Konfiguration und erstellt ein <class 'dict'>.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO.get_reconnecting">get_reconnecting</a></td>
<td>Interner reconnect aktiv wegen Netzwerkfehlern.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO.net_cleardefaultvalues">net_cleardefaultvalues</a></td>
<td>Loescht Defaultwerte vom PLC Slave.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiNetIO.net_setdefaultvalues">net_setdefaultvalues</a></td>
<td>Konfiguriert den PLC Slave mit den piCtory Defaultwerten.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="RevPiNetIO.__init__" ID="RevPiNetIO.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO (Constructor)</h3>
<b>RevPiNetIO</b>(<i>address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert die Grundfunktionen.
</p><dl>
<dt><i>address:</i></dt>
<dd>
IP-Adresse <class 'str'> / (IP, Port) <class 'tuple'>
</dd><dt><i>autorefresh</i></dt>
<dd>
Wenn True, alle Devices zu autorefresh hinzufuegen
</dd><dt><i>monitoring</i></dt>
<dd>
In- und Outputs werden gelesen, niemals geschrieben
</dd><dt><i>syncoutputs</i></dt>
<dd>
Aktuell gesetzte Outputs vom Prozessabbild einlesen
</dd><dt><i>simulator</i></dt>
<dd>
Laedt das Modul als Simulator und vertauscht IOs
</dd><dt><i>debug</i></dt>
<dd>
Gibt bei allen Fehlern komplette Meldungen aus
</dd><dt><i>replace_io_file</i></dt>
<dd>
Replace IO Konfiguration aus Datei laden
</dd><dt><i>direct_output</i></dt>
<dd>
Write outputs immediately to process image (slow)
</dd>
</dl><a NAME="RevPiNetIO._create_myfh" ID="RevPiNetIO._create_myfh"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO._create_myfh</h3>
<b>_create_myfh</b>(<i></i>)
<p>
Erstellt NetworkFileObject.
return FileObject
</p><a NAME="RevPiNetIO._get_cpreplaceio" ID="RevPiNetIO._get_cpreplaceio"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO._get_cpreplaceio</h3>
<b>_get_cpreplaceio</b>(<i></i>)
<p>
Laed die replace_io Konfiguration ueber das Netzwerk.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'ConfigParser'> der replace io daten
</dd>
</dl><a NAME="RevPiNetIO.disconnect" ID="RevPiNetIO.disconnect"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO.disconnect</h3>
<b>disconnect</b>(<i></i>)
<p>
Trennt Verbindungen und beendet autorefresh inkl. alle Threads.
</p><a NAME="RevPiNetIO.exit" ID="RevPiNetIO.exit"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO.exit</h3>
<b>exit</b>(<i>full=True</i>)
<p>
Beendet mainloop() und optional autorefresh.
</p><dl>
<dt><b>See Also:</b></dt>
<dd>
<a style="color:#0000FF" href="#RevPiModIO.exit(...)">#RevPiModIO.exit(...)</a>
</dd>
</dl><a NAME="RevPiNetIO.get_config_changed" ID="RevPiNetIO.get_config_changed"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO.get_config_changed</h3>
<b>get_config_changed</b>(<i></i>)
<p>
Pruefen ob RevPi Konfiguration geaendert wurde.
</p><p>
In diesem Fall ist die Verbindung geschlossen und RevPiNetIO muss
neu instanziert werden.
</p><dl>
<dt>Returns:</dt>
<dd>
True, wenn RevPi Konfiguration geaendert ist
</dd>
</dl><a NAME="RevPiNetIO.get_jconfigrsc" ID="RevPiNetIO.get_jconfigrsc"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO.get_jconfigrsc</h3>
<b>get_jconfigrsc</b>(<i></i>)
<p>
Laedt die piCotry Konfiguration und erstellt ein <class 'dict'>.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'dict'> der piCtory Konfiguration
</dd>
</dl><a NAME="RevPiNetIO.get_reconnecting" ID="RevPiNetIO.get_reconnecting"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO.get_reconnecting</h3>
<b>get_reconnecting</b>(<i></i>)
<p>
Interner reconnect aktiv wegen Netzwerkfehlern.
</p><p>
Das Modul versucht intern die Verbindung neu herzustellen. Es ist
kein weiteres Zutun noetig.
</p><dl>
<dt>Returns:</dt>
<dd>
True, wenn reconnect aktiv
</dd>
</dl><a NAME="RevPiNetIO.net_cleardefaultvalues" ID="RevPiNetIO.net_cleardefaultvalues"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO.net_cleardefaultvalues</h3>
<b>net_cleardefaultvalues</b>(<i>device=None</i>)
<p>
Loescht Defaultwerte vom PLC Slave.
</p><dl>
<dt><i>device</i></dt>
<dd>
nur auf einzelnes Device anwenden, sonst auf Alle
</dd>
</dl><a NAME="RevPiNetIO.net_setdefaultvalues" ID="RevPiNetIO.net_setdefaultvalues"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIO.net_setdefaultvalues</h3>
<b>net_setdefaultvalues</b>(<i>device=None</i>)
<p>
Konfiguriert den PLC Slave mit den piCtory Defaultwerten.
</p><dl>
<dt><i>device</i></dt>
<dd>
nur auf einzelnes Device anwenden, sonst auf Alle
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="RevPiNetIODriver" ID="RevPiNetIODriver"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">RevPiNetIODriver</h2>
<p>
Klasse um eigene Treiber fuer die virtuellen Devices zu erstellen.
</p><p>
Mit dieser Klasse werden nur angegebene Virtuelle Devices mit RevPiModIO
verwaltet. Bei Instantiierung werden automatisch die Inputs und Outputs
verdreht, um das Schreiben der Inputs zu ermoeglichen. Die Daten koennen
dann ueber logiCAD an den Devices abgerufen werden.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
RevPiNetIOSelected
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#RevPiNetIODriver.__init__">RevPiNetIODriver</a></td>
<td>Instantiiert die Grundfunktionen.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="RevPiNetIODriver.__init__" ID="RevPiNetIODriver.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIODriver (Constructor)</h3>
<b>RevPiNetIODriver</b>(<i>address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert die Grundfunktionen.
</p><p>
Parameter 'monitoring' und 'simulator' stehen hier nicht zur
Verfuegung, da diese automatisch gesetzt werden.
</p><dl>
<dt><i>address:</i></dt>
<dd>
IP-Adresse <class 'str'> / (IP, Port) <class 'tuple'>
</dd><dt><i>virtdev</i></dt>
<dd>
Virtuelles Device oder mehrere als <class 'list'>
</dd>
</dl><dl>
<dt><b>See Also:</b></dt>
<dd>
<a style="color:#0000FF" href="#RevPiModIO.__init__">RevPiModIO.__init__(...)</a>
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="RevPiNetIOSelected" ID="RevPiNetIOSelected"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">RevPiNetIOSelected</h2>
<p>
Klasse fuer die Verwaltung einzelner Devices aus piCtory.
</p><p>
Diese Klasse uebernimmt nur angegebene Devices der piCtory Konfiguration
und bilded sie inkl. IOs ab. Sie uebernimmt die exklusive Verwaltung des
Adressbereichs im Prozessabbild an dem sich die angegebenen Devices
befinden und stellt sicher, dass die Daten synchron sind.
</p><p>
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
RevPiNetIO
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#RevPiNetIOSelected.__init__">RevPiNetIOSelected</a></td>
<td>Instantiiert nur fuer angegebene Devices die Grundfunktionen.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="RevPiNetIOSelected.__init__" ID="RevPiNetIOSelected.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiNetIOSelected (Constructor)</h3>
<b>RevPiNetIOSelected</b>(<i>address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, direct_output=False</i>)
<p>
Instantiiert nur fuer angegebene Devices die Grundfunktionen.
</p><p>
Der Parameter deviceselection kann eine einzelne
Device Position / einzelner Device Name sein oder eine Liste mit
mehreren Positionen / Namen
</p><dl>
<dt><i>address:</i></dt>
<dd>
IP-Adresse <class 'str'> / (IP, Port) <class 'tuple'>
</dd><dt><i>deviceselection</i></dt>
<dd>
Positionsnummer oder Devicename
</dd>
</dl><dl>
<dt><b>See Also:</b></dt>
<dd>
<a style="color:#0000FF" href="#RevPiNetIO.__init__">RevPiNetIO.__init__(...)</a>
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr />
</body></html>

View File

@@ -1,76 +0,0 @@
<!DOCTYPE html>
<html><head>
<title>revpimodio2.summary</title>
<meta charset="UTF-8">
</head>
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
<h1 style="background-color:#FFFFFF;color:#0000FF">
revpimodio2.summary</h1>
<p>
Bildet die Summary-Sektion von piCtory ab.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3>
<table>
<tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#Summary">Summary</a></td>
<td>Bildet die Summary-Sektion der config.rsc ab.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Functions</h3>
<table>
<tr><td>None</td></tr>
</table>
<hr /><hr />
<a NAME="Summary" ID="Summary"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">Summary</h2>
<p>
Bildet die Summary-Sektion der config.rsc ab.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Derived from</h3>
object
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3>
<table>
<tr><td>__slots__</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Methods</h3>
<table>
<tr>
<td><a style="color:#0000FF" href="#Summary.__init__">Summary</a></td>
<td>Instantiiert die RevPiSummary-Klasse.</td>
</tr>
</table>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Static Methods</h3>
<table>
<tr><td>None</td></tr>
</table>
<a NAME="Summary.__init__" ID="Summary.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Summary (Constructor)</h3>
<b>Summary</b>(<i>summary</i>)
<p>
Instantiiert die RevPiSummary-Klasse.
</p><dl>
<dt><i>summary</i></dt>
<dd>
piCtory Summaryinformationen
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr />
</body></html>

20
docs/Makefile Normal file
View File

@@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SPHINXPROJ = RevPiModIO2
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

174
docs/conf.py Normal file
View File

@@ -0,0 +1,174 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# RevPiModIO2 documentation build configuration file, created by
# sphinx-quickstart on Sun Oct 20 12:38:53 2019.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import sys
sys.path.insert(0, os.path.abspath('../'))
from revpimodio2 import __version__
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.todo',
'sphinx.ext.viewcode'
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = 'RevPiModIO2'
copyright = '2019, Sven Sager (NaruX)'
author = 'Sven Sager (NaruX)'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = __version__
# The full version, including alpha/beta/rc tags.
# release = ''
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# This is required for the alabaster theme
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
html_sidebars = {
'**': [
'relations.html', # needs 'show_related': True theme option to display
'searchbox.html',
]
}
# -- Options for HTMLHelp output ------------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'RevPiModIO2doc'
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'RevPiModIO2.tex', 'RevPiModIO2 Documentation',
'Sven Sager (NaruX)', 'manual'),
]
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'revpimodio2', 'RevPiModIO2 Documentation',
[author], 1)
]
# -- Options for Texinfo output -------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'RevPiModIO2', 'RevPiModIO2 Documentation',
author, 'RevPiModIO2', 'One line description of project.',
'Miscellaneous'),
]

20
docs/index.rst Normal file
View File

@@ -0,0 +1,20 @@
.. RevPiModIO2 documentation master file, created by
sphinx-quickstart on Sun Oct 20 12:38:53 2019.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to RevPiModIO2's documentation!
=======================================
.. toctree::
:maxdepth: 2
:caption: Contents:
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

7
docs/modules.rst Normal file
View File

@@ -0,0 +1,7 @@
revpimodio2
===========
.. toctree::
:maxdepth: 4
revpimodio2

70
docs/revpimodio2.rst Normal file
View File

@@ -0,0 +1,70 @@
revpimodio2 package
===================
Submodules
----------
revpimodio2\.app module
-----------------------
.. automodule:: revpimodio2.app
:members:
:undoc-members:
:show-inheritance:
revpimodio2\.device module
--------------------------
.. automodule:: revpimodio2.device
:members:
:undoc-members:
:show-inheritance:
revpimodio2\.helper module
--------------------------
.. automodule:: revpimodio2.helper
:members:
:undoc-members:
:show-inheritance:
revpimodio2\.io module
----------------------
.. automodule:: revpimodio2.io
:members:
:undoc-members:
:show-inheritance:
revpimodio2\.modio module
-------------------------
.. automodule:: revpimodio2.modio
:members:
:undoc-members:
:show-inheritance:
revpimodio2\.netio module
-------------------------
.. automodule:: revpimodio2.netio
:members:
:undoc-members:
:show-inheritance:
revpimodio2\.summary module
---------------------------
.. automodule:: revpimodio2.summary
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: revpimodio2
:members:
:undoc-members:
:show-inheritance:

View File

@@ -1,232 +0,0 @@
revpimodio2.BOTH?7
revpimodio2.FALLING?7
revpimodio2.GREEN?7
revpimodio2.INP?7
revpimodio2.MEM?7
revpimodio2.OFF?7
revpimodio2.OUT?7
revpimodio2.RED?7
revpimodio2.RISING?7
revpimodio2.acheck?4(check_type, **kwargs)
revpimodio2.app.App?1(app)
revpimodio2.consttostr?4(value)
revpimodio2.device.Connect.A3?7
revpimodio2.device.Connect._devconfigure?5()
revpimodio2.device.Connect._get_leda3?5()
revpimodio2.device.Connect._get_wdtoggle?5()
revpimodio2.device.Connect._set_leda3?5(value)
revpimodio2.device.Connect._set_wdtoggle?5(value)
revpimodio2.device.Connect.wdautotoggle?7
revpimodio2.device.Core.A1?7
revpimodio2.device.Core.A2?7
revpimodio2.device.Core._devconfigure?5()
revpimodio2.device.Core._get_leda1?5()
revpimodio2.device.Core._get_leda2?5()
revpimodio2.device.Core._get_status?5()
revpimodio2.device.Core._set_calculatedled?5(addresslist, shifted_value)
revpimodio2.device.Core._set_leda1?5(value)
revpimodio2.device.Core._set_leda2?5(value)
revpimodio2.device.Core.errorlimit1?4(value)
revpimodio2.device.Core.errorlimit2?4(value)
revpimodio2.device.Core.frequency?4()
revpimodio2.device.Core.iocycle?4()
revpimodio2.device.Core.ioerrorcount?4()
revpimodio2.device.Core.leftgate?4()
revpimodio2.device.Core.missingdeviceorgate?4()
revpimodio2.device.Core.overunderflow?4()
revpimodio2.device.Core.picontrolrunning?4()
revpimodio2.device.Core.rightgate?4()
revpimodio2.device.Core.status?7
revpimodio2.device.Core.temperature?4()
revpimodio2.device.Core.unconfdevice?4()
revpimodio2.device.Device._buildio?5(dict_io, iotype)
revpimodio2.device.Device._devconfigure?5()
revpimodio2.device.Device._get_offset?5()
revpimodio2.device.Device._get_producttype?5()
revpimodio2.device.Device._update_my_io_list?5()
revpimodio2.device.Device.autorefresh?4(activate=True)
revpimodio2.device.Device.get_allios?4(export=None)
revpimodio2.device.Device.get_inputs?4(export=None)
revpimodio2.device.Device.get_memories?4(export=None)
revpimodio2.device.Device.get_outputs?4(export=None)
revpimodio2.device.Device.length?7
revpimodio2.device.Device.name?7
revpimodio2.device.Device.offset?7
revpimodio2.device.Device.position?7
revpimodio2.device.Device.producttype?7
revpimodio2.device.Device.readprocimg?4()
revpimodio2.device.Device.setdefaultvalues?4()
revpimodio2.device.Device.syncoutputs?4()
revpimodio2.device.Device.writeprocimg?4()
revpimodio2.device.Device?1(parentmodio, dict_device, simulator=False)
revpimodio2.device.DeviceList?1()
revpimodio2.device.DioModule?1(parentmodio, dict_device, simulator=False)
revpimodio2.device.Gateway.get_rawbytes?4()
revpimodio2.device.Gateway?1(parent, dict_device, simulator=False)
revpimodio2.device.Virtual.writeinputdefaults?4()
revpimodio2.helper.Cycletools._docycle?5()
revpimodio2.helper.Cycletools.get_tof?4(name)
revpimodio2.helper.Cycletools.get_tofc?4(name)
revpimodio2.helper.Cycletools.get_ton?4(name)
revpimodio2.helper.Cycletools.get_tonc?4(name)
revpimodio2.helper.Cycletools.get_tp?4(name)
revpimodio2.helper.Cycletools.get_tpc?4(name)
revpimodio2.helper.Cycletools.set_tof?4(name, milliseconds)
revpimodio2.helper.Cycletools.set_tofc?4(name, cycles)
revpimodio2.helper.Cycletools.set_ton?4(name, milliseconds)
revpimodio2.helper.Cycletools.set_tonc?4(name, cycles)
revpimodio2.helper.Cycletools.set_tp?4(name, milliseconds)
revpimodio2.helper.Cycletools.set_tpc?4(name, cycles)
revpimodio2.helper.Cycletools?1(cycletime)
revpimodio2.helper.EventCallback.run?4()
revpimodio2.helper.EventCallback.stop?4()
revpimodio2.helper.EventCallback?1(func, name, value)
revpimodio2.helper.ProcimgWriter._collect_events?5(value)
revpimodio2.helper.ProcimgWriter.get_refresh?4()
revpimodio2.helper.ProcimgWriter.refresh?7
revpimodio2.helper.ProcimgWriter.run?4()
revpimodio2.helper.ProcimgWriter.set_refresh?4(value)
revpimodio2.helper.ProcimgWriter.stop?4()
revpimodio2.helper.ProcimgWriter?1(parentmodio)
revpimodio2.io.DeadIO._parentdevice?8
revpimodio2.io.DeadIO.replace_io?4(name, frm, **kwargs)
revpimodio2.io.DeadIO?1(deadio)
revpimodio2.io.IOBase._get_address?5()
revpimodio2.io.IOBase._get_byteorder?5()
revpimodio2.io.IOBase._get_iotype?5()
revpimodio2.io.IOBase.address?7
revpimodio2.io.IOBase.byteorder?7
revpimodio2.io.IOBase.defaultvalue?7
revpimodio2.io.IOBase.get_defaultvalue?4()
revpimodio2.io.IOBase.get_value?4()
revpimodio2.io.IOBase.length?7
revpimodio2.io.IOBase.name?7
revpimodio2.io.IOBase.reg_event?4(func, delay=0, edge=BOTH, as_thread=False, prefire=False)
revpimodio2.io.IOBase.reg_timerevent?4(func, delay, edge=BOTH, as_thread=False)
revpimodio2.io.IOBase.set_value?4(value)
revpimodio2.io.IOBase.type?7
revpimodio2.io.IOBase.unreg_event?4(func=None, edge=None)
revpimodio2.io.IOBase.value?7
revpimodio2.io.IOBase.wait?4(edge=BOTH, exitevent=None, okvalue=None, timeout=0)
revpimodio2.io.IOBase?1(parentdevice, valuelist, iotype, byteorder, signed)
revpimodio2.io.IOEvent?1(func, edge, as_thread, delay, overwrite, prefire)
revpimodio2.io.IOList._private_register_new_io_object?5(new_io)
revpimodio2.io.IOList?1()
revpimodio2.io.IntIO._get_signed?5()
revpimodio2.io.IntIO._set_byteorder?5(value)
revpimodio2.io.IntIO._set_signed?5(value)
revpimodio2.io.IntIO.byteorder?7
revpimodio2.io.IntIO.defaultvalue?7
revpimodio2.io.IntIO.get_intdefaultvalue?4()
revpimodio2.io.IntIO.get_intvalue?4()
revpimodio2.io.IntIO.set_intvalue?4(value)
revpimodio2.io.IntIO.signed?7
revpimodio2.io.IntIO.value?7
revpimodio2.io.IntIOCounter.reset?4()
revpimodio2.io.IntIOCounter?1(counter_id, parentdevice, valuelist, iotype, byteorder, signed)
revpimodio2.io.IntIOReplaceable.replace_io?4(name, frm, **kwargs)
revpimodio2.io.StructIO._get_frm?5()
revpimodio2.io.StructIO._get_signed?5()
revpimodio2.io.StructIO.defaultvalue?7
revpimodio2.io.StructIO.frm?7
revpimodio2.io.StructIO.get_structdefaultvalue?4()
revpimodio2.io.StructIO.get_structvalue?4()
revpimodio2.io.StructIO.set_structvalue?4(value)
revpimodio2.io.StructIO.signed?7
revpimodio2.io.StructIO.value?7
revpimodio2.io.StructIO?1(parentio, name, frm, **kwargs)
revpimodio2.modio.RevPiModIO._configure?5(jconfigrsc)
revpimodio2.modio.RevPiModIO._configure_replace_io?5(creplaceio)
revpimodio2.modio.RevPiModIO._create_myfh?5()
revpimodio2.modio.RevPiModIO._get_configrsc?5()
revpimodio2.modio.RevPiModIO._get_cpreplaceio?5()
revpimodio2.modio.RevPiModIO._get_cycletime?5()
revpimodio2.modio.RevPiModIO._get_debug?5()
revpimodio2.modio.RevPiModIO._get_ioerrors?5()
revpimodio2.modio.RevPiModIO._get_length?5()
revpimodio2.modio.RevPiModIO._get_maxioerrors?5()
revpimodio2.modio.RevPiModIO._get_monitoring?5()
revpimodio2.modio.RevPiModIO._get_procimg?5()
revpimodio2.modio.RevPiModIO._get_replace_io_file?5()
revpimodio2.modio.RevPiModIO._get_simulator?5()
revpimodio2.modio.RevPiModIO._gotioerror?5(action, e=None, show_warn=True)
revpimodio2.modio.RevPiModIO._set_cycletime?5(milliseconds)
revpimodio2.modio.RevPiModIO._set_debug?5(value)
revpimodio2.modio.RevPiModIO._set_maxioerrors?5(value)
revpimodio2.modio.RevPiModIO._simulate_ioctl?5(request, arg=b'')
revpimodio2.modio.RevPiModIO.autorefresh_all?4()
revpimodio2.modio.RevPiModIO.cleanup?4()
revpimodio2.modio.RevPiModIO.configrsc?7
revpimodio2.modio.RevPiModIO.cycleloop?4(func, cycletime=50)
revpimodio2.modio.RevPiModIO.cycletime?7
revpimodio2.modio.RevPiModIO.debug?7
revpimodio2.modio.RevPiModIO.exit?4(full=True)
revpimodio2.modio.RevPiModIO.export_replaced_ios?4(filename="replace_ios.conf")
revpimodio2.modio.RevPiModIO.get_jconfigrsc?4()
revpimodio2.modio.RevPiModIO.handlesignalend?4(cleanupfunc=None)
revpimodio2.modio.RevPiModIO.ioerrors?7
revpimodio2.modio.RevPiModIO.length?7
revpimodio2.modio.RevPiModIO.mainloop?4(blocking=True)
revpimodio2.modio.RevPiModIO.maxioerrors?7
revpimodio2.modio.RevPiModIO.monitoring?7
revpimodio2.modio.RevPiModIO.procimg?7
revpimodio2.modio.RevPiModIO.readprocimg?4(device=None)
revpimodio2.modio.RevPiModIO.replace_io_file?7
revpimodio2.modio.RevPiModIO.resetioerrors?4()
revpimodio2.modio.RevPiModIO.setdefaultvalues?4(device=None)
revpimodio2.modio.RevPiModIO.simulator?7
revpimodio2.modio.RevPiModIO.syncoutputs?4(device=None)
revpimodio2.modio.RevPiModIO.writeprocimg?4(device=None)
revpimodio2.modio.RevPiModIO?1(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.netio.HASH_FAIL?7
revpimodio2.netio.NetFH._connect?5()
revpimodio2.netio.NetFH._direct_send?5(send_bytes, recv_count)
revpimodio2.netio.NetFH.clear_dirtybytes?4(position=None)
revpimodio2.netio.NetFH.close?4()
revpimodio2.netio.NetFH.closed?7
revpimodio2.netio.NetFH.config_changed?7
revpimodio2.netio.NetFH.flush?4()
revpimodio2.netio.NetFH.get_closed?4()
revpimodio2.netio.NetFH.get_config_changed?4()
revpimodio2.netio.NetFH.get_name?4()
revpimodio2.netio.NetFH.get_reconnecting?4()
revpimodio2.netio.NetFH.get_timeout?4()
revpimodio2.netio.NetFH.ioctl?4(request, arg=b'')
revpimodio2.netio.NetFH.name?7
revpimodio2.netio.NetFH.read?4(length)
revpimodio2.netio.NetFH.readpictory?4()
revpimodio2.netio.NetFH.readreplaceio?4()
revpimodio2.netio.NetFH.reconnecting?7
revpimodio2.netio.NetFH.run?4()
revpimodio2.netio.NetFH.seek?4(position)
revpimodio2.netio.NetFH.set_dirtybytes?4(position, dirtybytes)
revpimodio2.netio.NetFH.set_timeout?4(value)
revpimodio2.netio.NetFH.tell?4()
revpimodio2.netio.NetFH.timeout?7
revpimodio2.netio.NetFH.write?4(bytebuff)
revpimodio2.netio.NetFH?1(address, check_replace_ios, timeout=500)
revpimodio2.netio.RevPiNetIO._create_myfh?5()
revpimodio2.netio.RevPiNetIO._get_cpreplaceio?5()
revpimodio2.netio.RevPiNetIO.config_changed?7
revpimodio2.netio.RevPiNetIO.disconnect?4()
revpimodio2.netio.RevPiNetIO.exit?4(full=True)
revpimodio2.netio.RevPiNetIO.get_config_changed?4()
revpimodio2.netio.RevPiNetIO.get_jconfigrsc?4()
revpimodio2.netio.RevPiNetIO.get_reconnecting?4()
revpimodio2.netio.RevPiNetIO.net_cleardefaultvalues?4(device=None)
revpimodio2.netio.RevPiNetIO.net_setdefaultvalues?4(device=None)
revpimodio2.netio.RevPiNetIO.reconnecting?7
revpimodio2.netio.RevPiNetIO?1(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.netio.RevPiNetIODriver?1(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.netio.RevPiNetIOSelected?1(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, direct_output=False)
revpimodio2.netio._sysdeldirty?8
revpimodio2.netio._sysexit?8
revpimodio2.netio._sysflush?8
revpimodio2.netio._syspictory?8
revpimodio2.netio._syspictoryh?8
revpimodio2.netio._sysreplaceio?8
revpimodio2.netio._sysreplaceioh?8
revpimodio2.netio._syssync?8
revpimodio2.summary.Summary?1(summary)

View File

@@ -1,21 +0,0 @@
AclException Exception
Base Device
ConfigChanged Exception
Connect Core
Core Base
DeviceNotFoundError Exception
DioModule Device
EventCallback Thread
Gateway Device
IntIO IOBase
IntIOCounter IntIO
IntIOReplaceable IntIO
NetFH Thread
ProcimgWriter Thread
RevPiModIODriver RevPiModIOSelected
RevPiModIOSelected RevPiModIO
RevPiNetIO _RevPiModIO
RevPiNetIODriver RevPiNetIOSelected
RevPiNetIOSelected RevPiNetIO
StructIO IOBase
Virtual Gateway

View File

@@ -1,428 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project revpimodio2 -->
<!-- Saved: 2019-09-05, 13:16:13 -->
<!-- Copyright (C) 2019 Sven Sager, akira@narux.de -->
<Project version="5.1">
<Language>en_US</Language>
<Hash>7ea159534ad3516e9069331120048abf9b00151e</Hash>
<ProgLanguage mixed="0">Python3</ProgLanguage>
<ProjectType>Console</ProjectType>
<Description>Das Modul stellt alle Devices und IOs aus der piCtory Konfiguration in Python3 zur Verfügung. Es ermöglicht den direkten Zugriff auf die Werte über deren vergebenen Namen. Lese- und Schreibaktionen mit dem Prozessabbild werden von dem Modul selbst verwaltet, ohne dass sich der Programmierer um Offsets und Adressen kümmern muss. Für die Gatewaymodule wie ModbusTCP oder Profinet sind eigene 'Inputs' und 'Outputs' über einen bestimmten Adressbereich definierbar. Auf diese IOs kann mit Python3 über den Namen direkt auf die Werte zugegriffen werden.</Description>
<Version>2.4.2</Version>
<Author>Sven Sager</Author>
<Email>akira@narux.de</Email>
<Eol index="1"/>
<Sources>
<Source>revpimodio2/__init__.py</Source>
<Source>revpimodio2/app.py</Source>
<Source>revpimodio2/device.py</Source>
<Source>revpimodio2/devicecon.py</Source>
<Source>revpimodio2/helper.py</Source>
<Source>revpimodio2/io.py</Source>
<Source>revpimodio2/modio.py</Source>
<Source>revpimodio2/netio.py</Source>
<Source>revpimodio2/summary.py</Source>
<Source>setup.py</Source>
<Source>test/test_dio_cycleloop.py</Source>
<Source>test/test_dio_mainloop.py</Source>
<Source>test/test_dio_while2.py</Source>
<Source>test/test_net_leistung.py</Source>
<Source>test/test_netio_brett.py</Source>
<Source>test/test_unit.py</Source>
<Source>test/test_unit_fh.py</Source>
<Source>test/test_unitnet.py</Source>
<Source>test/web_benniesrun.py</Source>
<Source>test/web_benniesrunxxl.py</Source>
<Source>test/web_cycleloop.py</Source>
<Source>test/web_mainloop.py</Source>
<Source>test/web_rpidaten.py</Source>
<Source>test/web_rpii2c.py</Source>
<Source>test/web_startseite.py</Source>
<Source>test/web_virtdevdriver.py</Source>
</Sources>
<Forms/>
<Translations/>
<Resources/>
<Interfaces/>
<Others>
<Other>.hgignore</Other>
<Other>LICENSE.txt</Other>
<Other>MANIFEST.in</Other>
<Other>README.md</Other>
<Other>doc</Other>
<Other>eric-revpimodio2.api</Other>
</Others>
<MainScript>test/test_unit.py</MainScript>
<Vcs>
<VcsType>Mercurial</VcsType>
<VcsOptions>
<dict>
<key>
<string>add</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>checkout</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>commit</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>diff</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>export</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>global</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>history</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>log</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>remove</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>status</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>tag</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key>
<string>update</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
</dict>
</VcsOptions>
</Vcs>
<FiletypeAssociations>
<FiletypeAssociation pattern="*.idl" type="INTERFACES"/>
<FiletypeAssociation pattern="*.py" type="SOURCES"/>
<FiletypeAssociation pattern="*.py3" type="SOURCES"/>
<FiletypeAssociation pattern="*.pyw" type="SOURCES"/>
<FiletypeAssociation pattern="*.pyw3" type="SOURCES"/>
</FiletypeAssociations>
<Documentation>
<DocumentationParams>
<dict>
<key>
<string>ERIC4API</string>
</key>
<value>
<dict>
<key>
<string>ignoreDirectories</string>
</key>
<value>
<list>
<string>deb</string>
<string>dist</string>
<string>doc</string>
<string>test</string>
</list>
</value>
<key>
<string>ignoreFilePatterns</string>
</key>
<value>
<list>
<string>setup.py</string>
<string>devicecon.py</string>
</list>
</value>
<key>
<string>languages</string>
</key>
<value>
<list>
<string>Python3</string>
</list>
</value>
<key>
<string>outputFile</string>
</key>
<value>
<string>eric-revpimodio2.api</string>
</value>
<key>
<string>useRecursion</string>
</key>
<value>
<bool>True</bool>
</value>
</dict>
</value>
<key>
<string>ERIC4DOC</string>
</key>
<value>
<dict>
<key>
<string>ignoreDirectories</string>
</key>
<value>
<list>
<string>deb</string>
<string>dist</string>
<string>doc</string>
<string>test</string>
</list>
</value>
<key>
<string>ignoreFilePatterns</string>
</key>
<value>
<list>
<string>setup.py</string>
<string>devicecon.py</string>
</list>
</value>
<key>
<string>outputDirectory</string>
</key>
<value>
<string>doc</string>
</value>
<key>
<string>qtHelpEnabled</string>
</key>
<value>
<bool>False</bool>
</value>
<key>
<string>useRecursion</string>
</key>
<value>
<bool>True</bool>
</value>
</dict>
</value>
</dict>
</DocumentationParams>
</Documentation>
<Checkers>
<CheckersParams>
<dict>
<key>
<string>Pep8Checker</string>
</key>
<value>
<dict>
<key>
<string>BuiltinsChecker</string>
</key>
<value>
<dict>
<key>
<string>chr</string>
</key>
<value>
<list>
<string>unichr</string>
</list>
</value>
<key>
<string>str</string>
</key>
<value>
<list>
<string>unicode</string>
</list>
</value>
</dict>
</value>
<key>
<string>CopyrightAuthor</string>
</key>
<value>
<string></string>
</value>
<key>
<string>CopyrightMinFileSize</string>
</key>
<value>
<int>0</int>
</value>
<key>
<string>DocstringType</string>
</key>
<value>
<string>pep257</string>
</value>
<key>
<string>ExcludeFiles</string>
</key>
<value>
<string>*/test/*</string>
</value>
<key>
<string>ExcludeMessages</string>
</key>
<value>
<string>E123,E226,E24,C101,E402,C111</string>
</value>
<key>
<string>FixCodes</string>
</key>
<value>
<string></string>
</value>
<key>
<string>FixIssues</string>
</key>
<value>
<bool>False</bool>
</value>
<key>
<string>FutureChecker</string>
</key>
<value>
<string></string>
</value>
<key>
<string>HangClosing</string>
</key>
<value>
<bool>False</bool>
</value>
<key>
<string>IncludeMessages</string>
</key>
<value>
<string></string>
</value>
<key>
<string>LineComplexity</string>
</key>
<value>
<int>15</int>
</value>
<key>
<string>LineComplexityScore</string>
</key>
<value>
<int>10</int>
</value>
<key>
<string>MaxCodeComplexity</string>
</key>
<value>
<int>10</int>
</value>
<key>
<string>MaxLineLength</string>
</key>
<value>
<int>79</int>
</value>
<key>
<string>NoFixCodes</string>
</key>
<value>
<string>E501</string>
</value>
<key>
<string>RepeatMessages</string>
</key>
<value>
<bool>True</bool>
</value>
<key>
<string>ShowIgnored</string>
</key>
<value>
<bool>False</bool>
</value>
<key>
<string>ValidEncodings</string>
</key>
<value>
<string>latin-1, utf-8</string>
</value>
</dict>
</value>
</dict>
</CheckersParams>
</Checkers>
<OtherTools>
<OtherToolsParams>
<dict>
<key>
<string>CodeMetrics</string>
</key>
<value>
<dict>
<key>
<string>ExcludeFiles</string>
</key>
<value>
<string>*/test/*,*/setup.py,*/test_unit.py</string>
</value>
</dict>
</value>
</dict>
</OtherToolsParams>
</OtherTools>
</Project>

View File

@@ -14,7 +14,8 @@ fuehrt das Modul bei Datenaenderung aus.
"""
__all__ = [
"RevPiModIO", "RevPiModIOSelected", "RevPiModIODriver",
"RevPiNetIO", "RevPiNetIOSelected", "RevPiNetIODriver"
"RevPiNetIO", "RevPiNetIOSelected", "RevPiNetIODriver",
"Cycletools",
]
__author__ = "Sven Sager <akira@revpimodio.org>"
__copyright__ = "Copyright (C) 2018 Sven Sager"
@@ -95,5 +96,6 @@ def consttostr(value):
# Benötigte Klassen importieren
from .helper import Cycletools
from .modio import RevPiModIO, RevPiModIOSelected, RevPiModIODriver
from .netio import RevPiNetIO, RevPiNetIOSelected, RevPiNetIODriver

View File

@@ -605,7 +605,7 @@ class RevPiModIO(object):
@param func Funktion, die ausgefuehrt werden soll
@param cycletime Zykluszeit in Millisekunden - Standardwert 50 ms
@return None
@return None or the return value of the cycle function
"""
# Prüfen ob ein Loop bereits läuft