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

Results 1 to 4 of 4

Thread: Mehrere Parametersätze mit Handshake senden und lesen

  1. #1
    Join Date
    08.01.2019
    Posts
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum,
    ich arbeite mit einer S7 416-3DP in der Classic Welt und muss eine Kommunikation mit einem Generator schreiben. Dabei hat der Generator 26 Eingangsbytes und 26 Ausgangsbytes. Die Kommunikation läuft über Profibus DP. In den ersten Bytes sind Sollwerte und Istwerte enthalten die ich in einen Datenbaustein zwischenspeichere und dann visualisiere. Soweit kein Problem.

    Aber: Es gibt ein Befehlswort mit dem man Parameter lesen und Schreiben kann. In den Parameter liegen zB mehrere Counter die permanent gelesen werden müssen. Sodass immer ca 50 Parameter gelesen werden müssen. Man kann entweder Lesen oder Schreiben. Weiterhin soll man Parametersätze schreiben können. Das Schreiben funktioniert so das man das Befehlswort (1Word also 2 bytes) und die zu senden Daten in 4 bytes auf die entsprechenden Ausgänge legt. Dann antwortet der Generator mit dem Befehlswort und den Daten plus einem ReturnCode (0 ok, 1 Fehler. Somit könnte man beim Senden einen Handshake schreiben. Das Lesen funktioniert genauso.
    Mein Problem ist jetzt das man auch fast 50 Parameter Schreiben kann. Viele Daten davon sollen auch aus der Visualisierung heraus gleichzeitig geschrieben werden.
    Die Frage ist: Wie gehe ich da ran? Klar ist, das es eine Auswahl zwischen schreiben und lesen geben muss. Aber ist es clever immer alle Parameter zu schreiben? Ich würde dann ein Datenbaustein schreiben und dort das Befehlswort und die zu schreibenden Daten ablegen und dann pro SPS Zyklus ein Parametersatz weiterrutschen. Das würde bedeuten dass der Schreibbefehl sowie der Lesebefehl wenigstens 50 Zyklen braucht. Natürlich könnte man auch einen zweiten DB schreiben den ich mit dem DB der von der Visualisierung geschrieben wird vergleiche und dann nur die geänderten Parameter schreibe. Da wüsste ich allerdings nicht, wie ich die Auswahl der Parametersätze an den Schreibbefehl übergebe. Könnt ihr mich da irgendwie in die richtige Richtung bringen?
    Reply With Quote Reply With Quote Mehrere Parametersätze mit Handshake senden und lesen  

  2. #2
    Join Date
    27.05.2004
    Location
    Thüringen/Berlin
    Posts
    12,855
    Danke
    626
    Erhielt 2,866 Danke für 2,076 Beiträge

    Default

    Ich würde versuchen, 2 Fälle zu unterscheiden:

    1. Parameter, die ständig gelesen/geschrieben werden müssen.
    2. Parameter, die nur einmalig geschrieben/gelesen werden.

    Dann 2 "Schritketten",

    1. Alle Parameter (einmalig) lesen/schreiben
    2. Parameter, die ständig gelesen/geschrieben, werden müssen.

    Die 2. Variante läuft immer, die 1. nur wenn es nötig ist (2. muß so lange stoppen).

    Achtung: Es dauert länger als 50 Zyklen, du mußt je Parameter die Rückmeldung abwarten, also das Handshake.

    Wenn du jeden einzelnen Parameter mit einem Trigger auf Änderung überwachen willst, geht das auch, dann mußt du tatsächlich für jeden Parameter einen Vergleicher auf Soll/Ist schreiben und 2 DB bzw. Bereiche im DB nutzen.


    Wenn Soll<>Ist, dann Parameter senden -->
    Wenn senden fertig, dann Parameter Soll --> in Parameter Ist kopieren

    --> nächste ungleiche Stelle suchen.

    Das geht ganz gut in einer Schleife.
    Last edited by Ralle; 10.01.2019 at 12:24.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Kurt24 is offline Neuer Benutzer
    Themenstarter
    Join Date
    08.01.2019
    Posts
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    Ok, das werde ich mal probieren. Ich habe jetzt den Handshake fertig und werde mich mal an den DB vergleich in einer Schleife machen.
    Der DB Vergleich ist sicher wesentlich schneller als für jeden Parameter den Handshake abzuwarten.

    Ich würde die Schleife dann einfach abbrechen lassen wenn ein ungleicher Parameter gefunden wurde und den Schreibbefehl dann ausführen und Soll/Ist abgleich bei erfolgreichem Schreiben durchführen.
    Im nächsten Durchlauf wird dann der nächste Ungleiche Parameter geschrieben.

    Geht alles etwas schleppen da ich kein SCL lizenz habe und dann ja nur in AWL mit indirekter Adressierung arbeiten kann.

    Danke schon mal.
    Last edited by Kurt24; 11.01.2019 at 11:39.

  4. #4
    Join Date
    27.05.2004
    Location
    Thüringen/Berlin
    Posts
    12,855
    Danke
    626
    Erhielt 2,866 Danke für 2,076 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guter Ansatz.
    Denke bei der Schlefe auch daran, dass man die SPS mit Schleifen schnell in die max. Zykluszeit schicken kann.
    Schleife muß also nicht im wörtlichen Sinne immer wieder nach oben springen, das gesamte SPS-Programm läuft ja ohnehin als Schleife.

    Also:

    1. Start: Variable Schleifenzähler auf 1 setzen (Das machte du z.Bsp. im OB 100 oder falls du des Start mit einer Taste Starten willst, mit einer Flanke der Taste), auf jeden Fall nicht in jedem Zyklus,
    sonst funktioniert das nicht)!

    2. Vergleich x (Schleifenzähler) ausführen: wenn gesendet werden muß, dann Senden/Handshake (3.), sonst Sprung zu Next (4.)

    3. Nach Erfolgreichem Senden/Handshake ebenfalls Sprung zu Next (4.), sonst Sprung zu Ende (5.)

    4. Next: Variable Schleifenzähler um 1 erhöhen (Oder bei Max erreicht auf 1)

    5. Ende:


    Nach Ende: kann der restliche Code des Programms arbeiten, Ist das Programm komplett abgearbeitet endet der Zyklus und springt oben wieder ein.

    Wichtig nur, wenn die max-Schleifenanzahl erreicht ist, dann nicht um 1 erhöhen, sondern wieder auf 1 setzen.
    Du mußt für den Schleifenzähler einen Merker eine Datenbausteinvariable oder eine Stat-var in einem FB verwenden, keine Temp!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Similar Threads

  1. TIA Mehrere Datensätze schreiben/lesen
    By roboter123 in forum Simatic
    Replies: 10
    Last Post: 30.05.2018, 14:52
  2. Replies: 2
    Last Post: 15.05.2017, 18:18
  3. Replies: 1
    Last Post: 19.02.2016, 18:29
  4. XML-Daten senden und lesen, aber wie?
    By tigger in forum Programmierstrategien
    Replies: 2
    Last Post: 03.12.2009, 13:19
  5. Regler in S7 (300er) mehrere Parametersätze
    By staske24 in forum Simatic
    Replies: 10
    Last Post: 28.10.2009, 21:41

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •