Interrupt durch Task

Trafel

Level-1
Beiträge
26
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
AS-Aktion zurücksetzen oder bei Init starten lassen

Hallo,

Ich hab versucht mittels Task (in Taskkonfiguration) einen Interrupt zu realisieren:

rewrwe.jpg

Ich hab einen Task namens "Interrupt" angelegt und hab ihn als Typ "Status" sowie Priorität = 0 (höchste) gegeben, so müsste doch bei dem Ereignis auftritt E3_2 = True (E3_2 ist ein Schalter) das Programm im PLC_PRG stoppen und die POU Interrupt aufrufen. Nur leider passiert rein garnichts bei Betätigung des Schalters, das Programm PLC_PRG läuft einfach weiter. :/
 
Zuletzt bearbeitet:
Wenn die Interruptroutine abgelaufen ist, läuft die normale Taskbearbeitung weiter. Je nachdem was die POU Interrupt macht, siehst Du davon nix.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich denn die normale Taskbearbeitung beenden wenn die E3_2 betätigt wird?

Ich hatte in der Interrupt POU als letzten Schritt den Verweis auf den PLC_PRG Initialschritt gesetzt, weil ich vorrausgesetzt habe das PLC_PRG abgebrochen wird.
 
Niemand eine Idee? :/

Wollte es eigentlich mit einer ausgelagerten Aktion versuchen, das Problem ist nur, das PLC_PRG nicht stoppt, wenn die Aktion ausgeführt werden sollte.
 
Warum willst Du denn überhaupt das PLC_PRG stoppen?

Das macht bei einer SPS keinen Sinn!

Du könntest dein Programm in einen FB/FC packen und diesen nur bedingt aufrufen... aber ob das Sinn macht?
Was hast Du denn vor?

Grüße

Marcel
 
Ähm, dazu brauchts doch keinen Interrupt?! Das ist eine normal zu implementierende Stop/Reset-Funktion.
Eine NOT-Stop-Funktion ist davon unabhängig auszuführen.
 
Wenn Du die Steuerung unbedingt stoppen willst, mach einfach sowas hier:

pbStopp: POINTER TO BYTE;
pbStopp = 0;
pbStopp^=1;

:)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Trafel

In AS hätte ich jetzt gesagt, machst Du in jedem Schritt die Abfrage auf Stop/Reset und springst dann zu einem Ablaufzweig, der alles entweder Stoppt oder geregelt auf Initialposition bringt. Die Abfrage in jedem Schritt ist insofern notwendig, weil immer nur der Code des aktuellen Schritts bearbeitet wird. Ich befass mich normal nicht mit AS (obwohl ich es möglicherweise sollte), weil die Schrittabläufe in ST per Case sehr schön flexibel sind.
 
@weißnix_

Danke für den Tipp!

Wenn ich das richtig verstanden habe, würdest du nach jedem Schritt eine Alternativ-Verzweigung einfügen oder kann ich noch anders als eine Transitionsbedingung einen Eingang abfragen?
 
Nicht nach jedem Schritt, sondern in jedem Schritt. Du kannst an jeden Schritt einen zyklischen Ablauf in beliebiger Programmiersprache anhängen. Das schreit geradezu nach einem Test auf Abbruchbedingung. Die kannst Du dann mit einem Jump erfüllen. Ist zwar ein Programmierstil wie zu BASIC-Zeiten, aber was soll's.
Der Sprung könnte in einen Parallelzweig führen, der alle Aktoren Deiner Waschanlage koordiniert in Ausgangslage zurückbringt.
Wie gesagt - AS passt nicht zu meinen normalen Problemen. Auf meinem Läppi hab ich die 64bit-Version (also ohne Runtime) daher kann ich es jetzt nicht mal eben durchexzerzieren, was mir da vorschweben ürde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nicht nach jedem Schritt, sondern in jedem Schritt. Du kannst an jeden Schritt einen zyklischen Ablauf in beliebiger Programmiersprache anhängen. Das schreit geradezu nach einem Test auf Abbruchbedingung. Die kannst Du dann mit einem Jump erfüllen. Ist zwar ein Programmierstil wie zu BASIC-Zeiten, aber was soll's.
Der Sprung könnte in einen Parallelzweig führen, der alle Aktoren Deiner Waschanlage koordiniert in Ausgangslage zurückbringt.
Wie gesagt - AS passt nicht zu meinen normalen Problemen. Auf meinem Läppi hab ich die 64bit-Version (also ohne Runtime) daher kann ich es jetzt nicht mal eben durchexzerzieren, was mir da vorschweben ürde.

Danke! Hat ein wenig gedauert :ROFLMAO: aber hab jetzt verstanden was du meinst, ich werde es die Tage versuchen zu implementieren.
 
Hallo,

Irgendwie möchte das nicht so, wie ich es mir vorgestellt habe:

Anhang anzeigen 33709

Ich hab die Aktion versucht so zu definieren. Ich bin davon ausgegangen das, bei einem aktiven Schritt der Aufruf der Aktion mit den "N" Qualifizierer immer wieder erneut aufgerufen wird. Es also immer wieder zur erneuten Abfrage der Alternativ-Verzweigung kommt,
wo "E2_3 false" bedeuted das der Schalter nicht betätigt ist.

Wenn er betätigt wurde, sollte das Makro alle Komponenten wieder an ihren Ausgangspunkt fahren und anschließend zum PLC_PRG Initialschritt springen. Nur teilt mir das Programm mit, das dieser Initialschritt nicht definiert ist, allgemein kann ich keinen Schritt ausserhalb der Aktion anspringen. :/
 
