Version 0.16.1 – Analogmodul

Es gibt ein neues Update für die Verwendung des analogen Moduls AIO.

  • IOs des analogen Moduls werden „signed“ instanziiert. Damit wird die Werteberechnung mit Vorzeichen durchgeführt. Ansonsten wäre der Wert -1 plötzlich 65535 und negative Werte bei Zuweisungen nicht erlaubt.

DOWNLOAD

Version 0.16.0 – Weniger Python, mehr SPS!

Dieses Update bringt neue Funktionen mit sich, um mit weniger Python mehr SPS zu programmieren!

Wir stellen vor: cycleloop(zyklusfunktion)

  • Neuer Cycleloop der in einem festgelegten „auto_refresh“ Takt die Eingänge einließt, die übergebene Funktion aufruft und nach Abarbeitung die Outputs schreibt. Wird im Programm devices.cycleloop(zyklusfunktion) aufgerufen, blockiert es an dieser Stelle und führt zyklisch die Funktion „zyklusfuntkion“ aus. Dieser Funktion wird eine Instanz der Klasse RevPiCycletools() übergeben, welche Werkzeuge wie Taktmerker, Flankenmerker oder Timerobjekte beinhaltet.
  • Neue Funktion für einfaches Beenden eines zyklischen oder eventbasierten Programms .handlesignalend(cleanupfunc)
  • Sollte die eingestellte Aktualisierungsrate der Prozessabbildaktualisierung (auto_refresh) nicht einzuhalten sein, werden Warnungen ausgegeben.
  • auto_refresh Werte größer 1000 Millisekunden ergaben Fehler bei .wait und mainloop()
  • Modul beendet sich schneller bei .cleanup() oder .exit()
  • Modul blockiert das Beenden nicht mehr bei Verwendung im interaktiven Modus der Python-Shell

DOWNLOAD

Version 0.15.3

Heute veröffentlichen wir ein Update!

  • Es kann nun für alle IOs der Klassen RevPiIO() und RevPiStructIO() eine „byteorder“ konfiguriert werden. Diese ist wichtig für die int() Umrechnung bei Werten, die mehr als ein Byte lang sind, z.B. bei RevPi Gateways (Standard ist „little“)
  • Das Klassenattribut „signed“ wurde für die RevPiIO() Klasse eingefügt. Dieses kann auf True gesetzt werden, wenn die int() Umrechnung der bytes() mit Vorzeichen erwünscht ist.
    Besonders Interessant bei „Countern“ der DI, DO und DIO Module, welche beim Rückwärtszählen sonst 65535 anzeigen.
    rpi.devices["dio"]["Counter_1"].signed = True
    rpi.devices["dio"]["Counter_1"].value
    Welcher nun -1 anzeigen würde.
  • Magic Methode __contains__ an RevPiDevicelist und RevPiDevice angefügt. Damit sind nun Abfragen in Form von "dio02" in rpi.devices und "I_1" in rpi.devices["dio02"] möglich, welche prüfen, ob ein Device-Name vorhanden ist oder ein IO-Name.
  • RevPiDevicelist unterstützt nun auch die Build-In Funktion len(rpi.devices), welche die Anzahl der Devices inkl. Core zurück gibt.
  • RevPiDevicelist hat die neue Funktion writedefaultinputs(self, virtual_device) bekommen.
  • Und weitere wichtige interne Veränderungen, die dieses Update erforderlich machen.

Version 0.15.2

Diese Version hat ein paar kleine Bugfixes, die unter bestimmten Bedingungen auftreten.

  • Sollte ein Fehler auf dem /dev/piControl0 Device auftreten, z.B. wegen einem Reset, wird dieser Fehler normalerweise abgefangen. In der Version ab 0.15.0 löst dieser Anfang jedoch selber einen Fehler aus 🙁
  • Wenn mit auto_refresh gearbeitet wird und innerhalb eines Programms das RevPiModIO neu instanziiert wird ohne .cleanup() Aufruf, beendet sich der auto_refresh-Modus nicht sauber.
  • Monitoringmode repariert RevPiModIO(monitoring=True)
  • Seit Version 0.8.8 können mit reg_event auch Ausgänge in der Eventüberwachung registriert werden. Diese wurden jedoch nicht ausgewertet.

DOWNLOAD

 

Version 0.15.1 – Schneller, weniger Ressourcen und bessere .wait() Funktion!

HINWEIS: RevPiModio.devices.wait(…) Funktion nicht mehr kompatibel zu Vorgängerversionen!

Wir haben unser RevPiModIO Modul überarbeitet! Damit bekommen wir bessere Leistungen bei .readprocimg() / .writeprocimg() und verbrauchen weniger Ressourcen.

Die RevPiModio.devices.wait(…) Funktion wurde komplett umgeschrieben. Die alte Version hatte als Rückgabewert lediglich True oder False. Damit konnte man jedoch nicht die unterschiedlichen Abbruchbedingungen auswerten, was aber dringend benötigt wird.
Der Rückgabewert ist nun ein int() Wert! Werte kleiner oder gleich 0 sind dabei ein erfolgreiches Warten, Werte größer 0 sind ausgelöste Abbruchbedingungen, wie das exitevent oder der timeout.
Genaueres in unserer Dokumentation.

