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

Seite 6 von 15 ErsteErste ... 45678 ... LetzteLetzte
Ergebnis 51 bis 60 von 141

Thema: Funktionsbausteine

  1. #51
    Registriert seit
    16.07.2007
    Beiträge
    61
    Danke
    13
    Erhielt 16 Danke für 16 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ach und mit Deiner a+b=c funktion


    Code:
    VAR_IN_OUT
         a := DINT;
         b := DINT;
         c := DINT;
    END_VAR;
    
    c := a + b;
    a := c + 1;

    Jetzt aber bitte nicht fragen ob das Sinn macht oder nicht... Die cpu geht aber nicht in Stop wenn ich das laufen lasse.

  2. Folgender Benutzer sagt Danke zu m_w für den nützlichen Beitrag:

    00alex (03.05.2013)

  3. #52
    Registriert seit
    01.05.2013
    Beiträge
    345
    Danke
    174
    Erhielt 3 Danke für 3 Beiträge

    Frage

    Zitat Zitat von m_w Beitrag anzeigen
    ...
    edit: und bei mir gibts keine anderen Initialwerte als 0 in einem ARRAY... entweder ich initialisiere was oder nicht!
    Heisst initialisieren (nur) nullen oder auch (irgendwelche erwünschte) STARTWERTE geben ???

    http://de.wikipedia.org/wiki/Variable_(Programmierung)

    " Variablen sollten vor ihrer Benutzung initialisiert werden, das heißt, einen definierten Wert zugewiesen bekommen. "

    Hat es in der SPS andere Bedeutung ? ... habe manchmal auch andere STARTWERTE als Null benutzt ( wäre das nicht mehr "initialisieren" ?
    Geändert von 00alex (04.05.2013 um 21:16 Uhr)

  4. #53
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.583
    Danke
    63
    Erhielt 261 Danke für 221 Beiträge

    Standard

    Die Wortklauberei macht doch keinen Sinn.

    Das Zitat stammt vermutlich aus der Hilfe zum Thema TEMP-Variablen.

    Bei TEMP-Variablen ist es nun mal so, dass diese mit "irgendwas" zugewiesen sein müssen, um einen definierten Wert für die weitere Verwendung im Baustein zu haben. Das kann man jetzt meinetwegen nennen wie mal lustig ist, das ändert aber nichts an der Sache.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  5. #54
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Wie schon einer gesagt hat, haben FB ein Gedächtnis. Ihre Instanz. Bei Siemens ist das ein DB.
    Dieser bekommt schon in der Entwicklungsumgebung (TIA oder Step7V5 oder noch älteres Zeug -- und auch bei CodeSys) Werte, welche auf die AS geladen werden. Damit sind die immer initialisiert.
    Wenn der Strom wieder kommt, dann ist es bei S. möglich die Werte wieder aus dem Ladespeicher zu holen. Also sind sie auch da wieder initialisiert.
    FB Parameter müssen nicht verschaltet werden, da diese Werte ja in der Instanz liegen. Außer bei komplizierten Datentypen im IN-OUT. Dort werden im DB nur Pointer hinterlegt, der eigentliche Wert liegt wo anders.

    Und jetzt kommt mal wieder Siemens-Spezialverwirrung:

    Wenn also kein einziger FB Aufruf den komplizierten IN-OUT versorgt, dann steht da ein Null-Pointer drim. Beim Zugriff auf diesem IN-OUT innerhalb des FB geht die CPU in STOP (oder OB121).
    Vollprofis (oder sollte ich hier Vollpfosten sagen) haben noch die Möglichkeit im DB-Editor in den Pointer was rein zu schreiben. Also mit dieser grottigen Syntax P#DBa.DBXb.c den Zeiger auf einen hoffentlich vorhandenen DB zu lenken. Schlechter Stil, gaaaanz schlechter Stil sowas. Wenn das nicht klappt, dann suchst du stundenlang nach etwas was nicht da ist (da sucht man ja bekanntlich am längsten nach)

    Eine Struktur im IN-OUT (per Referenz übergeben) wird mit Peripherie versorgt. Bloß unterscheidet der Pointer nicht zwischen PE und PA. Der kennt nur P. Der Befehl im FB entscheidet dann ob von PE gelesen oder nach PA geschrieben wird. Du denkst, dass du da ein PEW angelegt hat, aber drinnen schreibt er dir auf das PAW mit der Nummer. HEUL
    Das mit den Peripheriezugriffen sollte man bei Siemens bleiben lassen.

    Noch schlimmer ist das bei FC. In Step7V5 ist es erlaubt an einen Input eines FC vom Typ sagen wir mal DWORD z.B. ein PAD20 dran zu schreiben. Im FC darfst du sowohl auf den Input schreiben als auch von ihm Lesen. D.h. wenn du liest bekommst du PED20, wenn du schreibst PAD20. Bei Siemens werden bei den CPU 300 und 400 auch FC Parameter immer per Referenz übergeben. noch mehr heul.

    Bei einfachen Datentypen verhält sich der Siemens FB eher so, wie es die Begriffe IN OUT und INOUT suggerieren.

  6. Folgender Benutzer sagt Danke zu HelleBarde für den nützlichen Beitrag:

    00alex (05.05.2013)

  7. #55
    Registriert seit
    01.05.2013
    Beiträge
    345
    Danke
    174
    Erhielt 3 Danke für 3 Beiträge

    Daumen hoch

    Deswegen habe ich gemeint IN-OUT Variablen sind mit Vorsicht zu genissen !
    Vielen , vielen DANK HelleBarde ...sehr gut erklärt (für mich mindestens ) .

    Einen Hinweis :
    - beim Stromausfall ist die Anlage in irgendeinem SCHRITT ... die Daten in der DB sind remanent (wenn so eingestellt) gehen also nicht verloren , sind aber mit der Daten des unterbrochenen Schrittes belegt .
    Beim Neustart muss diese Schritt neu gestartet werden also es wäre möglich dass die DB mit Daten von der vorherigen Schritt belegt werden muss... (Stichwort INITIALISIEREN )

    DAS GEHT ABER aber bei STRUCT , ARRAY typen NICHT!
    Initialisiert müssen die Daten in DB auch beim Neustart nach Stromausfall ... oder Manuell Sprung zu irgend einem manuell gewählten Kettenschritt !

    Hoffe jetzt ist es klar was ich weiter zurück meinte !?!
    Geändert von 00alex (06.05.2013 um 00:26 Uhr)

  8. #56
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.648
    Danke
    789
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Ich glaube ihr redet von zwei verschiedenen Dingen.

    Und In_Out sind nicht vorsichtiger zu geniessen wie alles andere. Wenn man "einigermassen" vernünftig programmiert geht davon nicht der Hauch einer Gefahr aus. In diesem Tread wäre die Pointerproblematik nichteinmal erwähnenswert gewesen sondern verkompliziert die Sache für den Leser völlig unnötig.

    mfG René

  9. #57
    Registriert seit
    01.05.2013
    Beiträge
    345
    Danke
    174
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Ich würde INOUT Variablen sowieso nur für rekurrente Funktionen ( Funktionen auf sich selbst ) benutzen .
    Einfacher Beispiel wäre ein 1-Addierzähler
    "a" INOUT Variable
    a : a+1

    Bei jedem FC Durchlauf wird "a" Flankenabhängig um 1 erhöht ....
    Geändert von 00alex (06.05.2013 um 08:12 Uhr)

  10. #58
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.583
    Danke
    63
    Erhielt 261 Danke für 221 Beiträge

    Standard

    Zitat Zitat von 00alex Beitrag anzeigen
    Deswegen habe ich gemeint IN-OUT Variablen sind mit Vorsicht zu genissen !
    Nein. Deswegen lässt man eben keine dressierten Affen an das PG.

    Ich kann doch als Benutzer einer Software nicht erwarten, dass der Compiler jeden erdenklichen Fehler des Anwenders erkennt.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  11. Folgender Benutzer sagt Danke zu Tigerente1974 für den nützlichen Beitrag:

    00alex (06.05.2013)

  12. #59
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.583
    Danke
    63
    Erhielt 261 Danke für 221 Beiträge

    Standard

    Zitat Zitat von 00alex Beitrag anzeigen
    Einen Hinweis :
    - beim Stromausfall ist die Anlage in irgendeinem SCHRITT ... die Daten in der DB sind remanent (wenn so eingestellt) gehen also nicht verloren , sind aber mit der Daten des unterbrochenen Schrittes belegt .
    Beim Neustart muss diese Schritt neu gestartet werden also es wäre möglich dass die DB mit Daten von der vorherigen Schritt belegt werden muss... (Stichwort INITIALISIEREN )

    DAS GEHT ABER aber bei STRUCT , ARRAY typen NICHT!
    Initialisiert müssen die Daten in DB auch beim Neustart nach Stromausfall ... oder Manuell Sprung zu irgend einem manuell gewählten Kettenschritt !
    Ein linearer oder auch ein verzweigter Ablauf ist schnell programmiert, ohne sich viele Gedanken zu machen.

    Ein sauberer Wiedereinstieg nach einem Abbruch o.ä. erfordert halt etwas Hirnschmalz. Ich muss doch nur wissen, ob meine Schrittkette immer im letzten Schritt steht und was ich bei Wiederanlauf machen möchte. Das kann man dann sauber ausprogrammieren. Und für mich spielt es da erstmal keine Rolle, welche Art der Schrittkettenprogrammierung man gewählt hat.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  13. #60
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.648
    Danke
    789
    Erhielt 654 Danke für 497 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von 00alex Beitrag anzeigen
    Ich würde INOUT Variablen sowieso nur für rekurrente Funktionen ( Funktionen auf sich selbst ) benutzen .
    Einfacher Beispiel wäre ein 1-Addierzähler
    "a" INOUT Variable
    a : a+1

    Bei jedem FC Durchlauf wird "a" Flankenabhängig um 1 erhöht ....
    Ich bin stolz auf dich. Dafür ist die InOut Definition da. Für Zugriffe von denen gelesen und gleichzeitig geschrieben werden soll.
    Ob man da jetzt nur liest, ne eins dazu addiert und dann schreibt...
    oder ob man liest, zweihundert Funktionen/Berechnungen etc. ausführt und dann irgendwann draufschreibt ist eigentlich absolut dasselbe.

    Darauf wurde ja am Anfang ja schon ausgiebig hingewiesen.

  14. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    00alex (06.05.2013)

Ähnliche Themen

  1. Funktionsbausteine
    Von redscorpion im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.08.2011, 12:42
  2. Funktionsbausteine S5
    Von SPS-Bastler im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 06.01.2010, 07:11
  3. Funktionsbausteine
    Von Wolflesch im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 07.09.2008, 16:15
  4. Funktionsbausteine in S7-200
    Von sukram1711 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 25.04.2008, 22:25
  5. Funktionsbausteine
    Von Blade im Forum PC- und Netzwerktechnik
    Antworten: 23
    Letzter Beitrag: 22.02.2008, 22:04

Lesezeichen

Berechtigungen

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