TIA SCL: Wie funktioniert die direkte ENO-Weitergabe analog zu KOP/FUP?

hucki

User des Jahres 2014
Beiträge
6.648
Reaktionspunkte
2.340
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

in KOP (FUP) kann ich den Rückgabewert des ENO einer FC direkt einem BOOL zuweisen:
1656502137998.png

Diese Zuweisung bekomme ich auch in SCL hin:
..., ENO => #Switch);


Funktioniert unter SCL auch das direkte Setzen eines BOOL durch den ENO, wie es unter KOP (FUP) möglich ist?
1656502353435.png

Wenn ja, wie sieht dafür die Syntax aus?
Oder muss ich bei SCL doch mit einer Zwischenvariablen und IF..THEN arbeiten?


Und sicherheitshalber:
TIA V16
S7-1214C
 
Zuletzt bearbeitet:
Moin Hucki,

habe auf die Schnelle nichts in der TIA-Hilfe gefunden.
In Step7 war es so beschrieben:

1656507353240.png

Vielleicht hilft's ja weiter...
Gruß
Jens

PS: Demnach müßte ja
#Switch := ENO;
funktionieren...
Aber für ein SET wirst Du wohl ein IF bemühen müssen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...

PS: Demnach müßte ja
#Switch := ENO;
funktionieren...
:unsure:
Das hatte ich in der Hilfe auch gefunden und probiert.

Bei meiner FC war dann allerdings diese Zuweisung immer TRUE, obwohl das der FC-ENO definitiv nicht war.
Daher hatte ich dann die Zuweisung direkt bei den Parametern des FC-Aufrufs ..., ENO => #Switch); probiert, und so folgte wenigstens #Switch auch dem ENO.


Hab' das nochmal schnell zum testweisen Vergleich eingetippt:

1656509159571.png



Trotzdem vielen Dank.
 
Zuletzt bearbeitet:
Kann es sein, daß Du in den Eigenschaften des Bausteins noch "Setze ENO automatisch" einschalten mußt?
Es kann sein, daß sonst der Baustein-ENO nicht in das ENO-Lokaldatenbit geschrieben wird!???

Hab es noch nie benutzt... 🤷‍♂️
 
Kann es sein, daß Du in den Eigenschaften des Bausteins noch "Setze ENO automatisch" einschalten mußt?
Es kann sein, daß sonst der Baustein-ENO nicht in das ENO-Lokaldatenbit geschrieben wird!???

Hab es noch nie benutzt... 🤷‍♂️
Du meinst, bei dem übergeordneten Baustein, in dem der FC-Aufruf erfolgt?
Werde ich probieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Variable ENO ist das eigene ENO des Bausteins, der da programmiert wird, nicht das ENO des aufgerufenen Bausteins. Will man das ENO des aufgerufenen Bausteins verarbeiten, dann müsste man es bei den Übergabeparametern verschalten (wie hucki in #3 das macht): xyzBaustein(..., ENO => #boolVar)
(Das habe ich aber noch nie ausprobiert.)

Harald
 
Zuletzt bearbeitet:
Also laut diversen Foreneinträgen bei Siemens und auch hier


sollte man es direkt benutzen können.
Was vermutlich Deine erste Aussage
Die Variable ENO ist das eigene ENO des Bausteins, der da programmiert wird, nicht das ENO des aufgerufenen Bausteins.
nicht in Abrede stellt.
Aber das "eigene" ENO müßte/sollte ja durch den Aufruf des anderen Bausteins beeinflußt werden. Oder sehe ich das falsch?

Auf jeden Fall gibt es anscheinend in den Bausteineigenschaften noch einen Haken "ENO setzen", ob der nun im übergeordneten Baustein oder im eigenen gesetzt werden muß? Im Zweifel in beiden.
Habe ENO in SCL noch nie benutzt, daher sind das alles nur Vermutungen... basierend auf den Häppchen Informationen, die man dazu findet ;-)
 
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Haken "ENO setzen" ist dafür gut, daß das eigene ENO bei Fehlern beeinflusst wird, z.B. Bereichsüberschreitungen bei Berechnungen. Das ENO von aufgerufenen Bausteinen dürfte keinen Einfluß auf das eigene ENO haben.

Harald
 
:unsure:
Das hatte ich in der Hilfe auch gefunden und probiert.

Bei meiner FC war dann allerdings diese Zuweisung immer TRUE, obwohl das der FC-ENO definitiv nicht war.
Daher hatte ich dann die Zuweisung direkt bei den Parametern des FC-Aufrufs ..., ENO => Switch); probiert, und so folgte wenigstens #Switch auch dem ENO.