Also, ich würde an die Sache ganz anders rangehen:

Eine Schrittkette für den normalen Automatikablauf (Betriebsart "Auto"). Voraussetzung für den Start der Schrittkette ist eine Grundstellung der Anlage und der Anlagenstart (z.B. Flanke des Starttasters) natürlich.

Damit ich die Anlage in die nötige Grundstellung fahren kann, benötigt die Anlage eine Betriebsart "Grundstellung fahren". Dafür würde ich eine seperate Schrittkette anlegen, die nur dann abgearbeitet wird, wenn die Anlage in dieser Betriebsart keine Grundstellung hat.

Dann noch die Betriebsart "Hand" um die Aktorik manuell zu verfahren. Und schon hat man grundsätzlich alles was man erstmal für den Betrieb braucht.

Um die Schrittketten zu initialiseren/zurückzusetzen (z.B. bei Betriebsartenwechsel) und ablaufen zu lassen, sind die SFC Flags sehr sinnvoll. Einfach mal nach suchen...

Gruß und viel Erfolg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, ich würde an die Sache ganz anders rangehen:

Eine Schrittkette für den normalen Automatikablauf (Betriebsart "Auto"). Voraussetzung für den Start der Schrittkette ist eine Grundstellung der Anlage und der Anlagenstart (z.B. Flanke des Starttasters) natürlich.

Damit ich die Anlage in die nötige Grundstellung fahren kann, benötigt die Anlage eine Betriebsart "Grundstellung fahren". Dafür würde ich eine seperate Schrittkette anlegen, die nur dann abgearbeitet wird, wenn die Anlage in dieser Betriebsart keine Grundstellung hat.

Dann noch die Betriebsart "Hand" um die Aktorik manuell zu verfahren. Und schon hat man grundsätzlich alles was man erstmal für den Betrieb braucht.

Um die Schrittketten zu initialiseren/zurückzusetzen (z.B. bei Betriebsartenwechsel) und ablaufen zu lassen, sind die SFC Flags sehr sinnvoll. Einfach mal nach suchen...

Gruß und viel Erfolg

Danke, die Stopp Bedingung funktioniert mittels Flag. Nur setzt sich bei Abbruch die Schrittkette nicht zurück. Gibt es dazu einen extra Befehl? Hab es versucht mittels "R" Qualifiziert zurückzusetzten, was aber leider nicht funktioniert. Sobald ich das Waschprogramm wieder, startet die Schrittkette ab dem punkt wo sie abgebrochen wurde und nicht beim Initialschritt.
 
Zuletzt bearbeitet:
Ich hatte etwa so eine Struktur im Sinne:
Unbenannt.PNG
Es kam mir jetzt nicht auf Schönheit an. Schritt 2, 3 und 5 enthalten beispielsweise den normalen Ablauf. Gleichzeitig wird per unterlagertem Programm in jedem Schritt auf Abbruchbedingung geprüft und dadurch in den Alternativzweig verzeigt. Step 4 enthält dann das koordinierte Zurücksetzen und den Rücksprung nach Init.
(Nach Schritt 1 sollte dann noch i2 and not i3a eingefügt werden)
Ist nur so eine Idee, weil das Zurückfahren der Anlage unter Umständen noch mehrschrittig ausgeführt werden muss. Es steht ja schließlich ein Auto drunter.
 
Zuletzt bearbeitet:
Ich hatte etwa so eine Struktur im Sinne:
Anhang anzeigen 33732
Es kam mir jetzt nicht auf Schönheit an. Schritt 2, 3 und 5 enthalten beispielsweise den normalen Ablauf. Gleichzeitig wird per unterlagertem Programm in jedem Schritt auf Abbruchbedingung geprüft und dadurch in den Alternativzweig verzeigt. Step 4 enthält dann das koordinierte Zurücksetzen und den Rücksprung nach Init.
(Nach Schritt 1 sollte dann noch i2 and not i3a eingefügt werden)
Ist nur so eine Idee, weil das Zurückfahren der Anlage unter Umständen noch mehrschrittig ausgeführt werden muss. Es steht ja schließlich ein Auto drunter.

Danke für die Idee, wenn ich nicht herauskriege wie man eine POU-Aktion zurücksetzt, werde ich es wohl so umsetzen, zumindestens bin ich dann fertig. ^^ Bei ca 120 Schritten, werden das nur sehr viele Verzweigungen. :D

P.S. Ich hab unter Codesys Hilfe wie Newbie schon erwähnt die SFC-Flags entdeckt. Weiß jemand wie ich die SFCinit-Flag einer POU-Aktion zuordne? Die Syntax in der Hilfebeschreibung ist leider falsch.
 
Dank dir weißnix_ , hab jetzt schon ein paar mal mit der Syntax der Flags rumgespielt...

Auf jedenfall funktioniert die Beschreibung in der Codesys Hilfe nicht, bzw gibt Fehlermeldungen, wahrscheinlich weil diese für Programme beschrieben sind und nicht für Aktionen.

Ich habe die Schrittketten in Aktionen ausgelagert, nicht in seperate Programme. Ich kann zwar die Flags unter den AS-Einstellungen bei den Aktionen deklarieren und aktivieren, nur kann ich diese nicht innerhalb eines Schrittes aufrufen um diese zu Reseten. :/
 
Zurück
Oben