PoKeys57E 55 - Digitale Ein und Ausgänge, div Fühler via UDP an LOXONE koppeln

In Arbeit

Der PoKeys57E ist ein Modul mit div I/O's, Fühlern incl der Möglichkeit einer Speicherprogrammierbaren Steuerung (SPS) mit Ethernet Anschluss, dieses Bord wird von PoLabs entwickelt.

Die Key- Features:

  • 55 Digitale In und Outputs

  • Eingänge 5V Tolerant, d.h. Ein Eingang kann wie üblich statt 3.3 Volt auch direkt mit 5 V Beschaltet werden ohne Schaden zu nehmen.

  • 7 Analoge 0-3,3 Volt 12 Bit Eingänge (0- 3,3V entspricht 0 bis 4094).

  • I2C Bus an Bord.

  • PoBus an Bord (Ähnlich den Loxone Extensions).

  • mehrere 1-wire 18x20-Bus-Pin und DHT2x Feuchte/Temperatur Anschlüsse möglich.

  • diverse Sensoren schon implementiert zB. DHT21, Lichtsensor, analoge IC's

  • RTC (real-time clock) Echtzeituhr (Batteriegepuffert 3 Volt CR1220).

  • Spannungsausfall sichere- Funktionen (Batteriegepuffert 3 Volt CR1220).

  • grafisch programmierbare SPS mit zB PID-Reglern, Limiter, Multiplexer, Bit-Byte, Byte-Bit ... Ram-Speicherstellen, "Merker" über Modbus TCP

  • und vieles anderes...

 

Bild 1. Quelle: https://www.poscope.com/PoKeys57E

 

Arbeitsschritte für die Kopplung Pokeys ↔ Miniserver mittels UDP


Warum UDP?

Das User Datagram Protocol, kurz UDP, ist ein minimales, verbindungsloses Netzwerkprotokoll, das zur Transportschicht der Internetprotokollfamilie gehört. UDP ermöglicht Anwendungen den Versand von Datagrammen in IP-basierten Rechnernetzen.

Die Entwicklung von UDP begann 1977, als man für die Übertragung von Sprache ein einfacheres Protokoll benötigte als das bisherige verbindungsorientierte TCP. Es wurde ein Protokoll benötigt, das nur für die Adressierung zuständig war, ohne die Datenübertragung zu sichern, da dies zu Verzögerungen bei der Sprachübertragung führen würde. ...

UDP ist ein verbindungslosesnicht-zuverlässiges und ungesichertes wie auch ungeschütztes Übertragungsprotokoll. Das bedeutet, es gibt keine Garantie, dass ein einmal gesendetes Paket auch ankommt, dass Pakete in der gleichen Reihenfolge ankommen, in der sie gesendet wurden, oder dass ein Paket nur einmal beim Empfänger eintrifft. Es gibt auch keine Gewähr dafür, dass die Daten unverfälscht oder unzugänglich für Dritte beim Empfänger eintreffen. Eine Anwendung, die UDP nutzt, muss daher gegenüber verlorengegangenen und unsortierten Paketen unempfindlich sein oder selbst entsprechende Korrekturmaßnahmen und ggfs. auch Sicherungsmaßnahmen vorsehen

Quelle: Wikipedia

Durch die Einschränkung der ModbusTCP Funktion ab Firmware V8.1.11.11 (PoKeys57E 55 - Digitale Ein und Ausgänge, div Fühler via ModbusTCP an LOXONE koppeln. oder Modbus TCP- und RTU-Schnittstelle) ist die Idee entstanden, die Zustände der Eingänge über UDP an den Miniserver zu schicken. Dabei hat man keine Einschränkung wie den minimalen Abfragezyklus von 5s bei ModbusTCP. Für kritische Signale, sollte dies nicht verwendet werden, da es sich hier um ein ungeschütztes Übertragungsprotokoll handelt. (siehe Info oben)

