Variable togglen

AlphaRind

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forenmitglieder,

ich bin dabei, ein Programm für eine Wickelmaschine in Ablaufsprache zu schreiben und würde gerne einen Knopf realisieren, der das Programm anhält, sobald es durchgelaufen ist. Das würde ich gern anhand einer jederzeit umschaltbaren Variable umsetzen (eine Betätigung des Knopfs schaltet die Variable auf TRUE, eine weitere Betätitung wieder auf FALSE). Kann mir jemand sagen, wie ich das am besten mache?

Liebe Grüße, Leo
 
Ach kuck mal ... das Manfred dazu auch mal eine FAQ geschrieben hat hatte ich schon gar nicht mehr auf dem Schirm.

@TE:
In AS würden das 3 Schritte werden - aber ob das Sinn macht ...
Von S1 nach S2 wenn "Taste UN Ausgang"
Von S1 nach S3 wenn "Taste U Ausgang"
S2 setzt den Ausgang
S3 rücksetzt den Ausgang
Von S2 nach S1 wenn "UN Taste U Ausgang"
Von S3 nach S1 wenn "UN Taste UN Ausgang"

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hej - niemand ist perfekt ;)

Ich freu mich doch, wenn ich noch etwas dazulerne - beruflich hat man (zumindest ich) meistens nicht die Zeit für die eleganteste Lösung, sobald es irgendwie funktioniert kommt das nächste Problem auf den Tisch.... Nicht immer schön, aber leider nicht zu ändern.
 
Hallo,

Ihr habt mir schon sehr weitergeholfen! Als nächstes möchte ich den Stromstossschalter in einen eigenen Funktionsblock stecken und die getoggelte Variable (zum anhalten der Maschine nach durchlaufen des Programms) im Hauptprogramm von dort aus ansprechen. Meine Versuche sind leider bisher gescheitert, hat jemand einen Tip, wie ich das am besten anstelle?

MfG Leo
 
Geht es in Deiner Frage um das Anlegen eines Funktionsblockes oder das "ansprechen im Hauptprogramm"?

Prinzipiell gibt es zwei Möglichkeiten:
1. Du deklarierst Deine Variablen als Global, dann sind diese in jedem Programm, jedem Funktionsblock etc. bekannt

2. Du arbeitest in der Deklaration des Funktionsblockes mit Variablen vom Typ Var_Input bzw. Var_Output - damit erschaffst Du Dir Eingangs- und Ausgangs-"Pins" an Deinem Funktionsblock. Diesen musst Du dann nur noch im Hauptprogramm aufrufen und endsprechend beschalten (wie z.B. auch ein AND-Gatter)

Es gibt sicher noch andere, vielleicht elegantere Wege nach Rom, aber ankommen tust Du auf diesen beiden auch ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die schnelle Antwort!
Mir geht es darum, das toggle-Verhalten der Variable bei Aktivierung durch einen physikalischen Knopf zu definieren. Kleines Beispiel, um mein Anliegen zu verdeutlichen: Ich habe eine Lampe mit zwei Knöpfen, die beide aktiviert sein müssen, damit die Lampe leuchtet. Der eine Knopf ist nur solange aktiv, wie er gedrückt wird. Der andere Knopf bleibt nach einmaligen drücken dauerhaft aktiv, bis er wieder gedrückt wird. Ich bin mir sicher, das ist für die ehrwürdigen Foren-Gurus peanuts, ich steh aber grad echt auf dem Schlauch :lol:

MfG Leo
 
Nun, ich bin weder alt-ehrwürdig noch Foren-Guru, erdreiste mich aber trotzdem zu einer Antwort ;-)

Nehmen wir mal an, Du hättest Dich für die Variante 2 aus meinem obigen Post entschieden:


Du definierst Dir je eine Input- und Output-Variable,
In dem Netzwerk, in dem Du Deinen Stromstoßschalter(FB) aufrufst verknüpfst Du den nun erschienenen Eingang mit Deinem Taster 1 (der, der aktiv bleiben soll),
den nun beschaltbaren Ausgang legst Du auf ein UND, dessen zweiter Eingang Taster 2 ist (der, der nur beim drücken aktiv ist),
das Ergebnis dieses UND ist Deine Schaltfunktion :)

Anhang anzeigen neu-2.BMP
 
Hallo und danke für die Antwort!

Ich habe den Stromstoßschalter implementiert, aber wie bekomme ich ihn im Hauptprogramm angesprochen? Wenn es als Funktionsplan geschrieben wäre, würde ich einfach ein weiteres Netzwerk erstellen, aber leider ist es in Ablaufsprache geschrieben....

