Cycflag aufbauen
- IrrerPolterer
- Erledigt
-
-
Hallo Polti,
wenn ifirst und ilast noch initialisiert sind, läuft dies.
Sehe aber nicht Grund dahinter.
Du überschreibst immer $cycflag[1] bei jedem For-Durchgang.
ist schlussendlich dasselbe wie:
$CYCFLAG[1]=$CYCFLAG[1] AND $IN[Ilast]Gruss SJX
-
wenn ifirst und ilast noch initialisiert sind, läuft dies.Geschieht beim Programmausfruf:
Du überschreibst immer $cycflag[1] bei jedem For-Durchgang.
$CYCFLAG[1]=$CYCFLAG[1] AND $IN[Ilast]
Beispiel:
Ich habe 12 Eingänge, die ich ständig z.B. durch Interrupt überwachen möchte. Je nach Produktgröße brauche ich aber einen verschiedenen Bereich. Bei Produkt X benötige ich z.B. Eingang 5-9, bei Produkt Y Eingang 3-11 usw. Zusätzlich kommt noch Eingang 840 dazu.CodeiFirst=5 iLast=9 $CYCFLAG[1]=$IN[840] FOR I= iFirst To iLast ;FOR I=5 to 9 $CYCFLAG[1]=$CYCFLAG[1] AND $IN[I] ENDFOR
Durchläufe der For-Schleife:
I | Definition von CYCFLAG
5 | $IN[840] AND $IN[5]
6 | $IN[840] AND $IN[5] AND $IN[6]
7 | $IN[840] AND $IN[5] AND $IN[6] AND $IN[7]
8 | $IN[840] AND $IN[5] AND $IN[6] AND $IN[7] AND $IN[8]
9 | $IN[840] AND $IN[5] AND $IN[6] AND $IN[7] AND $IN[8] AND $IN[9]So ist der Plan!
-
Code
Alles anzeigenDECL GLOBAL STRUC sCycFlagCfg INT nNoOfElements, E1, E2, E3, E4, E5, E6, E7, E8 DECL GLOBAL STRUC sState BOOL S1, S2, S3, S4, S5, S6, S7, S8 DECL GLOBAL sCycFlagCfg CFC = {nNoOfElements 5, E1 5, E2 6, E3 7, E4 8, E5 9, E6 0, E7 0, E8 0} DECL GLOBAL sState Stat = {S1 TRUE, S2 TRUE, S3 False, S4 TRUE, S5 TRUE, S6 TRUE, S7 TRUE, S8 TRUE} DEF CycFlagDef() Switch CFC.nNoOfElements Case 1 $CYCFLAG[1]=($IN[CFC.E1] = Stat.S1) Case 2 $CYCFLAG[1]=($IN[CFC.E1] = Stat.S1) AND ($IN[CFC.E2] = Stat.S2) Case 3 $CYCFLAG[1]=($IN[CFC.E1] = Stat.S1) AND ($IN[CFC.E2] = Stat.S2) AND ($IN[CFC.E3] = Stat.S3) Case 4 $CYCFLAG[1]=($IN[CFC.E1] = Stat.S1) AND ($IN[CFC.E2] = Stat.S2) AND ($IN[CFC.E3] = Stat.S3) AND ($IN[CFC.E4] = Stat.S4) Case 5 $CYCFLAG[1]=($IN[CFC.E1] = Stat.S1) AND ($IN[CFC.E2] = Stat.S2) AND ($IN[CFC.E3] = Stat.S3) AND ($IN[CFC.E4] = Stat.S4) AND ($IN[CFC.E5] = Stat.S5) Case 6 $CYCFLAG[1]=($IN[CFC.E1] = Stat.S1) AND ($IN[CFC.E2] = Stat.S2) AND ($IN[CFC.E3] = Stat.S3) AND ($IN[CFC.E4] = Stat.S4) AND ($IN[CFC.E5] = Stat.S5) AND ($IN[CFC.E6] = Stat.S6) Case 7 $CYCFLAG[1]=($IN[CFC.E1] = Stat.S1) AND ($IN[CFC.E2] = Stat.S2) AND ($IN[CFC.E3] = Stat.S3) AND ($IN[CFC.E4] = Stat.S4) AND ($IN[CFC.E5] = Stat.S5) AND ($IN[CFC.E6] = Stat.S6) AND ($IN[CFC.E7] = Stat.S7) Case 8 $CYCFLAG[1]=($IN[CFC.E1] = Stat.S1) AND ($IN[CFC.E2] = Stat.S2) AND ($IN[CFC.E3] = Stat.S3) AND ($IN[CFC.E4] = Stat.S4) AND ($IN[CFC.E5] = Stat.S5) AND ($IN[CFC.E6] = Stat.S6) AND ($IN[CFC.E7] = Stat.S7) AND ($IN[CFC.E8] = Stat.S8) Default Wait For False Endswitch END
-
-
Leider geht des halt net, man kann aber CycF[10] mit CycF[9], 8 mit 9, 7 mit 8 .... verknüpfen.
Hab da auch schon mal was angefangen. Ist aber noch nicht getestet!!!
Natürlich müssen die Laufzeitvariablen auf globale geschrieben werden - sonst geht's net -
Leider geht des halt net, man kann aber CycF[10] mit CycF[9], 8 mit 9, 7 mit 8 .... verknüpfen.Schade, war so'ne schöne Idee.
-
wie ist denn die Funktionsweise dieses Monsters?
Gruss $CYCFLAG
-
wie ist denn die Funktionsweise dieses Monsters?Gruss $CYCFLAG
Ein Vakuumgreifer mit 16 Saugern. Jeder Sauger hat einen Vakuumschalter und ein Ventil zum Abschalten. Von denen ich je nach Produktlänge nur einen gewissen Bereich brauche. (z.B. Sauger 3 bis 12) . Mit der geplanten CYCFLAG-Zusammenstellung hätte ich eine schöne Kontrolle, die per Interrupt auswerten könnte.
-
Hallo
Mir ist grad eine Möglichkeit durch den Kopf geschwirrt.
Bilde mit deinen iFirst bis iLast einen Gruppeneingang i_Ist.
Dann mach aus iFirst bis iLast eine Binärzahl i_Soll.z.B. 111=7Dann vergleiche für den Cycflag dein i_Ist und i_Soll.Wenn der Zustand deiner i_First bis i_Last sich ändert, ändert sich ja auch i_Ist.
Müßte eigentlich gehen, wenn deine Eingänge zusammenhängen.Vielleicht kann ja jemand daraus einen Code machen.MfG
-
Müßte eigentlich gehen, wenn deine Eingänge zusammenhängen.
Das dachte ich mir auch erst. Aber sie hängen natürlich nicht hintereinander.
Hmmmm, aber immer 4 in Folge und dann wieder 4 andere dazwischen...läßt sich dann auch regeln.
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!
Neues Benutzerkonto erstellen