revpimodio2 package

Submodules

revpimodio2.app module

Bildet die App Sektion von piCtory ab.

class revpimodio2.app.App(app: dict)[source]

Bases: object

Bildet die App Sektion der config.rsc ab.

language

Language of creating app

layout
name

Name of creating app

savets

Timestamp of configuraiton

version

Version of creating app

revpimodio2.device module

Modul fuer die Verwaltung der Devices.

class revpimodio2.device.Base(parentmodio, dict_device, simulator=False)[source]

Bases: Device

Klasse fuer alle Base-Devices wie Core / Connect usw.

class revpimodio2.device.Compact(parentmodio, dict_device, simulator=False)[source]

Bases: Base

Klasse fuer den RevPi Compact.

Stellt Funktionen fuer die LEDs zur Verfuegung. Auf IOs wird ueber das .io Objekt zugegriffen.

property A1: int

Gibt den Zustand der LED A1 vom Compact zurueck.

Returns:

0=aus, 1=gruen, 2=rot

property A2: int

Gibt den Zustand der LED A2 vom Compact zurueck.

Returns:

0=aus, 1=gruen, 2=rot

a1green
a1red
a2green
a2red
property frequency: int

Gibt CPU Taktfrequenz zurueck.

Returns:

CPU Taktfrequenz in MHz (-1 wenn nicht verfuegbar)

property temperature: int

Gibt CPU-Temperatur zurueck.

Returns:

CPU-Temperatur in Celsius (-273 wenn nich verfuegbar)

wd
wd_toggle()[source]

Toggle watchdog bit to prevent a timeout.

class revpimodio2.device.Connect(parentmodio, dict_device, simulator=False)[source]

Bases: Core

Klasse fuer den RevPi Connect.

Stellt Funktionen fuer die LEDs, Watchdog und den Status zur Verfuegung.

property A3: int

Gibt den Zustand der LED A3 vom Connect zurueck.

Returns:

0=aus, 1=gruen, 2=rot

a3green
a3red
property wdautotoggle: bool

Ruft den Wert fuer Autowatchdog ab.

Returns:

True, wenn Autowatchdog aktiv ist

x2in
x2out
class revpimodio2.device.Connect4(parentmodio, dict_device, simulator=False)[source]

Bases: ModularBaseConnect_4_5

Klasse fuer den RevPi Connect 4.

Stellt Funktionen fuer die LEDs und den Status zur Verfuegung.

x2in
x2out
class revpimodio2.device.Connect5(parentmodio, dict_device, simulator=False)[source]

Bases: ModularBaseConnect_4_5, GatewayMixin

Klasse fuer den RevPi Connect 5.

Stellt Funktionen fuer die LEDs und den Status zur Verfuegung.

a1blue
a1green
a1red
a2blue
a2green
a2red
a3blue
a3green
a3red
a4blue
a4green
a4red
a5blue
a5green
a5red
class revpimodio2.device.Core(parentmodio, dict_device, simulator=False)[source]

Bases: ModularBase, GatewayMixin

Klasse fuer den RevPi Core.

Stellt Funktionen fuer die LEDs und den Status zur Verfuegung.

property A1: int

Gibt den Zustand der LED A1 vom Core zurueck.

Returns:

0=aus, 1=gruen, 2=rot

property A2: int

Gibt den Zustand der LED A2 vom Core zurueck.

Returns:

0=aus, 1=gruen, 2=rot

a1green
a1red
a2green
a2red
wd
wd_toggle()[source]

Toggle watchdog bit to prevent a timeout.

class revpimodio2.device.Device(parentmodio, dict_device, simulator=False)[source]

Bases: object

Basisklasse fuer alle Device-Objekte.

Die Basisfunktionalitaet generiert bei Instantiierung alle IOs und erweitert den Prozessabbildpuffer um die benoetigten Bytes. Sie verwaltet ihren Prozessabbildpuffer und sorgt fuer die Aktualisierung der IO-Werte.

autorefresh(activate=True) → None[source]

Registriert dieses Device fuer die automatische Synchronisierung.

Parameters:

activate – Default True fuegt Device zur Synchronisierung hinzu

bmk
catalognr
comment
extend
get_allios(export=None) → list[source]

Gibt eine Liste aller Inputs und Outputs zurueck, keine MEMs.

Bleibt Parameter ‘export’ auf None werden alle Inputs und Outputs zurueckgegeben. Wird ‘export’ auf True/False gesetzt, werden nur Inputs und Outputs zurueckgegeben, bei denen der Wert ‘Export’ in piCtory uebereinstimmt.

Parameters:

export – Nur In-/Outputs mit angegebenen ‘Export’ Wert in piCtory

Returns:

<class ‘list’> Input und Output, keine MEMs

get_inputs(export=None) → list[source]

Gibt eine Liste aller Inputs zurueck.

Bleibt Parameter ‘export’ auf None werden alle Inputs zurueckgegeben. Wird ‘export’ auf True/False gesetzt, werden nur Inputs zurueckgegeben, bei denen der Wert ‘Export’ in piCtory uebereinstimmt.

Parameters:

export – Nur Inputs mit angegebenen ‘Export’ Wert in piCtory

Returns:

<class ‘list’> Inputs

get_memories(export=None) → list[source]

Gibt eine Liste aller Memoryobjekte zurueck.

Bleibt Parameter ‘export’ auf None werden alle Mems zurueckgegeben. Wird ‘export’ auf True/False gesetzt, werden nur Mems zurueckgegeben, bei denen der Wert ‘Export’ in piCtory uebereinstimmt.

Parameters:

export – Nur Mems mit angegebenen ‘Export’ Wert in piCtory

Returns:

<class ‘list’> Mems

get_outputs(export=None) → list[source]

Gibt eine Liste aller Outputs zurueck.

Bleibt Parameter ‘export’ auf None werden alle Outputs zurueckgegeben. Wird ‘export’ auf True/False gesetzt, werden nur Outputs zurueckgegeben, bei denen der Wert ‘Export’ in piCtory uebereinstimmt.

Parameters:

export – Nur Outputs mit angegebenen ‘Export’ Wert in piCtory

Returns:

<class ‘list’> Outputs

guid
id
inpvariant
property length

Gibt Anzahl der Bytes zurueck, die dieses Device belegt.

Returns:

<class ‘int’>

property name

Gibt den Namen des Devices zurueck.

Returns:

Devicename

property offset: int

Gibt den Deviceoffset im Prozessabbild zurueck.

Returns:

Deviceoffset

outvariant
property position

Gibt die Positon im RevPi Bus zurueck.

Returns:

Positionsnummer

property producttype: int

Gibt den Produkttypen des device zurueck.

Returns:

Deviceprodukttyp

readprocimg() → bool[source]

Alle Inputs fuer dieses Device vom Prozessabbild einlesen.

Same see

Returns:

True, wenn erfolgreich ausgefuehrt

Ref:

revpimodio2.modio.RevPiModIO.readprocimg()

setdefaultvalues() → None[source]

Alle Outputbuffer fuer dieses Device auf default Werte setzen.

Returns:

True, wenn erfolgreich ausgefuehrt

Ref:

revpimodio2.modio.RevPiModIO.setdefaultvalues()

shared_procimg(activate: bool) → None[source]

Activate sharing of process image just for this device.

Parameters:

activate – Set True to activate process image sharing

syncoutputs() → bool[source]

Lesen aller Outputs im Prozessabbild fuer dieses Device.

Returns:

True, wenn erfolgreich ausgefuehrt

Ref:

revpimodio2.modio.RevPiModIO.syncoutputs()

type
writeprocimg() → bool[source]

Schreiben aller Outputs dieses Devices ins Prozessabbild.

Returns:

True, wenn erfolgreich ausgefuehrt

Ref:

revpimodio2.modio.RevPiModIO.writeprocimg()

class revpimodio2.device.DeviceList[source]

Bases: object

Basisklasse fuer direkten Zugriff auf Device Objekte.

class revpimodio2.device.DioModule(parentmodio, dict_device, simulator=False)[source]

Bases: Device

Stellt ein DIO / DI / DO Modul dar.

class revpimodio2.device.Flat(parentmodio, dict_device, simulator=False)[source]

Bases: Base

Klasse fuer den RevPi Flat.

Stellt Funktionen fuer die LEDs zur Verfuegung. Auf IOs wird ueber das .io Objekt zugegriffen.

property A1: int

Get value of LED A1 from RevPi Flat device.

Returns:

0=off, 1=green, 2=red

property A2: int

Get value of LED A2 from RevPi Flat device.

Returns:

0=off, 1=green, 2=red

property A3: int

Get value of LED A3 from RevPi Flat device.

Returns:

0=off, 1=green, 2=red

property A4: int

Get value of LED A4 from RevPi Flat device.

Returns:

0=off, 1=green, 2=red

property A5: int

Get value of LED A5 from RevPi Flat device.

Returns:

0=off, 1=green, 2=red

a1green
a1red
a2green
a2red
a3green
a3red
a4green
a4red
a5green
a5red
property frequency: int

Gibt CPU Taktfrequenz zurueck.

Returns:

CPU Taktfrequenz in MHz (-1 wenn nicht verfuegbar)

relais
switch
property temperature: int

Gibt CPU-Temperatur zurueck.

Returns:

CPU-Temperatur in Celsius (-273 wenn nich verfuegbar)

wd
wd_toggle()[source]

Toggle watchdog bit to prevent a timeout.

class revpimodio2.device.Gateway(parent, dict_device, simulator=False)[source]

Bases: Device

Klasse fuer die RevPi Gateway-Devices.

