PoKeys 57E (v1.2) und 4x4 Keypad - hat das jemand im Einsatz ?

Hallo zusammen

Ich versuche seit Tagen ein 4x4 Keypad an den PoKeys57E anzuhängen, damit ich so ein Netzwerk Keypad-Controller realisieren kann. Ist zwar etwas umständlich und eigentlich overkill, aber etwas „einfacheres“ wüsste ich nicht in IP-Symcon einzubauen.

Aber wie ich es auch anstelle es werden statt der 16 Tasten immer nur deren 4 erkannt. Wenn ich Taste A2, A3 oder A4 drücke leuchtet immer A1 auf, das Selbe bei B2, B3 oder B4 wo dann immer B1 aufleuchtet usw…

PoKeys_keypad_configuration.png

Auf anraten von PoKeys-Support habe ich auch die Pins gewechselt (insbesondere mit Row1 soll es ein Problem geben). Aber nichts hilft.

PoKeys_pin_configuration.png

Das Keypad selber ist in Ordnung, da es an einem anderen Keypad-Controller wie gewünscht funktioniert. Es handelt sich um ein reguläres 4x4 Keypad mit 8 Anschlüssen (APEM 4x4 keypad mit selbst zu beschriftenden Tasten).

Hat jemand von euch schon einmal erfolgreich ein KeyPad an ein PoKeys angehängt und in IP-Symcon eingebunden ? Ich verwende firmware v4.1.17.

Besten Dank für eure Hilfe.

Gruss Letraz

Ich habe das gleiche Problem ! Habs auch nicht hin bekommen.

Gerade hat mir der Softwarearchitekt und leitender Programmierer von PoLabs geschrieben, dass es sich dabei um einen Bug in der aktuellen Firmware handelt. Sie werden den beheben und bald ein Update herausgeben … Haben wir also ein wenig Geduld :slight_smile:

Bei den Kontakten mit dem Support möglichst auch nach der RS232 Schnittstelle jammern.

Damit wäre dann eine einfacherer Vernetzung der Module möglich.

Gruß Helmut

Auf der Webseite von Polabs kann eine neue Firmware resp. eine neue Version von PoKeys-configuration herunterladen und nach der Installation auf den PoKeys geflasht werden. Damit ist das Keypad-Problem gelöst.

Nun geht es darum die gedrückte Taste in IPS auswerten zu können …

keyboard_ok.png

Müßtest Du bei den Modbus Adressen 1000-1127 (nur lesbar) finden.

Im PDF gab es auch eine Beschreibung wie wo welcher Wert steht, wenn die Taste gedrückt ist oder war.

Gruß Helmut

Hallo Helmut

Ja genau, das habe ich auch so gesehen, aber es funktioniert nicht. Wenn ich die Adresse 1000 auslese ist die immer null.

Ich habe mich dann an PoLabs gewandt. Der Entwickler dort hat mir folgendes geschrieben:

The Modbus addressing space is unique in a way that it is divided into addresses for binary states (coils, discrete inputs, outputs) and 16-bit integer states (also called registers in Modbus). The digital state at address 1000 has nothing to do with a register on an address 1000.
Since matrix keyboard states are binary states, the commands 0x01 and 0x02 should be used to read them. The commands 0x01 and 0x02 are really the base of the Modbus protocol and I am sure that these are supported in IP-Symcon.
Regarding your question of what is with the register address of 1000 (command 0x04) - this address is used for PoIL shared slot data.

Soweit so klar, was er mir damit aber sagt ist, dass IP-Symcon die falsche Methode verwendet um den PoKeys auf der Adresse 1000 abzufragen. Gemäss einem Wirshark-Sniff wird von IP-Symcon lediglich „Read Input Registers (4)" verwendet, also 0x04 und nicht wie von Polabs verlangt 0x01 oder 0x02.

Weiss du oder jemand anderes, wie ich das in IP-Symcon umstellen kann ?

Gruss Letraz

Binary States heißt für mich du must auf die Einheit Bit umstellen. Sagt so auch die Doku von IPS.
https://www.symcon.de/service/dokumentation/modulreferenz/modbus-rtu-tcp/
Du siehst die Daten auch in der Console, im Debug vom Socket oder Splitter. Wireshark ist da etwas übertrieben :wink:
Michael

Michael hat es verlinkt, ich schätze Du kommst mit einem „Coil-Befehl“ ab Adresse 1000, lesend weiter.

Bleibt so eine Keyboard-Abfrage in der Adresse gespeichert?

Du kannst auch mal mit diesem Modbus-Tool spielen

Gruß Helmut

Vielen Dank für die Feedbacks. Wenn man lesen kann ist man klar im Vorteil :slight_smile: Ich dachte ich hätte die Dok ganz gelesen, aber der unterste Teil, welcher Michael verlinkt hat, habe ich doch glatt übersehen. Funktioniert natürlich einwandfrei, wenn man auf Bit umstellt… :loveips:

