TIA SCL

S.Schleich

Level-2
Beiträge
59
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi zusammen, der Beitrag nervt vielleicht ein paar hier, aber ich gehe das Risiko ein. :D
Ich wollte nur mal, dass jemand eine Übung bewertet und evtl. Verbesserungsvorschläge liefert.
Die Aufgabe:

Über eine Auswahl an einem Panel (Drop-Down-Liste) soll ein Ventil verschieden lange auf fahren.
Der FB soll bibliotheksfähig sein.
Ich wollte das Programm bzw. den Code wirklich so einfach wie nur irgendmöglich gestalten.

Danke schon mal :)
 

Anhänge

  • Ventilöffnung_SCL_wiederverwendbar.png
    Ventilöffnung_SCL_wiederverwendbar.png
    80,8 KB · Aufrufe: 60
Statische Variablen steuern über den IDB? Möglich, aber nicht schön. Dafür gibt's In/Out/InOut Schnittstellen, Instanzdaten rühre ich nie an außerhalb einer Funktion.

Ansonsten kannst du noch überlegen nicht den Impulsbaustein dauerhaft zu feuern sondern nur dann wenn du auch wirklich die Bewegung startest (zusätzlicher Button im HMI). Ansonsten hab ich den Impuls noch nie benutzt, dafür gibt's TOF und TON.. mit TOF würde aus auch gehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Statische Variablen steuern über den IDB? Möglich, aber nicht schön. Dafür gibt's In/Out/InOut Schnittstellen, Instanzdaten rühre ich nie an außerhalb einer Funktion.
okay, verstehe nicht ganz, was du meinst :(
meinst du, dass die Variable "chosen_time" als InOut angelegt sein sollte?
 
Viele Wege führen nach Rom.. anstatt einer SwitchCase hätte es auch eine IF mit ELSIF getan usw..

Wie gesagt IDB Variablen schreiben geht, mache ich nur persönlich nicht und auch der Siemens Styleguide schlägt vor dass nicht zu tun:
DA006 Regel:
Auf statische Variablen nur lokal zugreifenDie statischen Daten eines Funktionsbausteins sind nur innerhalb des Bausteins zu verwenden in dem sie deklariert sind.Begründung: Bei direktem Zugriff auf statische Variablen einer Instanz ist die Kompatibilität nicht gewährleistet, da keinerlei Einfluss auf zukünftige Updatesbesteht. Außerdem ist nicht klar, welchen Einfluss das Modifizieren statischer Variablen von außen auf die Abarbeitung innerhalb eines FB hat.
 
Die Case Anweisung ist schon in Ordnung. Und das #chosen_time und #open_times im STAT Bereich liegen ist auch ok.
Oder beschreibst du diese auch noch von der HMI?
Aber so wie es aussieht, schreibst du ja nur #B1 und #value_button. Wo hast du denn diese beiden Variablen deklariert?
Vielleicht zeigst du mal den ganzen Baustein, inklusive den In und Out Variablen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Case Anweisung ist schon in Ordnung. Und das #chosen_time und #open_times im STAT Bereich liegen ist auch ok.
Oder beschreibst du diese auch noch von der HMI?
Aber so wie es aussieht, schreibst du ja nur #B1 und #value_button. Wo hast du denn diese beiden Variablen deklariert?
Vielleicht zeigst du mal den ganzen Baustein, inklusive den In und Out Variablen
Hintergrund : B1 soll ne Lichtschranke darstellen, die liefert also nur kurzzeitig Signal, daher "TP"
"Chosen_time" beschreibe ich nicht aus dem HMI heraus.
 

Anhänge

  • Ventilöffnung_SCL_wiederverwendbar.png
    Ventilöffnung_SCL_wiederverwendbar.png
    101,7 KB · Aufrufe: 16
Die Case Anweisung ist schon in Ordnung. Und das #chosen_time und #open_times im STAT Bereich liegen ist auch ok.
Oder beschreibst du diese auch noch von der HMI?
Aber so wie es aussieht, schreibst du ja nur #B1 und #value_button. Wo hast du denn diese beiden Variablen deklariert?
Vielleicht zeigst du mal den ganzen Baustein, inklusive den In und Out Variablen
aber die Variable "chosen_time" verwende ich schreibend und lesend in dem Baustein
 
Ich würde open_times noch als Array[0..4] OF TIME statt als STRUCT erstellen.

Den Standard-Wert würde ich dann auch open_times[0] zuweisen, weil ich es irgendwie gar nicht mag, wenn Wertzuweisungen direkt im Programm anstatt über Variablen oder Konstanten erfolgen (so sind die Werte IMHO bei notwendigen Änderungen viel einfacher zentral zu finden).


Für die Zuweisung gibt es dann wirklich viele Wege, z.B. mit:
CSS:
CASE #value_button OF
    CASE 1..4: / Zeiten 1 bis 4
        #chosen_time := #open_times[#value_button];

    ELSE       / Variable bekommt Default-Wert
        #chosen_time := #open_times[0];

END_CASE;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PS:
Wenn die Wertauswahl für #value_button schon anderweitig, z.B. durch das HMI, wirklich zuverlässig auf zulässige Werte (hier 0 bis 4) eingegrenzt wird, kann man sich auch das CASE (o.ä.) ggf. komplett sparen und nur die Zuweisung
Code:
#chosen_time := #open_times[#value_button];
nutzen.


:unsure:
Die Variable #value_button schon entsprechend einzugrenzen, wäre vermutlich auch meine bevorzugte Vorgehensweise.
 
Zurück
Oben