Stellt neben den Funktionen von RevPiDevice weitere Funktionen fuer die Gateways bereit. IOs auf diesem Device stellen die replace_io Funktion zur verfuegung, ueber die eigene IOs definiert werden, die ein RevPiStructIO-Objekt abbilden. Dieser IO-Typ kann Werte ueber mehrere Bytes verarbeiten und zurueckgeben.

Ref:

revpimodio2.io.IntIOReplaceable.replace_io()

get_rawbytes() → bytes[source]

Gibt die Bytes aus, die dieses Device verwendet.

Returns:

<class ‘bytes’> des Devices

class revpimodio2.device.GatewayMixin[source]

Bases: object

property leftgate: bool

Statusbit links vom RevPi ist ein piGate Modul angeschlossen.

Returns:

True, wenn piGate links existiert

property rightgate: bool

Statusbit rechts vom RevPi ist ein piGate Modul angeschlossen.

Returns:

True, wenn piGate rechts existiert

class revpimodio2.device.ModularBase(parentmodio, dict_device, simulator=False)[source]

Bases: Base

Klasse fuer alle modularen Base-Devices wie Core / Connect usw..

Stellt Funktionen fuer den Status zur Verfuegung.

property errorlimit1: int

Gibt RS485 ErrorLimit1 Wert zurueck.

Returns:

Aktueller Wert fuer ErrorLimit1 (-1 wenn nicht verfuegbar)

property errorlimit2: int

Gibt RS485 ErrorLimit2 Wert zurueck.

Returns:

Aktueller Wert fuer ErrorLimit2 (-1 wenn nicht verfuegbar)

property frequency: int

Gibt CPU Taktfrequenz zurueck.

Returns:

CPU Taktfrequenz in MHz (-1 wenn nicht verfuegbar)

property iocycle: int

Gibt Zykluszeit der Prozessabbildsynchronisierung zurueck.

Returns:

Zykluszeit in ms ( -1 wenn nicht verfuegbar)

property ioerrorcount: int

Gibt Fehleranzahl auf RS485 piBridge Bus zurueck.

Returns:

Fehleranzahl der piBridge (-1 wenn nicht verfuegbar)

property missingdeviceorgate: bool

Statusbit fuer ein IO-Modul fehlt oder piGate konfiguriert.

Returns:

True, wenn IO-Modul fehlt oder piGate konfiguriert

property overunderflow: bool

Statusbit Modul belegt mehr oder weniger Speicher als konfiguriert.

Returns:

True, wenn falscher Speicher belegt ist

property picontrolrunning: bool

Statusbit fuer piControl-Treiber laeuft.

Returns:

True, wenn Treiber laeuft

property status: int

Gibt den RevPi Core Status zurueck.

Returns:

Status als <class ‘int’>

property temperature: int

Gibt CPU-Temperatur zurueck.

Returns:

CPU-Temperatur in Celsius (-273 wenn nich verfuegbar)

property unconfdevice: bool

Statusbit fuer ein IO-Modul nicht mit PiCtory konfiguriert.

Returns:

True, wenn IO Modul nicht konfiguriert

class revpimodio2.device.ModularBaseConnect_4_5(parentmodio, dict_device, simulator=False)[source]

Bases: ModularBase

Class for overlapping functions of Connect 4/5.

property A1: int

Gibt den Zustand der LED A1 vom Connect zurueck.

Returns:

0=aus, 1=gruen, 2=root, 4=blau, mixed RGB colors

property A2: int

Gibt den Zustand der LED A2 vom Core zurueck.

Returns:

0=aus, 1=gruen, 2=root, 4=blau, mixed RGB colors

property A3: int

Gibt den Zustand der LED A3 vom Core zurueck.

Returns:

0=aus, 1=gruen, 2=root, 4=blau, mixed RGB colors

property A4: int

Gibt den Zustand der LED A4 vom Core zurueck.

Returns:

0=aus, 1=gruen, 2=root, 4=blau, mixed RGB colors

property A5: int

Gibt den Zustand der LED A5 vom Core zurueck.

Returns:

0=aus, 1=gruen, 2=root, 4=blau, mixed RGB colors

a1blue
a1green
a1red
a2blue
a2green
a2red
a3blue
a3green
a3red
a4blue
a4green
a4red
a5blue
a5green
a5red
wd_toggle()[source]

Toggle watchdog bit to prevent a timeout.

class revpimodio2.device.RoModule(parentmodio, dict_device, simulator=False)[source]

Bases: Device

Relais output (RO) module with

bmk
catalognr
comment
extend
guid
id
inpvariant
outvariant
type
class revpimodio2.device.Virtual(parent, dict_device, simulator=False)[source]

Bases: Gateway

Klasse fuer die RevPi Virtual-Devices.

Stellt die selben Funktionen wie Gateway zur Verfuegung. Es koennen ueber die reg_*-Funktionen eigene IOs definiert werden, die ein RevPiStructIO-Objekt abbilden. Dieser IO-Typ kann Werte ueber mehrere Bytes verarbeiten und zurueckgeben.

Ref:

Gateway()

writeinputdefaults()[source]

Schreibt fuer ein virtuelles Device piCtory Defaultinputwerte.

Sollten in piCtory Defaultwerte fuer Inputs eines virtuellen Devices angegeben sein, werden diese nur beim Systemstart oder einem piControl Reset gesetzt. Sollte danach das Prozessabbild mit NULL ueberschrieben, gehen diese Werte verloren. Diese Funktion kann nur auf virtuelle Devices angewendet werden!

Returns:

True, wenn Arbeiten am virtuellen Device erfolgreich waren

revpimodio2.errors module

Error classes of RevPiModIO.

exception revpimodio2.errors.DeviceNotFoundError[source]

Bases: RevPiModIOError

exception revpimodio2.errors.RevPiModIOError[source]

Bases: Exception

revpimodio2.helper module

RevPiModIO Helperklassen und Tools.

class revpimodio2.helper.Cycletools(cycletime, revpi_object)[source]

Bases: object

Werkzeugkasten fuer Cycleloop-Funktion.

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.

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.

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.

Diese Merker koennen z.B. verwendet werden um, an Outputs angeschlossene, Lampen synchron blinken zu lassen.

changed(io: IOBase, edge=33)[source]

Check change of IO value from last to this cycle.

It will always be False on the first use of this function with an IO object.

Parameters:
  • io – IO to check for changes to last cycle

  • edge – Check for rising or falling on bit io objects

Returns:

True, if IO value changed

core
device
first
flag10c
flag15c
flag1c
flag20c
flag5c
flank10c
flank15c
flank20c
flank5c
get_tof(name: str) → bool[source]

Wert der Ausschaltverzoegerung.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> der Ausschaltverzoegerung

get_tofc(name: str) → bool[source]

Wert der Ausschaltverzoegerung.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> der Ausschaltverzoegerung

get_ton(name: str) → bool[source]

Einschaltverzoegerung.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> der Einschaltverzoegerung

get_tonc(name: str) → bool[source]

Einschaltverzoegerung.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> der Einschaltverzoegerung

get_tp(name: str) → bool[source]

Impulstimer.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> des Impulses

get_tpc(name: str) → bool[source]

Impulstimer.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> des Impulses

io
last
property runtime: float

Runtime im milliseconds of cycle function till now.

This property will return the actual runtime of the function. So on the beginning of your function it will be about 0 and will rise during the runtime to the max in the last line of your function.

set_tof(name: str, milliseconds: int) → None[source]

Startet bei Aufruf einen ausschaltverzoegerten Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • milliseconds – Verzoegerung in Millisekunden

set_tofc(name: str, cycles: int) → None[source]

Startet bei Aufruf einen ausschaltverzoegerten Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • cycles – Zyklusanzahl, der Verzoegerung wenn nicht neu gestartet

set_ton(name: str, milliseconds: int) → None[source]

Startet einen einschaltverzoegerten Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • milliseconds – Millisekunden, der Verzoegerung wenn neu gestartet

set_tonc(name: str, cycles: int) → None[source]

Startet einen einschaltverzoegerten Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • cycles – Zyklusanzahl, der Verzoegerung wenn neu gestartet

set_tp(name: str, milliseconds: int) → None[source]

Startet einen Impuls Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • milliseconds – Millisekunden, die der Impuls anstehen soll

set_tpc(name: str, cycles: int) → None[source]

Startet einen Impuls Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • cycles – Zyklusanzahl, die der Impuls anstehen soll

var
class revpimodio2.helper.EventCallback(func, name: str, value)[source]

Bases: Thread

Thread fuer das interne Aufrufen von Event-Funktionen.

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.

while not th.exit.is_set():

# IO-Arbeiten th.exit.wait(0.5)

daemon
exit
func
ioname
iovalue
run()[source]

Ruft die registrierte Funktion auf.

stop()[source]

Setzt das exit-Event mit dem die Funktion beendet werden kann.

class revpimodio2.helper.ProcimgWriter(parentmodio)[source]

Bases: Thread

Klasse fuer Synchroniseriungs-Thread.

Diese Klasse wird als Thread gestartet, wenn das Prozessabbild zyklisch synchronisiert werden soll. Diese Funktion wird hauptsaechlich fuer das Event-Handling verwendet.

daemon
get_refresh() → int[source]

Gibt Zykluszeit zurueck.

Returns:

<class ‘int’> Zykluszeit in Millisekunden

lck_refresh
newdata
property refresh: int

Gibt Zykluszeit zurueck.

Returns:

<class ‘int’> Zykluszeit in Millisekunden

run()[source]

Startet die automatische Prozessabbildsynchronisierung.

set_refresh(value)[source]

Setzt die Zykluszeit in Millisekunden. @param value <class ‘int’> Millisekunden

stop()[source]

Beendet die automatische Prozessabbildsynchronisierung.

revpimodio2.io module

RevPiModIO Modul fuer die Verwaltung der IOs.