Hab' das nochmal schnell zum testweisen Vergleich eingetippt:

Anhang anzeigen 62029



Trotzdem vielen Dank.

Genau das habe ich auch beobachtet und das verwirrt etwas mit der Beschreibung aus der Hilfe:



Setzt du aber beim Aufrufenden Baustein in den Attributen diesen haken, dann funktioniert es:

1656511838149.png


-chris



EDIT:
Um dann deine IF-Abfrage zu sparen fürs setzen deiner Variable #switch kannst du einfach nach dem Bausteinaufruf z.B. folgendes machen:

Code:
"Baustein_1"();
#switch := ENO OR #switch;

Ob es nun Eleganter ist als die IF-Abfrage sei dahingestellt :D
 
Zuletzt bearbeitet:
Code:
FUNCTION "FC_Takt_ENO" : Void
   VAR_INPUT
      Takt : Bool;
   END_VAR

ENO := #Takt;

END_FUNCTION

FUNCTION "FC_SCL_ENO" : Void
   VAR_OUTPUT
      Out1_CLK : Bool;   // ENO des aufgerufenen FC
      Out2_ENO : Bool;   // eigenes ENO
   END_VAR

   VAR_TEMP
      saveENO : Bool;
   END_VAR

"FC_Takt_ENO"(Takt := "Clock_1Hz", ENO => #saveENO);
#Out1_CLK := #saveENO;   // ENO des aufgerufenen FC
#Out2_ENO := ENO;        // eigenes ENO

END_FUNCTION
Den FC_SCL_ENO im OB1 aufrufen. Wie erwartet taktet der Out1_CLK im 1Hz-Takt und Out2_ENO ist immer TRUE (weil ENO des FC_SCL_ENO nirgends beeinflußt wird).
Das Attribut "ENO automatisch setzen" hat darauf keinen Einfluß.

PS: korrigiert, FC_SCL_ENO muß im OB1 aufgerufen werden

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Um dann deine IF-Abfrage zu sparen fürs setzen deiner Variable #switch kannst du einfach nach dem Bausteinaufruf z.B. folgendes machen:

Code:
"Baustein_1"();
#switch := ENO OR #switch;

Ob es nun Eleganter ist als die IF-Abfrage sei dahingestellt :D
ja, obs eleganter ist? würd zumindest als Kommentar dahinter schreiben, dass hier Switch gesetzt wird...

Dass in SCL irgendwie S und R fehlt, wurde ja schon öfters diskutiert...
 
Will man das ENO des aufgerufenen Bausteins verarbeiten, dann müsste man es bei den Übergabeparametern verschalten (wie hucki in #3 das macht): xyzBaustein(..., ENO => #boolVar)
(Das habe ich aber noch nie ausprobiert.)
Das funktioniert, wie ich heute erfolgreich testen konnte.
Aber eine Doku für diese Art der Übergabe konnte ich in der Hilfe nicht finden.
Hab's einfach mal auf Verdacht probiert.


Dass in SCL irgendwie S und R fehlt, wurde ja schon öfters diskutiert...
Ja,
z.B. analog zu := noch :S & :R,
bzw. bei der Bausteinparameterübergabe analog zu => noch S> & R>
😁
 
z.B. analog zu := noch :S & :R,
genau so hab ich mir das vorhin auch gedacht, wär schon cool.

Aber aktuell nervt mich eher mal wieder das total lahmarschige TIA, wo ich nach jedem Klick oder Enter ewig warten muss, bis ich zum nächsten komme... oder 20 mal ENTF gedrück und dann kannst im 2 Sekundentakt sehn, wie auf dem Bildschirm was gelöscht wird...

Da würde mir nen :S oder :R schon wie im Schlaraffenland vorkommen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
z.B. analog zu := noch :S & :R
analog zu := += -= finde ich besser S= R= wie in Codesys 3

Harald
 
Aber aktuell nervt mich eher mal wieder das total lahmarschige TIA, wo ich nach jedem Klick oder Enter ewig warten muss, bis ich zum nächsten komme... oder 20 mal ENTF gedrück und dann kannst im 2 Sekundentakt sehn, wie auf dem Bildschirm was gelöscht wird...

Das hatte ich so zum Glück noch nie. Mit TIA 15.1 arbeite ich teilweise mit 3 Instanzen parallel in der VM. Jede läuft super gut.
Gestern auch wieder 2 Instanzen plus eine Simulation am laufen, ohne Probleme.

-chris
 
Zurück
Oben