Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 42

Thema: FC hat kein "Gedächtnis", warum?

  1. #1
    Registriert seit
    24.09.2012
    Beiträge
    71
    Danke
    70
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich verstehe nicht genau, warum in den Büchern oft steht, dass man FBs nehmen sollte, wenn man etwas speichern will, weil die ein "Gedächtnis" haben. Bei FCs würden die Daten verloren gehen.

    Soweit ich weiß, hatten wir in der Schule nur einen OB1 und einen FC1 genommen für ein ganzes Programm. Eingangssignale und Verknüpfungsergebnisse waren aber erhalten geblieben.

    Wie kann ich das verstehen?
    Zitieren Zitieren FC hat kein "Gedächtnis", warum?  

  2. #2
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Das Gedächtnis bezieht sich auf das Zwischenspeichern von Variablen und Zuständen die in einem Baustein verändert werden.
    Die werden bei einem FB in einem IDB gespeichert, so dass diese erhalten bleiben.
    In einem FC musst du dich händisch um das Speichern in DB oder Merkern kümmern.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  3. #3
    Registriert seit
    22.01.2008
    Ort
    Allgäu, da wo die Kühe schöner sind als die Mädels
    Beiträge
    1.773
    Danke
    50
    Erhielt 729 Danke für 434 Beiträge

    Standard

    In einem FC musst du dich händisch um das Speichern in DB oder Merkern kümmern.
    Diese müssen dann aber als In/Out Formaloperanten angelegt werden
    Gruss Audsuperuser

    Herzlich Willkommen im Chat:
    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  4. #4
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Nicht unbedingt, es kann auch direkt im Baustein ein DB beschrieben werden.

    Gedächtnis hat nicht nur etwas mit In/Out zu tun, sondern auch mit dem das in dem Baustein geschieht.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  5. #5
    Registriert seit
    01.10.2007
    Ort
    Waiblingen
    Beiträge
    3.317
    Danke
    767
    Erhielt 536 Danke für 419 Beiträge

    Standard

    Zitat Zitat von Miffi Beitrag anzeigen
    Bei FCs würden die Daten verloren gehen.
    FBs stellen Dir remanente Lokaldaten zur Verfügung, FCs können vergesslich sein, da sie sich miteinander einen Lokaldatenstack teilen (dieser nichtremanente Lokaldatenstack wird auch für FBs zusätzlich zu den remanenten Instanzdaten zur Verfügung gestellt).

    Auf FC könnte die Welt verzichten, sie sind ein Überbleibsel aus S5-Zeiten, als dort noch die Welt in PB und den damals so genannten FB unterteilt war, wobei der damalige FB dem heutigen FC entspricht. Wo heute S7 den Programmierer bei der Kapselung von Bausteinen unterstützt (Stichwort OOP), war zu S5-Zeiten es nur möglich, durch entsprechende Disziplin bei der Programmerstellung Kapselung zu erreichen.

  6. #6
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.569
    Danke
    63
    Erhielt 258 Danke für 218 Beiträge

    Standard

    Als Ergänzung zu den bisherigen Beiträgen würde ich deutlich hervorheben wollen, dass "Anfänger" normalerweise mit direkten Zugriffen auf Globalvariablen arbeiten, weil das so gelehrt wird. Die Verwendung der "Schnittstelle" eines Bausteins wird oft nicht einbezogen.

    Ein "direkter Zugriff" wäre zum Beispiel so etwas:

    Code:
    U E 1.0
    = M2.0
    Da eine SPS den Zustand der Merkerbytes speichert, können diese in FCs verwendet werden. Das meint wohl auch der TE.

    Wenn man häufiger programmiert bzw. etwas Erfahrung gesammelt hat, versucht man einen Baustein so zu schreiben, dass er keine direkten Zugriffe auf Globalvariablen macht. Dazu kann man entweder einen FC oder einen FB nehmen.
    Beide haben eine Schnittstelle, an die Eingänge, Ausgänge oder Ein-/Ausgänge geschaltet werden können. Außerdem können TEMP-Wariablen deklariert werden, die im Programm für Zwischenergebnisse genutzt werden können. Da TEMP-Variablen im nächsten Zyklus der SPS normalerweise durch andere Speicherzugriffe mit anderen Werten überschrieben wurden, kann man diese nicht zum Speichern von Werten oder Bitzuständen nutzen.
    Um etwas zu "speichern", muss eine Variable genutzt werden die einen festen Speicherplatz hat und damit über mehrere Zyklen hinweg ihren Wert nicht verändert. Dazu gibt es nun 2 Möglichkeiten, wenn man die o.g. direkten Zugriffe vermeiden möchte.

    Möglichkeit 1 (geht mit FC oder FB):
    Zu speichernde Variable in der Schnittselle an IN_OUT anschließen und beim Bausteinaufruf eine Globalvariable daran anschließen. Z.B. Db1.DBW10 oder MW20 oder, oder, oder
    Das macht man in der Regel dann, wenn das Ergebnis in einem anderen Baustein ebenfalls benötigt wird.

    Möglichkeit 2 (geht nur mit FB):
    Zu speichernde Variable in der Schnittstelle als STAT-Variable deklarieren. Der Wert wird dann in dem zum FB gehörigen Instanz-DB ("IDB") gespeichert.
    Das macht man in der Regel dann, wenn das Ergebnis nur in diesem Baustein benötigt wird.
    Wenn man so will, ist ein Nachteil dieser Variante, dass beim Aufruf ein Instanz-DB deklariert werden muss. (Von Multiinstanzen jetzt mal abgesehen)
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Perfektionist Beitrag anzeigen
    Auf FC könnte die Welt verzichten, sie sind ein Überbleibsel aus S5-Zeiten, als dort noch die Welt in PB und den damals so genannten FB unterteilt war, wobei der damalige FB dem heutigen FC entspricht.
    Wenn man z.b. zwei komplexe Zahlen (als UDT) addieren will, nimmst du also einen FB?
    Es gibt unendlich viele Anwendungen für Funktionen die von einem Aufruf zum nächsten keine Daten speichern müssen.

  8. #8
    Registriert seit
    01.10.2007
    Ort
    Waiblingen
    Beiträge
    3.317
    Danke
    767
    Erhielt 536 Danke für 419 Beiträge

    Standard

    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    Als Ergänzung zu den bisherigen Beiträgen würde ich deutlich hervorheben wollen, dass "Anfänger" normalerweise mit direkten Zugriffen auf Globalvariablen arbeiten, weil das so gelehrt wird.
    was ist ein Anfänger? als Anfänger wusste ich bereits dies:
    http://de.wikipedia.org/wiki/Funktion_(Programmierung)
    und das war vor ca. 30 Jahren, kurz nach Erscheinen des Brotkastens, als ich in der Oberstufe einen der ersten Informatikunterrichte bekam, die seinerzeit im Aufkommen waren.

    Hinkt die SPS-Programmierung wirklich dem Lauf der Zeit soweit hinterher? Ist es tatsächlich in D so, dass die Schulausbildung nach wie vor von Lehrern geleistet wird, die nicht auf dem Stand der Zeit sind? Das kann ich nicht glauben, dass das "was normalerweise gelehrt" wird, wirklich der Normalfall sein soll.

    Aber gut, mir sind auch schon viele "Lehrer" begegnet, die zwar vielleicht pädagogisch was geleistet haben, fachlich aber eher zu den Nieten zu zählen waren.


    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Wenn man z.b. zwei komplexe Zahlen (als UDT) addieren will, nimmst du also einen FB?
    Es gibt unendlich viele Anwendungen für Funktionen die von einem Aufruf zum nächsten keine Daten speichern müssen.
    na und? dann hab ich halt einen leeren IDB. Ich hab übrigens Funktionen, wo im IDB Parameter abgelegt sind. Der Ruf nach FCs ist doch nur der Sparsamkeit geschuldet

  9. #9
    Registriert seit
    06.01.2005
    Ort
    im schönen Lipperland
    Beiträge
    4.472
    Danke
    498
    Erhielt 1.143 Danke für 736 Beiträge

    Standard

    Zitat Zitat von Perfektionist Beitrag anzeigen
    was ist ein Anfänger? als Anfänger wusste ich bereits dies:
    http://de.wikipedia.org/wiki/Funktion_(Programmierung)
    und das war vor ca. 30 Jahren, kurz nach Erscheinen des Brotkastens, als ich in der Oberstufe einen der ersten Informatikunterrichte bekam, die seinerzeit im Aufkommen waren.

    Hinkt die SPS-Programmierung wirklich dem Lauf der Zeit soweit hinterher? Ist es tatsächlich in D so, dass die Schulausbildung nach wie vor von Lehrern geleistet wird, die nicht auf dem Stand der Zeit sind? Das kann ich nicht glauben, dass das "was normalerweise gelehrt" wird, wirklich der Normalfall sein soll.

    Aber gut, mir sind auch schon viele "Lehrer" begegnet, die zwar vielleicht pädagogisch was geleistet haben, fachlich aber eher zu den Nieten zu zählen waren.


    na und? dann hab ich halt einen leeren IDB. Ich hab übrigens Funktionen, wo im IDB Parameter abgelegt sind. Der Ruf nach FCs ist doch nur der Sparsamkeit geschuldet
    Das war dann ja nicht viel .....
    Angehängte Grafiken Angehängte Grafiken
    Früher gab es Peitschen .... heute Terminkalender

  10. #10
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Perfektionist Beitrag anzeigen
    was ist ein Anfänger? als Anfänger wusste ich bereits dies:
    http://de.wikipedia.org/wiki/Funktion_(Programmierung)
    und das war vor ca. 30 Jahren, kurz nach Erscheinen des Brotkastens, als ich in der Oberstufe einen der ersten Informatikunterrichte bekam, die seinerzeit im Aufkommen waren.

    Hinkt die SPS-Programmierung wirklich dem Lauf der Zeit soweit hinterher? Ist es tatsächlich in D so, dass die Schulausbildung nach wie vor von Lehrern geleistet wird, die nicht auf dem Stand der Zeit sind? Das kann ich nicht glauben, dass das "was normalerweise gelehrt" wird, wirklich der Normalfall sein soll.

    Aber gut, mir sind auch schon viele "Lehrer" begegnet, die zwar vielleicht pädagogisch was geleistet haben, fachlich aber eher zu den Nieten zu zählen waren.


    na und? dann hab ich halt einen leeren IDB. Ich hab übrigens Funktionen, wo im IDB Parameter abgelegt sind. Der Ruf nach FCs ist doch nur der Sparsamkeit geschuldet
    Tut soviel Arroganz und Überheblichkeit eigentlich weh?


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

Ähnliche Themen

  1. "Fehler 3740: Unbekannter Typ FbDALI_Joblist" wieso, warum, weshalb?
    Von KingHelmer im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 31.08.2012, 11:20
  2. Antworten: 9
    Letzter Beitrag: 15.06.2012, 16:17
  3. Ich finde kein "WinAC MP" Ordner im HW Katalog.
    Von JesperMP im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 27.01.2010, 14:54
  4. Fehlermeldung: "Kein Parameterbaustein"
    Von Hightowerxxx im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 06.02.2006, 15:19
  5. Antworten: 2
    Letzter Beitrag: 29.10.2005, 17:59

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •