TIA Wiederholtes Schreiben mit PUT

doergeph

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

in einem Organisationsbaustein oder Funktionsbaustein habe ich einen PUT-Block eingefügt, um wiederholt Daten in eine zweite S7-1200 zu senden. Das Problem ist jedoch, dass der PUT-Block nur beim ersten Durchlauf sendet. Bei allen weiteren Durchläufen werden keine Daten mehr an die zweite SPS übermittelt. Wenn ich eine Fallunterscheidung für die Durchläufe vornehme und für jeden Durchlauf einen eigenen PUT-Block programmiere, wird korrekt gesendet. Muss ich die PUT_DB nach jedem Durchlauf zurücksetzen oder wie löse ich das Problem?

Vielen Dank schonmal für eure Antworten, Philipp
 

Anhänge

  • programm.png
    programm.png
    21,3 KB · Aufrufe: 41
1. Ich geh mal davon aus, du setzt die ganzen Merker auch wieder irgendwo zurück?
2. Done und Error solltest du auch auswerten. Dabei ist zu beachten, dass diese Ausgänge bei den meisten Siemens-SPS-Funktionen nur für einen Zyklus True werden. Sie sind außerdem gut dafür geeignet, die o.g. Merker auch wieder zurückzusetzen, entweder bei Erfolg (Done) oder bei Fehler (Error).
 
1. Ich geh mal davon aus, du setzt die ganzen Merker auch wieder irgendwo zurück?
2. Done und Error solltest du auch auswerten. Dabei ist zu beachten, dass diese Ausgänge bei den meisten Siemens-SPS-Funktionen nur für einen Zyklus True werden. Sie sind außerdem gut dafür geeignet, die o.g. Merker auch wieder zurückzusetzen, entweder bei Erfolg (Done) oder bei Fehler (Error).


Ich muss zugeben, dass ich absoluter Anfänger bin und die Programmierung im Rahmen eines Uniprojektes programmieren muss. Welche Merker meinst du explizit? Ich habe auch versucht, den REQ-Wert direkt hinter dem PUT-Block zurückzusetzen und dann vor dem erneuten Aufruf wieder true zu setzen. Leider funktioniert das auch nicht. Beim ersten erfolgreichen Durchlauf wird mir der Status 16#0019 zurückgegeben. Bei den weiteren (nicht ausgeführten) 16#0000.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank euch für eure Mühe!

Ich konnte das Problem lösen, indem ich die Bedingungen zur Ausführung nicht als Schließer- / Öffnerkontakte im KOP davorsetze, sondern den PUT-Block direkt aufrufe und die entsprechende Bedingung zum Senden als REQ eintrage. Damit ist mein Problem gelöst und es läuft nun.

Für weitere Leute mit dem gleichen Problem hänge ich einmal meine Lösung an.

lösung.png
 
Vielen Dank euch für eure Mühe!

Ich konnte das Problem lösen, indem ich die Bedingungen zur Ausführung nicht als Schließer- / Öffnerkontakte im KOP davorsetze, sondern den PUT-Block direkt aufrufe und die entsprechende Bedingung zum Senden als REQ eintrage. Damit ist mein Problem gelöst und es läuft nun.

Für weitere Leute mit dem gleichen Problem hänge ich einmal meine Lösung an.

Anhang anzeigen 53367

Das sieht nicht so aus, als würde es wirklich funktionieren. Zumindest fehlt noch etwas Code, würde Ich meinen.

Wenn du starten willst setze den Request (Steuerungsparameter angefordert)

Mit (Done OR Error) rücksetze den Request.
Außerdem mit Flanke von Error den Status mit Move in ein anderes Statuswort, in welchem man dann später nach der Fehlerursache schauen kann.
 
Ich habe auch versucht, den REQ-Wert direkt hinter dem PUT-Block zurückzusetzen und dann vor dem erneuten Aufruf wieder true zu setzen. Leider funktioniert das auch nicht.
Es kommt nicht drauf an, daß die am REQ verschaltete Variable irgendwann im Zyklus mal FALSE und wieder TRUE wird, sondern der PUT-Baustein muß das FALSE und TRUE beim Aufruf am Eingang REQ "sehen", damit er eine steigende Flanke erkennen kann.

Ich konnte das Problem lösen, indem ich die Bedingungen zur Ausführung nicht als Schließer- / Öffnerkontakte im KOP davorsetze, sondern den PUT-Block direkt aufrufe und die entsprechende Bedingung zum Senden als REQ eintrage. Damit ist mein Problem gelöst und es läuft nun.
Das ist immer noch ein Schließer-Kontakt, nur wird der bei Bausteinparametern nicht als Kontakt gemalt, um Programmier-Anfänger zu verwirren ;) Kontakte werden erst gemalt, wenn mehr als 1 Bedingung verknüpft werden soll, oder wenn negiert werden soll.

Deine Lösung sendet immer dann genau einmal, wenn die Variable an REQ beim Aufruf der PUT-Instanz von FALSE auf TRUE geht (und die PUT-Instanz vorher ein FALSE gesehen hat). Ist das für Deine Anwendung Okay so? Weil SPS zyklisch arbeiten, werden üblicherweise auch Datenübertragungen zyklisch ausgeführt.

Harald
 
Zurück
Oben