In der aktuellen Version PoKeys v4.2.19 ist das versenden von UDP Daten nur mit Hilfe der Shared Data Slots möglich. Bereits in der aktuellen Beta v4.2.21 sind neue UDP Send Blöcke hinzugekommen und in den neusten Versionen wird man von Loxo Befehle und Abfragen per UDP an das Pokeys57E Modul senden können.

In diesem Artikel werden beide Wege beschrieben falls man die Betaversion nicht nutzen möchte. 


Konfiguration mit Hilfe von Shared Data

Die folgende Konfiguration sollte gewählt werden, wenn man die Betaversion nicht nutzen möchte.

Schritt 1: Installation der PoKeys Konfigurationssoftware

Für die Konfiguration des PoKeys ist eine Konfigurationssoftware des Herstellers nötig und kann von der Herstellerseite heruntergeladen werden:

  • Software herunterladen und installieren Link zur Downloadseite

  • Aktuellste Version zum Zeitpunkt der Artikelerstellung "PoKeys v4.2.19 Configuration and PoBlocks (21.12.2016).exe (38.2 Mb)"


Schritt 2: PoKey Netzwerkeinstellungen anpassen

  • Den PoKey mit Spannung versorgen und mit dem eigenen Netzwerk verbinden.

  • Wenn ein DHCP Server vorhanden ist, bekommt der PoKey eine IP Adresse zugewiesen.

  • Nach dem Starten der Konfigurationssoftware wird der PoKey automatisch gefunden. Anschließend auf "Connect" drücken.

    Bild 2: Automatisch gefundener PoKeys

Über "Device / Network device settings.." kann eine feste IP und Gateway vergeben werden. Die Gateway IP ist nur wichtig, wenn eine Kommunikation über mehrere Netzwerke stattfinden soll (z.B. Heimnetzwerk → Internet)

Bild 3: Netzwerkeinstellungen vom PoKeys

  • Falls mehrere PoKeys zum Einsatz kommen, kann zusätzlich  noch über "Change user ID" und "Change device name" der PoKey eindeutig benannt werden


Schritt 3: I/O Konfiguration anpassen (Optional)

Dieser Schritt ist nicht unbedingt nötig, da die Einstellungen später in einem anderen Programm gemacht werden.

 

  • Als nächstes muss festgelegt werden, welcher I/O Kanal als Ein- bzw. Ausgang verwendet werden soll. Da ich meinen PoKey auf der 24 In / 24 Out Adapterplatine von Helmut Holm habe, ist bei mir die Belegung schon vorgegeben. Auf dem Screenshot sind die ersten 16 Kanäle schon konfiguriert.

    Bild 4: I/O Konfiguration für einen Teil der digitalen Eingänge

    Man wählt den entsprechenden Pin aus (hier Pin 1 ausgewählt) und stellt diesen auf "Digital input". Möchte man in Loxone den unbeschaltenen Pin als inaktiv sehen, muss noch der Haken bei "Invert pin" gesetzt werden. Der Eingang ist im Ruhezustand über einen Pull-Up Widerstand auf High-Pegel.

  • Mit "Send to device" werden die Einstellungen übertragen.

Drückt man F4 oder geht auf "Peripherals / Digital Input and Outputs" kann man die Funktion der Eingänge testen. Aktive Eingänge werden Grün dargestellt.

Bild 5: Eingang 2 aktiv Bild 6: Eingang 2 inaktiv


Schritt 4: PoKeys UDP Kommunikation einstellen

  • Um die ersten leeren Daten senden zu können, öffnet man "Device / Web interface configuration" und stellt die folgenden Sachen ein.

Bild 7: Shared Slot Settings

  1. Add new

  2. Item caption / Data source / Display type / Data unit / Min value einstellen wie auf dem Screenshot. Item caption kann frei gewählt werden.
    Data Source ist ein Shared Memory. Auf diesen kann per UDP zugegriffen werden. Wir beginnen hier mit dem ersten Speicherbereich "Shared slot 1". Dieser wird später in PoBlocks S0 benannt. Leider zählt die Konfigurationssoftware von 1 bis X und PoBlocks von 0 bis X-1.

  3. Acces rights wählt man "Server reports" aus. Ohne diese Einstellung werden keine Werte gesendet.

  4. Über "Send to device (without saving) wird die Konfiguration temporär auf den PoKey gespeichert.

  • Als nächstes drückt man auf "Open report server configuration" und es öffnet sich folgendes Fenster.

