Hallo,
wie kann ich am besten einen Analogeingangswert auf ein bestimmtes Minimum während
der Bewegung konstant überwachen??
SPS.sub gefällt mir nicht so!
Gruss $CYCFLAG
Hallo,
wie kann ich am besten einen Analogeingangswert auf ein bestimmtes Minimum während
der Bewegung konstant überwachen??
SPS.sub gefällt mir nicht so!
Gruss $CYCFLAG
Hallo,
na mit 'nem Interrupt vielleicht?
decl Interrupt 2 when anin<0.5 do .... (oder so ähnlich)
Hermann
Warum funktioniert diese Interruptdeklaration nicht?
GLOBAL DEF CHANGE_PRESSURE (iTyp :IN,iSectionNr :IN,iPressure :IN,eChk :IN)
INT iSectionNr,iPressure,iPressureTemp,iTol,iTyp
DECL CHK_PR eChk
iTol=1
IF (iTyp==1) THEN
INTERRUPT OFF 10
CONTINUE
AO_Druck=iPressure
IF (eChk==#YES) THEN
REPEAT
BRAKE
iPressureTemp=iPressure
UNTIL (AI_DRUCK >= (iPressureTemp-iTol))
ENDIF
ELSE
INTERRUPT DECL 10 WHEN (AI_DRUCK < (iPressureTemp-iTol)) DO ErrorInSection[iSectionNr]=TRUE
ENDIF
END
na ja, hier liegen 3, vielleicht auch 4 Gründe vor:
1. Die Variable iPressureTemp ist nur während der Laufzeit des Programms bekannt.
Wenn der Interrupt immer funktionieren soll, muss diese global deklariert werden.
Das gleiche gilt auch für: iSectionNr und iTol
2. Ebenfalls ist die Interruptdeklaration nur während der Laufzeit des Programms
bekannt. Die Zeile in GLOBAL INTERRUPT ... ändern.
3. Interrupt on fehlt
4. Berechnungen in der Interruptdeklaration sind nicht möglich. Wenns so sein soll,
muss man sich mit einem $CYCFLAG helfen.
Berrad
Muss in der Interruptdeklarationszeile nicht ein Unterprogramm aufgerufen werden ?
Ich wusste gar nicht, das auch ein Setzen einer Variable möglich ist. Wird das Programm
nicht als fehlerhaft angezeigt ? javascript:replaceText('%20',%20document.forms.postmodify.message);
Moin!
den Interrupt muss man doch wie alle Declarationen im Deklarationsteil vornehmen, oder?Im laufenden Programm wird dieser nur noch ein-, und ausgeschaltet.Im Interruptprogramm selbst kann man auch Wertzuweisungen vornehmen, allerdings nicht in der Declarationszeile. Und immer schön auf den Vorlauf achten, der hat mir schon so manch eine Überraschung bereitet.
Interrupts kann man zu jeder Zeit deklarieren.
Sollte ein Interrupt der schon benutzt ist in einem UP neu deklariert werden,
ist dieser nach Abarbeitung des UP's nicht mehr gültig. Auch nicht der Int der im aufrufendem Programm aktiv war!
DEF Hauptprog()
DECL INTERRUPT 10 WHEN....
UP99()
Ab hier ist kein Interrupt 10 mehr aktiv!
END
DEF UP99
DECL INTERRUPT 10 WHEN...
END
Hallo,
beim $CYCFLAG gehen doch nur Boolsche ausdrücke oder?
aus der Doku:
$CYCFLAG[1]$CYCFLAG[32] haben den Datentyp BOOL. Bei einer Zuweisung an ein
zyklisches Flag kann ein beliebiger bool’scher Ausdruck verwendet werden
Gruss $CYCFLAG
Alles anzeigen
Hallo,
beim $CYCFLAG gehen doch nur Boolsche ausdrücke oder?
aus der Doku:
$CYCFLAG[1]$CYCFLAG[32] haben den Datentyp BOOL. Bei einer Zuweisung an ein
zyklisches Flag kann ein beliebiger bool’scher Ausdruck verwendet werden
Dann müsste aber folgendes gehen:
REAL TESTVAR=0.0
$CYCFLAG[1]=(TESTVAR > 0.5)
Kann ich aber leider gerade nicht testen. Also lieber prüfen!
Dann müsste aber folgendes gehen:
REAL TESTVAR=0.0
$CYCFLAG[1]=(TESTVAR > 0.5)
Kann ich aber leider gerade nicht testen. Also lieber prüfen!
@ IrrerPolterer, yes geht wenn TESTVAR GLOBAL!!!
@ IrrerPolterer, yes geht wenn TESTVAR GLOBAL!!!
Klar. Sowas vergesse ich gerne mal.
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können