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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Funktionsbausteine Ausgangsparameter

  1. #11
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Da brauchst Du natürlich jedes mal einen neuen IDB.
    Noch besser ist es wenn Du den FB multiinstanzierst.
    Das heisst Du legst eine STAT-Variable an.
    Im Stat Bereich schreibst Du bei "Name" Fb-Aufruf und bei Datentyp "FB100" hin.
    Dann legt dir die Software innerhalb der FB-Instanz einen Aufrufinstanz-Db an.
    Probiers mal aus...

    Edit: selbstredend, dass in Deinem FB100 keine Merker, Zeiten, Zähler, etc. mit fixen Nummern verwendet werden dürfen.

  2. #12
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    187
    Danke
    15
    Erhielt 12 Danke für 11 Beiträge

  3. #13
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Zitat Zitat von Paul Beitrag anzeigen
    Ignorieren, Augen zu und durch.

    Mistgelumpp, verrecktes.
    Ignorieren ist ggf. bei der Spielzeugeisenbahn Steuerung erlaubt.

    In der Softwaretechnik gilt die alte Erfahrungs Regel "Deklaration ist Initialisierung". D.h., wo Du eine Variable neu einführst, wird sie auch sofort auf einen Wert gesetzt. In modernen Sprachen wie C# wird das sogar erzwungen.
    out00.jpg

    Genauer kann man hier sich informieren:

    Ich hab das mal hier illustriert, wie ich das in ST/Codesys programmiere.



    out01.jpg

    und so stellt es sich im Debugger dar, man sieht einmal initialisiert und dann in jedem FB Aufruf einmal geschrieben.

    out02.jpg
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Deklaration und Initialisierung gehören zusammen.  

  4. #14
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von RobiHerb Beitrag anzeigen
    Zitat Zitat von Paul Beitrag anzeigen
    Ignorieren, Augen zu und durch.

    Mistgelumpp, verrecktes.
    Ignorieren ist ggf. bei der Spielzeugeisenbahn Steuerung erlaubt.
    Paul meint, daß er die Compiler-Warnungen ignorieren will statt alle betroffenen Programmstellen umzuschreiben (vermutlich weil das Programm vor der Konvertierung zu TIA ja auch funktioniert hat?).

    Wir sind hier bei Siemens-SCL (oder -AWL?)
    Und bei Siemens-TIA bekommst Du für Dein "iStart := iRet;" eine Compilerwarnung, weil ein OUTPUT nicht dafür gedacht ist, wieder eingelesen zu werden. Wenn der Wert des OUTPUT gemerkt werden soll, dann soll man das über eine STAT-Variable und anschließendes Kopieren auf den OUTPUT lösen (oder einen INOUT benutzen).

    Rücklesen eines OUTPUT ist auch aus folgendem Grund problematisch:
    ein FB hat 2 OUTPUT, wo außen jedesmal die selbe Variable angeschlossen ist. Wenn im FB der erste OUTPUT zurückgelesen wird, welchen Wert sollte das Lesen ergeben? Den Wert, den die außen angeschlossene Variable gerade hat oder den Wert, der zuletzt an den ersten OUTPUT zugewiesen wurde?

    Für ein Beschreiben des Instanz-Ausgangs von außerhalb (z.B. "Instanz.iRet := 0;") gibt es meines Wissens keine Warnung. Der Schreibzugriff könnte ja auch von einem HMI kommen und das kann der Compiler schließlich auch nicht verhindern.


    Zitat Zitat von RobiHerb Beitrag anzeigen
    In der Softwaretechnik gilt die alte Erfahrungs Regel "Deklaration ist Initialisierung". D.h., wo Du eine Variable neu einführst, wird sie auch sofort auf einen Wert gesetzt.
    Mir erschließt sich nicht, was eine Initialisierung mit dem hier diskutierten Merken und Lesen eines OUTPUT zu tun hat.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #15
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    @PN/DP

    Compiler Warnungen sind Warnungen, dass da etwas falsch sein könnte.

    Wer sie ignoriert und "Augen zu und duch sagt", bekommt im Falle eines Unfalls mit seiner Software sehr leicht Fahrlässigkeit vorgeworfen.
    Das kann bis hin zu Gefängnis führen.
    Compiler Warnungen sind kein Schicksal sondern vermeidbar, da musst Du durch.
    "Geht schon, haben wir immer so schon bei STEP7 gemacht", ist gefährlich auch für Dich selber.

    Dass ich in dem Beispiel in der ersten Programmzeile iStart := iRet; schreibe, ist natürlich nicht das Gelbe vom Ei. Diese Zeile macht nur mit dem 3.Screenshot einen Sinn. Ich wollte zeigen, dass bei Erreichen des Breakpoint in der letzten Zeile der FB bei Eintritt diesen Startwert in iRet hatte. Sonst hätte ich jeweils single Step Screenshots machen müssen. In Production Code sollte die angemerkte erste Zeile natürlich nicht vorkommen.

    Initialisierung bei der Deklarierung: siehst Du doch in der Deklaration, jede Variable ist initialisiert.

    out03.jpg

    Ansonsten, wo man über VAR_OUT redet, sollte man auch mal über Properties sich Gedanken machen, PRIVATE SET im FB und PUBLIC GET sind die sicherste Antwort, wie man Daten aus einem FB nach draussen bekommt.

    Übrigens, ich mache für solche Spielzeuge Software, da hat der TÜV oder vergleichbar ein Auge auf alle Programmzeilen.

    Anhang 32062 Rettungsfahrzeug mit 6 redundanten Intercontrol SPS + 2 unabhängige Visus im Chassis und on Top, 3 parallele redundante Bussysteme.

    250MeV_Cyclotron.jpg http://www.rptc.de/


    250 MeV Cyclotron gesteuert durch Siemens Safety SPS (genaueres darf ich nicht sagen). Das Monster ist die Protronen Strahlenquelle für eine spezielle Krebs Therapie. Hier hatte ich während der Entwicklung für die Software des Sicherheits Bedien Systems die Verantwortung.

    Dann gab es einen Unfall, am besten mal dieses Forum ansehen.

    http://forum.prostatakrebs-bps.de/sh...zentrum/page2&

    Da wird jede Programmzeile durchgekämmt und wehe Dir, wenn da Warnungen im Compiler auftreten.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Warnungen ...  

  6. #16
    Registriert seit
    03.12.2008
    Beiträge
    654
    Danke
    160
    Erhielt 185 Danke für 113 Beiträge

    Standard

    Zitat Zitat von RobiHerb Beitrag anzeigen
    Ignorieren ist ggf. bei der Spielzeugeisenbahn Steuerung erlaubt.
    Ich glaube nicht, dass ich planlos oder leichtsinnig programmiere
    Aber ich programmiere auch keine Atomkraftwerke oder Raketensilos.

    Wenn ich mir anschaue wie inflationär die gelben Ausrufezeichen beim generieren auftauchen....
    da hätte ich viel zu tun, wenn ich die alle ausmerzen wollte.

    Bis jetzt hat mein Zeug (früher oder später) eigentlich immer funktioniert.
    Und gerade bei TIA sind eben viele Warnungen eigentlich überflüssig,
    Als Beispiel eben genau diese Geschichte mit dem Lesezugriff auf OUT Variablen.
    Wenn man nicht total "von hinten durchs Knie" programmiert, passiert da gar nichts.
    Trotzdem kommt jedes mal ein lästige Warnung.
    Sprungmarken in AWL.
    Andauernd wird irgendwas Rot, reicht manchmal schon wenn Du den Cursor hinter die Marke stellst
    Aus diesem Grund: Augen zu und durch.....

  7. #17
    Registriert seit
    03.12.2008
    Beiträge
    654
    Danke
    160
    Erhielt 185 Danke für 113 Beiträge

    Standard

    Zitat Zitat von RobiHerb Beitrag anzeigen

    250 MeV Cyclotron gesteuert durch Siemens Safety SPS (genaueres darf ich nicht sagen). Das Monster ist die Protronen Strahlenquelle .........
    Und wenn ich solche kreuzgefährlchen Sachen programmieren müsste, würde ich
    mir dreimal überlegen ob ich da TIA einsetze.
    Meine Anlagen (mittelständischer Maschinenbau) sind um Glück eine Nummer simpler.
    Geändert von Paul (11.03.2016 um 19:02 Uhr)

  8. #18
    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 RobiHerb Beitrag anzeigen

    Initialisierung bei der Deklarierung: siehst Du doch in der Deklaration, jede Variable ist initialisiert.

    out03.jpg
    Mit was für einem Nicht-IEC-konformen System programmierst du denn da? Denn die IEC61131 gibt die Initialwerte bei elementaren Datentypen vor, und die sind bei INT := 0. Das heißt was du da in deinem Screenshot zeigst ist überflüssig, da in der Norm festgelegt.

    Aber Codesys nimmt es mit der IEC-Konformität ja eh nicht so genau, da sind mindestens so viele Abweichungen vom Standard wie bei Siemens SCL. Wobei Siemens die Abweichungen davon wenigstens vollständig dokumentiert hat. Außerdem gibt es von Siemens eine formale Sprachbeschreibung, nach so etwas sucht man bei den Codesys-Leuten vergeblich.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

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

    Standard

    Und solche Typ-Prefixe benötigt man auch nur, wenn es der Compiler erlaubt wie im Saustall jeden Datentyp ohne Warnung mit impliziter Konvertierung auf einen anderen zu ferkeln (Codesys). Bei Siemens lassen sich solche Schweinereien wenigstens per Einstellung verbieten. Bei Codesys? Fehlanzeige.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  10. #20
    Registriert seit
    13.12.2011
    Beiträge
    1.402
    Danke
    146
    Erhielt 158 Danke für 149 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Thomas,
    könntest Du da mal bitte konkreter werden, bei welchen Datentypen das passiert? Wenn ein INT in einen DINT geschrieben wird kann man warnen aber man muss es nicht. Ich sehe das jetzt nicht als so problematisch an.

Ähnliche Themen

  1. Funktionsbausteine
    Von redscorpion im Forum Simatic
    Antworten: 140
    Letzter Beitrag: 09.02.2014, 17:26
  2. Funktionsbausteine
    Von redscorpion im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.08.2011, 12:42
  3. Funktionsbausteine
    Von Blade im Forum PC- und Netzwerktechnik
    Antworten: 23
    Letzter Beitrag: 22.02.2008, 22:04
  4. Ein-/Ausgangsparameter einer FC in GRAPH
    Von derbenny im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 22.10.2007, 10:34
  5. Scl - Ausgangsparameter
    Von kpeter im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 26.02.2007, 20:48

Lesezeichen

Berechtigungen

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