class revpimodio2.io.DeadIO(deadio)[source]

Bases: object

Klasse, mit der ersetzte IOs verwaltet werden.

replace_io(name: str, frm: str, **kwargs) → None[source]

Stellt Funktion fuer weiter Bit-Ersetzungen bereit.

Ref:

:func:IntIOReplaceable.replace_io()

class revpimodio2.io.IOBase(parentdevice, valuelist: list, iotype: int, byteorder: str, signed: bool)[source]

Bases: object

Basisklasse fuer alle IO-Objekte.

Die Basisfunktionalitaet ermoeglicht das Lesen und Schreiben der Werte als <class bytes’> oder <class ‘bool’>. Dies entscheidet sich bei der Instantiierung. Wenn eine Bittadresse angegeben wird, werden <class ‘bool’>-Werte erwartet und zurueckgegeben, ansonsten <class bytes’>.

Diese Klasse dient als Basis fuer andere IO-Klassen mit denen die Werte auch als <class ‘int’> verwendet werden koennen.

property address: int

Gibt die absolute Byteadresse im Prozessabbild zurueck.

Returns:

Absolute Byteadresse

bmk
property byteorder: str

Gibt konfigurierte Byteorder zurueck.

Returns:

<class ‘str’> Byteorder

property defaultvalue

Gibt die Defaultvalue von piCtory zurueck.

Returns:

Defaultvalue als <class ‘byte’> oder <class ‘bool’>

property export: bool

Return value of export flag.

get_defaultvalue()[source]

Gibt die Defaultvalue von piCtory zurueck.

Returns:

Defaultvalue als <class ‘byte’> oder <class ‘bool’>

get_value()[source]

Gibt den Wert des IOs zurueck.

Returns:

IO-Wert als <class ‘bytes’> oder <class ‘bool’>

property length

Gibt die Bytelaenge des IO zurueck.

Returns:

Bytelaenge des IO - 0 bei BITs

property name

<class ‘str’>-Wert der Klasse.

Returns:

Namen des IOs

reg_event(func, delay=0, edge=33, as_thread=False, prefire=False)[source]

Registriert fuer IO ein Event bei der Eventueberwachung.

Die uebergebene Funktion wird ausgefuehrt, wenn sich der IO Wert aendert. Mit Angabe von optionalen Parametern kann das Ausloeseverhalten gesteuert werden.

HINWEIS: Die delay-Zeit muss in die .cycletime passen, ist dies nicht der Fall, wird IMMER aufgerundet!

Parameters:
  • func – Funktion die bei Aenderung aufgerufen werden soll

  • delay – Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt

  • edge – Ausfuehren bei RISING, FALLING or BOTH Wertaenderung

  • as_thread – Bei True, Funktion als EventCallback-Thread ausfuehren

  • prefire – Ausloesen mit aktuellem Wert, wenn mainloop startet

reg_timerevent(func, delay, edge=33, as_thread=False, prefire=False)[source]

Registriert fuer IO einen Timer, welcher nach delay func ausfuehrt.

Der Timer wird gestartet, wenn sich der IO Wert aendert und fuehrt die uebergebene Funktion aus - auch wenn sich der IO Wert in der zwischenzeit geaendert hat. Sollte der Timer nicht abelaufen sein und die Bedingugn erneut zutreffen, wird der Timer NICHT auf den delay Wert zurueckgesetzt oder ein zweites Mal gestartet. Fuer dieses Verhalten kann .reg_event(…, delay=wert) verwendet werden.

HINWEIS: Die delay-Zeit muss in die .cycletime passen, ist dies nicht der Fall, wird IMMER aufgerundet!

Parameters:
  • func – Funktion die bei Aenderung aufgerufen werden soll

  • delay – Verzoegerung in ms zum Ausloesen - auch bei Wertaenderung

  • edge – Ausfuehren bei RISING, FALLING or BOTH Wertaenderung

  • as_thread – Bei True, Funktion als EventCallback-Thread ausfuehren

  • prefire – Ausloesen mit aktuellem Wert, wenn mainloop startet

set_value(value) → None[source]

Setzt den Wert des IOs.

Parameters:

value – IO-Wert als <class bytes’> oder <class ‘bool’>

property type: int

Gibt io type zurueck.

Returns:

<class ‘int’> io type

unreg_event(func=None, edge=None) → None[source]

Entfernt ein Event aus der Eventueberwachung.

Parameters:
  • func – Nur Events mit angegebener Funktion

  • edge – Nur Events mit angegebener Funktion und angegebener Edge

property value

Gibt den Wert des IOs zurueck.

Returns:

IO-Wert als <class ‘bytes’> oder <class ‘bool’>

wait(edge=33, exitevent=None, okvalue=None, timeout=0) → int[source]

Wartet auf Wertaenderung eines IOs.

Die Wertaenderung wird immer uerberprueft, wenn fuer Devices mit aktiviertem autorefresh neue Daten gelesen wurden.

Bei Wertaenderung, wird das Warten mit 0 als Rueckgabewert beendet.

HINWEIS: Wenn <class ‘ProcimgWriter’> keine neuen Daten liefert, wird bis in die Ewigkeit gewartet (nicht bei Angabe von “timeout”).

Wenn edge mit RISING oder FALLING angegeben wird, muss diese Flanke ausgeloest werden. Sollte der Wert 1 sein beim Eintritt mit Flanke RISING, wird das Warten erst bei Aenderung von 0 auf 1 beendet.

Als exitevent kann ein <class ‘threading.Event’>-Objekt uebergeben werden, welches das Warten bei is_set() sofort mit 1 als Rueckgabewert beendet.

Wenn der Wert okvalue an dem IO fuer das Warten anliegt, wird das Warten sofort mit -1 als Rueckgabewert beendet.

Der Timeoutwert bricht beim Erreichen das Warten sofort mit Wert 2 Rueckgabewert ab. (Das Timeout wird ueber die Zykluszeit der autorefresh Funktion berechnet, entspricht also nicht exakt den angegeben Millisekunden! Es wird immer nach oben gerundet!)

Parameters:
  • edge – Flanke RISING, FALLING, BOTH die eintreten muss

  • exitevent – <class ‘thrading.Event’> fuer vorzeitiges Beenden

  • okvalue – IO-Wert, bei dem das Warten sofort beendet wird

  • timeout – Zeit in ms nach der abgebrochen wird

Returns:

<class ‘int’> erfolgreich Werte <= 0

  • Erfolgreich gewartet
    • Wert 0: IO hat den Wert gewechselt

    • Wert -1: okvalue stimmte mit IO ueberein

  • Fehlerhaft gewartet
    • Wert 1: exitevent wurde gesetzt

    • Wert 2: timeout abgelaufen

    • Wert 100: Devicelist.exit() wurde aufgerufen

class revpimodio2.io.IOEvent(func, edge, as_thread, delay, overwrite, prefire)[source]

Bases: object

Basisklasse fuer IO-Events.

as_thread
delay
edge
func
overwrite
prefire
class revpimodio2.io.IOList(modio)[source]

Bases: object

Basisklasse fuer direkten Zugriff auf IO Objekte.

class revpimodio2.io.IntIO(parentdevice, valuelist: list, iotype: int, byteorder: str, signed: bool)[source]

Bases: IOBase

Klasse fuer den Zugriff auf die Daten mit Konvertierung in int.

Diese Klasse erweitert die Funktion von <class ‘IOBase’> um Funktionen, ueber die mit <class ‘int’> Werten gearbeitet werden kann. Fuer die Umwandlung koennen ‘Byteorder’ (Default ‘little’) und ‘signed’ (Default False) als Parameter gesetzt werden.

Ref:

IOBase

property byteorder: str

Gibt konfigurierte Byteorder zurueck.

Returns:

<class ‘str’> Byteorder

property defaultvalue: int

Gibt die Defaultvalue als <class ‘int’> zurueck.

Returns:

<class ‘int’> Defaultvalue

get_intdefaultvalue() → int[source]

Gibt die Defaultvalue als <class ‘int’> zurueck.

Returns:

<class ‘int’> Defaultvalue

get_intvalue() → int[source]

Gibt IO-Wert zurueck mit Beachtung byteorder/signed.

Returns:

IO-Wert als <class ‘int’>

set_intvalue(value: int) → None[source]

Setzt IO mit Beachtung byteorder/signed.

Parameters:

value – <class ‘int’> Wert

property signed: bool

Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.

Returns:

True, wenn Vorzeichenbehaftet

property value: int

Gibt IO-Wert zurueck mit Beachtung byteorder/signed.

Returns:

IO-Wert als <class ‘int’>

class revpimodio2.io.IntIOCounter(counter_id, parentdevice, valuelist, iotype, byteorder, signed)[source]

Bases: IntIO

Erweitert die IntIO-Klasse um die .reset() Funktion fuer Counter.

reset() → None[source]

Setzt den Counter des Inputs zurueck.

class revpimodio2.io.IntIOReplaceable(parentdevice, valuelist: list, iotype: int, byteorder: str, signed: bool)[source]

Bases: IntIO

Erweitert die IntIO-Klasse um die .replace_io Funktion.

replace_io(name: str, frm: str, **kwargs) → None[source]

Ersetzt bestehenden IO mit Neuem.

Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden, uebernimmt das System die Daten aus dem ersetzten IO.

Es darf nur ein einzelnes Formatzeichen ‘frm’ uebergeben werden. Daraus wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp festgelegt. Moeglich sind: - Bits / Bytes: ?, c, s - Integer : bB, hH, iI, lL, qQ - Float : e, f, d

Eine Ausnahme ist die Formatierung ‘s’. Hier koennen mehrere Bytes zu einem langen IO zusammengefasst werden. Die Formatierung muss ‘8s’ fuer z.B. 8 Bytes sein - NICHT ‘ssssssss’!

