07.09.2022 10:12 | |
Beiträge: 94 Bewertung: (3) |
Kann es daran liegen, dass ich die Bausteine in OB35 aufrufe, anstatt in OB1? |
08.09.2022 06:31 | |
Beigetreten: 03.05.2017 Letzter Bes: 21.05.2024 Beiträge: 673 Bewertung: (217) |
Hallo PA_NDA, leider verstehe ich nicht ganz wie dein Ablauf mit den zwei PUT- und GET-Funktion (PutDataSequencer- und GetDataSequencer-Baustein) ist und kann daher dazu keine Aussage machen. Aber ich kann versuchen etwas Licht ins Dunkel zu den PUT/GET-Funktion zu bringen.
Also wenn der Baustein PUT bzw. GET an den Ausgängen ERROR=0 und STATUS = 0000 hat, hat der Baustein weder Warnung noch Fehler (siehe Handbuch System- und Standardfunktionen für S7-300/400 im Kapitel 22.12 Daten in eine remote CPU schrieben mit dem SFB/FB15 "PUT" und dann in der Tabelle mit den Beschreibungen zu den Ein- und Ausgängen). Das deute für mich darauf hin, dass du recht hast und der Baustein PutDataSequencer intern festhängt und somit die PUT gar nicht mehr aufgerufen wird. Auch deine Aussage, dass das nach einem neuen Laden der CPU wieder und dann wieder der gleiche Fehler auftritt geht spricht dafür. Warum aber das vorher einwandfrei gelaufen hat weiß ich nicht.
An die CPU-Auslastung kann es eigentlich nicht liegen, da die CPU alle Kommunikationsaufträge wie PUT/GET oder BSEND/BRCV unabhängig vom Anwenderprogramm in einem separaten CPU-Speicherbereich bearbeitet werden, welcher asynchron zum Anwenderprogramm bearbeitet wird. Ist dieser Speicher voll würdest du auch eine entsprechenden Fehlermeldung (ERROR=1 und STATUS=20) bekommen.
Normalerweise sollte das kein Problem darstellen, dass du die Kommunikation mit 1Hz triggers, da PUT- und GET-Funktion nicht wirklich viel Kommunikationslast erzeugen und sollten daher abgeschlossen sein. Aber ist das auch eine Bedienung für den nächsten Trigger? Denn ein neuer Auftrag darf erst gestartet werden, wenn DONE=1 bzw. NDR=1 ist, dies ist unbedingt zu beachten.
Nein, ich habe schon viel Kommunikationsbaustein in zyklische OBs aufgerufen und das war nie ein Problem, egal ob es sich um PUT/GET, BSEND/BRCV oder noch anderen Kommunikationsbaustein handelt. Die eigentliche Kommunikation wird ja eh in einem separaten Speicherbereich durchgeführt, daher ist es nur wichtig DONE=1 bzw. NDR=1 abzuwarten, bevor ein neuer Auftrag ausgeführt wird.
Warum machst du das eigentlich mit 2 PUT-Aufrufen? Man könnte doch auch die Daten zusammen in einem DB packen und dann brauchst du nur eine PUT-Funktion. Das würde dein Programm einfacher machen und Fehlermöglichkeiten minimieren. Schöne Grüße |
Zuletzt bearbeitet von: Heisenberg2 am: 09/08/2022 06:35:22 |
|
Folgen Sie uns auf