Das Modbus-Tool von Helmut ist auch ganz hilfreich (ModbusMaster), allerdings habe ich die Keypad-Logik des PoKeys57E noch nicht verstanden. Dank dem Tool kann ich nun zwar die Zeile der gedrückten Taste identifizieren, aber noch nicht die gedrückte Taste selber. Brauche dazu einmal ein paar ruhige Stunden um mich intensiv damit zu beschäftigen. Gut Ding will eben Weile haben …

Nach einigen ausgiebigen Tests mit dem Tool Modbus-Master (Danke nochmals an Helmut) habe ich einen weiteren Fehler in der PoKEys57E Firmware gefunden und an den Hersteller gemeldet. Nach mehrmaligem hin- und hermailen und erst nachdem ich ihm die relevanten Wireshark-Traces mehr oder weniger um die Ohren gehauen habe, hat dieser den Fehler zugegeben und schliesslich behoben.

Firmware 4.1.36 funktioniert nun also endlich mit Modbus-Support für das Matrix-Keypad.
Nun widme ich mich der Implementierung in IP-Symcon. Aktuell sehe ich noch ein Problem wie ich 127-Eingänge via „Read Discrete Inputs“ auf einmal auslesen soll, da gemäss Dok die Einheit „Bit“ verwendet werden muss und ich die Anzahl der zu lesenden Inputs nicht eingeben kann. Im Notfall müssten ansonsten 127-Inputs einzeln gelesen werden, was zwar funktionieren kann, aber nicht die Beste und „netzwerk-schonendste“ Lösung ist… :mad:

@Helmut
Nein, der Wert wird leider nicht gespeichert und die Matrix muss regelmässig ausgelesen werden um keinen Tastendruck zu verpassen. Je schneller gelesen wird, desto höher der WAF aber desto höher eben auch die Netzwerkauslastung :frowning:

Sobald ich den IP-Symcon-Script fertiggestellt habe werde ich ihn hier der Vollständigkeit halber posten.

Gruss Letraz

Hast Du mal versucht, diese Tastenmatrix in PoBlocks nachzubauen? Weil, da verpasst Du ja leicht einen Tastendruck…

Oder kommt es für Dich nicht in Frage?

Gruß Helmut

Edit: Ohne die PortPin und Bausteine zu beschriften, jeder Tastendruck führt auf eine in IP-Symcon nutzbare S0 Variable, bleibt gesetzt bis Du über IP-Symcon, auch über eine S0 Variable, reset machst.

test_keyboard.zip (2.67 KB)

Hallo Helmut

Sorry für das späte Feedback.
Ich bin echt überrascht, was man mit dem PoKeys alles anstellen kann. PoBlocks habe ich bisher nicht angeschaut. Wie die Tastenabfrage gemacht wird spielt mir auch keine Rolle. Wichtig ist schon eher wie du schreibst, dass kein Tastendruck verloren geht.
Ich habe dein PoBlocks-Programm geladen. Echt genial ! Aber es funktioniert leider auch damit nicht …

Zuerst einmal war das Problem, dass die via PoKeys-Software gesetzte Eingänge als Matrix nicht gelöscht werden wenn das PoBlocks-Programm geladen wird. Die Eingänge resp. besser alle Pins müssen daher in PoKEys zuerst einmal auf „Inactive“ gesetzt werden.

Dann wurden bei deinem Programm nicht alle Ausgänge geschaltet, der vierte wurde nie aktiviert. Die Lookup-table zählte immer nur 1-2-4-1-2-4 usw. Der Grund war der falsche Parameter „3“ beim Compare „EQ“ links oben. Der muss auf „4“ gesetzt werden. (war sicher Absicht um die Fuktionsweise von PoBlocks zu verstehen :stuck_out_tongue: )

Ebenfalls sind alle 5 Eingänge auf High (die vier von der Tastatur plus der Reset), damit geht erstmals auch nichts. Wenn der als „Reset“ konfigurierte Inputpin invertiert wird, bleiben aber die Tastatur-Eingänge immer noch auf High. Ein Tastendruck wird so nie erkannt. :confused: Das Rätsels Lösung war das invertieren aller Eingänge. Damit geht es … fast.

Nun ist das Problem, dass bei einem Tastendruck zwar das jeweilige „Set/Reset latch“ S0 - S15 gesetzt wird, aber natürlich immer das, bei welchem der zugehörige Ausgang gerade aktiv ist. Eine eindeutige Zuordnung welche Taste gedrückt wird ist auch da nicht möglich, denn wirklich unterscheiden kann ich damit lediglich in welcher Zeile die Taste gedrückt wurde (da alle Ausgänge nacheinander geschaltet werden habe ich nach spätestens zwei Sekunden drücken der gleichen Taste alle vier möglichen Ausgänge bei den „Set/Reset Latch“ auf 1… :mad: )