Außerdem wurden alle RevPiModIO.devices[0].*procimgdev() Funktionen entfernt, da sie als überflüssig bewertet wurden. Alternativ kann die Funktion durch Parameterübergabe des Devices an RevPiModIO.devices.*procimg(device) erledigt werden. Hier könnte auch eine Liste übergeben werden RevPiModIO.devices.*procimg([device1, device2]).
Genaueres in unserer Dokumentation.

Version 0.10.0 – Bugfixes und Jessie!

Die Kunbus GmbH wird jetzt ihr neues Jessie – Image für den Revolution Pi veröffentlichen! Unser RevPiModIO wurde für das neue Image etwas angepasst und ist jetzt für BEIDE Versionen (wheezy und jessie) freigegeben!

BUGFIXES: Diese Version beinhaltet auch Fehlerkorrekturen und sollte von allen (unabhängig des Jessie-Images) eingespielt werden!

Außerdem können wir stolz verkünden, dass unser Modul im Jessie Image über die Kunbus Repositories bezogen werden kann! Also ist die Installation und das Update ein Kinderspiel!

# Erstmal aktualisieren
pi@RevPi ~/ $ sudo apt-get update

# Und einfach installieren
pi@RevPi ~/ $ sudo apt-get install python3-revpimodio

Die Aktualisierungen bekommt ihr dann natürlich auch automatisch eingespielt, wenn ihr eurem RevPi ein Update unterzieht.

Downloads und Quellen

Version 0.9.6

Unsere neue Version kann die Eventüberwachung nun auch starten, OHNE zu blockieren. Eignet sich gut, wenn man GUIs schreiben will! Dann können Events definiert werden, welche bei IO-Änderung ausgelöst werden. Das eigentliche Programm kann dann weiter laufen.

Beim Aufruf für den Mainloop wird dann einfach der Parameter blocking=False übergeben

mainloop(blocking=False)

Version 0.9.5 – Eventfunktionen mit IO-Name und IO-Value

Wir habe eine neue Version veröffentlicht!

HINWEIS: Änderungen in Event-Funktionen NÖTIG!

Neben ein paar wichtigen Bugfixes sind diese Dinge neu:

  • Den Event-Funktionen, welche der mainloop() auslöst, wird jetzt der Name und der, zum Auslösezeitpunkt, anstehende Wert mit übergeben. Die Eventfunktionen müssen also in euren Quelltexten angepasst werden:
    def meinevent(ioname, iovalue):
    Über ioname und iovalue kann dann direkt auf die Werte zugegriffen werden. Ein zusätzliches Abfragen der IOs ist dann nicht mehr nötig. Sollten die Funktionen nicht angepasst werden, wird eine Exception ausgelöst.
  • Neue Funktion hinzugefügt um den Fehlerabfang von auto_refresh zu modifizieren:
    RevPiDevicelist.auto_refresh_maxioerrors(value=intwert)
    Legt die maximale Fehleranzahl beim lesen/schreiben des Prozessabbilds fest. Sollte der durch value übergebene Wert überschritten werden, wird eine Exception ausgelöst. Sonst werden nur Warnungen ausgegeben.
  • Neue Funktion um IO-Fehlerzähle zurückzusetzen:
    def auto_refresh_resetioerrors()
    Setzt den Fehlerzähler von auto_refresh auf 0 zurück

Downloads und Quellen

Version 0.9.0 – Jetzt einfach Treiber für virtuelle Devices entwickeln

Mit der neuen Version können „Virtuelle Devices“ von piCtory gefüttert werden!
logiCAD und andere Anwendung können auf diese Daten im Prozessabbild dann zugreifen.

  • Wir haben eine neue Klasse zu unserem Modul hinzugefügt. Diese instanziiert das Modul speziell für das erstellen von Anwendungen, die virtuelle Devices von piCtory mit Daten versorgen:
    rpi = revpimodio.RevPiModIODriver("virtualdevicename")

Über RevPiModIODriver

  • Dazu noch ein paar Bugfixes und etwas Code-Anpassungen

Downloads und Quellen

Version 0.8.10

Pünktlich zur embedded-World Messe veröffentlichen wir eine neue Version!

  • Die bei auto_refresh angegebene Aktualisierungsrate konnte nicht eingehalten werden und wich um einige Millisekunden ab. Die Funktion kontrolliert nun selbstständig ihre Laufzeit und trimmt die Zeit automatisch. Dadurch wird die angegebene Aktualisierungsrate (in Standardeinstellung 50 Millisekunden) eingehalten!
  • Mit reg_event() können nun auch Funktion als Event für Outputs registriert werden.
  • Leistungsverbesserung der wait()-Funktion – Weniger Ressourcenverbrauch.
  • Das Modul kann jetzt bei Instanziierung auch reine Monitoringaufgaben erledigen, wenn der Revolution Pi z.B. mit einem logi.CAD Programm läuft. Er überwacht dann alle Ein- und Ausgänge:
    rpi = revpimodio.RevPiModIO(auto_refresh=True, monitoring=True)
  • Dazu noch ein paar Bugfixes und etwas Code-Anpassungen

Downloads und Quellen