Bild 8: UDP Settings

  • UDP mode einstellen

  • Unter "Destination data" die IP Adresse des Empfänger Loxone Miniservers eingeben.

  • Einen Port auswählen. Als Beispiel hier 4000.

  • Updateintervall einstellen (Unter 1 Sekunde habe ich nicht getestet)

  • Send to device (no save)

  • Report server configuration und Dashboad configuration können geschlossen werden.

 

  • Im Hauptfenster kann über "Send to device" die Konfiguration dauerhaft übertragen werden.

  • Die Grundkonfiguration des PoKey für UDP ist hiermit abgeschlossen und man kann die ersten "Dummy" Werte in der LoxConfig empfangen.

 


Schritt 5: Erster UDP Emfpangstest in der LoxConfig

Verwendete LoxConfig Version: V8.1.11.11

 

  • Ist man mit einem Miniserver verbunden kann man über den UDP Monitor die ersten Daten empfangen.

  • Virtuelle Eingänge markieren und oben den UDP Monitor aktivieren.

  • Danach sollten unten im Log über Port 4000 Daten empfangen werden.

    Bild 9: LoxConfig UDP Empfangstest

  • Im nächsten Schritt müssen die UDP Pakete nur noch mit Informationen gefüttert werden.


Schritt 6: Zustand der Eingänge im Shared Slot ablegen

Bei der PoKeys Installation wird ein Programm "PoBlocks" installiert. Dabei handelt es sich um ein sehr mächtiges Programm. Damit lassen sich per Drag&Drop und grafischer Programmierung Logik-Schaltungen erstellen. Diese können direkt auf den PoKeys übertragen und getestet werden.

  • Beim ersten Start von PoBlocks wird noch kein PoKeys gefunden, da der Core deaktiviert ist. Man wählt hier einfach PoKeys 57 series [generic] aus.

    Bild 10: PoBlocks Erster Start

  • Ist das Programm gestartet, kann man oben rechts die "Device Selection" aufrufen.

    Bild 11: PoBlocks Core Settings

    In der "Device Selection" wird das Netzwerk nach vorhandenen PoKeys durchsucht. Wird der PoKeys gefunden kann man den PoIL Core aktivieren indem man auf Enable/Disable klickt. Danach wird der Pokeys auch beim Start von PoBlocks automatisch gefunden. Mit "Connect" mit dem Pokeys verbinden.

    Bild 12: PoIL Core Enable

     

  • In meinem Fall wurden die Informationen von 8 Fensterkontakten zusammengefasst zu einem Byte. Dafür unter IO die benötigte Anzahl an Digital Inputs anlegen und einen Namen und Pin vergeben. Mit Hilfe des "Bits to byte" Block unter Extended werden 8 Signale zu einem Byte zusammengefasst.

    Bild 10: Zusammenfassen von jeweils 8 Signalen zu einem Byte

     

  • Anschließend kann man den Ausgängen der "Bits to Byte" Blöcke S0 bis S2 jeweils einen Shared Slot zuweisen. Dafür wechselt man rechts auf den Reiter "Shared data" und macht einen Doppelklick auf den ersten freien Slot. Der Cursor ändert sich und man klickt den Ausgang vom Block S0 an. Hat man das für alle Slots gemacht, sollte es so aussehen.

    Bild 11: Vergeben von Shared Slots

     

  • Wenn man sich noch einmal Schritt 4 anschaut, würde dort nur der Shared Slot 0 ausgewählt. Für S1 und S2 muss dort auch noch ein Eintrag angelegt werden.

  • Hat man alles erledigt, kann das Programm compiliert werden. Entweder über "Tools / Compile" oder Strg+B. Gibt es noch Fehler, werden diese nun aufgelistet. Sind noch Eingänge offen, so entsteht hierfür eine Fehlermeldung. Diese Eingänge können mit einem Rechtsklick auf den Eingang mit einer Konstanten versehen werden.

  • Über "Tools / Download", F6 oder "Check and transfer" wird das Programm auf den PoKeys heruntergeladen und kann mit einem Druck auf "RUN" oben rechts gestartet werden (siehe Bild 11). Über "Tools / Monitor Mode" oder F7 kann eine Live View  aktiviert werden. Da alle Eingänge über einen Pull Up Widerstand auf High Pegel gezogen werden, sollten jetzt alle Eingänge aktiv sein. Markiert man einen Eingang, kann man die Einstellung "Inverted" aktivieren. Mit aktivierter Live View sieht man auch den aktuellen Wert der momentan in den Shared Slot gespeichert wird.


    Bild 12: PoBlock Live View

 

  • Zum Schluss muss noch der AutoStart des Programms aktiviert werden. Ist kein Block markiert, werden rechts die allgemeinen Einstellungen angezeigt. Über "Check and transfer" die Änderung noch an den PoKeys senden.