Wenn durch die Formatierung mehr Bytes benoetigt werden, als der urspruenglige IO hat, werden die nachfolgenden IOs ebenfalls verwendet und entfernt.

Parameters:
  • name – Name des neuen Inputs

  • frm – struct formatierung (1 Zeichen) oder ‘ANZAHLs’ z.B. ‘8s’

  • kwargs – Weitere Parameter

  • bmk: interne Bezeichnung fuer IO

  • bit: Registriert IO als <class ‘bool’> am angegebenen Bit im Byte

  • byteorder: Byteorder fuer den IO, Standardwert=little

  • wordorder: Wordorder wird vor byteorder angewendet

  • defaultvalue: Standardwert fuer IO

  • event: Funktion fuer Eventhandling registrieren

  • delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt

  • edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung

  • as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus

  • prefire: Ausloesen mit aktuellem Wert, wenn mainloop startet

https://docs.python.org/3/library/struct.html#format-characters

class revpimodio2.io.IntRelaisOutput(parentdevice, valuelist, iotype, byteorder, signed)[source]

Bases: IntIO, RelaisOutput

Class for relais outputs to access the cycle counters.

This class combines the function of <class ‘IntIO’> and <class ‘RelaisOutput’> to add the function ‘get_cycles’ and the property ‘cycles’ to retrieve the relay cycle counters.

Since both classes inherit from BaseIO, both __init__ functions are called and the logic is combined. In this case, there is only one ‘self’ object of IOBase, which of both classes in inheritance is extended with this.

Ref:

IOBase

class revpimodio2.io.MemIO(parentdevice, valuelist: list, iotype: int, byteorder: str, signed: bool)[source]

Bases: IOBase

Erstellt einen IO für die Memory Werte in piCtory.

Dieser Typ ist nur für lesenden Zugriff vorgesehen und kann verschiedene Datentypen über .value zurückgeben. Damit hat man nun auch Zugriff auf Strings, welche in piCtory vergeben werden.

bmk
property defaultvalue

Gibt die Defaultvalue von piCtory zurueck.

Returns:

Defaultvalue als <class ‘byte’> oder <class ‘bool’>

get_variantvalue()[source]
property value

Gibt den Wert des IOs zurueck.

Returns:

IO-Wert als <class ‘bytes’> oder <class ‘bool’>

class revpimodio2.io.RelaisOutput(parentdevice, valuelist, iotype, byteorder, signed)[source]

Bases: IOBase

Class for relais outputs to access the cycle counters.

This class extends the function of <class ‘IOBase’> to the function ‘get_cycles’ and the property ‘cycles’ to retrieve the relay cycle counters.

Ref:

IOBase

bmk
get_switching_cycles()[source]

Get the number of switching cycles from this relay.

If each relay output is represented as BOOL, this function returns a single integer value. If all relays are displayed as a BYTE, this function returns a tuple that contains the values of all relay outputs. The setting is determined by PiCtory and the selected output variant by the RO device.

This function is only available locally on a Revolution Pi. This function cannot be used via RevPiNetIO.

Returns:

Integer of switching cycles as single value or tuple of all

property switching_cycles

Get the number of switching cycles from this relay.

If each relay output is represented as BOOL, this function returns a single integer value. If all relays are displayed as a BYTE, this function returns a tuple that contains the values of all relay outputs. The setting is determined by PiCtory and the selected output variant by the RO device.

This function is only available locally on a Revolution Pi. This function cannot be used via RevPiNetIO.

Returns:

Integer of switching cycles as single value or tuple of all

class revpimodio2.io.StructIO(parentio, name: str, frm: str, **kwargs)[source]

Bases: IOBase

Klasse fuer den Zugriff auf Daten ueber ein definierten struct.

Sie stellt ueber struct die Werte in der gewuenschten Formatierung bereit. Der struct-Formatwert wird bei der Instantiierung festgelegt.

property defaultvalue

Gibt die Defaultvalue mit struct Formatierung zurueck.

Returns:

Defaultvalue vom Typ der struct-Formatierung

property frm: str

Ruft die struct Formatierung ab.

Returns:

struct Formatierung

get_structdefaultvalue()[source]

Gibt die Defaultvalue mit struct Formatierung zurueck.

Returns:

Defaultvalue vom Typ der struct-Formatierung

get_structvalue()[source]

Gibt den Wert mit struct Formatierung zurueck.

Returns:

Wert vom Typ der struct-Formatierung

get_wordorder() → str[source]

Gibt die wordorder für diesen IO zurück.

Returns:

“little”, “big” or “ignored”

set_structvalue(value)[source]

Setzt den Wert mit struct Formatierung.

Parameters:

value – Wert vom Typ der struct-Formatierung

property signed: bool

Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.

Returns:

True, wenn Vorzeichenbehaftet

property value

Gibt den Wert mit struct Formatierung zurueck.

Returns:

Wert vom Typ der struct-Formatierung

property wordorder: str

Gibt die wordorder für diesen IO zurück.

Returns:

“little”, “big” or “ignored”

revpimodio2.modio module

RevPiModIO Hauptklasse fuer piControl0 Zugriff.

class revpimodio2.modio.DevSelect(device_type='', search_key: str = None, search_values=())[source]

Bases: object

