Beiträge von h_robot

    Moin Robonator!


    Danke für den Tipp!


    Habe soweit schon etwas testen können.


    Auf $IN[19] liegt zum Testen ein Öffner, Hier soll dann bald das Sensorsignal aufgelegt werden.


    im cell-Programm folgendes:


    Code
    .....
    INIT
    BASISTECH INI
    INTERRUPT WITH BRAKE F DECL 1 WHEN $IN[19]==FALSE DO STOP_ULS()
    INTERRUPT ON 1
    CHECK HOME
    PTP HOME.....
    .....


    Ganz unten im cell-Programm dann noch:

    Code
    DEF STOP_ULS()
    // hier wäre wohl eigentlich BRAKE F, aber da ich es schon in der Interrupt-Deklaration habe, kann dieses Unterprogramm wohl leer sein?
    END


    Insgesamt gibt es zumindest schonmal keine Fehler und es funktioniert auch (auch wenn noch nicht vollständig und zufriedenstellend):

    Wenn ich cell anwähle (T1) und starte (HOME anfahren), wird ein Flankenwechsel von TRUE->FALSE erkannt und der Roboter steht.

    Aber:

    Ich kann einfach die Start-Taste loslassen und neu drücken, dann fährt der Roboter weiter. Auch erneute Flankenwechsel des Einganges führen zu keiner Änderung.....

    Nachtrag, s.u., in EXT funktioniert es nicht


    Prinzipiell funktioniert es also irgendwie, aber noch nicht so, wie es sein sollte.

    Ich würde gerne bei Kollision in T2, AUT, EXT BRAKE F ausführen und jede weitere Bewegung verhindern.


    Ist meine Integration so sonst praktikabel und üblich, oder sollte es generell anders sein? Ist das WITH BRAKE F in der Interrupt Deklaration so ok, oder lieber im Unterprogramm? Habe das Unterprogramm auch leider nicht in eine seperate Datei bekommen, deshalb unter celll.


    Wenn das Anhalten bei Kollision im Normalbetrieb sonst aber programmiertechnisch "sicher" ist, kann ich die restliche Verarbeitung auch in der Automatisierungs-SPS machen (Fahrfreigabe wegnahmen, wiederanlauf verhindern, etc.). Ich frage nur, da ich nicht weiß, wie man sowas am elegentesten löst.

    Moin,


    gleich zu Beginn: ja ich habe hier bereits einige Artikel zum Thema gelesen, habe aber immer noch keine Lösung gefunden, welche Vorgehensweise am meisten Sinn macht.


    Es geht um das Anhalten bei Auslösung einer externen Überlastkupplung mit einem Öffner.


    Folgende Möglichkeiten sind mir bekannt, bzw. wären umsetzbar:

    • Sensorsignal wird in übergeordneter Automatisierungs-SPS verarbeitet. SPS ist mit KR C4 über EtherCAT-Bridge verbunden. In AUT und EXT würde die SPS bei Auslösen des Sensors $MOVE_ENABLE auf FALSE setzen.
      Nachteil: Es wird in externer SPS verarbeitet; ggf. längere Laufzeit; KR C4 macht dann "nur" STOP 2.
      Reicht das aus, oder wäre STOP 1 oder STOP 0 bei Kollision besser?
    • In sps.sub kann der Sensor (direkt an KEB EK1100 angeschlossen) ausgewertet werden und ROB_STOP() ausgeführt werden.
      Wenn ich es richtig verstanden habe, kann ich über den Parameter ROB_STOP_T := #PATH_MAINTAINING indirekt ein BRAKE F auslösen. Roboter kommt dadurch schneller zum Stehen als Lösung 1?
    • Arbeiten mit Interrupts. Würde dies auch einmalig in CELL funktionieren, oder muss es in jedem aus cell aufgerufenem Programm sein?

    Ich suche eine Lösung, die möglichst zuverlässig ist und zum schnellen Stillstand führt. Es arbeiten ggf. auch weniger Erfahrene am Roboter, erstellen vielleicht auch mal Programme für cell. Ein manuelles einbauen in jedes Programm wäre deshalb nicht so gut, wird sonst vergessen und es gibt dann keinen Kollisionsschutz.


    Der Schutz soll nur in T2/AUT/EXT aktiv sein. Das wäre zumindest mit der Lösung 1 und 2 leicht umzusetzen. Bei einem Crash muss also in T1 freigefahren werden.


    Ich neige zurzeit noch zur Lösung 1, mache mir da aber Gedanken, ob der Roboter dann wirklich schnell genug steht.... SPS-Laufzeiten sind eher gering (10 ms oder dafür ein schnellerer Task), aber die Stopp-Reaktion soll dann eigentlich schneller kommen; oder ist STOP 2 schnell genug?


    Nehme gerne eure Tipps auf ;)


    Grüße,

    h_robot

    Moin zusammen,


    unser Roboter steht in Grundstellung leider in der Kanonenstellung und muss sich von dort aus in "Kanonenstoßrichtung" vor- und zurück bewegen, also mitten durch eine Singularität. Ich möchte das nun umgehen, indem ich zwischen Roboterflansch und Werkzeug eine kurze Flanschverlängerung montiere, ausgeführt wie ein Keil, um einen Winkelversatz zu realisieren, damit die Achse 5 für ein gerades Werkzeug etwas nach oben oder unten geneigt sein muss.


    Habt ihr da Erfahrungswerte, wie große dieser Winkel gewählt sein sollte? Reichen 5° schon aus oder wovon ist das noch abhängig?


    Habt ihr Tipps für mich?


    Danke, Grüße und nen schönes Wochenende!


    VG,

    h_robot

    Danke, SJX!!


    Hier scheint wirklich ein Prblem vorzuliegen. Ich frage mich aber auch etwas, wo die ganzen Schritte, die Du mir jetzt genannt hast eigentlich dokumentiert sind? Ist das von KUKA gedacht, dass man das selbst anpasst und von denen irgendwo beschrieben? Oder woher weißt Du das alles? Ich habe zwar mal einen 2-Wöchigen Programmierlehrgang im KUKA College absolviert, aber das hat sowas natürlich überhaupt nicht beinhaltet.....


    Also erstmal (falls relevant): BrakeTestReq.src kann ich mir nur in WorkVisual ansehen. Auf dem KCP sehe ich nur den leeren Fold perform brake test, sonst kann ich keine Folds öffnen und sehe den eigentlichen Quellcode nicht.....


    Die Datein sehen fast alle wie bei Dir aus, mit der Ausnahme: Das Bitfield stehtr auf 0, BrkTst also für alle Achsen deaktiviert. Die Datei wird bei mir aber als automatisch generiert und Schreibgeschützt angezeigt. Kann sie nicht verändern....


    Hier auch meine Ordnerstruktur: Gibt es hier auch weitere Erklärungen von KUKA, wie die Ordner zusammenhängen? Teilweise gleiche Dateinamen mit unterschiedlichem Inhalt einmal in Mada-MotionDrivers und einmal direkt in MotionDrivers.... Irgendwie sehr unübersichtlich. Was kann hier nicht stimmen?



    h_robot

    Moin,


    ich habe in einer Zelle zwei Roboter, die unabhängig voneinander arbeiten (kein RoboTeam oder sowas). Kann ich die Steuerungen trotzdem irgendwie in einem Projekt verwalten, auch wenn ich beim Projektdownload dann immer beide gleichzeitig downloade? Oder müssen es dann wirklich zwei getrennte Projekte sein, und ich muss immer zwischen beiden hin und her wechseln?


    h_robot

    Guten Morgen zusammen!

    Welche KSS hast en du?

    Hast du SafeOperation drauf bzw. wurde wenn ja das Optionspaket nachgerüstet?

    Ich habe die KR C V8.3.37 mit SafeOperation 3.2.4. SafeOperation war von Anfang an mit bei Auslieferung installiert, da auch so bestellt.


    Hintergrund, wofür SafeOperation eingesetzt werden soll: Roboter steht etwas dicht am Zaun. Es sollen also nur die Achsen sicher begrenzt werden. Keine Verwendung der X13-Schnittstelle, keine Safety über Bus o.ä. und auch keine Reduzierten Geschwindigkeiten oder sonstige Funktionalitäten aus SafeOperation.


    Übrigens: Die Justagereferenzierung funktioniert, dies habe ich schon in cell.src einbauen können.


    Ich schließe draus, dass du kein SafeOperation drauf hast? Hast du dann den Treiber für den Bremsentest selbst einkommentiert?

    Ne, daran habe ich nichts verändert. Bei einem AGILUS ohne SafeOperation habe ich den Bremstest auch mal in WorkVisual aktiviert, und dort funktioniert es auch einwandfrei. Bremstest lässt sich aus cell.src starten und wird dann auch wirklich ausgeführt.


    Bei betreffenden o.g. Roboter wird "Bremstest erzwungen" auch in der Sicherheitskonfiguration angezeigt, jedoch erscheint keine Anforderungsmeldung im Meldungsfenster. Und er lässt sicheben wie schon beschrieben nicht ausführen. Roboter fährt einfach nur in Start- und Endposition des Bremstests und gibt Fertigmeldung aus, obwohl nichts passiert ist. Auch bei externer Anforderung nicht. (Bei externer Anforderung steht die Notwendigkeit des Bremstests jedoch im Meldungsfenster).


    Oder h_robot müsste Doku lesen.

    Blick in "Bedien- und Programmieranleitung für Systemintegratoren".

    Hat heute 18 Seiten drin betreffend Bremsentest und beantwortet eigentlich alle Fragen.

    Steht in der Doku für meine KSS Version leider nicht drin. Auch das Menü aus dem von Dir gezeigten Screenshot finde ich nicht.


    Danke für Eure Hilfsbereitschaft!! :)

    Hast du mal versucht, das Braketestreq.src direkt anzuwählen und abzufahren?

    ja, habe ich in AUT gestartet, aber es zeigt sich die gleiche Reaktion. Ich muss bestätigen, dass ich den Bremstest händisch durchführe, dann aber mit Zusatimmung und Start gedrückt lassen. Der Roboter fährt dann in die Start- und Stopposition, aber es keine von dir beschriebenen Bewegungen.....


    Grüße

    Moin zusammen,


    zur ersten Antwort vom Robonator eine Frage:

    der Bremsentest braucht defaultmäßig alle 46h ca 30 Sekunden für den Bremsentest.


    Ich habe den Bremstest mal per externem Signal angefordert. Am KCP erscheint dann auch die Meldung (KSS27004 Bremsentest erforderlich).


    Dann habe ich BrakeTestReq aus dem cell.src heraus aufgerufen => Roboter verfährt in die programmierte Start- und dann in die programmierte Endposition => Dann Meldung (KSS27012 Bremsentest erfolgreich durchgeführt).


    Von der Startposition wurden keine weiteren automatischen Bewegungen durchgeführt, schon gar nicht beschleunigte der Roboter auf 100%, wie in der Dokumentation beschrieben. Es hat auch keine 30 Sekunden gedauert.


    Wurde der Bremsentest wirklich durchgeführt, oder war die Meldung KSS27012 dann schon aufgrund der Tatsache gekommen, dass theoretisch kein Bremstest erforderlich ist, obwohl ich einen angefordert habe?


    Oder geht der Bremsentest so schnell, dass man davon nichts sieht und auch die in der Dokumentation beschriebenen Freiräume von +/- 10° pro Achse eher eine sehr, sehr weite Reserve für den Fall ist, dass eine Bremse wirklich defekt ist? D.h. bewegt sich der Roboter in der Testposition bei intakten BRemsen normal gar nicht?


    Grüße,

    h_robot

    Hi!


    Danke für Eure bisherigen Antworten!


    Kurz zum Einsatzzweck/Anwendung des Roboters: Es geht um eine Automatisierung im Uni-Versuchsfeld. Wenn die Anlage gerade nicht benötigt wird, werden die Robotersteuerungen i.d.R. auch ausgeschaltet.


    Wenn versuche gefahren werden ==> alles einschalten, dann dauert eine Versuchsreihe etwa bis zu 8 Stunden (dabei werden dann etwa 500....2.000 Teile produziert), das Ganze muss dann unterbrechungsfrei und mit gleichbleibender Taktzeit von 5s sein.


    Danach wäre auch Zeit für den Bremstest, bringt aber vermutlich nichts, weil wir die Robotersteuerungen nach der Versuchsserie ausschalten.


    Die Anlage steht manchmal auch einige Wochen still und manchmal werden 5 Tage hintereinander versuche gefahren (jeweils mit Abschaltung der kompletten Anlage zu Feierabend)


    Da ich wohl (lt. KUKA-Anleitung Safe Operation) den Bremstest zwingend innerhalb der ersten zwei Stunden durchführen muss, da es ansonsten zu einem Stopp kommt, muss ich den Bremstest wohl kalt oder nach einer Warmlaufphase vor Versuchsbeginn durchführen.


    @Martl: Oder bezieht sich das von Dir beschriebene Intervall auch auf die von KUKA angegebenen 2 Stunden nach Einschalten?


    Habt ihr für den o.g. Anwendungsfall des Roboters eine praktische Lösungsmöglichkeit, wie und wann der Bremstest durchgeführt wird und wie das Intervall sein könnte?


    Wenn ich alles einschalte muss ich ja auf jeden Fall den Referenzschalter anfahren. Dann könnte ich doch auch gleich den Bremstest einleiten und habe dann erstmal Ruhe, oder?


    Bremstest in der Grundstellung geht aber nicht, weil die Grundstellung nur per LIN-Bewegung in zwei Richtungen exakt verlassen werden kann.


    h_robot

    Moin,


    da unsere Roboter zu dicht am Schutzzaun stehen, möchte ich per Safe Operation einen sicheren Zellbereich definieren. Dafür muss ich auch den sicheren Referenzschalter zur Justageüberprüfung verwenden (habe ich noch nicht gemacht, liest sich in der Anleitung aber erstmal relativ einfach und ist ja nur 1x nach Hochfahren der Steuerung notwendig).


    Etwas mehr Bedenken habe ich beim Bremstest: Dieser ist scheinbar auch zwingend erforderlich?? Wenn ich es richtig verstanden habe, benötigt der Roboter für jede Achse 10° Bewegungsspielraum an einer definierten Position. Wie lange dauert so ein Bremstest? Die Taktzeit der Anlage beträgt 5 Sekunden, und die Bewegung des betreffenden Roboters geht bestimmt auch über 2-3 Sekunden. Es gibt also nur eine sehr kurze Stillstandszeit.


    Noch kritischer wäre es beim zweiten Roboter: Hier könnte es sogar sein, dass der Roboter durchgängig in Bewegung ist oder nur ganz kurze Wartezeiten hat.


    Wenn der Bremstest also nicht kalt sofort bei Anlagenstart stattfinden soll und ich nicht unbedingt 1h Warmfahren will, muss der Bremstest im Prozess erfolgen. Deshalb die Frage nach der Dauer und dem genauen Ablauf dieses Tests.


    Vielen Dank im Voraus und euch allen ein schönes Wochenende!


    h_robot

    Hallo zusammen,


    bisher habe ich die die Anbindung der Sicherheit einer KR C4 immer über die -X11-Schnittstelle realisiert. Da ich jetzt Steuerungsseitig auch mit einem Beckhoff-TwinCAT-System arbeite, überlege ich, auch die Robotersicherheit über EtherCAT anzubinden. Welche Möglichkeiten habe ich hier und benötige ich hierfür werksmäßig irgendwelche optionalen Schnittstellen, die ich hätte mitbestellen müssen?


    Folgendes soll über EtherCAT laufen: Die Not-Halt-Schalter an der Anlage liegen auf dem EtherCAT-"Bus" an sicheren Eingangsklemmen, es ist eine Logik-Klemme EL6900 oder EL6910 oder EL6930 vorhanden. Kann die KR C4 ein sicheres Not-Halt-Signal für den Eingangskreis bekommen?


    Wie würde der einfachste Aufbau bei Verwendung von EtherCAT, TwinCAT und einer KR C4 in der Grundausführung aussehen?

    Moin,


    für die Einbindung der Automatik Extern Schnittstelle in meine Steuerung möchte ich die Signale direkt über EtherCAT mit einer Beckhoff EL6695-Klemme am -X66 Bus (Korrektur: -X65 KUKA Extension Bus) der KR C4 übertragen. In TwinCAT kann ich auf der Klemme sowohl BOOL, als auch BYTE, INT, etc. parallel konfigurieren. In WorkVisual scheint aber insgesamt nur jeweils ein Datentyp für jede Richtung konfigurierbar zu sein. Also entweder alle BOOL, oder alle BYTE, etc. Ist das wirklich so?


    Ich würde gerade für Automatik Extern dann wohl alles auf BOOL stellen. Wie übertrage ich dann aber am besten INT-Variablen, bspw. für einen externen Geschwindigkeitsoverwrite oder ähnliches? Muss ich die dann in TwinCAT wirklich erst von INT in BOOL zerlegen, übertragen und im submit der KR C4 dann wieder als BOOL zu einem INT zusammensetzen?

    Hallo zusammen,
    wir planen eine Roboterzelle mit einem kleinen KUKA Agilus, der dicht an einem Schutzzaun steht (möglicher Aktionsradius reicht durch den Zaun). Es ist nur die -X11 Schnittstelle vorhanden, damit also keine sichere Arbeitsraumüberwachung. Safe Operation und der damit notwendige Safety Ethernet Bus soll auch nicht nachgerüstet werden. Der Zaun muss den Roboter also sicher stand halten.
    Nach unserer Einschätzung (und auch inoffiziellen Angaben von KUKA) reicht sicherlich eine dicke Plexiglas-Scheibe mit 10 mm oder 12 mm Stärke. Das Problem ist natürlich nur der rechnerische Nachweis, dass das hält.
    KUKA kann hierfür maximale kinetische Energien in J für jede Achse liefern. Auch Werkstoffkennwerte von Plexischeiben lassen sich vom Hersteller ermitteln.
    Hat jemand schonmal eine solche Rechnung aufgestellt, oder weiß, wie man das am besten macht?
    Viele Grüße!

    Hallo,
    ich habe zur Zeit das Problem, dass ich linear von oben nach unten durch die "Kanonenstellung", also eine Singularität fahren muss.
    Die Achse 4 steigt aus, weil die Geschwindigkeit lt. Berechnung unendlich sein müsste. Das ist soweit klar. Es ist eine einfache Bewegung, die direkt per inline Formular programmiert wird.
    Zwei Software-Lösungswege sind denkbar:
    [list type=decimal]

    • In der config-Datei (habe genauen Namen und Pfad grade nicht vor mir, aber ihr wisst bestimmt, was gemeint ist) wird eingestellt, dass die A4-Geschwindigkeit in allen Betriebsarten (nicht nur T1) überwacht wird ==> 180°-Drehung von A4 ist dann trotzdem noch vorhanden.

    • Singularität in LIN (Hand-PTP) überfahren ==> Keine 180°-Drehung, jedoch auch keine reine LIN-Bewegung

    [/list]
    Beides ist eher ungeeignet und es wird wahrscheinlich auf eine Erhöhung des Arbeitsbereiches hinauslaufen, sodass die Singularität nicht mehr in LIN überfahren werden muss.
    Aber trotzdem, folgende Frage: Gibt es keine Möglichkeit, da irgendwie per Status/Turn einzugreifen? Mechanisch wäre es ja möglich, dass sich bei der Gewünschten Bewegung die Achse 4 nicht um 180° dreht. Es gibt mehrere Möglichkeiten, diesen Punkt zu durchfahren, aber warum wählt sich der Roboter immer die ungünstigste (also mit der Drehung) aus? Ich meine, dass die Drehung genau in der Singularität ausgeführt wird. Letztendlich ist dann fast alles wie ohne Drehung. Warum lässt sich die Drehung nicht abstellen? Kann man die Unbestimmtheit nicht vorher (vor der Singularität) "klären" und "beauftragen", die Bewegung ohne die Drehung zu machen? Ich verstehe zwar, dass es keine eindeutige Bewegung gibt, aber ich verstehe nicht, warum es dann immer mit dieser Drehung sein muss, und nicht auch ohne geht......
    Vielleicht kann das nochmal jemand erklären?
    VG,
    h_robot

    Hallo zusammen,
    bisher habe ich kaum etwas im submit/sps programmiert und mich meistens auf die reine Bewegungs- und Ablaufprogrammierung beschränkt. Jetzt soll eine Überlastkupplung per Interrupt integriert werden. Es liegt ein Öffner auf Kanal 17. Bei Abfall des Signals soll BRAKE F erfolgen.
    Ein Taster auf dem Roboter kann das Signal brücken, damit nach Kollision in T1 wieder in HOME gefahren werden kann.
    Ich weiß, dass ich im sps.sub folgendes einbinden muss:
    INTERRUPT DECL 1 WHEN $IN[17]==FALSE DO KOLLISION()
    außerdem steht in KOLLISION() die Anweisung BRAKE F.
    Aber wo muss die Deklaration sinnvollerweise hin? Wo schalte ich am besten INTERRUPT ON und wo schreibe ich wie die Interruptroutine/das Programm KOLLISION()?

    Ich wäre über ein paar Hinweise sehr dankbar. Ich möchte es auch nicht gerne irgendwie einfach ausprobieren, sondern es schon dort hinschreiben, wie es am besten und professionellsten ist ;)
    Danke und Grüße,
    h_robot

    Hallo,


    mir ist gerade ein Angebot <10€ für einen Schneidplotter durch die Lappen gegangen. Mit dem Schneidplotter kann man z.B. selbstklebende Folien schneiden und damit Schriftzüge, Logos, Klebeschriften usw. erstellen.
    Die Teile sind natürlich auch nicht ganz billig, wenn man sie neu kauft.


    Dann kam mir ja die Idee, dass ich einen voll funktionsfähigen KR-16-2 FS mit einer KR C4 "rumstehen" habe. Dafür gibt es ja KUKA.CNC. Kennt jemand den ungefähren Preis dafür? Ich habe noch nie sehr hohe Genauigkeiten beim Roboter gebraucht (nur Teilehandling) und kann schlecht einschätzen, welche Möglichkeiten der Roboter so hat. Ich bin gelegentlich mal (mit langsamer Handverfahrgeschwindigkeit) gegen etwas gegen gefahren, sodass die Getriebemomentüberwachung ausgelöst hat. Ich weiß nicht, ob es dadurch jetzt irgendwelche Ungenauigkeiten gibt.


    Wenn ich KUKA.CNC hätte, kann man den dann auch als Schneidplotter betreiben? Ich müsste ja ein Schneidmesser einspannen. Die Frage ist jetzt, wie die Orientierung des Messers geregelt wird. Es gibt ja nur eine mögliche Schneidrichtung und nicht wie beim Stift alle Richtungen.


    Über ein paar Infos und Antworten auf meine Fragen würde ich mich sehr freuen ;)

    Ob ich da jetzt Namen oder Nummern für nehme, werde ich dann sehen, es sind ja auch nicht sooo viele Punkte, die ich global brauche. Die anderen werden alle fortlaufend per Inline-Formular angelegt und geteacht. Die Frage ist nur, was passiert, wenn z.B. XP5 global ist, und ich in einem anderen Programm vier Punkte geteacht habe und jetzt einen fünften anlege. Der heißt dann ja auch XP5.....



    Wichtig eben Tool und Base dabei korrekt zu beachten. Globale Positionen sind da etwas .... na eben heikel.


    Dazu gleich eine Frage: Im Inline-Formular zu dem Punkt kann ich ja auch Base und Tool auswählen. Also sind beide Eigenschaften ja auch Eigenschaften des globalen Punktes, oder nicht? Ich habe sowiso keine verschiedenen Tool-Geometrien, die Tools unterscheiden sich nur in den Lastdaten (Teil gegriffen oder nicht).


    Also nochmal zusammenfassen: Eine einfache *.dat anlegen, Punkte in T1 anfahren (und wie dann speichern/teachen?? Geht das nicht nur in einem Programm??) und wenn gespeichert mit global und public versehen, wie beschrieben?

    :danke:, das hat mir denke ich schon etwas weitergeholfen.


    Mittlerweile geht es jetzt um mehrere Programme, die alle auf bestimmte, globale Punkte zugreifen sollen. Im einen Programm ist es P4, im anderen P5. Es sind natürlich andere Punkte, die ich durch einen globalen ersetzen möchte.


    Da ich bis jetzt aber nichts global deklariert habe, sind diese Punkte in jedem Programm nur ähnlich und heißen auch alle anders. Jetzt möchte ich die Punkte entsprechend umbenennen und global machen. Wie würde ich am besten vorgehen und schreibe ich ein X vor die Namen oder nicht?


    Beispiel:
    Punkt A verwendet von prog_1 und prog_2
    Punkt B verwendet von prog_1 und prog_3
    Punkt C verwendet von prog_2 und prog_3


    Sollte es dann lieber nur eine *.dat-Datei für alle geben? Die Punkte sollen aber auch durch handverfahren änderbar "touch-up" sein. Wo deklariere ich z.B. den Punkt A?