Löschen von Werten an einem SET-Eingang

mschoena

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

Im Rahmen eines studentischen Projektes muss eine Anlage mit drei Festo Linearachsen automatisiert werden. Hierbei verwenden wir wago E!Cockpit, was auf Codesys v3.5 basiert. Im Anhang befindet sich der Steuerbaustein der Festo Bibliothek. Diese Bausteine dürfen nur einmal pro Achse verwendet werden, was bedeutet, dass für verschiedene Verfahraufträge der Baustein neu beschrieben werden muss. Über eine AS und MOVE Bausteine möchte ich meinen Steuerbaustein bestücken (SetValuePosition, SetValueVelocity und OPM). Wenn ich über eine ODER- Verknüpfung einen Wert des MOVE Bausteins schicke, geht das für den ersten, passiert das jedoch dann für den zweiten, werden die Werte nicht korrekt übertragen. Dementsprechend möchte ich jedes Mal, bevor der Baustein beschrieben wird, diese oben genannten drei Einträge komplett löschen und dann anschließend neue hinzufügen. Wie kann ich das löschen verwirklichen? Gibt es da einen Baustein oder irgendwas? Ich programmiere ausschließlich mit FUP.

Würde mich sehr über eine Info freuen.

Liebe Grüße

Marvin
8703fcea1693ca6340b86c1225f1d42a.jpg


Gesendet von meinem Nexus 5 mit Tapatalk
 
Du musst diese Parameter ja nicht als Werte ansehen, sondern als Variable, du könntest alternativ einfach eine Null mittels einem Move-Baustein rüberschieben, sodass quasi kein Wert anliegt. Eine Möglichkeit eine Variable quasi zu "löschen" wie du es ausgibst, ist mir nicht bekannt.

Aber, was vielleicht interessant wäre: Gibst du Werte aus verschiedenen Quellen auf die Eingänge SetValuePosition, SetValueVelocity und OPM? Wenn das der Fall ist, dann denke ich, dass sich diese beiden Schreibvorgänge gegenseitig beeinflussen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Move sollte schon der korrekte Baustein sein. Über dessen Enable steuerst Du, welcher Move aktiv wird um die Werte auf den FHPP_Ctrl zu schreiben.
In Deinem Fall könnte ausserdem das Timing zwischen Start_Task und den geschriebenen Werten interessant sein. Möglicherweise (wahrscheinlich) müssen die Werte erst am FHPP anliegen, bevor gestartet werden kann. Andernfalls wird womöglich mit den Werten des letzten Aufrufs gearbeitet.
 
Du musst diese Parameter ja nicht als Werte ansehen, sondern als Variable, du könntest alternativ einfach eine Null mittels einem Move-Baustein rüberschieben, sodass quasi kein Wert anliegt. Eine Möglichkeit eine Variable quasi zu "löschen" wie du es ausgibst, ist mir nicht bekannt.

Aber, was vielleicht interessant wäre: Gibst du Werte aus verschiedenen Quellen auf die Eingänge SetValuePosition, SetValueVelocity und OPM? Wenn das der Fall ist, dann denke ich, dass sich diese beiden Schreibvorgänge gegenseitig beeinflussen.
Vielen Dank für die super schnelle, ausführliche und freundliche Antwort! Okay jaa das war dann mein Plan, zwischen den Schritten immer schnell eine 0 an den Eingang schieben. Normal sollte ja auch immer nur der Wert (die Variable) am Eingang stehen, die aktuell durch den MOVE Baustein dorthin geschickt wird.

Ehmm aus verschiedenen Quellen eher nicht. Die Werte kommen alle aus einer eigenen Task (AS). Sprich von einer Schrittkette, die nach und nach die Werte an die Eingänge schickt. Dementsprechend denke ich, dass dieselbe Quelle gemeint ist.

Dankeschön!

Liebe Grüße aus dem Schwarzwald

Gesendet von meinem Nexus 5 mit Tapatalk
 
Move sollte schon der korrekte Baustein sein. Über dessen Enable steuerst Du, welcher Move aktiv wird um die Werte auf den FHPP_Ctrl zu schreiben.
In Deinem Fall könnte ausserdem das Timing zwischen Start_Task und den geschriebenen Werten interessant sein. Möglicherweise (wahrscheinlich) müssen die Werte erst am FHPP anliegen, bevor gestartet werden kann. Andernfalls wird womöglich mit den Werten des letzten Aufrufs gearbeitet.
Ja, genau. Danke für die Antwort! Genau darüber habe ich auch schon nachgedacht. Das sollte aber kein Thema sein. Das kann ja durch einen TIMER manipuliert werden. Auf paar Millisekunden sind wir nicht angewiesen :)

Bin Mal gespannt was das noch wird. Haha.

Danke!

Gesendet von meinem Nexus 5 mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Timer. Bäh.

Du solltest eigentlich zyklusgenau wissen, wann die Werte an den FHPP-Eingängen gültig sind. Ergo ist Timer an der Stelle eigentlich nur ein Provisorium. Meine Meinung.
 
Ja, da gebe ich Dir Recht. Muss ich Mal schauen, wie ich das ansonsten machen kann. Ich habe das jetzt Mal mit dem MOVE Baustein Zuhause Offline simuliert. Das funktioniert grundlegend, ja! Jedoch speichert ja ein MOVE Baustein den Wert, sobald er ENABLED wird. Ich will allerdings, dass, sobald das Signal abfällt (der Verfahrauftrag erledigt ist) wieder eine 0 erscheint bzw der Wert vom nächsten Baustein überschrieben werden kann. Sobald ich quasi einmal einen MOVE geschalten habe, kann ich diesen nicht nochmal verwenden. Suche etwas wie ein RS Glied, das mir solange dort die Variable liefert, wie sie eben gebraucht wird. Habe noch ein Foto geschickt.