EDIT: Update: Habe den Stromstoßschalter in ein eigenes Programm gepackt und steuere die Variable im Hauptprogramm direkt an... das ganze ist zwar fehlerfrei, der Schalter hat jedoch seine Umschaltfunktion verloren? :confused:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du das Ganze in AS machen willst musst du nur die paar Zustände abfragen des Tasters aus dem ein Schalter werden soll:

Schritt 1:
Abfrage: Taste nicht gedrückt
Aktion: keine

Weiter zu Schritt 2
Abfrage: Taste gedrückt
Aktion: Bool Variable auf TRUE setzen

Weiter zu Schritt 3
Abfrage: Taste nicht gedrückt
Aktion: keine

Weiter zu Schritt 4
Abfrage: Taste gedrückt
Aktion: Bool Variable auf False setzen

Weiter zu Schritt 1


Würde natürlich niemand so machen aber wenn das unbedingt in AS geschrieben werden soll ist das eine praktikable Lösung. Zu beachten wäre natürlich, dass das Tastersignal auf keinen fall prellt, sonst schaltet diese Schrittkette unter Umständen die Variable ein und gleich wieder aus (über mehrere Zyklen). Zum Entprellen von Signalen verwendet man üblicherweise ein TON (Einschaltverzögerungsbaustein).


In Structured Text würde ich das so lösen:

Code:
VAR
xTaster : BOOL;
xOldTaster: BOOL;
xSchalter: BOOL;
END_VAR

IF xTaster AND NOT xOldTaster THEN
xSchalter := NOT xSchalter;
END_IF;
xOldTaster := xTaster;

Das Ganze noch mit TON:

Code:
VAR
xTaster : BOOL;
tonEntprellen: TON;
xOldTaster: BOOL;
xSchalter: BOOL;
END_VAR

tonEntprellen(
IN := xTaster,
PT := t#100ms
);

IF tonEntprellen.Q AND NOT xOldTaster THEN
xSchalter := NOT xSchalter;
END_IF;
xOldTaster := tonEntprellen.Q;
 
Ich glaub ich hab mich missverständlich ausgedrückt... der Schalter ist in Funktionsplan-Sprache geschrieben, das Hauptprogramm, in das er eingebunden werden soll, in AS :wink: Um mein Anliegen zu verdeutlichen, hier nochmal zwei Bilder:
Unbenannt.PNG
Unbenannt2.PNG

Der Schalter soll die Transition im Hauptprogramm weiterschalten. Bisher habe ich das so gemacht, dass ich den Schalter in ein eigenes Programm namens Stromstossschalter getan hab im Hauptprogramm die Variable Schalter durch Stromstosschalter.Schalter aufgerufen hab. Wie gesagt ist das Programm offiziell fehlerfrei, in der Simulation funktioniert es allerdings nicht, wie es soll...
 
in der Simulation funktioniert es allerdings nicht, wie es soll...
Du hast ja beschrieben was es tun SOLL, aber was macht es denn im Moment?
Wenn Du in der Simulation mal in den Stromstoßschalter rein schaust - wird dieses Programm tatsächlich ausgeführt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo AlphaRind,

ich glaube es hat noch niemand ein wahrscheinlich sehr einfaches Problem so schwierig und kompliziert erklärt wie du. Wenn du von "offiziell fehlerfrei" sprichst meinst du sicherlich syntaktisch korrekt.

Nun versuche ich zu verstehen was du möchtest.
1. Du hast ein Programm in FUP geschrieben der das Thema "Taster zu Schalter" umsetzt. Hier gibt es eine Variable Schalter.
2. Du hast ein Hauptprogramm in dem du eine Variable Schalter verwendest als Übergangsbedingung/Transition.
==> Die Variable Schalter im Hauptprogramm schaltet nicht - richtig?

Meine Vermutung:
1. Du hast die Variable "Schalter" im Unterprogramm "Taster zu Schalter" deklariert und auch nochmal im Hauptprogramm in dem deine AS Geschichte steht. Du denkst weil die den selben Namen haben ist es auch die selbe Variable
2. Du hast die Variable Schalter global deklariert und außerdem nochmal lokal im Unterprogramm oder im Hauptprogramm ==> Die des entsprechenden Programms überschattet die globale
3. rateraterate

wie wäre es wenn du einfach mal dein Programm hochlädst.
 
Zurück
Oben