# bedingte Zuweisung im FUP?



## McNugget (24 November 2009)

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


----------



## Ralle (24 November 2009)

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.


----------



## McNugget (24 November 2009)

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


----------



## Nospsguru (24 November 2009)

moin,

Rechtsklick auf den Baustein und dann EN/ENO

MfG

Nospsguru

Edit "sorry leider nur in CFC möglich"


----------



## McNugget (24 November 2009)

@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


----------



## zotos (24 November 2009)

Sozusagen ein altbekanntes Codesys-Problem (zumindest bei V2.x).

EN/ENO gibt es da nur in KOP und nicht in FUP ;o(


----------



## McNugget (24 November 2009)

Aha.. Das ist ja schon mal ne Info..

Und wie löse ich nun mein problemchen??

Gibt es da nen Weg??

Gruss

McNugget


----------



## NetFritz (24 November 2009)

Hallo


> @zotos
> EN/ENO gibt es da nur in KOP und nicht in FUP


Aber in CFC.
Gruß NetFritz


----------



## McNugget (24 November 2009)

... aber ich fragte nach FUP.

Gruss

McNugget


----------



## zotos (24 November 2009)

@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.


----------



## McNugget (25 November 2009)

@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


----------



## Cerberus (25 November 2009)

```
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


----------



## McNugget (25 November 2009)

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


----------



## Cerberus (25 November 2009)

McNugget schrieb:


> 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?
> 
> ...


 
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.


----------



## trinitaucher (25 November 2009)

Cerberus schrieb:


> ```
> IF SystemTaskInfoArr[1].firstCycle THEN
> Count_alt := Count;
> END_IF
> ...


----------



## Cerberus (25 November 2009)

trinitaucher schrieb:


> Wieso die Abfrage auf den FirstCycle?


 
Damit die Variable Count_alt einen Initialwert bekommt.


----------



## trinitaucher (25 November 2009)

Aja, macht Sinn!


----------



## trinitaucher (25 November 2009)

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).*


----------



## Cerberus (25 November 2009)

trinitaucher schrieb:


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


 
Wollte ich dir auch gerade vorschlagen, aber du hast es ja schon selber gefunden.


----------



## McNugget (25 November 2009)

@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)


----------



## DerSchneewolf (26 November 2009)

Hallo Cerberus,

solang deine Variablen <Count> und <Count_alt> nicht persistent oder retain sind kannst du das setzen bei FirstCycle sparen, da sie beide null sind.

DerSchneewolf


----------



## Cerberus (26 November 2009)

Nicht ganz. Sobald "Count" irgendwie von außen beeinflusst wird, muss ich das machen!


----------