Gesendet von meinem Nexus 5 mit Tapatalk
 
Und zwar sieht man, dass ich am OPM Eingang jetzt den Wert 5 habe. Vorher hatte ich 0 und 1, da ich diese zuvor geschalten haben. Will ich jetzt allerdings für den nächsten Verfahrauftrag wieder die 1, dann überschreibt er mir die 5 nicht mehr, da diese ja unter OPM_5 beim Aktivieren des MOVE Bausteins "gespeichert" wurde. Forum_MOVE.JPG

Gesendet von meinem Nexus 5 mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja das ist wohl klar: wortweise verodert ist 1 oder 5 gleich 5 ;)
Also langsam: Alle Moves schreiben bitte auf dieselbe Variable. Und nur diese eine Variable kommt an den Setpoint-Input.
Bei der jeweiligen Sollwertauswahl ist es wichtig, das nur ein Move enabled wird, sonst gewinnt jeweils der letzte Move in der Abarbeitungsreihenfolge. Zeichne Dir das z.B. als grobes Timing-Diagramm auf, was in welcher Reihenfolge passieren soll. Das sieht bei mir immer ziemlich grob und ungelenk aus und mein Verbrauch an karierten DIN A4-Blöcken löst bei unserer Sekretärin schon immer ein lächeln aus...
Es hilft aber ungemein, das ganze danach in einen linearen Zeitablauf zu bringen.
 
Zuletzt bearbeitet:
In dieser einen Variable siehst Du dann logischerweise immer den letzten Wert, der darauf geschrieben wurde. Wenn Du da nach Abschluss eines Fahrauftrags eine Null sehen willst (warum?), musst Du halt nach Abschluss des Fahrauftrags den Move mit der 0 aktivieren.
 
Ja das ist wohl klar: wortweise verodert ist 1 oder 5 gleich 5 ;)
Also langsam: Alle Moves schreiben bitte auf dieselbe Variable. Und nur diese eine Variable kommt an den Setpoint-Input.
Bei der jeweiligen Sollwertauswahl ist es wichtig, das nur ein Move enabled wird, sonst gewinnt jeweils der letzte Move in der Abarbeitungsreihenfolge. Zeichne Dir das z.B. als grobes Timing-Diagramm auf, was in welcher Reihenfolge passieren soll. Das sieht bei mir immer ziemlich grob und ungelenk aus und mein Verbrauch an karierten DIN A4-Blöcken löst bei unserer Sekretärin schon immer ein lächeln aus...
Es hilft aber ungemein, das ganze danach in einen linearen Zeitablauf zu bringen.
Ach sorry. Natürlich. Verstehe Dich vollkommen. Habe gerade diesen Gedankenanstoß gebraucht. Natürlich liest die SPS immer den letzten Wert, haben wir am ersten Tag in der SPS Schulung während der Ausbildung gelernt. Haha. Danke dafür!
Jaa genau. Habe mir schon eine Ablaufkette aufgezeichnet. Das macht ja Sinn. So ist kalt definierte, dass zuerst 5 gesetzt werden muss, dann 1 dann 9 und so weiter. In einer klar definierten Reihenfolge bis die Kette eben wieder von oben anfängt.

Jetzt sollte ich doch alles richtig verstanden haben.

Vielen Dank nochmal und sorry für die etwas "dumme" Frage. :)

Liebe Grüße

Gesendet von meinem Nexus 5 mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In dieser einen Variable siehst Du dann logischerweise immer den letzten Wert, der darauf geschrieben wurde. Wenn Du da nach Abschluss eines Fahrauftrags eine Null sehen willst (warum?), musst Du halt nach Abschluss des Fahrauftrags den Move mit der 0 aktivieren.
Ahh genau. Du hast noch gesagt man schreibt alle MOVE-Werte in eine Variable und diese Variable kommt an den SET-Eingang. Das bedeutet ja quasi, dass meine Variante mit dem ODER am SET-Eingang falsch ist bzw. zu Fehler führen kann?

Liebe Grüße

Gesendet von meinem Nexus 5 mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Um Dich vollends zu verwirren:
Unter Codesys steht Dir der SEL-Baustein zur Verfügung. Mit diesem kannst Du, abhängig von Deiner Programmstruktur, sehr elegant eine 1 aus n Auswahl machen.

Du kannst auch unter Codesys ein Äquivalent zu den Datenbausteinen basteln zB. mit benutzerdefinierten Datentypen. Aber es gibt keinen Zwang dazu. Auch bei Siemens hättest Du das Problem zur richtigen Zeit den richtigen Wert vorzugeben.
 
Ja genau der Baustein ist mir bekannt. Jedoch kann ich in diesem doch lediglich zwei Zustände beschrieben bzw in eine Variable schreiben. Ist doch ähnlich wie der MOVE Baustein oder nicht. Habe es aktuell immer noch mit ODER verknüpft, weil ich nicht weiß, wie ich es sonst machen soll. Wenn ich nur eine Variable an den Eingang schreibe, dann müsste doch im Hintergrund etwas programmiert sein, das mir aus z.B. einem Array den richtigen wert schickt nach dem Motto If Value = 5, dann diesen Wert schreiben und so weiter...stehe echt auf dem Schlauch. ODER sollte doch auch provisorisch funktionieren, oder nicht. Mir ist erstmal wichtig, dass diese Anlage Mal läuft. Dann kann man das optimieren

Gesendet von meinem Nexus 5 mit Tapatalk
 
Zurück
Oben