TIA Nie mehr als zwei Ausgänge setzen können.

Zuviel Werbung?
-> Hier kostenlos registrieren
Weil du so kundig bist, weist du ob man auch globale Konstanten deklarieren kann ?

Soweit ich weiss, geht das nur in TIA. Dort ist das dann übrigens auch die einzige Möglichkeit Konstanten zu definieren.
Konstanten in Bausteinen gibt es da dann nicht mehr.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke hucki für den Link. Diesen Anleitung scheint besser zu sein als der Online-Hilfe.

Eigentlich gefällt es mir besser mit globalen Konstanten.
//
Da könnte man ja noch mit leben, wenn man trotzdem die Arrays damit deklarieren könnte. Geht aber leider nicht.
Argh ! Es ist genau dort wo es den grössten Anwendung hätte. Ein Schritt vor und zwei zurück.
 
Zuletzt bearbeitet:
Da könnte man ja noch mit leben, wenn man trotzdem die Arrays damit deklarieren könnte. Geht aber leider nicht.
:(

Ehrlichgesagt hab ich ein Array noch nie als Konstante gebraucht. Wie muss man sich dessen Anwendung vorstellen?

Ich persönlich ziehe es ausserdem vor Konstanten im Baustein zu haben. Ich will Bausteine von Projekt zu Projekt kopieren können ohne mich noch um externe Variabletabellen kümmern zu müssen.

Ich mache konstanten mittlerweile in den Temp der Schnittstelle und weise ihnen konstanten zu Beginn des Bausteins zu.

mfG René
 
Ehrlichgesagt hab ich ein Array noch nie als Konstante gebraucht. Wie muss man sich dessen Anwendung vorstellen?
Hier im Thread haben wir ja gerade ein sehr gutes Beispiel dafür:
...
Code:
[FONT=Courier New]FUNCTION_BLOCK "X_aus_N"

CONST
    [COLOR="#00FF00"]N:=  5;                                                                 // Anzahl Ein-/Ausgänge[/COLOR]
    XS:= 2;                                                                 // Standard-Anzahl max. eingeschalteter Ausgänge
END_CONST

VAR_INPUT
    IN:     ARRAY [1 .. [COLOR="#00FF00"]N[/COLOR]] OF BOOL;                                         // Neuer Zustand der Eingänge
    X:      INT;                                                            // Anzahl max. eingeschalteter Ausgänge
END_VAR

VAR_OUTPUT
    OUT:    ARRAY [1 .. [COLOR="#00FF00"]N[/COLOR]] OF BOOL;                                         // Ausgänge
END_VAR

VAR
    IN_OLD: ARRAY [1 .. [COLOR="#00FF00"]N[/COLOR]] OF BOOL;                                         // letzter Zustand der Eingänge
    ORDER:  ARRAY [1 .. [COLOR="#00FF00"]N[/COLOR]] OF INT;                                          // Speicher für Einschaltreihenfolge
END_VAR
...[/FONT]
...
Neben den ganzen Schleifen im Programm hängen auch 4 Arraygrößen von der Anzahl der zu verwendenden Ein-/Ausgänge ab. Da war es bei Classic wirklich toll, die Konstanten noch vor den Variablen im Baustein festlegen zu können. Und das ist ja nur ein kleiner Baustein (vor allem, wenn ich's mit dem Aufwand bei der LOGO! vergleiche).

Auch die Spielfeldgröße bei "4 gewinnt" war ausschlaggebend für die nötige Größe der Arrays und den dann im Programm folgenden Schleifen:
PS: Es gehen damit auch solch nette Sachen (aus der "4 gewinnt"-Sache):
Code:
[FONT=Courier New]CONST
[COLOR="#00FF00"]    Spalten:= 7;                                                                    // Anzahl Spalten
    Zeilen := 6;                                                                    // Anzahl Zeilen[/COLOR]
END_CONST

VAR
    SPIELFELD:   ARRAY [1 .. [COLOR="#00FF00"]Spalten[/COLOR], 1 .. [COLOR="#00FF00"]Zeilen[/COLOR]] OF INT;                          // Spielfeld               (7 Spalten,  6 Zeilen)
    SPIELZUEGE:  ARRAY [1 .. [COLOR="#00FF00"]Spalten * Zeilen[/COLOR], 0 .. 3] OF INT;                      // Speicher Spielzüge (max. 7 Spalten x 6 Zeilen = 42 Spielzüge,
...[/FONT]
Man kann also die nötigen Arraygrößen bei Classic sogar mit mehreren Konstanten berechnen.
:D

Ohne die Konstanten würde so bei der Arraygröße der Spielzüge einfach eine 42 stehen, von der man nicht auf den ersten Blick die Herkunft und somit bei Veränderung der Spielfeldgröße die Notwendigkeit der Anpassung erkennt.
:(

PS: Entsprechendes Kommentieren hilft natürlich. :)



Ich persönlich ziehe es ausserdem vor Konstanten im Baustein zu haben. Ich will Bausteine von Projekt zu Projekt kopieren können ohne mich noch um externe Variabletabellen kümmern zu müssen.
*ACK*
Wobei dieser Thread wieder auch ein Beispiel für globale Konstanten ist, da in meiner Variante die Anzahl der zu verwendenden Ein-/Ausgänge auf beide FBs Einfluss hat. Am Besten wäre also, wenn man beide Möglichkeiten hätte, wie es bei den Variablen ja auch möglich ist.

Aber gerade für das Kopieren von Projekt zu Projekt sind die lokalen Konstanten bei Classic ein riesen Vorteil, wenn nach dem Kopieren Anpassungen gemacht werden müssen, wie das Beispiel Spielfeldgröße bei "4 gewinnt". Neue Anzahl Zeilen und Spalten festlegen und alles davon Abhängige, einschließlich Arraygrößen, sind dafür passend.

Allerdings war der Hauptnutzen der Konstanten wirklich für die Werte, die zum Zeitpunkt der Übersetzung feststehen mussten, wie eben die Arraygrößen (und davon abhängige Sachen, wie oben die Schleifen).




Ich mache konstanten mittlerweile in den Temp der Schnittstelle und weise ihnen konstanten zu Beginn des Bausteins zu.
Da man die (globalen) Konstanten eh' nicht für die Array-Deklaration nutzen kann, ist das in meinen Augen auf jeden Fall eine gute Alternative. Das wäre eine Art von "Konstante", die ich bkizilkaya für TIA in Post #35 empfohlen hatte.
Alternativ verwende ich Input-Variablen mit Standardwert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch die Spielfeldgröße bei "4 gewinnt" war ausschlaggebend für die nötige Größe der Arrays und den dann im Programm folgenden Schleifen:
Man kann also die nötigen Arraygrößen bei Classic sogar mit mehreren Konstanten berechnen.

Ahh jetzt versteh ich. Ja das ist natürlich sinnvoll. Ich hab mich grad gefragt was man mit einem array aus z.B. 20 konstant gleich vorgegebenen Werten anfangen will ;)

mfG René
 
Ahh jetzt versteh ich. Ja das ist natürlich sinnvoll. Ich hab mich grad gefragt was man mit einem array aus z.B. 20 konstant gleich vorgegebenen Werten anfangen will ;)
Und ich verstehe jetzt erst den eigentlichen Sinn Deiner Nachfrage:
Ehrlichgesagt hab ich ein Array noch nie als Konstante gebraucht.
Klassisches Aneinandervorbeireden.

Also für alle anderen, die es noch interessert und denen das neu ist:
Die Konstante wird für die Arraygröße(n) bei der Deklaration verwendet (nicht für den Arrayinhalt).

Da die Arraygröße zum Zeitpunkt des Übersetzens feststehen muss, können Variablen bis dato dafür nicht verwendet werden.
Und genau dieses Problem war Inhalt dieses Threads: Array variabler Länge an FB übergeben (TIA 12, SCL, S7-1200 & S7-1500).
 
Zuletzt bearbeitet:
Um wieder zum Thema zurück zu kehren:
...
Code:
...
// reseten
IF "reset" THEN
FOR #k := 1 TO 5 BY 1 DO
  #ORDER[#k] := 0;
END_FOR;
END_IF;
Wieviel Sinn macht denn bei dieser Anwendung ein Reset?

Wenn alle Schalter wieder aus sind, ist auch das Array ORDER wieder genullt.
Sind noch Schalter beim RESET an, müssen sie eh' noch ausgeschaltet werden, um eine neue positive Flanke zu erkennen.

Oder war das nur für die Fehlversuche beim Programmieren gedacht?
 
Zurück
Oben