bedingte Zuweisung im FUP?

McNugget

Level-1
Beiträge
220
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits.

Ich habe mal eine Frage zu FUP in CoDeSys:

Wie mache ich eine bedingte Zuweisung in FUP?

In ST kann ich es, aber ich will nicht unbedingt wieder einen Baustein schreiben, den ich aufrufen muss, das muss doch auch in FUP gehen.

Beispiel:

Wenn DI_01 = True

Dann weise der Variable B (Integer) den Wert von Variable A (Integer) zu.

Wie geht das?

Danke schon mal für´s Lesen .


Gruss

McNugget
 
Einen Und-Baustein in FUP, und dahinter ein Move, daß, wenn der Und-Baustein Ergebnis True führt (DI_01 UND True), die Variablen umkopiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Ralle.

Move hat in FUP nur einen ein- und einen Ausgang.

Dann müsste ich es in das nächste Netzwerk legen und mit Sprungmarken arbeiten, oder wie meinst Du das?

Gäbe es auch eine Möglichkeit, das Ganze in einem einzigen Netzwerk abzuhandeln?

Gruss

McNugget
 
moin,

Rechtsklick auf den Baustein und dann EN/ENO

MfG

Nospsguru

Edit "sorry leider nur in CFC möglich"
 
Zuletzt bearbeitet:
@Nopsguru:
Vielen Dank für die Antwort, aber das klappt leider nicht. Sehe keinen Punkt, an dem in einen EN-Eingang hinzufügen könnte.

Sicher, dass Dein Tipp für CoDeSys galt?


Gruss

McNugget
 
@McNugget: Schau Dir mal den SEL Baustein (in der Hilfe) an. Oft ist der sogar besser geeignet als ein MOVE. Zumindest dann wenn man zwei werte umschalten möchte. Zur Not kann man damit aber auch ein MOVE nachbilden in dem man den Eingang in den Ausgangschreibt wenn das Steuerbit False ist.
 
@zotos: Super! Vielen Dank. Es tut wie es soll. ;-)


Noch eine Frage:
Wie kann ich in FUP und ST feststellen (oder eine Aktion auslösen) sobald ein INT-Wert sich einfach nur verändert?

Beispiel: Ich möchte eine überwachen, ob ein Zähler den Wert verändert.

Gruss

McNugget
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
VAR
   Count: INT;
   Count_alt: INT;
END_VAR
 
 
IF SystemTaskInfoArr[1].firstCycle THEN
   Count_alt := Count;
END_IF
 
IF Count <> Count_alt THEN
   (* Hier kommt deine Aktion rein *)
END_IF
 
Count_alt := Count;

Damit sollte es funktionieren. Um das SystemTaskInfoArr zu nutzen musst du die TcSystem.lib einbinden.

Gruß Cerberus
 
Danke schön.

Liesse sich das auch im FUP ausdrücken, oder hat es keinen Einfluss auf die Performance, wenn ich mitten im FUP ST-BAuteine refernzieren muss?

Aktuell läuft mein Haupttask bei 800 us, was ich ganz ordentlich finde und gerne so ähnlich beibehalten möchte.

Gruss

McNugget
 
Danke schön.

Liesse sich das auch im FUP ausdrücken, oder hat es keinen Einfluss auf die Performance, wenn ich mitten im FUP ST-BAuteine refernzieren muss?

Aktuell läuft mein Haupttask bei 800 us, was ich ganz ordentlich finde und gerne so ähnlich beibehalten möchte.

Gruss

McNugget

Das kann in FUP kann ich dir leider nicht liefern. Das kann ich selber nicht. Kann mir aber nicht vorstellen dass es Auswirkungen auf deine Performance hat, wenn du das Ganze in einen ST-FB machst und diesen aus FUP heraus aufrufst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
IF SystemTaskInfoArr[1].firstCycle THEN
   Count_alt := Count;
END_IF
[/QUOTE]
Wieso die Abfrage auf den FirstCycle?

[QUOTE="McNugget, post: 229439, member: 12635"]
Wie kann ich in FUP und ST feststellen (oder eine Aktion auslösen) sobald ein INT-Wert sich einfach nur verändert?

Beispiel: Ich möchte eine überwachen, ob ein Zähler den Wert verändert.
[/QUOTE]

Allgemein für FUP: Sowas wie im Anhang?

Wenn der neue Wert größer oder kleiner als der alte ist wird das Alarm-Bit gesetzt.
Man muss natürlich am Ende eines Zyklus oder bei der Ermittlung des neuen Wertes diesen in die Variable iWertAlt kopieren.
 

Anhänge

  • alarm.gif
    alarm.gif
    6,1 KB · Aufrufe: 57
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachtrag zu meinem Programmvorschlag:

Es geht auch mit EQ und MOVE. (oder wie bekomme ich das Ergebnis des EQ negiert ohne MOVE?)

Alternativ kann man den Alarm an sich natürlich negiert abfragen.

edit:
Noch einfacher: Es gibt ja den Operator "NE" (not equal).
 

Anhänge

  • alarm.gif
    alarm.gif
    2,4 KB · Aufrufe: 41
Zuletzt bearbeitet:
@Trinitaucher: Geil. Dass es so einfach gehen kann, hätte ich nicht gedacht. Vielen Dank!

@Cerberus: Vielen Dank.

Hinzuzufügen wäre noch, dass diese Funktion im FUP natürlich VOR dem Netzwerk sein muss, in dem sich der beobachtete Wert verändert. ;-)
(*angeb*)

Dass ich es jetzt in beiden Varianten habe, bringt mir und meinem Lernen sehr viel.

Vielen vielen Dank, dass Ihr Euch so viel Mühe gebt.


Gruss

McNugget

P.S.: (Ich hoffe es wird nicht als Crossposting gesehen.)
Habt Ihr auch eine Idee, was ich machen kann, um verschiedene Stati auszumaskieren um Fehlermeldungen zu generieren und Fehlercounter anzusteuern??

(siehe Ende dieses Threads:
http://www.sps-forum.de/showthread.php?t=31471&page=2)
 
Zurück
Oben