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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 32

Thema: Zykluskontrollpunkt S7-1500

  1. #11
    Erema ist offline Benutzer
    Themenstarter
    Registriert seit
    22.03.2013
    Beiträge
    53
    Danke
    5
    Erhielt 3 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also mein Baustein funktioniert wie folgt. Man kann im HMI Soll KW eingeben. Und je nach Temperatur regelt mein Baustein die Soll KW. D.h. Wenn die Temperatur zu gering ist werden die Soll Kw langsam erhöht und wenn Temperatur zu hoch werden die Soll KW langsam verringert. Der Operator muss aber auch die Möglichkeit haben die Soll KW über die Visu zu ändern und der Baustein muss dann bei den neuen Soll KW wieder zu regeln anfangen.
    Jetzt passiert es bei meine Tests immer wieder, dass der Sollwert welche der Operator eingibt nicht übernommen werden, da sie der Baustein wieder überschreibt.

    Jetzt möchte ich den Sollwert DB in einen SPS DB kopieren und dann die einzelnen Variablen in meine Sollwert DB welche Real, INt, Bool sind vergleichen und je nach dem wer geändert hat diese dann auf meinen Sollwert DB kopieren oder nicht.
    Jedoch weiß ich noch nicht wie ich es in SCL in einer For Schleife dynamisiseren kann, das er einmal ein INT und beim nächsten mal ein REAL vergleicht je nachdem welcher Datentyp es ist.

  2. #12
    Registriert seit
    15.03.2013
    Beiträge
    187
    Danke
    6
    Erhielt 35 Danke für 30 Beiträge

    Standard

    Zitat Zitat von Erema Beitrag anzeigen
    Jetzt passiert es bei meine Tests immer wieder, dass der Sollwert welche der Operator eingibt nicht übernommen werden, da sie der Baustein wieder überschreibt.
    Das bedeutet doch, dass Du irgendwo im Programm den Sollwert liest und danach wieder überschreibst. Wenn das HMI dazwischen schreibt, bekommst Du das nicht mit und überschreibst den vom HMI geschriebenen Wert gleich wieder.
    Lösung: Arbeite im Programm mit einer Kopie des vom HMI geschriebenen Sollwerts. Überprüfe getrennt davon den vom HMI geschriebenen Sollwert und ändere ggf. die Kopie.
    Eine For - Schleife wirst Du nur verwenden können, wenn Du die Sollwerte in Arrays legst, natürlich getrennt nach Datentypen. Mit der derzeitigen Lösung wirst Du es linear runterprogrammieren müssen.

  3. #13
    Erema ist offline Benutzer
    Themenstarter
    Registriert seit
    22.03.2013
    Beiträge
    53
    Danke
    5
    Erhielt 3 Danke für 2 Beiträge

    Standard

    Ja genau richtig, dass ist mein Problem! Ja wird mir eh nichts anderes über bleiben als das so zu lösen, dass ich jede Variable vergleiche und dann entscheide welchen Wert ich verwende. Dies wird aber ein extremer Programmieraufwand.
    Aber werde mir jetzt noch mal einen Experten von Big S einladen vielleicht haben die ja schon eine Lösung.

  4. #14
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Da hat der Support was falsches erzählt. Wie Du im ersten Link von RONIN nachlesen kannst, werden elementare Datentypen (egal wo sie herkommen) generell als Kopie (by value) übergeben. Nur strukturierte Datentypen werden per Pointer (by reference) übergeben, es sei denn die kommen aus nicht-"optimierten" Speicherbereichen, dann werden die ebenfalls als Kopie übergeben.
    Nachdem ich mich wiedermal mit dem Problem rumschlagen musste, packe ich diesen alten Thread wieder aus.
    Wenn ich es richtig sehe, dann werden bei der S7-1500 zumindest nicht elementare Datentypen aus Standard-DBs (nicht optimiert) mit "call-by-reference" übergeben, wenn der Instanz-DB des FBs ebenfalls nicht optimiert ist.
    Ist der Instanz-DB optimiert, dann wird mit "call-by-value" übergeben.
    3 Tage Fehlersuche bei einer OPC-Kopplung nach dem Portieren von S7-400 -> S7-1500 wegen dieses kranken Systemverhaltens.

  5. #15
    Registriert seit
    09.08.2006
    Beiträge
    3.627
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Nachdem ich mich wiedermal mit dem Problem rumschlagen musste, packe ich diesen alten Thread wieder aus.
    Wenn ich es richtig sehe, dann werden bei der S7-1500 zumindest nicht elementare Datentypen aus Standard-DBs (nicht optimiert) mit "call-by-reference" übergeben, wenn der Instanz-DB des FBs ebenfalls nicht optimiert ist.
    Ist der Instanz-DB optimiert, dann wird mit "call-by-value" übergeben.
    3 Tage Fehlersuche bei einer OPC-Kopplung nach dem Portieren von S7-400 -> S7-1500 wegen dieses kranken Systemverhaltens.
    irgendwo in der TIA-Hilfe steht das anschaulich erklärt, an anderen Stellen der TIA Hilfe nicht bzw. sogar falsch.

    Jedenfalls hängt's davon ab, ob 300/400/1200/1500, optimiert/nichtoptimiert, FC/FB, welcher Datentyp bzw. Struktur oder UDT oder ARRAY ...

    Das ist echt verwirrend. Aber alles erstmal in der Software nochmal umzukopieren trägt ja auch nicht unbedingt zur Übersichtlichkeit bei...

    Wenn ich das morgen noch finde, kopier ichs hier nochmal rein.

    Gruß.

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

    Blockmove (18.05.2017)

  7. #16
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard

    Den fehlenden Zykluskontrollpunkt kennt man ja von der 400er. Bei der 1500er darf man sich auch noch mit der unterschiedlichen Parameterübergabe rumschlagen.
    Macht irgendwie keinen Spass mehr.

  8. Folgender Benutzer sagt Danke zu Blockmove für den nützlichen Beitrag:

    ducati (19.05.2017)

  9. #17
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.345
    Danke
    451
    Erhielt 691 Danke für 516 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Wenn ich es richtig sehe, dann werden bei der S7-1500 zumindest nicht elementare Datentypen aus Standard-DBs (nicht optimiert) mit "call-by-reference" übergeben, wenn der Instanz-DB des FBs ebenfalls nicht optimiert ist. Ist der Instanz-DB optimiert, dann wird mit "call-by-value" übergeben.
    Ja sehe ich auch so.

    Grundsätzlich ist bei FB alles byValue, außer INOUT mit Struct/UDT.
    Also eigentlich eh gleich wie 300/400.

    Dafür jetzt noch die Sonderfälle...
    opt. Struct -> opt. INOUT -> byRef
    nicht opt. Struct -> nicht opt. INOUT -> byRef
    opt. Struct -> nicht opt. INOUT -> byVal

    Als Programmierer eines nicht opt. FB kannst du also gar nicht immer sagen ob der Datenzugriff perRef oder perVal passiert.
    Geändert von RONIN (19.05.2017 um 08:32 Uhr) Grund: Hatte MSBs Kommentar falsch gelesen
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  10. #18
    Registriert seit
    09.08.2006
    Beiträge
    3.627
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Im TIA v14 Handbuch steht unter 1.3.4.4 Grundlagen zur Programmierung - Bausteinaufrufe - Parameter als Kopie oder als Pointer übergeben folgendes


    1.3.4.4 Parameter als Kopie oder als Pointer übergeben
    Einführung
    Beim Bausteinaufruf übergeben Sie den Parametern in der Schnittstelle des Bausteins Daten.
    An den Eingangsparametern (Input) übergeben Sie die Daten, mit denen der Baustein arbeiten
    soll. An den Ausgangsparametern (Output) legen Sie fest, wo die Bearbeitungsergebnisse
    abgelegt werden. Durchgangsparameter (InOut) dienen sowohl der Übergabe von Daten an
    den aufgerufenen Baustein als auch der Rückgabe von Ergebnissen.
    Intern kennt STEP 7 zwei unterschiedliche Methoden der Parameterübergabe: Abhängig von
    Übergabebereich und vom Datentyp des Parameters werden die Daten entweder als Pointer
    oder als Kopie übergeben.
    Übergabe als Kopie (Call by value)
    Beim Bausteinaufruf wird der Wert des Operanden auf den Eingangsparameter des
    aufgerufenen Bausteins kopiert. Bei Funktionsbausteinen wird die Kopie im Instanz-DB
    abgelegt, bei Funktionen im Baustein-Stack. Für die Kopie wird zusätzlicher Speicherplatz
    benötigt.
    Das bedeutet, dass der aufgerufene Baustein immer mit dem Wert arbeitet, den der
    angegebene Operand zum Zeitpunkt des Bausteinaufrufs hatte. Er kann nicht direkt auf den
    Operanden zugreifen. Schreibende Zugriffe verändern nur die Kopie, nicht aber den
    tatsächlichen Wert des angegebenen Operanden. Lesende Zugriffe lesen nur die Kopie, die
    zum Zeitpunkt des Bausteinaufrufs angelegt wurde.




    Übergabe als Pointer (Call by reference)
    Die Parameter werden beim Bausteinaufruf über einen Pointer referenziert.
    Das bedeutet, dass der aufgerufene Baustein unmittelbar auf die Speicheradresse des
    Operanden zugreift, der als Parameter angegeben ist: Schreibende Zugriffe führen direkt zur
    Veränderung des angegebenen Operanden. Lesende Zugriffe lesen den Wert des Operanden
    unmittelbar zum Zeitpunkt des Zugriffs. Da keine Kopien angelegt werden, wird kein
    zusätzlicher Speicher benötigt.


    Hinweis
    Deklarieren Sie strukturierte Datentypen im Bereich "InOut"
    Nutzen Sie für strukturierte Variablen (z. B. vom Datentyp ARRAY, STRUCT, STRING, …)
    wenn möglich den Bereich "InOut" in der Bausteinschnittstelle. Da strukturierte
    Durchgangsparameter (InOut) standardmäßig als Pointer übergeben werden, wird der
    benötigte Datenspeicher so nicht unnötig vergrößert.
    Parameterübergabe bei S7-1200/1500
    Die folgende Tabelle zeigt, wie in S7-1200/1500 Bausteinparameter mit elementarem bzw.
    strukturiertem Datentyp übergeben werden. Elementare Datentypen sind z. B. BOOL, INT
    oder BYTE. Strukturierte Datentypen sind z. B. ARRAY, STRUCT oder STRING.






    Hinweis
    Parameterübergabe zwischen Bausteinen mit optimiertem Zugriff und Bausteinen mit
    Standardzugriff
    Wenn bei einem Bausteinaufruf Strukturen als Durchgangsparameter (InOut) an den
    aufgerufenen Baustein übergeben werden, werden diese standardmäßig als Pointer
    übergeben (Call by reference).
    Dies gilt jedoch nicht, wenn beide Bausteine unterschiedliche Optimierungseinstellungen
    haben: Wenn einer der Bausteine die Eigenschaft "Optimierter Zugriff" und der andere
    Baustein die Eigenschaft "Standardzugriff" hat, werden grundsätzlich alle Parameter als Kopie
    übergeben (Call by value).
    Wenn der Baustein viele strukturierte Parameter enthält, kann das schnell dazu führen, dass
    der temporäre Speicherbereich (Lokaldaten-Stack) des Bausteins überläuft.
    Außerdem können Probleme entstehen, wenn die ursprünglichen Operanden durch
    asynchrone Prozesse verändert werden, z. B. durch HMI-Zugriffe oder durch Alarm-OBs.
    Wenn nach der Bausteinbearbeitung die Kopien wieder auf die ursprünglichen Operanden
    zurückkopiert werden, werden dabei die seit dem Anlegen der Kopie beim Bausteinaufruf
    asynchron durchgeführten Änderungen an den ursprünglichen Operanden überschrieben.
    Das können Sie vermeiden, indem Sie für beide Bausteine dieselbe Zugriffsart einstellen oder
    die asynchronen Zugriffe zuerst in einen separaten Speicherbereich schreiben lassen und
    diesen Bereich dann zu einem geeigneten Zeitpunkt synchron kopieren.
    Siehe auch:
    Bausteine mit optimiertem Zugriff (Seite 39)
    FAQ 109478253: Warum kann es zum Überschreiben von Daten des HMI-Systems oder des
    Webservers in der S7-1500 kommen? (https://support.industry.siemens.com/cs/de/de/view/
    109478253)


    Parameterübergabe bei S7-300/400
    Die folgende Tabelle zeigt, wie in S7-300/400 Bausteinparameter mit elementarem bzw.
    strukturiertem Datentyp übergeben werden.




    * Ausnahme: Operanden aus den Speicherbereichen E, A, M, P, L und teilqualifizierte DBAdressen
    (z. B. "DW 2") werden als Pointer übergeben.
    Hinweis
    Besonderheiten bei der Übergabe als Pointer in S7-300/400
    In den Fällen, in denen die Parameter über einen Pointer übergeben werden, ist es nicht
    möglich, Ausgangs- oder Durchgangsparameter vom aufrufenden Baustein an die
    Eingangsparameter des aufgerufenen Bausteins weiterzureichen.
    1500.jpg

    300.jpg

    Gruß.

  11. Folgende 3 Benutzer sagen Danke zu ducati für den nützlichen Beitrag:

    Onkel Dagobert (19.05.2017),RONIN (19.05.2017),vollmi (19.05.2017)

  12. #19
    Registriert seit
    08.04.2016
    Ort
    4040 Linz, Österreich
    Beiträge
    191
    Danke
    16
    Erhielt 61 Danke für 50 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Den fehlenden Zykluskontrollpunkt kennt man ja von der 400er. Bei der 1500er darf man sich auch noch mit der unterschiedlichen Parameterübergabe rumschlagen.
    Macht irgendwie keinen Spass mehr.
    Bei uns hat das 2 recht strikte, aber klare Regeln zur Folge:
    1. es gibt nur optimierte Bausteine (mir ist bisher keine Ausnahme bekannt)
    2. Variablen mit HMI-Zugriff sind entweder HMI rw + PLC ro oder HMI ro + PLC rw. Zulässige Ausnahme sind nur das Ablöschen von HMI-Kommandos bei Kommunikationsausfall und das Überschreiben von HMI rw-Feldern mit sicheren Werten. Gleiches gilt für OPC.

  13. #20
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von maxder2te Beitrag anzeigen
    Bei uns hat das 2 recht strikte, aber klare Regeln zur Folge:
    1. es gibt nur optimierte Bausteine (mir ist bisher keine Ausnahme bekannt)
    2. Variablen mit HMI-Zugriff sind entweder HMI rw + PLC ro oder HMI ro + PLC rw. Zulässige Ausnahme sind nur das Ablöschen von HMI-Kommandos bei Kommunikationsausfall und das Überschreiben von HMI rw-Feldern mit sicheren Werten. Gleiches gilt für OPC.
    Wenn man es sich selber raussuchen kann ...
    Wir bekommen die Datenstrukturen vorgegeben und diese sind auf allen S7-Baureihen fix.
    Somit scheiden optimierte Schnittstellen-DBs aus.
    Ich kann ohne Zykluskontrollpunkt oder mit Call-by-Value-Parameterübergabe leben.
    Nur beides zusammen ist einfach Mist.

Ähnliche Themen

  1. TIA Zykluskontrollpunkt S7-1200 und S7-1500 mit HMI
    Von hubert im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 26.04.2016, 02:00
  2. TIA S7-1500 RT Kommunikation mit zweiter S7-1500
    Von HelixX23 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 19.02.2016, 14:46
  3. Antworten: 6
    Letzter Beitrag: 07.07.2015, 09:10
  4. TIA S7-1500 HMI-Kommunikation (Zykluskontrollpunkt)
    Von steuerung im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 08.01.2014, 13:39
  5. TIA S7-1500 >>> s7-1200
    Von kuti im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 08.07.2013, 20:52

Lesezeichen

Berechtigungen

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