Beiträge von Erdnuss99

    Mach dir 2 Interrupts die auf eine Boolsche variable reagieren. der eine True der ander False

    verküpfe das selber Programm mit denen und schreib in diesem Programm bVar=NOT bVar dann hast 12ms sicher.


    Hallo Loipe,


    ich belebe mal wieder diesen Tread, denn ich stehe gerade ebenfalls vor dem Problem, dass ich eine Berechnung zyklisch durchführen muss.


    Die Berechnung soll deterministisch in einem bestimmten Takt (z.B. 12ms) durchgeführt werden.


    Ich habe soeben versucht das Programm mit den zwei Interrupts zu implementieren, aber habe den Befehl bVar NOT bVar nicht genau verstanden.

    Die Interrupt-Routine wird bei jedem Signalwechsel von bVar ausgeführt oder?


    Muss meine Berechnung in die Interrupt-Routine?


    Vielen Dank


    Grüße

    Erstmal vielen Dank für eure Überlegungen und Antworten.

    Mir ist bekannt, dass es die Funktion bereits als Optionspaket ConveyorTech gibt.

    Da wir dieses noch nicht besitzen, sollte ich mich daran versuchen, diese Funktion selbst zu implementieren um mich mit der Roboterprogrammierung vertraut zu machen.

    In naher Zukunft wird dieses Paket auch erworben.

    Am einfachsten ist sicher die von Hermann erwähnte Option ConveyorTech.

    Für eine Studienarbeit wäre evtl. der Ansatz über den "Funktionsgenerator" interessant.

    ConveyorTech "beruht" prinzipiell auch darauf.

    Über den Funktionsgenerator hab ich auch schon etwas gelesen, jedoch noch keine genaue Erläuterung oder ein Handbuch gefunden. Läuft ein Funktionsgenerator selbstständig und parallel zu meinem Roboterprogramm ab?

    Wo kann ich Informationen zum "Funktionsgenerator" finden?


    Wenn's nur eine Denkaufgabe ist...


    Der Code ist schon oberflächlich betrachtet Quark, weil ERST das $Base zugewiesen wird, um es DANACH neu zu berechnen, aber mit dem ALTEN noch gefahren wird. Dadurch hängt der Regler eh' einen Schritt hinterher.

    Warum man in der .sub nicht auch gleich die Istverschiebung laufend berechnet (nicht das Base, aber die Istposition vor der Übernahme in selbiges) ist mir auch nicht klar. Die wäre ja deutlich sensitiver als das Fahrprogramm.

    Und dann müsste man sich vielleicht mal Gedanken machen über das Regelverhalten. Einfach nur I ist vielleicht zu wenig.

    Du hast völlig recht. Die Zuweisung der Basis ist an dieser Stelle komplett irrsinnig.

    Und auch eine Berechnung im Submit wäre deutlich genauer. Aber auch das finde ich irgendwie nicht ganz zufriedenstellend, da dieser nicht determistisch ist oder liege ich hier falsch?


    Der von Hermann gewählte Ansatz über die Berechnung im IPO-Takt halte ich für die beste Lösung.

    Dieser läuft zyklisch im 12ms Takt oder?

    Kann ich dies über ein Funktionsgenerator realisieren?


    Ich habe zusätzlich versucht, die Berechnung in einem Interrupt, welcher alle 12ms aufgerufen wird, durchzuführen. Dabei ist das Teil auf dem Band dem Roboter davon gelaufen und auch ein Überschleifen war nicht mehr möglich.

    Auch ein Überschleifen ist dann nicht mehr möglich, wenn ich meine Verschiebung in einem anderen Ablaufprogramm im Takt berechne oder?

    Weil mein Vorlaufzeiger kennt ja den übernächsten Punkt noch nicht oder befinde ich mich dann in einer durchgängigen Bewegung, welche nie verlassen wird??


    Ich werde am Montag wieder an dem Roboter sitzen und die Ansätze ausprobieren.

    Entschuldigung, für manche nicht zu Ende gedachten Programmierzeilen. Es ist mein erstes kleines Projekt in der Robotik.


    Danke für eure Hilfe


    Grüße

    Hallo zusammen,


    im Rahmen einer Studienarbeit soll ich ein Roboterprogramm schreiben, mit dem Teile von einem laufendem Förderband aufgenommen werden können.

    Eine SPS überträgt die Ist-Geschwindigkeit des Förderbands an einen Roboter.

    Über eine Lichtschranke wird ein Teil erkannt und der Roboter startet eine Verfolgungsjagd entlang des Bandes. ;)

    Dies soll durch eine Basisverschiebung, anhand der Bandgeschwindigkeit realisiert werden.


    Als Roboter dient ein AGILUS KR10 mit einer KRC4-Steuerung mit der KSS 8.6

    Das Förderband wird angesteuert von einem Siemens Umrichter mit einer übergeordneten SPS (S7-1500).

    Die Kommunikation zwischen der SPS und der KRC4 läuft über PROFINET.


    Aktuell übertrage ich die Ist-Geschwindigkeit des Förderbandes als Integer in 1/100 mm/s über die digitalen Ein-/Ausgänge.

    Code
    DEFDAT plc_signals PUBLIC
    GLOBAL SIGNAL speed $IN[257] TO $IN[272]
    ENDDAT

    In meinem KRL-Programm wird dieser Wert in einem Submit in eine Gleitkommazahl in mm/s umgerechnet.

    Code
    DEF  Interface ( )
    LOOP
    geschwindigkeit = speed/100.0
    ENDLOOP
    END

    Anhand dieser Geschwindigkeit integriere ich über eine Zeit die Strecke, die mein Bauteil auf dem Förderband zurück gelegt hat.


    Eine Position zum ablegen/aufnehmen des Teils ist in der Förderbandbasis geteacht.

    Diese Basis wird mit der zurückgelegten Strecke in x-Richtung verschoben. (x-Richtung entspricht Laufrichtung des Bandes)

    Diese Berechnung wird durch eine Lichtschranke am Band neu initalisiert und gestartet ($FLAG[1]).

    Der Roboter befindet sich dabei in einer beliebigen Position über dem Band.


    Problem:

    Aktuell wird innerhalb eines Loops die zusätzliche Verschiebung der Basis berechnet.

    Im Anschluss wird eine linear Bewegung zur geteachten Position ausgeführt (Position wird mit Basis verschoben).

    Damit eine flüssige Bewegung entsteht wird die Bewegung mit c_dis überschliffen und ein Vorlaufzeigerstopp durch die CONTINUE-Befehle verhindert.

    Nach der Bewegung startet der Loop wieder mit der erneuten Berechnung.

    Die Zeit zwischen den Berechnung wird gestoppt und für die nächste Berechnung genutzt.

    Da der Roboter das Teil zuerst einholen muss, ist am Anfang die Zeit zwischen zwei Berechnungen sehr groß und eine Geschwindigkeitsänderung des Bandes wird nicht erkannt.

    Folge: Roboter fährt dem Würfel voraus oder hinterher.

    Code Loop:

    Ich habe bereits versucht, die Basisverschiebung in einem Submit zu berechnen, aber dann ist ein Überschleifen der Bewegungen nicht mehr möglich.


    Gibt es eine Möglichkeit die xVerschiebung zyklisch zu berechnen und trotzdem ein Überschleifen der Punkte zu realisieren?

    Oder würdet ihr ganz anders an die Sache herangehen?


    Vielen Dank für eure Bemühungen


    Grüße

    Erdnuss99