Schritt 7: Empfangen der Werte in der LoxConfig

  • Virtuellen UDP Eingang anlegen

    • Senderadresse = IP unseres PoKeys

    • UDP Port = Erster eingestellter Port in der PoKeys Konfigurationssoftware. Hier ist es Port 4000.

  • Zusätzlich legen wir zu diesem virtuellen UDP Eingang noch einen "Virtueller UDP Eingang Befehl" an.
    Als Senderadresse wird wieder die IP unseres Pokeys eingetragen.
    Die Befehlserkennung muss an das jeweils empfangene Paket angepasst werden. Über den UDP Monitor lässt sich das recht einfach auslesen. (Bei mir sehen die Daten wie folgt aus "PoKey_1_S0=0.00".
    Den Anzeigewert multipliziere ich noch über die Korrektur mit dem Wert 100. Damit empfange ich ganze Zahlen, die leichter weiter verarbeitet werden können.
    Verwendet man keine Skalierung muss die Einheit auf zwei Stellen nach dem Komma erweitert werden, da z.B. der Wert 1 über UDP als 0.01 empfangen wird. Verwendet man die Korrektur, kann man die Einheit auf <v> ändern, da dann keine Nachkommastellen benötigt werden.

  • Nach dem Herunterladen des Programms auf den Miniserver sollten jetzt schon die Daten sichtbar sein.

Die einzelnen Bytes können mit Hilfe des Binärdekoders in der LoxConfig in einzelne Bits getrennt werden. Bei mir steht jedes Bit für einen Fensterkontakt. Mit diesen Signalen gehe ich dann in die Logik mit verketteten Statusbausteinen. Link ins Forum

 


Konfiguration mit UDP Send Blöcken

Diese Konfiguration ist momentan nur möglich, wenn man die aktuelle Betaversion "PoKeys v4.2.21 beta Configuration and PoBlocks (18.1.2017).exe (38.57 Mb)" von der Downloadseite nutzt.

Schritt 1: Installation der PoKeys Konfigurationssoftware

Kann von oben übernommen werden. Es muss nur v4.2.21 installiert werden.

Schritt 2: PoKey Netzwerkeinstellungen anpassen

Kann von oben übernommen werden.

Schritt 3: PoBlock Konfiguration

Bei der PoKeys Installation wird ein Programm "PoBlocks" installiert. Dabei handelt es sich um ein sehr mächtiges Programm. Damit lassen sich per Drag&Drop und grafischer Programmierung Logik-Schaltungen erstellen. Diese können direkt auf den PoKeys übertragen und getestet werden.

  • Beim ersten Start von PoBlocks wird noch kein PoKeys gefunden, da der Core deaktiviert ist. Man wählt hier einfach PoKeys 57 series [generic] aus.

    Bild 10: PoBlocks Erster Start

  • Ist das Programm gestartet, kann man oben rechts die "Device Selection" aufrufen.

    Bild 11: PoBlocks Core Settings

    In der "Device Selection" wird das Netzwerk nach vorhandenen PoKeys durchsucht. Wird der PoKeys gefunden kann man den PoIL Core aktivieren indem man auf Enable/Disable klickt. Danach wird der Pokeys auch beim Start von PoBlocks automatisch gefunden. Mit "Connect" mit dem Pokeys verbinden.

    Bild 12: PoIL Core Enable

  • In meinem Fall wurden die Informationen von 8 Fensterkontakten zusammengefasst zu einem Byte. Dafür unter IO die benötigte Anzahl an Digital Inputs anlegen und einen Namen und Pin vergeben. Mit Hilfe des "Bits to byte" Block unter Extended werden 8 Signale zu einem Byte zusammengefasst.

Bild 10: Zusammenfassen von jeweils 8 Signalen zu einem Byte

  • Als nächstes fügt man einen UDP Sender Block hinzu. Im Menü unter Misc / UDP Sender.


    Die Eingänge a - f sind Dateneingänge. Diese Daten werden dann über UDP versendet. Eine steigende Flanke am Send Eingang verschickt eine Nachricht.
    Folgende Einstellungen sind für die Dateneingänge möglich (In_a=%01a In_b=%3.4b In_c=%+2c) Für d, e und f kann das Schema fortgesetzt werden.

    • In_a=%03a  = Drei Stellen ohne Komma (z.B. 5 → 005)

    • In_b=%3.4b = Drei Vorkommastellen, vier Nachkommastellen (z.B. 4563211 → 456.3211)

    • In_c=%+2c  = Zwei Stellen mit + als Vorzeichen. ( 12345 → +45 ) 


    Zusätzlich muss noch die IP Adresse des Empfängers und der Port eingestellt werden.


  • Am Eingang Send schließt man am besten eine "Clock Source" an. Die Frequenz des Clock wird über die Half Time Period eingestellt. Da der eingegebene Wert in ms interpretiert wird und für eine halbe Periode gilt, entspricht ein Wert von 500 einer Periodendauer von 1 Sekunde.


    Die Eingänge b c d e und f sind hier testweise mit Konstanten verbunden. Normal werden hier Ausgangssignale von anderen Blöcken angeschlossen.

  • Hat man alles erledigt, kann das Programm compiliert werden. Entweder über "Tools / Compile" oder Strg+B. Gibt es noch Fehler, werden diese nun aufgelistet. Sind noch Eingänge offen, so entsteht hierfür eine Fehlermeldung. Diese Eingänge können mit einem Rechtsklick auf den Eingang mit einer Konstanten versehen werden.

  • Über "Tools / Download", F6 oder "Check and transfer" wird das Programm auf den PoKeys heruntergeladen und kann mit einem Druck auf "RUN" oben rechts gestartet werden (siehe Bild 11). Über "Tools / Monitor Mode" oder F7 kann eine Live View  aktiviert werden. Da alle Eingänge über einen Pull Up Widerstand auf High Pegel gezogen werden, sollten jetzt alle Eingänge aktiv sein. Markiert man einen Eingang, kann man die Einstellung "Inverted" aktivieren.

Zum Schluss muss noch der AutoStart des Programms aktiviert werden. Ist kein Block markiert, werden rechts die allgemeinen Einstellungen angezeigt. Über "Check and transfer" die Änderung noch an den PoKeys senden.


Schritt 4:Empfangen der Werte in der LoxConfig

  • Virtuellen UDP Eingang anlegen

    • Senderadresse = IP unseres PoKeys

    • UDP Port = Erster eingestellter Port in der PoKeys Konfigurationssoftware. Hier ist es Port 4000.

  • Zusätzlich legen wir zu diesem virtuellen UDP Eingang noch einen "Virtueller UDP Eingang Befehl" an.
    Als Senderadresse wird wieder die IP unseres Pokeys eingetragen.
    Die Befehlserkennung muss an das jeweils empfangene Paket angepasst werden. Über den UDP Monitor lässt sich das recht einfach auslesen. Bei mir sehen die Daten wie folgt aus:

    Man sieht hier, welche Auswirkung die Einstellung der Datenports vom UDP Sender Blocks in PoBlocks hat.
    Möchte man z.B. den Wert von Port A abfragen, gibt man als Befehlserkennung In_a=\v ein.


  • ZUSÄTZLICH KANN MAN VIRTUELLEN UDP EINGANG BEFEHL NOCH DIE VALIDIERUNG UND DEN FEHLERPORT AKTIVIEREN. DANN BEKOMMT MAN EINEN FEHLER, WENN IN EINER FESTGELEGTEN ZEIT KEINE BOTSCHAFTEN EMPFANGEN WURDEN, ODER DER WERT AUSSERHALB DES GÜLTIGEN BEREICHS LIEGT.

     

    HIER NUN DIE BESCHREIBUNG DES NEUEN UDP TEXTBASIERTEM KOMMANDO INTERFACE, ALSO RICHTUNG LOXON -> POKEYS57E UND AUCH UMGEKEHRT

    Dies ist das Ergebnis des langen Prozesses der Planung und die Funktion ist in der 'Beta-Version implementiert. 
    PoKeys-Geräte verfügen nun über eine einfache textbasierte Befehlsschnittstelle, die einfach via UDP-Pakete verbunden werden kann.
    PoKeys überträgt diese Befehle auf Port 20057. 
    Diese einfache Textoberfläche wird in Zukunft erweitert, um mehr Befehle und andere Schnittstellen zu unterstützen.
    Derzeit sollte es Ihnen ermöglichen, einfache UDP-Pakete an PoKeys Gerät zu senden.

    Poil-Steckplätze können auch gelesen und geschrieben werden.
    Das Setzen/Abfragen des digitalen Ausgangs zB Pin 5 auf 1 ist so einfach mit dem Senden von "OSV5=1" (ohne Anführungszeichen).
    einfach als Text als UDP an die IPadr des Pokeys über Port 20057. 

    Das Update 4.2.23 ist unter https://www.dropbox.com/s/af3w319x0d3iz4n/PoKeys_Setup_4_2_23.exe?dl=0 verfügbar

    Die PoKeys SimpleText-Syntax ist einfach:

    Jeder Befehl beginnt mit einem Buchstaben, der die Zielperipherie angibt:
    - I: Digitaleingang
    - A: Analogeingang
    - O: Digitalausgang
    - E: Encoder-Wert
    - C: digitaler Zählerwert
    - S: EasySensors-Werte
    - B: PoBlocks shared slot

    Der zweite Buchstabe des Befehls ist ein Verb:
    - G: get
    - S: set
    - R: reporting

    Der dritte Buchstabe ist das Substantiv:
    - V: Wert
    - S: status

    Der Befehl fährt dann mit Parametern fort, wobei jeder Parameter mit einem Kommasymbol getrennt wird.

    Im Falle eines set-Befehls muss der Befehl dann = Zeichen und den Wert in numerischer Form ohne zusätzliche Einheits- oder Dezimalpunktsymbole enthalten.
    Wenn die Antwort angefordert wird, endet der Befehl mit einem Fragezeichen?

    Beispiele für die Abfragebefehle:
    - IGV10? -> digitalen Eingangswert von Pin 10 (echte Pin-Nummer), mit dem Wert wird geantwortet
    -> Antwort: IRV10=1 - Melde-Digitaleingangswert von Pin 10 ist 1 (ON)

    - AGV41? -> den analogen Eingangswert von Pin 41 (echte Pin-Nummer) erhalten, mit dem Wert antworten
    -> Antwort: ARV41=534 - Der analoge Eingangswert des Pins 41 wird mit 534 ausgegeben

    - OSV5=1 -> digitalen Ausgangswert von Pin 5 auf Zustand 1 (ON) setzen, keine Antwort Reaktion






DANKE

Zum Schluss möchte ich mich noch bei den Entwicklern des PoKeys bedanken. Der Support ist super und neue Funktionen werden auch auf Wunsch der Community eingebaut. Sofern diese sinnvoll sind. So hat man zufriedene Kunden  Manch anderer könnte sich hier eine Scheibe von abschneiden.




Quellen und Links: