Funktionen die länger brauchen...

Sh4gr4th

Level-1
Beiträge
33
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

blöder Titel, aber mir fiel nichts besseres ein.
Mein Problem ist, dass wir unseren Kunden Funktionsbausteine liefern wollen, damit die schneller ihre Anlage mit unseren Komponenten in Betrieb nehmen können. Die SPS steuert ein Profibus Gateway, dass wiederum eine Anzeige von uns anspricht(RS485).
Das Problem, vor dem ich jetzt stehe ist, dass die Anzeige ca. 80ms benötigt, bis sie mir bspw. den aktuellen Wert liefert***. Bislang habe ich in der Funktion mit SFC "Wait" gearbeitet, aber das kann es ja nicht wirklich sein, oder ist sowas wider Erwarten üblich? Das bremst dann doch das ganze System aus, oder? Ich meine, der OB1 wartet doch auf die FC?
Wie würdet ihr sowas lösen? Geht das überhaupt, oder müsste man sowas quasi lieber aus dem OB1 heraus programmieren?
Also dass er die Anzeige abfragt und wenn noch kein neuer Wert, dann hat er halt noch den alten und bei einem neuen Wert setzt er einen Merker, dass es sich um einen neuen Wert handelt?
Kann mir halt schwer vorstellen, wie ein komplexes Programm so aussieht. Programmiere auf einer S7-300 Step 5 in AWL.

*** siehe bitte 3. Posting in diesem Thread
 
Was ist das für eine Anzeige ???? Hersteller????

Wenn ich das richtig verstehe braucht Deine Anzeige 80ms bis ein angezeigter Wert im Display aktuallisiert wird??????
12,5 x in einer Sekunde ???

Was passiert wenn Du den SFC 47 nicht benutzt????
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, war doof beschrieben von mir. Es handelt sich um eine Spindelpositionsanzeige. Die 80ms sind quasi die Zeit, die vergehen,ab Senden des Befehles bis diese Spindelpositionsanzeige über das Gateway der SPS die Befehlsbestätigung mitteilt, dass bspq. ein neuer Sollwert eingestellt wurde. So verständlicher?
Wenn ich nicht den SFC47 benutze und nicht warte, lese ich noch den alten Wert ein.
 
Sh4gr4th schrieb:
...Wenn ich nicht den SFC47 benutze und nicht warte, lese ich noch den alten Wert ein.
Was ist daran verkehrt? Wenn du wartest verbleibt dein Programm schließlich auch in dem Zustand, der dem bisherigen Sollwert entspricht. Da dein Programm aber wahrscheinlich noch andere Dinge tut, die nicht von diesem Sollwert abhängen, wäre es besser, nicht zu warten.
Lösungsmöglichkeiten:
1. Du setzt in einem Zyklus den Befehl zum Lesen des Sollwertes ab und liest den Sollwert in einem späteren Zyklus ein. Bestimmte Aktionen führst du nur aus, wenn ein neuer Wert vorliegt. Falls du keine Möglichkeit hast, zu erkennen, ob das Lesen fertig ist, startest du einen Timer nach dem Absetzen des Befehls und liest nach Ablauf des Timers.
2. Du wartest im OB1 wie bisher und packst alle Steuerungsaufgaben, die nicht verzögert werden sollen in einen Zeit-OB, z.B. OB35.
3. Du packst die Abfrage in den Hintergrund-OB OB90 und setzt einen Merker, wenn sie fertig ist. Im OB1 fragst du diesen Merker ab, übernimmst den neuen Wert und setzt den Merker zurück.
 
Was ist daran verkehrt?
Verkehrt ist es nicht, aber ich meine ursprüngliche Idee war es, dass ich innerhalb meiner aufgerufenen Funktion auch gleich abfrage, ob der neue Sollwert wirklich einwandfrei akzeptiert wurde, was ich bislang nur durch das Warten realisieren konnte.

Habe bis vor 2 Monaten quasi nicht gewusst, was eine SPS überhaupt ist und mir alles (das wenige...) mit Hilfe der Step5 Doku und des Forums angelesen und zwar immer das, was ich gerade gebrauchen konnte. Daher hatte ich bislang auch über die OBs35 & 90 bis gerade noch nichts gehört. Werde mich jetzt mal in die Richtung OB 35&90 einlesen.

Vielen Dank für die Hilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Deine Funktion kann ja ein Busy-Signal und wenn nötig auch ein Done-Signal ausgeben. Solange die 80ms nach Absetzen des Befehls noch nicht um sind, wird Busy ausgegeben, Done ist False. Erst ein Done zeigt an, daß alle ok ist.
 
Zurück
Oben