other_device_key
type
values
class revpimodio2.modio.RevPiModIO(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: object

Klasse fuer die Verwaltung der piCtory Konfiguration.

Diese Klasse uebernimmt die gesamte Konfiguration aus piCtory und laedt die Devices und IOs. 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.

app
autorefresh_all() → None[source]

Setzt alle Devices in autorefresh Funktion.

cleanup() → None[source]

Beendet autorefresh und alle Threads.

property configrsc: str

Getter function.

Returns:

Pfad der verwendeten piCtory Konfiguration

core
cycleloop(func, cycletime=50, blocking=True)[source]

Startet den Cycleloop.

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.

Verlassen wird der Cycleloop, wenn die aufgerufene Funktion einen Rueckgabewert nicht gleich None liefert (z.B. return True), oder durch Aufruf von .exit().

HINWEIS: Die Aktualisierungszeit und die Laufzeit der Funktion duerfen die eingestellte autorefresh Zeit, bzw. uebergebene cycletime nicht ueberschreiten!

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.

Parameters:
  • func – Funktion, die ausgefuehrt werden soll

  • cycletime – Zykluszeit in Millisekunden - Standardwert 50 ms

  • blocking – Wenn False, blockiert das Programm hier NICHT

Returns:

None or the return value of the cycle function

property cycletime: int

Gibt Aktualisierungsrate in ms der Prozessabbildsynchronisierung aus.

Returns:

Millisekunden

property debug: bool

Gibt Status des Debugflags zurueck.

Returns:

Status des Debugflags

device
exit(full=True) → None[source]

Beendet mainloop() und optional autorefresh.

Wenn sich das Programm im mainloop() befindet, wird durch Aufruf von exit() die Kontrolle wieder an das Hauptprogramm zurueckgegeben.

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.

Parameters:

full – Entfernt auch alle Devices aus autorefresh

exitsignal
export_replaced_ios(filename='replace_ios.conf') → None[source]

Exportiert ersetzte IOs dieser Instanz.

Exportiert alle ersetzten IOs, welche mit .replace_io(…) angelegt wurden. Die Datei kann z.B. fuer RevPiPyLoad verwendet werden um Daten in den neuen Formaten per MQTT zu uebertragen oder mit RevPiPyControl anzusehen.

@param filename Dateiname fuer Exportdatei

get_jconfigrsc() → dict[source]

Laedt die piCtory Konfiguration und erstellt ein <class ‘dict’>.

Returns:

<class ‘dict’> der piCtory Konfiguration

handlesignalend(cleanupfunc=None) → None[source]

Signalhandler fuer Programmende verwalten.

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.

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.

Nach einmaligem Empfangen eines der Signale und dem Beenden der RevPiModIO Thrads / Funktionen werden die SignalHandler wieder freigegeben.

Parameters:

cleanupfunc – Funktion wird nach dem Beenden ausgefuehrt

io
property ioerrors: int

Getter function.

Returns:

Aktuelle Anzahl gezaehlter Fehler

property length: int

Getter function.

Returns:

Laenge in Bytes der Devices

mainloop(blocking=True) → None[source]

Startet den Mainloop mit Eventueberwachung.

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.

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.

Parameters:

blocking – Wenn False, blockiert das Programm hier NICHT

property maxioerrors: int

Getter function.

Returns:

Anzahl erlaubte Fehler

property monitoring: bool

Getter function.

Returns:

True, wenn als Monitoring gestartet

property procimg: str

Getter function.

Returns:

Pfad des verwendeten Prozessabbilds

readprocimg(device=None) → bool[source]

Einlesen aller Inputs aller/eines Devices vom Prozessabbild.

Devices mit aktiverem autorefresh werden ausgenommen!

Parameters:

device – nur auf einzelnes Device anwenden

Returns:

True, wenn Arbeiten an allen Devices erfolgreich waren

property replace_io_file: str

Gibt Pfad zur verwendeten replace IO Datei aus.

Returns:

Pfad zur replace IO Datei

resetioerrors() → None[source]

Setzt aktuellen IOError-Zaehler auf 0 zurueck.

setdefaultvalues(device=None) → None[source]

Alle Outputbuffer werden auf die piCtory default Werte gesetzt.

Parameters:

device – nur auf einzelnes Device anwenden

property simulator: bool

Getter function.

Returns:

True, wenn als Simulator gestartet

summary
syncoutputs(device=None) → bool[source]

Lesen aller aktuell gesetzten Outputs im Prozessabbild.

Devices mit aktiverem autorefresh werden ausgenommen!

Parameters:

device – nur auf einzelnes Device anwenden

Returns:

True, wenn Arbeiten an allen Devices erfolgreich waren

writeprocimg(device=None) → bool[source]

Schreiben aller Outputs aller Devices ins Prozessabbild.

Devices mit aktiverem autorefresh werden ausgenommen!

Parameters:

device – nur auf einzelnes Device anwenden

Returns:

True, wenn Arbeiten an allen Devices erfolgreich waren

class revpimodio2.modio.RevPiModIODriver(virtdev, autorefresh=False, syncoutputs=True, procimg=None, configrsc=None, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiModIOSelected

Klasse um eigene Treiber fuer die virtuellen Devices zu erstellen.

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.

class revpimodio2.modio.RevPiModIOSelected(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiModIO

Klasse fuer die Verwaltung einzelner Devices aus piCtory.

Diese Klasse uebernimmt nur angegebene Devices der piCtory Konfiguration und bildet 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.

revpimodio2.modio.run_plc(func, cycletime=50, replace_io_file=None, debug=True, procimg=None, configrsc=None)[source]

Run Revoluton Pi as real plc with cycle loop and exclusive IO access.

This function is just a shortcut to run the module in cycle loop mode and handle the program exit signal. You will access the .io, .core, .device via the cycletools in your cycle function.

Shortcut for this source code:

rpi = RevPiModIO(autorefresh=True, replace_io_file=…, debug=…) rpi.handlesignalend() return rpi.cycleloop(func, cycletime)

Parameters:
  • func – Function to run every set milliseconds

  • cycletime – Cycle time in milliseconds

  • replace_io_file – Load replace IO configuration from file

  • debug – Print all warnings and detailed error messages

  • procimg – Use different process image

  • configrsc – Use different piCtory configuration

Returns:

None or the return value of the cycle function

revpimodio2.netio module

RevPiModIO Hauptklasse fuer Netzwerkzugriff.

exception revpimodio2.netio.AclException[source]

Bases: Exception

Probleme mit Berechtigungen.

exception revpimodio2.netio.ConfigChanged[source]

Bases: Exception

Aenderung der piCtory oder replace_ios Datei.

class revpimodio2.netio.NetFH(address: tuple, check_replace_ios: bool, timeout=500)[source]

Bases: Thread

Netzwerk File Handler fuer das Prozessabbild.

Dieses FileObject-like Object verwaltet das Lesen und Schriben des Prozessabbilds ueber das Netzwerk. Ein entfernter Revolution Pi kann so gesteuert werden.

clear_dirtybytes(position=None) → None[source]

Entfernt die konfigurierten Dirtybytes vom RevPi Server.

Diese Funktion wirft keine Exception bei einem uebertragungsfehler, veranlasst aber eine Neuverbindung.

Parameters:

position – Startposition der Dirtybytes

close() → None[source]

Verbindung trennen.

property closed: bool

Pruefen ob Verbindung geschlossen ist.

Returns:

True, wenn Verbindung geschlossen ist

property config_changed: bool

Pruefen ob RevPi Konfiguration geaendert wurde.

Returns:

True, wenn RevPi Konfiguration geaendert ist

daemon
flush() → None[source]

Schreibpuffer senden.

get_closed() → bool[source]

Pruefen ob Verbindung geschlossen ist.

Returns:

True, wenn Verbindung geschlossen ist

get_config_changed() → bool[source]

Pruefen ob RevPi Konfiguration geaendert wurde.

Returns:

True, wenn RevPi Konfiguration geaendert ist

get_name() → str[source]

Verbindugnsnamen zurueckgeben.

Returns:

<class ‘str’> IP:PORT

get_reconnecting() → bool[source]

Interner reconnect aktiv wegen Netzwerkfehlern.

Returns:

True, wenn reconnect aktiv

get_timeout() → int[source]

Gibt aktuellen Timeout zurueck.

Returns:

<class ‘int’> in Millisekunden

ioctl(request: int, arg=b'') → None[source]

IOCTL Befehle ueber das Netzwerk senden.

Parameters:
  • request – Request as <class ‘int’>

  • arg – Argument as <class ‘byte’>

property name: str

Verbindugnsnamen zurueckgeben.

Returns:

<class ‘str’> IP:PORT

read(length: int) → bytes[source]

Daten ueber das Netzwerk lesen.

Parameters:

length – Anzahl der Bytes

Returns:

Gelesene <class ‘bytes’>

readinto(buffer: bytearray) → int[source]

Read data from network into a buffer.

Parameters:

buffer – Use Buffer to write bytes into

Returns:

Amount of read bytes

readpictory() → bytes[source]

Ruft die piCtory Konfiguration ab.

Returns:

<class ‘bytes’> piCtory Datei

readreplaceio() → bytes[source]

Ruft die replace_io Konfiguration ab.

Returns:

<class ‘bytes’> replace_io_file

property reconnecting: bool

Interner reconnect aktiv wegen Netzwerkfehlern.

Returns:

True, wenn reconnect aktiv

run() → None[source]

Handler fuer Synchronisierung.

seek(position: int) → None[source]

Springt an angegebene Position. @param position An diese Position springen

set_dirtybytes(position: int, dirtybytes: bytes) → None[source]

Konfiguriert Dirtybytes fuer Prozessabbild bei Verbindungsfehler.

Diese Funktion wirft keine Exception bei einem uebertragungsfehler, veranlasst aber eine Neuverbindung.

Parameters:
  • position – Startposition zum Schreiben

  • dirtybytes – <class ‘bytes’> die geschrieben werden sollen

set_timeout(value: int) → None[source]

Setzt Timeoutwert fuer Verbindung.

Parameters:

value – Timeout in Millisekunden

tell() → int[source]

Gibt aktuelle Position zurueck.

Returns:

Aktuelle Position

property timeout: int

Gibt aktuellen Timeout zurueck.

Returns:

<class ‘int’> in Millisekunden

write(bytebuff: bytes) → int[source]

Daten ueber das Netzwerk schreiben.

Parameters:

bytebuff – Bytes zum schreiben

Returns:

<class ‘int’> Anzahl geschriebener bytes

class revpimodio2.netio.RevPiNetIO(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiModIO

Klasse fuer die Verwaltung der piCtory Konfiguration ueber das Netzwerk.

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.

property config_changed: bool

Pruefen ob RevPi Konfiguration geaendert wurde.

In diesem Fall ist die Verbindung geschlossen und RevPiNetIO muss neu instanziert werden.

Returns:

True, wenn RevPi Konfiguration geaendert ist

disconnect() → None[source]

Trennt Verbindungen und beendet autorefresh inkl. alle Threads.

exit(full=True) → None[source]

Beendet mainloop() und optional autorefresh.

Ref:

RevPiModIO.exit()

get_config_changed() → bool[source]

Pruefen ob RevPi Konfiguration geaendert wurde.

In diesem Fall ist die Verbindung geschlossen und RevPiNetIO muss neu instanziert werden.

Returns:

True, wenn RevPi Konfiguration geaendert ist

get_jconfigrsc() → dict[source]

Laedt die piCotry Konfiguration und erstellt ein <class ‘dict’>.

Returns:

<class ‘dict’> der piCtory Konfiguration

get_reconnecting() → bool[source]

Interner reconnect aktiv wegen Netzwerkfehlern.

Das Modul versucht intern die Verbindung neu herzustellen. Es ist kein weiteres Zutun noetig.

Returns:

True, wenn reconnect aktiv

net_cleardefaultvalues(device=None) → None[source]

Loescht Defaultwerte vom PLC Server.

Parameters:

device – nur auf einzelnes Device anwenden, sonst auf Alle

net_setdefaultvalues(device=None) → None[source]

Konfiguriert den PLC Server mit den piCtory Defaultwerten.

Diese Werte werden auf dem RevPi gesetzt, wenn die Verbindung unerwartet (Netzwerkfehler) unterbrochen wird.

Parameters:

device – nur auf einzelnes Device anwenden, sonst auf Alle

property reconnecting: bool

Interner reconnect aktiv wegen Netzwerkfehlern.

Das Modul versucht intern die Verbindung neu herzustellen. Es ist kein weiteres Zutun noetig.

Returns:

True, wenn reconnect aktiv

class revpimodio2.netio.RevPiNetIODriver(address, virtdev, autorefresh=False, syncoutputs=True, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiNetIOSelected

Klasse um eigene Treiber fuer die virtuellen Devices zu erstellen.

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.

class revpimodio2.netio.RevPiNetIOSelected(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiNetIO

Klasse fuer die Verwaltung einzelner Devices aus piCtory.

Diese Klasse uebernimmt nur angegebene Devices der piCtory Konfiguration und bildet 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.

revpimodio2.netio.run_net_plc(address, func, cycletime=50, replace_io_file=None, debug=True)[source]

Run Revoluton Pi as real plc with cycle loop and exclusive IO access.

This function is just a shortcut to run the module in cycle loop mode and handle the program exit signal. You will access the .io, .core, .device via the cycletools in your cycle function.

Shortcut for this source code:

rpi = RevPiModIO(autorefresh=True, replace_io_file=…, debug=…) rpi.handlesignalend() return rpi.cycleloop(func, cycletime)

Parameters:
  • address – IP-Adresse <class ‘str’> / (IP, Port) <class ‘tuple’>

  • func – Function to run every set milliseconds

  • cycletime – Cycle time in milliseconds

  • replace_io_file – Load replace IO configuration from file

  • debug – Print all warnings and detailed error messages

Returns:

None or the return value of the cycle function

revpimodio2.pictory module

Pictory aliases for IO values.

class revpimodio2.pictory.AIO[source]

Bases: object

Memory value mappings for RevPi AIO 1.0 (RevPiAIO_20170301_1_0.rap).

ADC_DATARATE_10HZ = 1
ADC_DATARATE_160HZ = 5
ADC_DATARATE_20HZ = 2
ADC_DATARATE_320HZ = 6
ADC_DATARATE_40HZ = 3
ADC_DATARATE_5HZ = 0
ADC_DATARATE_640HZ = 7
ADC_DATARATE_80HZ = 4
IN_RANGE_0_10V = 2
IN_RANGE_0_20MA = 5
IN_RANGE_0_24MA = 6
IN_RANGE_0_5V = 3
IN_RANGE_4_20MA = 7
IN_RANGE_N10V_10V = 1
IN_RANGE_N25_25MA = 8
IN_RANGE_N5_5V = 4
OUT_RANGE_0_10V = 2
OUT_RANGE_0_11V = 6
OUT_RANGE_0_20MA = 10
OUT_RANGE_0_24MA = 11
OUT_RANGE_0_5P5V = 5
OUT_RANGE_0_5V = 1
OUT_RANGE_4_20MA = 9
OUT_RANGE_N10_10V = 4
OUT_RANGE_N11_11V = 8
OUT_RANGE_N5P5_5P5V = 7
OUT_RANGE_N5_5V = 3
OUT_RANGE_OFF = 0
OUT_SLEW_CLOCK_10_KZH = 10
OUT_SLEW_CLOCK_116_KZH = 4
OUT_SLEW_CLOCK_131_KZH = 3
OUT_SLEW_CLOCK_154_KZH = 2
OUT_SLEW_CLOCK_16_KZH = 9
OUT_SLEW_CLOCK_200_KZH = 1
OUT_SLEW_CLOCK_20_KZH = 8
OUT_SLEW_CLOCK_258_KZH = 0
OUT_SLEW_CLOCK_26_KZH = 7
OUT_SLEW_CLOCK_38_KZH = 6
OUT_SLEW_CLOCK_3P3_KZH = 15
OUT_SLEW_CLOCK_4P2_KZH = 14
OUT_SLEW_CLOCK_5P5_KZH = 13
OUT_SLEW_CLOCK_6P9_KZH = 12
OUT_SLEW_CLOCK_70_KZH = 5
OUT_SLEW_CLOCK_8P3_KZH = 11
OUT_SLEW_OFF = 0
OUT_SLEW_ON = 1
OUT_SLEW_STEP_SIZE_128LSB = 7
OUT_SLEW_STEP_SIZE_16LSB = 4
OUT_SLEW_STEP_SIZE_1LSB = 0
OUT_SLEW_STEP_SIZE_2LSB = 1
OUT_SLEW_STEP_SIZE_32LSB = 5
OUT_SLEW_STEP_SIZE_4LSB = 2
OUT_SLEW_STEP_SIZE_64LSB = 6
OUT_SLEW_STEP_SIZE_8LSB = 3
RTD_2_WIRE = 2
RTD_3_WIRE = 0
RTD_4_WIRE = 1
RTD_TYPE_PT100 = 0
RTD_TYPE_PT1000 = 1
class revpimodio2.pictory.COMPACT[source]

Bases: object

Memory value mappings for RevPi Compact 1.0 (RevPiCompact_20171023_1_0.rap).

AIN_MODE_0_10V = 1
AIN_MODE_OFF = 0
AIN_MODE_PT100 = 3
AIN_MODE_PT1000 = 7
DIN_DEBOUNCE_25US = 1
DIN_DEBOUNCE_3MS = 3
DIN_DEBOUNCE_750US = 2
DIN_DEBOUNCE_OFF = 0
class revpimodio2.pictory.DI[source]

Bases: object

Memory value mappings for RevPi DI 1.0 (RevPiDI_20160818_1_0.rap).

IN_DEBOUNCE_25US = 1
IN_DEBOUNCE_3MS = 3
IN_DEBOUNCE_750US = 2
IN_DEBOUNCE_OFF = 0
IN_MODE_COUNT_FALLING = 2
IN_MODE_COUNT_RISING = 1
IN_MODE_DIRECT = 0
IN_MODE_ENCODER = 3
class revpimodio2.pictory.DIO[source]

Bases: DI, DO

Memory value mappings for RevPi DIO 1.0 (RevPiDIO_20160818_1_0.rap).

class revpimodio2.pictory.DO[source]

Bases: object

Memory value mappings for RevPi DO 1.0 (RevPiDO_20160818_1_0.rap).

OUT_PWM_FREQ_160HZ = 4
OUT_PWM_FREQ_200HZ = 5
OUT_PWM_FREQ_400HZ = 10
OUT_PWM_FREQ_40HZ = 1
OUT_PWM_FREQ_80HZ = 2
class revpimodio2.pictory.DeviceType[source]

Bases: object

Module key “type” in piCtory file.

BASE = 'BASE'
EDGE = 'EDGE'
IGNORED = ''
LEFT_RIGHT = 'LEFT_RIGHT'
RIGHT = 'RIGHT'
VIRTUAL = 'VIRTUAL'
class revpimodio2.pictory.FLAT[source]

Bases: object

Memory value mappings for RevPi Flat 1.0 (RevPiFlat_20200921_1_0.rap).

IN_RANGE_0_10V = 0
IN_RANGE_4_20MA = 1
class revpimodio2.pictory.MIO[source]

Bases: object

Memory value mappings for RevPi MIO 1.0 (RevPiMIO_20200901_1_0.rap).

AI_MODE_ANALOG_INPUT = 0
AI_MODE_LOGIC_LEVEL_INPUT = 1
AO_MODE_ANALOG_OUTPUT = 0
AO_MODE_LOGIC_LEVEL_OUTPUT = 1
ENCODER_MODE_DISABLED = 0
ENCODER_MODE_ENABLED = 1
IO_MODE_DIGITAL_IN = 0
IO_MODE_DIGITAL_OUT = 3
IO_MODE_PULSE_IN = 1
IO_MODE_PULSE_OUT = 4
IO_MODE_PWM_IN = 2
IO_MODE_PWM_OUT = 5
class revpimodio2.pictory.ProductType[source]

Bases: object

AIO = 103
CON_BT = 111
CON_CAN = 109
CON_MBUS = 110
DI = 97
DIO = 96
DO = 98
GATEWAY_CAN_OPEN = 71
GATEWAY_CAN_OPEN_MASTER = 80
GATEWAY_DEV_NET = 73
GATEWAY_DMX = 199
GATEWAY_ETHERCAT = 74
GATEWAY_ETHERCAT_MASTER = 85
GATEWAY_ETHERNET_IP = 75
GATEWAY_MODBUS_RTU = 92
GATEWAY_MODBUS_TCP = 83
GATEWAY_PROFIBUS = 77
GATEWAY_PROFINET_IRT = 79
GATEWAY_PROFINET_IRT_MASTER = 84
GATEWAY_PROFINET_RT = 78
GATEWAY_PROFINET_SITARA = 83
GATEWAY_SERCOS3 = 81
GATEWAY_SERIAL = 82
MIO = 118
REVPI_COMPACT = 104
REVPI_CONNECT = 105
REVPI_CONNECT_4 = 136
REVPI_CONNECT_5 = 138
REVPI_CORE = 95
REVPI_FLAT = 135
RO = 137
VIRTUAL_CLOUD = 24584
VIRTUAL_MODBUS_RTU_CLIENT = 24580
VIRTUAL_MODBUS_RTU_SERVER = 24578
VIRTUAL_MODBUS_TCP_CLIENT = 24579
VIRTUAL_MODBUS_TCP_SERVER = 24577
VIRTUAL_OPCUA_SERVER = 23001
VIRTUAL_PN_CONTROLLER = 24581
VIRTUAL_PN_DEVICE = 24582
VIRTUAL_RAW = 32768
VIRTUAL_REVPI_SEVEN = 24583
VIRTUAL_TIMER = 28673

revpimodio2.summary module

Bildet die Summary-Sektion von piCtory ab.

class revpimodio2.summary.Summary(summary: dict)[source]

Bases: object

Bildet die Summary-Sektion der config.rsc ab.

inptotal
outtotal

Module contents

Stellt alle Klassen fuer den RevolutionPi zur Verfuegung.

Webpage: https://revpimodio.org/

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.

class revpimodio2.AIO[source]

Bases: object

Memory value mappings for RevPi AIO 1.0 (RevPiAIO_20170301_1_0.rap).

ADC_DATARATE_10HZ = 1
ADC_DATARATE_160HZ = 5
ADC_DATARATE_20HZ = 2
ADC_DATARATE_320HZ = 6
ADC_DATARATE_40HZ = 3
ADC_DATARATE_5HZ = 0
ADC_DATARATE_640HZ = 7
ADC_DATARATE_80HZ = 4
IN_RANGE_0_10V = 2
IN_RANGE_0_20MA = 5
IN_RANGE_0_24MA = 6
IN_RANGE_0_5V = 3
IN_RANGE_4_20MA = 7
IN_RANGE_N10V_10V = 1
IN_RANGE_N25_25MA = 8
IN_RANGE_N5_5V = 4
OUT_RANGE_0_10V = 2
OUT_RANGE_0_11V = 6
OUT_RANGE_0_20MA = 10
OUT_RANGE_0_24MA = 11
OUT_RANGE_0_5P5V = 5
OUT_RANGE_0_5V = 1
OUT_RANGE_4_20MA = 9
OUT_RANGE_N10_10V = 4
OUT_RANGE_N11_11V = 8
OUT_RANGE_N5P5_5P5V = 7
OUT_RANGE_N5_5V = 3
OUT_RANGE_OFF = 0
OUT_SLEW_CLOCK_10_KZH = 10
OUT_SLEW_CLOCK_116_KZH = 4
OUT_SLEW_CLOCK_131_KZH = 3
OUT_SLEW_CLOCK_154_KZH = 2
OUT_SLEW_CLOCK_16_KZH = 9
OUT_SLEW_CLOCK_200_KZH = 1
OUT_SLEW_CLOCK_20_KZH = 8
OUT_SLEW_CLOCK_258_KZH = 0
OUT_SLEW_CLOCK_26_KZH = 7
OUT_SLEW_CLOCK_38_KZH = 6
OUT_SLEW_CLOCK_3P3_KZH = 15
OUT_SLEW_CLOCK_4P2_KZH = 14
OUT_SLEW_CLOCK_5P5_KZH = 13
OUT_SLEW_CLOCK_6P9_KZH = 12
OUT_SLEW_CLOCK_70_KZH = 5
OUT_SLEW_CLOCK_8P3_KZH = 11
OUT_SLEW_OFF = 0
OUT_SLEW_ON = 1
OUT_SLEW_STEP_SIZE_128LSB = 7
OUT_SLEW_STEP_SIZE_16LSB = 4
OUT_SLEW_STEP_SIZE_1LSB = 0
OUT_SLEW_STEP_SIZE_2LSB = 1
OUT_SLEW_STEP_SIZE_32LSB = 5
OUT_SLEW_STEP_SIZE_4LSB = 2
OUT_SLEW_STEP_SIZE_64LSB = 6
OUT_SLEW_STEP_SIZE_8LSB = 3
RTD_2_WIRE = 2
RTD_3_WIRE = 0
RTD_4_WIRE = 1
RTD_TYPE_PT100 = 0
RTD_TYPE_PT1000 = 1
class revpimodio2.COMPACT[source]

Bases: object

Memory value mappings for RevPi Compact 1.0 (RevPiCompact_20171023_1_0.rap).

AIN_MODE_0_10V = 1
AIN_MODE_OFF = 0
AIN_MODE_PT100 = 3
AIN_MODE_PT1000 = 7
DIN_DEBOUNCE_25US = 1
DIN_DEBOUNCE_3MS = 3
DIN_DEBOUNCE_750US = 2
DIN_DEBOUNCE_OFF = 0
class revpimodio2.Cycletools(cycletime, revpi_object)[source]

Bases: object

Werkzeugkasten fuer Cycleloop-Funktion.

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.

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.

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.

Diese Merker koennen z.B. verwendet werden um, an Outputs angeschlossene, Lampen synchron blinken zu lassen.

changed(io: IOBase, edge=33)[source]

Check change of IO value from last to this cycle.

It will always be False on the first use of this function with an IO object.

Parameters:
  • io – IO to check for changes to last cycle

  • edge – Check for rising or falling on bit io objects

Returns:

True, if IO value changed

core
device
first
flag10c
flag15c
flag1c
flag20c
flag5c
flank10c
flank15c
flank20c
flank5c
get_tof(name: str) → bool[source]

Wert der Ausschaltverzoegerung.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> der Ausschaltverzoegerung

get_tofc(name: str) → bool[source]

Wert der Ausschaltverzoegerung.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> der Ausschaltverzoegerung

get_ton(name: str) → bool[source]

Einschaltverzoegerung.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> der Einschaltverzoegerung

get_tonc(name: str) → bool[source]

Einschaltverzoegerung.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> der Einschaltverzoegerung

get_tp(name: str) → bool[source]

Impulstimer.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> des Impulses

get_tpc(name: str) → bool[source]

Impulstimer.

Parameters:

name – Eindeutiger Name des Timers

Returns:

Wert <class ‘bool’> des Impulses

io
last
property runtime: float

Runtime im milliseconds of cycle function till now.

This property will return the actual runtime of the function. So on the beginning of your function it will be about 0 and will rise during the runtime to the max in the last line of your function.

set_tof(name: str, milliseconds: int) → None[source]

Startet bei Aufruf einen ausschaltverzoegerten Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • milliseconds – Verzoegerung in Millisekunden

set_tofc(name: str, cycles: int) → None[source]

Startet bei Aufruf einen ausschaltverzoegerten Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • cycles – Zyklusanzahl, der Verzoegerung wenn nicht neu gestartet

set_ton(name: str, milliseconds: int) → None[source]

Startet einen einschaltverzoegerten Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • milliseconds – Millisekunden, der Verzoegerung wenn neu gestartet

set_tonc(name: str, cycles: int) → None[source]

Startet einen einschaltverzoegerten Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • cycles – Zyklusanzahl, der Verzoegerung wenn neu gestartet

set_tp(name: str, milliseconds: int) → None[source]

Startet einen Impuls Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • milliseconds – Millisekunden, die der Impuls anstehen soll

set_tpc(name: str, cycles: int) → None[source]

Startet einen Impuls Timer.

Parameters:
  • name – Eindeutiger Name fuer Zugriff auf Timer

  • cycles – Zyklusanzahl, die der Impuls anstehen soll

var
class revpimodio2.DI[source]

Bases: object

Memory value mappings for RevPi DI 1.0 (RevPiDI_20160818_1_0.rap).

IN_DEBOUNCE_25US = 1
IN_DEBOUNCE_3MS = 3
IN_DEBOUNCE_750US = 2
IN_DEBOUNCE_OFF = 0
IN_MODE_COUNT_FALLING = 2
IN_MODE_COUNT_RISING = 1
IN_MODE_DIRECT = 0
IN_MODE_ENCODER = 3
class revpimodio2.DIO[source]

Bases: DI, DO

Memory value mappings for RevPi DIO 1.0 (RevPiDIO_20160818_1_0.rap).

class revpimodio2.DO[source]

Bases: object

Memory value mappings for RevPi DO 1.0 (RevPiDO_20160818_1_0.rap).

OUT_PWM_FREQ_160HZ = 4
OUT_PWM_FREQ_200HZ = 5
OUT_PWM_FREQ_400HZ = 10
OUT_PWM_FREQ_40HZ = 1
OUT_PWM_FREQ_80HZ = 2
class revpimodio2.DeviceType[source]

Bases: object

Module key “type” in piCtory file.

BASE = 'BASE'
EDGE = 'EDGE'
IGNORED = ''
LEFT_RIGHT = 'LEFT_RIGHT'
RIGHT = 'RIGHT'
VIRTUAL = 'VIRTUAL'
class revpimodio2.EventCallback(func, name: str, value)[source]

Bases: Thread

Thread fuer das interne Aufrufen von Event-Funktionen.

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.

while not th.exit.is_set():

# IO-Arbeiten th.exit.wait(0.5)

daemon
exit
func
ioname
iovalue
run()[source]

Ruft die registrierte Funktion auf.

stop()[source]

Setzt das exit-Event mit dem die Funktion beendet werden kann.

class revpimodio2.FLAT[source]

Bases: object

Memory value mappings for RevPi Flat 1.0 (RevPiFlat_20200921_1_0.rap).

IN_RANGE_0_10V = 0
IN_RANGE_4_20MA = 1
class revpimodio2.IOEvent(func, edge, as_thread, delay, overwrite, prefire)[source]

Bases: object

Basisklasse fuer IO-Events.

as_thread
delay
edge
func
overwrite
prefire
class revpimodio2.MIO[source]

Bases: object

Memory value mappings for RevPi MIO 1.0 (RevPiMIO_20200901_1_0.rap).

AI_MODE_ANALOG_INPUT = 0
AI_MODE_LOGIC_LEVEL_INPUT = 1
AO_MODE_ANALOG_OUTPUT = 0
AO_MODE_LOGIC_LEVEL_OUTPUT = 1
ENCODER_MODE_DISABLED = 0
ENCODER_MODE_ENABLED = 1
IO_MODE_DIGITAL_IN = 0
IO_MODE_DIGITAL_OUT = 3
IO_MODE_PULSE_IN = 1
IO_MODE_PULSE_OUT = 4
IO_MODE_PWM_IN = 2
IO_MODE_PWM_OUT = 5
class revpimodio2.ProductType[source]

Bases: object

AIO = 103
CON_BT = 111
CON_CAN = 109
CON_MBUS = 110
DI = 97
DIO = 96
DO = 98
GATEWAY_CAN_OPEN = 71
GATEWAY_CAN_OPEN_MASTER = 80
GATEWAY_DEV_NET = 73
GATEWAY_DMX = 199
GATEWAY_ETHERCAT = 74
GATEWAY_ETHERCAT_MASTER = 85
GATEWAY_ETHERNET_IP = 75
GATEWAY_MODBUS_RTU = 92
GATEWAY_MODBUS_TCP = 83
GATEWAY_PROFIBUS = 77
GATEWAY_PROFINET_IRT = 79
GATEWAY_PROFINET_IRT_MASTER = 84
GATEWAY_PROFINET_RT = 78
GATEWAY_PROFINET_SITARA = 83
GATEWAY_SERCOS3 = 81
GATEWAY_SERIAL = 82
MIO = 118
REVPI_COMPACT = 104
REVPI_CONNECT = 105
REVPI_CONNECT_4 = 136
REVPI_CONNECT_5 = 138
REVPI_CORE = 95
REVPI_FLAT = 135
RO = 137
VIRTUAL_CLOUD = 24584
VIRTUAL_MODBUS_RTU_CLIENT = 24580
VIRTUAL_MODBUS_RTU_SERVER = 24578
VIRTUAL_MODBUS_TCP_CLIENT = 24579
VIRTUAL_MODBUS_TCP_SERVER = 24577
VIRTUAL_OPCUA_SERVER = 23001
VIRTUAL_PN_CONTROLLER = 24581
VIRTUAL_PN_DEVICE = 24582
VIRTUAL_RAW = 32768
VIRTUAL_REVPI_SEVEN = 24583
VIRTUAL_TIMER = 28673
class revpimodio2.RevPiModIO(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: object

Klasse fuer die Verwaltung der piCtory Konfiguration.

Diese Klasse uebernimmt die gesamte Konfiguration aus piCtory und laedt die Devices und IOs. 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.

app
autorefresh_all() → None[source]

Setzt alle Devices in autorefresh Funktion.

cleanup() → None[source]

Beendet autorefresh und alle Threads.

property configrsc: str

Getter function.

Returns:

Pfad der verwendeten piCtory Konfiguration

core
cycleloop(func, cycletime=50, blocking=True)[source]

Startet den Cycleloop.

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.

Verlassen wird der Cycleloop, wenn die aufgerufene Funktion einen Rueckgabewert nicht gleich None liefert (z.B. return True), oder durch Aufruf von .exit().

HINWEIS: Die Aktualisierungszeit und die Laufzeit der Funktion duerfen die eingestellte autorefresh Zeit, bzw. uebergebene cycletime nicht ueberschreiten!

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.

Parameters:
  • func – Funktion, die ausgefuehrt werden soll

  • cycletime – Zykluszeit in Millisekunden - Standardwert 50 ms

  • blocking – Wenn False, blockiert das Programm hier NICHT

Returns:

None or the return value of the cycle function

property cycletime: int

Gibt Aktualisierungsrate in ms der Prozessabbildsynchronisierung aus.

Returns:

Millisekunden

property debug: bool

Gibt Status des Debugflags zurueck.

Returns:

Status des Debugflags

device
exit(full=True) → None[source]

Beendet mainloop() und optional autorefresh.

Wenn sich das Programm im mainloop() befindet, wird durch Aufruf von exit() die Kontrolle wieder an das Hauptprogramm zurueckgegeben.

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.

Parameters:

full – Entfernt auch alle Devices aus autorefresh

exitsignal
export_replaced_ios(filename='replace_ios.conf') → None[source]

Exportiert ersetzte IOs dieser Instanz.

Exportiert alle ersetzten IOs, welche mit .replace_io(…) angelegt wurden. Die Datei kann z.B. fuer RevPiPyLoad verwendet werden um Daten in den neuen Formaten per MQTT zu uebertragen oder mit RevPiPyControl anzusehen.

@param filename Dateiname fuer Exportdatei

get_jconfigrsc() → dict[source]

Laedt die piCtory Konfiguration und erstellt ein <class ‘dict’>.

Returns:

<class ‘dict’> der piCtory Konfiguration

handlesignalend(cleanupfunc=None) → None[source]

Signalhandler fuer Programmende verwalten.

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.

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.

Nach einmaligem Empfangen eines der Signale und dem Beenden der RevPiModIO Thrads / Funktionen werden die SignalHandler wieder freigegeben.

Parameters:

cleanupfunc – Funktion wird nach dem Beenden ausgefuehrt

io
property ioerrors: int

Getter function.

Returns:

Aktuelle Anzahl gezaehlter Fehler

property length: int

Getter function.

Returns:

Laenge in Bytes der Devices

mainloop(blocking=True) → None[source]

Startet den Mainloop mit Eventueberwachung.

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.

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.

Parameters:

blocking – Wenn False, blockiert das Programm hier NICHT

property maxioerrors: int

Getter function.

Returns:

Anzahl erlaubte Fehler

property monitoring: bool

Getter function.

Returns:

True, wenn als Monitoring gestartet

property procimg: str

Getter function.

Returns:

Pfad des verwendeten Prozessabbilds

readprocimg(device=None) → bool[source]

Einlesen aller Inputs aller/eines Devices vom Prozessabbild.

Devices mit aktiverem autorefresh werden ausgenommen!

Parameters:

device – nur auf einzelnes Device anwenden

Returns:

True, wenn Arbeiten an allen Devices erfolgreich waren

property replace_io_file: str

Gibt Pfad zur verwendeten replace IO Datei aus.

Returns:

Pfad zur replace IO Datei

resetioerrors() → None[source]

Setzt aktuellen IOError-Zaehler auf 0 zurueck.

setdefaultvalues(device=None) → None[source]

Alle Outputbuffer werden auf die piCtory default Werte gesetzt.

Parameters:

device – nur auf einzelnes Device anwenden

property simulator: bool

Getter function.

Returns:

True, wenn als Simulator gestartet

summary
syncoutputs(device=None) → bool[source]

Lesen aller aktuell gesetzten Outputs im Prozessabbild.

Devices mit aktiverem autorefresh werden ausgenommen!

Parameters:

device – nur auf einzelnes Device anwenden

Returns:

True, wenn Arbeiten an allen Devices erfolgreich waren

writeprocimg(device=None) → bool[source]

Schreiben aller Outputs aller Devices ins Prozessabbild.

Devices mit aktiverem autorefresh werden ausgenommen!

Parameters:

device – nur auf einzelnes Device anwenden

Returns:

True, wenn Arbeiten an allen Devices erfolgreich waren

class revpimodio2.RevPiModIODriver(virtdev, autorefresh=False, syncoutputs=True, procimg=None, configrsc=None, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiModIOSelected

Klasse um eigene Treiber fuer die virtuellen Devices zu erstellen.

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.

class revpimodio2.RevPiModIOSelected(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiModIO

Klasse fuer die Verwaltung einzelner Devices aus piCtory.

Diese Klasse uebernimmt nur angegebene Devices der piCtory Konfiguration und bildet 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.

class revpimodio2.RevPiNetIO(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiModIO

Klasse fuer die Verwaltung der piCtory Konfiguration ueber das Netzwerk.

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.

property config_changed: bool

Pruefen ob RevPi Konfiguration geaendert wurde.

In diesem Fall ist die Verbindung geschlossen und RevPiNetIO muss neu instanziert werden.

Returns:

True, wenn RevPi Konfiguration geaendert ist

disconnect() → None[source]

Trennt Verbindungen und beendet autorefresh inkl. alle Threads.

exit(full=True) → None[source]

Beendet mainloop() und optional autorefresh.

Ref:

RevPiModIO.exit()

get_config_changed() → bool[source]

Pruefen ob RevPi Konfiguration geaendert wurde.

In diesem Fall ist die Verbindung geschlossen und RevPiNetIO muss neu instanziert werden.

Returns:

True, wenn RevPi Konfiguration geaendert ist

get_jconfigrsc() → dict[source]

Laedt die piCotry Konfiguration und erstellt ein <class ‘dict’>.

Returns:

<class ‘dict’> der piCtory Konfiguration

get_reconnecting() → bool[source]

Interner reconnect aktiv wegen Netzwerkfehlern.

Das Modul versucht intern die Verbindung neu herzustellen. Es ist kein weiteres Zutun noetig.

Returns:

True, wenn reconnect aktiv

net_cleardefaultvalues(device=None) → None[source]

Loescht Defaultwerte vom PLC Server.

Parameters:

device – nur auf einzelnes Device anwenden, sonst auf Alle

net_setdefaultvalues(device=None) → None[source]

Konfiguriert den PLC Server mit den piCtory Defaultwerten.

Diese Werte werden auf dem RevPi gesetzt, wenn die Verbindung unerwartet (Netzwerkfehler) unterbrochen wird.

Parameters:

device – nur auf einzelnes Device anwenden, sonst auf Alle

property reconnecting: bool

Interner reconnect aktiv wegen Netzwerkfehlern.

Das Modul versucht intern die Verbindung neu herzustellen. Es ist kein weiteres Zutun noetig.

Returns:

True, wenn reconnect aktiv

class revpimodio2.RevPiNetIODriver(address, virtdev, autorefresh=False, syncoutputs=True, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiNetIOSelected

Klasse um eigene Treiber fuer die virtuellen Devices zu erstellen.

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.

class revpimodio2.RevPiNetIOSelected(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=True, replace_io_file=None, shared_procimg=False)[source]

Bases: RevPiNetIO

Klasse fuer die Verwaltung einzelner Devices aus piCtory.

Diese Klasse uebernimmt nur angegebene Devices der piCtory Konfiguration und bildet 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.

revpimodio2.run_net_plc(address, func, cycletime=50, replace_io_file=None, debug=True)[source]

Run Revoluton Pi as real plc with cycle loop and exclusive IO access.

This function is just a shortcut to run the module in cycle loop mode and handle the program exit signal. You will access the .io, .core, .device via the cycletools in your cycle function.

Shortcut for this source code:

rpi = RevPiModIO(autorefresh=True, replace_io_file=…, debug=…) rpi.handlesignalend() return rpi.cycleloop(func, cycletime)

Parameters:
  • address – IP-Adresse <class ‘str’> / (IP, Port) <class ‘tuple’>

  • func – Function to run every set milliseconds

  • cycletime – Cycle time in milliseconds

  • replace_io_file – Load replace IO configuration from file

  • debug – Print all warnings and detailed error messages

Returns:

None or the return value of the cycle function

revpimodio2.run_plc(func, cycletime=50, replace_io_file=None, debug=True, procimg=None, configrsc=None)[source]

Run Revoluton Pi as real plc with cycle loop and exclusive IO access.

This function is just a shortcut to run the module in cycle loop mode and handle the program exit signal. You will access the .io, .core, .device via the cycletools in your cycle function.

Shortcut for this source code:

rpi = RevPiModIO(autorefresh=True, replace_io_file=…, debug=…) rpi.handlesignalend() return rpi.cycleloop(func, cycletime)

Parameters:
  • func – Function to run every set milliseconds

  • cycletime – Cycle time in milliseconds

  • replace_io_file – Load replace IO configuration from file

  • debug – Print all warnings and detailed error messages

  • procimg – Use different process image

  • configrsc – Use different piCtory configuration

Returns:

None or the return value of the cycle function