laut Doku muß ein Unterprogramm-Name (und ggfls. Parameter) in der Interrupt-Deklaration angegeben werden. (INTERRUPT DECL Priorität WHEN Ereignis DO Unterprogramm) Bei dir ist das aber eine Anweisung, von daher wird das so nicht funktionieren...
...und selbst wenn du eine Interrupt-Routine schreiben würdest, in der Test_var1by reference übergeben und manipuliert werden soll würde es nicht funktionieren, weil (unterprogramm-)lokale Variablen nicht an Interrupt-Routinen übergeben werden dürfen. (oder soll test1() kein UP sein ?)
INTERRUPT DECL 17 WHEN $FLAG[1]==TRUE DO Test_var1=TRUE
Ist nicht zulässig, da als Reaktion auf einen ausgelösten Interrupt eine Interruptroutine verwendet werden muss.
Code
INTERRUPT DECL 17 WHEN $FLAG[1]==TRUE DO IR_FLAG1(Test_var1)
.
.
.
END
DEF IR_FLAG1(Test_var1:OUT)
BOOL Test_var1
Test_var1 = TRUE
END
Alles anzeigen
Ist auch nicht zulässig, da einer Interruptroutine keine Laufzeitvariablen übergeben werden können. (Test_var1 müsste also eine globale Variable sein.)
Code
DEF test1 ( )
INI
BOOL Test_var1
INTERRUPT DECL 17 WHEN $FLAG[1]==TRUE DO Test_var1=TRUE
.
.
.
Alles anzeigen
Das würde ich sowieso nicht so kompliziert mit einem Interrupt machen. Sondern einfach mit einem $CYCFLAG:
Code
DEF test1 ()
INI
$CYCFLAG[irgendeineNr] = FALSE
$CYCFLAG[irgendeineNr] = $FLAG[1] OR $CYCFLAG[irgendeineNr]
.
.
.
Alles anzeigen
Dann heisst deine verwendete Variable einfach nicht Test_var1 sondern $CYCFLAG[irgendeineNr].
Das geht natürlich nur, wenn du nicht auf die einmalige Flankentriggerung angewiesen bist. Sonst müsste das noch ein bischen komplizierter gemacht werden oder aber eine Test_var1 als eine globale Variable deklariert werden.
Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!