Programmierung einer CODE Tastatur

Darkghost

Level-1
Beiträge
210
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

bin gerade dabei über meinen bisherigen Kellerrand meiner Programmiererfahrungen hinaus zu schauen.
Ich würde gern eine Code Tastatur programmieren.
Die Tastatur soll über eine Visu angezeigt werden.
Auf der Visu habe ich 6 Buttons (Ziffern 1 bis 6)
Je eingegebenen Code möchte ich eine Aktion auslösen.

Umsetzungsidee:
Ich gebe Ziffern über die Visu ein und speichere bzw. hänge diese an einen String an.
Den String gleiche ich mit den gültigen Codes ab.
Passt ein eingegebener Code wird zum Beispiel eine Tür geöffnet und der String zurückgesetzt.
Gebe ich mehr als 6 Ziffern ein soll der bisherige Code zurückgesetzt werden.

In C# hätte ich eigentlich keine Probleme die Code Tastatur um zusetzen aber in TwinCat bzw. Codesys hänge ich aktuell irgendwie fest. Mit TwinCat / CodeSys zumindest mit CFC habe ich immer das Gefühl. dass man um die Ecke denken muss...

Umsetzungsidee in TwinCat

1. Drücke Button
Bild_2021-03-27_233247.jpg
2. Button aktiviert fbAddCode
fbAddcode.PNG

3. fbCode hängt in Variable strCode die 1 an (sehe gerade würde die neue Nummer an den Anfang hängen).

4. Wenn ich Button 2 drücke, dann hätte ich eigentlich erwartet, das er aktuell strCode ("1") nimmt und davor eine 2 setzt. (strCode = "21")

Das macht das Programm leider nicht. Füge ich für Button 2 den Baustein FB_AddCode ein, dann geht nichts mehr....

Würde mich freuen, wenn ihr mir weiterhelfen könntet.

Interessant wäre noch kann ich das ganze auch nur in CFC umsetzen. Ich habe da leider keine Möglichkeit gefunden String Variablen zu "bearbeiten". Ja es gibt auch den Befehlt CONCAT aber der Befehl soll ja nur ausgeführt werden, wenn ich einen Button drücke und daher kein active o.Ä. hat, kann ich den nicht nutzen oder?

Viele Grüße

p.s.: Bin auf Eure Lösungen gespannt.

Stefan
 
Zuletzt bearbeitet:
Ist strCode ein InOut, oder evtl. nur ein Out?
In deinem Fall muss es ein InOut sein, da du möchtest, dass wenn bActive=false der Wert einfach nur durchgereicht wird.

Nach meinem eigenen CFC-Stil würde ich dem FB alle Eingänge für deine Tasten verpassen, und dann alles in ST schreiben damit die CFC-Pläne möglichst übersichtlich bleiben und sich nicht in Details verlieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist strCode ein InOut, oder evtl. nur ein Out?
In deinem Fall muss es ein InOut sein, da du möchtest, dass wenn bActive=false der Wert einfach nur durchgereicht wird.

Nach meinem eigenen CFC-Stil würde ich dem FB alle Eingänge für deine Tasten verpassen, und dann alles in ST schreiben damit die CFC-Pläne möglichst übersichtlich bleiben und sich nicht in Details verlieren.


Hallo Thomas,

vielen Dank für deine schnelle Rückmeldung.

Anbei der Code des FB_AddCode. (vor Anpassung)

FUNCTION_BLOCK FB_AddCode
VAR_INPUT
bActive : BOOL;
strCodeVorher:STRING;
strCodeZeichen:STRING;
END_VAR
VAR_OUTPUT
strCode:STRING;
END_VAR
VAR
END_VAR

IF bActive THEN
strCode := CONCAT (strCodeVorher,strCodeZeichen);
bActive := FALSE;
END_IF


Warum muss ich denn den Wert im False Fall durchleiten, weil eigentlich doch nur was ändern möchte, wenn ich ein Zeichen hinzufügen möchte?

Noch ne Frage am Rand, wenn ich den Bausteincode anpasse, dann passt sich verwendet Baustein nicht an. Muss ich wirklich den löschen und neu hinzufügen oder geht das auch anderes?

Grüße
Stefan
 
Noch ne Frage am Rand, wenn ich den Bausteincode anpasse, dann passt sich verwendet Baustein nicht an. Muss ich wirklich den loeschen und neu hinzufügen oder geht das auch anderes?

Neuer Code sieht so aus:

IF bActive THEN
strCodeOut := CONCAT (strCodeIn,strCodeZeichen);
ELSE
strCodeOut := strCodeIn;
END_IF

fbAddcode.PNG

Code.jpg

Ich würde nachher, wie Du schon geschrieben hast ,alles in ein CFC Baustein reinschrieben aber ich würde gern das Problem verstehen und die Lösung kennen.


Mit den Änderungen funktioniert jetzt Button 2 aber Button 1 nicht. D.h. 2 lässt sich hinzufügen aber 1 nicht.
Ne Idee?
 
Zuletzt bearbeitet:
Zurück
Oben