Hello Guest it is April 29, 2024, 07:30:38 AM

Author Topic: Mach 4 Flankenerkennung bei Tasteneingaben im PLC-Script  (Read 349 times)

0 Members and 1 Guest are viewing this topic.

Mach 4 Flankenerkennung bei Tasteneingaben im PLC-Script
« on: November 06, 2023, 03:06:46 AM »
Hallo zusammen,

ich bin neu im Forum und stelle mich kurz vor. Ich bin Thomas, 60 Jahre alt und habe meine Portalfräse nach 10 Jahren von Stepperantrieben auf Servos umgebaut. Dabei auch gleich den Wechsel auf Mach 4 durchgeführt. Ich fräse überwiegend Holz. Im speziellen Modulkästen nach FREMO-Norm für die Modellbahn. Die Fräse läuft spitze nach dem Umbau und es gibt nichts zu meckern. Gleichzeitig setze ich ein neues Handrad ein, mit dem ich sehr zufrieden bin. Ohne Werbung machen zu wollen handelt es sich um das DIY-Handrad von cnc-handrad.
Das Handrad besitzt einen frei programmierbaren Tastenblock. Die gedrückte Taste wird als Integerwert über den Modbus gesendet. Als Beispiel die erste Taste. Wird sie gedrückt liefert sie über den Modbus die 1 zurück. Wird sie losgelassen eine 0. Bis hierhin logisch und einfach. Ausgewertet wird das gesamte Handrad über das PLC-Script des Screens. Der Datenaustausch zwischen Mach4 und dem Handrad läuft bidirektional, so dass alle Betriebszustände und die wichtigen DRO's immer auf dem gleichen Stand sind. Das alles klappt super und funktioniert einwandfrei.
Jetzt zu meinem Problem.
Da das PLC-Script zyklisch durchlaufen wird entsteht ein Problem, wenn man mit so einer Taste eine Funktion Ein->Aus->Ein-> Aus -> usw. schalten will. Das geht eigentlich nur mit einer Flankenauswertung auf die steigende Flanke. Ohne Flankenauswertung flackert der Ausgang immer dann, wenn die Taste nicht getastet, sondern festgehalten wird. Den richtigen Zeitpunkt zu erwischen ist dann sehr schwierig, zumal das Script alle 25-50ms durchlaufen wird. Die Variable "val_input" liefert dabei den Tastencode.
   
Der Code mit Flankenauswertung könnte so aussehen. (Sieht so aus, funktioniert aber nicht!)

Code: [Select]
-- Absaugung EIN/AUS -------------------------
osigabs = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT1) --Absaugung Start/Stop
Stateabs = mc.mcSignalGetState(osigabs)
if (val_input == 1) and (Flankenmerker== 0) then  --Taste 1 Trigger rising
   if (Stateabs == 0) then                                    -- Schalte Ausgang abhängig vom Status
       mc.SignalSetState(osigabs, 1)
   else
      mc.SignalSetState(osigabs, 0)
   end
   Flankenmerker = 1;                                         -- Der Flankenmerker verhindert jeden weiteren Durchlauf
elseif (val_input == 0) and (Flankenmerker == 1) then  -- Sobald die Taste losgelassen wird wartet der Code auf die nächste steigende Flanke. (Scharfschaltung auf gedrückte Taste warten)
      Flankenmerker = 0;
end

Das Ganze würde so prima funktionieren zumal ich diesen Konstrukt bei allen Siemens-SPS'en zur Flankenauswertung in SCL verwende. Mein Problem ist die statische Variable für den "Flankenmerker". Die Variable Flankenmerker muss irgendwo im Script initialisiert werden. Das führt aber dazu, dass der Wert nicht abhängig vom letzten Tastendruck für den nächsten Zyklus gespeichert wird, sondern die Initialisierung den Wert überschreibt.
Meine Frage: Kennt jemand einen Weg das Problem in LUA zu lösen, oder stelle ich mich zu dämlich bei der Initialisierung an. In Mach 3 hatte ich für solche Fälle einen versteckten Screen und habe dort eine LED als Flankenmerker benutzt. Das wurde dann von der Macropumpe ausgewertet und hat super funktioniert. Das hat seinen Zweck erfüllt, aber ich empfand es immer als Krücke. In Mach 4 sollte das doch bestimmt eleganter zu lösen sein.

Viele Grüße Thomas
Re: Mach 4 Flankenerkennung bei Tasteneingaben im PLC-Script
« Reply #1 on: November 06, 2023, 04:17:13 PM »
Hallo zusammen,

das Problem ist gelöst. Die globale Variable "Flankenmerker" muss dazu einfach im "Screen Load Script" mit 0 initialisiert werden. Da alle Screen-Scripte den gleichen Namensraum verwenden sind alle globalen Variablen untereinander bekannt.

Viele Grüße
Thomas