Ich habe die leise Vermutung, dass dieser Lösungsansatz ebenfalls nicht funktioniert. Wahrscheinlich wäre es zielführender, wenn PoKeys die via Matrix-Funktion ausgelesene Taste irgendwo speichert und dieser Wert dann via Modbus ausgelesen werden kann. Das ist aber momentan nicht möglich.

Gruss Letraz

Hallo Letraz,
mein Programm sollte ein Ansatz sein, ne fertige Lösung ohne Deine Konfiguration zu kennen, ist schwierig.

Meine Eingänge z.B. sind immer high wenn nix anliegt.

Aber ich merke: Du hast PoBlocks verstanden, dass der Haken bei Init 'ne Rolle spielt, wenn man Den weg nimmt, die Pokeys-Konfiguration nicht angefasst wird, das bekommt man nur über sowas raus.

Ich bin überzeugt davon, dass die Matrix-Geschichte machbar ist, aber Du könntest auch dem Dr. mailen, dass Du die Funktion Matrix unbedingt über Speicherung und Modbus brauchst.

Der Entwickler ist sehr empfänglich für sowas :wink: Und bettel auch um eine RS232 Vernetzung :wink:

Gruß Helmut

Edit: Man(n) könnte auch 'ne analoge Tastatur nehmen, das ist eine Tastatur mit Widerstandsreihenschaltung, wird hier gezeigt.

Hallo Helmut

Ich weiss, dass dein Vorschlag nicht eine fertige Lösung ist, ich habe es ja auch auf meine Bedürfnisse angepasst (zumindest was die Ein- und Ausgänge betrifft).

Meine Konfiguration ist relativ simpel. Ich habe eine 4x4 Folientastatur von Apem, bei welcher ich die Tasten selber via Papierstreifen beschriften kann. Hintergrund: a) Wasserdicht da Verwendung unmittelbar bei der Badewanne und b) ich will Symbole und keine Ziffern auf der Tastatur c) die Folie klebe ich auf einen Dosendeckel, welcher das Loch in der Wand dann sauber abschliesst. Mit SIlikon kann ich das ganze wasserdicht verschliessen.

Angeschlossen habe ich diese Folientastatur an den PoKEys 57E (firmware v4.1.36) an den Pins 12 -19. Dabei ist 12-15 als Ausgang und 16-19 als Eingang konfiguriert. Das von deinem Beispiel anzupassen war kein Problem.

Das Problem ist aber, dass die einzelne gedrückte Taste nicht erkannt wird:
Ich möchte die gedrückte Taste oben links erkennen. Auf dem Screenshot sieht man was passiert:

Alle Taster der ersten Zeile sind mit Eingang 19 verbunden, dieser ist aktiv (= Taste gedrückt). Ausgang 13 ist aktuell ebenfalls aktiv. Es wird daher das „Set/Reset latch“ S4 auf aktiv gesetzt. Das ist aber die dritte Taste auf der ersten Zeile … Da ich ja nicht weiss welcher Ausgang gerade aktiv ist, wenn ich auf die Taste drücke kann ich wie erwähnt die derzeit gedrückte Taste nicht identifizieren, wohl aber auf welcher Zeile die Taste gedrückt wurde (alle „Set/Reset latch“ welche von Eingang 19 getriggert wurden sind auf „1“ [rote Rahmen]).

Hast du eine Idee wie man dieses Problem lösen kann ? Ich kann mir im Moment nur vorstellen von IPS schneller die Werte S0 - S15 zu lesen und zu resetten, als die Ausgänge durchgeschaltet werden. Aber aktuell schalte ich die Ausgänge alle 500ms weiter (und das ist noch viel zu langsam). Aber ob das früher oder später nicht ein Problem mit dem Timing gibt ist fraglich, denn die Steuerung wird ja nur seeehr sporadisch betätigt …

Gruss Letraz

Nach schnellem Blick würde ich sagen, dass Du Sorge tragen mußt das Fortschalten vom Timer zu unterbinden.

Sobald ein FlipFlop gesetzt ist, muß der Timer gestoppt werden.

Ein möglicher Ansatz:

Gruß Helmut

Na, ist das die Abhilfe?

•PoKeys57 4.1.36: Matrix keyboard bug fixed (Modbus related)

Gruß Helmut

Hallo Helmut

Nein, das ist lediglich die Behebung des Problems, dass man die Tastaturmatrix überhaupt via Modbus abfragen kann. Das hat am Anfang überhaupt nicht funktioniert. Siehe meinen Post dazu vom 1. September weiter oben.

Deinen Lösungsansatz werde ich in den nächsten Tagen ausprobieren.

Gruss Letraz