Beiträge von elchi2018

    Fall für nen Elektrischen .. ab 48V wirds speziell .. ^^ .. wenn was passiert, zahlt keine Versicherung, wenn keine Nachweise vorliegen ... nur mal so nebenbei ;) .. Freigabe-Tasten sind eingebundene Sicherheitsfeatures .. ^^ .. das kann schnell teuer werden ..

    UPDATE:

    ... alles schon einige Zeit her .. läuft seit gut einem Jahr problemlos ..


    Code
       ;bgl.src im SUBMIT (USER PLC) in das eingesprungen wird .. 
       IF B_AUTOEX THEN  
          MODE=#SYNC
          CWRITE($CMD,STAT,MODE,"RUN /R1/cell( )")
          B_AUTOEX=FALSE 
       ENDIF 

    Ziel ereicht ..

    das Scharfschalten der Variable wird mittlerweile auch genutzt, wenn Störungen anliegen und der MA den Rob neu startet - wobei eine Grundstellungsfahrt nach überprüfter ActPos ausgelöst wird. Ist alles OK/TRUE wird nach Hause gefahren, Variablen werden in den nötigen Zustand gesetzt und .. weiter gehts ..

    Also ich kann der Logik im Code nicht ganz folgen. Können andere hier im Forum eventuell besser. Du verschleifst ziemlich viel und ich meine, dass auch gewisse Anweisungen fehlen und Verschleifungen nicht eindeutig beendet sind.

    Für Deinen Fall würde ich erstmal die nötigen Bewegungsabläufe definieren, was soll er wohin tun und dann die übergeordnete Logik aufbauen und aus dieser heraus die einzelnen Schritte, sprich DEF's aufrufen.

    Aber, KRL ist offen .. darf jeder, wie er will .. fast ;)

    Du musst nur irgendwie klar machen, was Dein Ziel ist.

    Für mich reicht der geometrische Operant ":" um einen geteachten Punkt mit einem Offset zu verrechnen, je nach Produkt, was auf der Anlage läuft.

    Weswegen ich deinen Vergleich zu ABB nicht mal nachvollziehen möchte. Sieht für mich irgendwie kompliziert aus ..

    Und mein Weg ist in KRL nur ein Weg, es gibt viele Wege um Offsets in KRL zu verarbeiten.

    Ich habe eben die Operanten-Version, Arrays usw .. der Möglichkeiten viele .. Am Ende muss es funktionieren.

    Hi,

    irgendeine geteachte Position gibt es ja wahrscheinlich schon.

    Ein Praxisbespiel wäre:


    Alle Koordinaten sind aktuell Null, aber könnten nachgetragen werden, wenn ich eine Abweichung zum Master brauche. Case-Nummer kommt von der SPS, je nach Teil was läuft. Kann also unterschiedliche Offsets je Teil fahren.

    Gruß

    ...wegen undefinierter Funktion aus. Ich hoffe mir kann hier jemand sagen wie ich diese definieren kann.

    Entweder per DEF xyz() im selben Modul oder Du erstellst ein neues Modul mit dem Namen xyz.src .. kommt ganz auf die Struktur an, die Du möchtest. Ich habe hier Programmierer X, der für jede Funktion ein eigenes Modul gepinselt hat, den Programmierer Y, der alle DEF's in ein MAIN.src gestopft hat und nur in diesem herum hüpft, oder der Herr Z, der das dann auch noch mischt. Laufen tun sie aber alle ;)


    ... (nur um Deine direkt Frage zu beantworten, das Problem scheint ja schon gelöst)

    ich verate mich ja gerade selbst in Sachen "was ist von mir und was vom UR-Programmierer" .. ich brauch nur nen Logik-Check der letzten sieben Zeilen .. Ausschnitt aus dem BGL, was vom SUB abgearbeitet wird ..

    B_AUTOEX wird (siehe oben) nach dem Interuppt vor dem HALT gesetzt, B_Switch wird in der Initialsierung des jeweiligen MAIN .. TRUE und sagt einfach, wir sind im MAIN (oder MAIN2) das Prog läuft oder lief.. also ist das UP am laufen oder schon gelaufen und hängt im HALT ... ich denke die Freigeister hier erkennen die Logik .. schönes WE ! .. bin auf Reaktionen,Tippfehler, Logikfehler, Programmierfehler etc. gespannt. Code kann ich nach reichen, wenn benötigt .. kostet 5,80 EUR pro Zeile .. :P

    PTP fährt der Robi auf dem schnellsten Rechenweg von A nach B. Die Steuerung rechnet sich die am Schnellsten mögliche Achsbeschleunigung für alle Achsen aus und gibt einfach Vollgas.

    Deswegen drehe ich nen 40 cm 6-Kopf-Greifer per PTP um 180° in nem 60 cm Maschinenraum. Weil ich weiß, das er das tut .. und verdammt, es sieht eng aus. Läuft aber seit vier Jahren so... weit entfernte Punkte wird er wohl weiter ausholen.. deswegen meine Aussage, LIN ist bahntreu, stimme ich zu .. wen was im Weg steht, das ist immer Scheiße, stimme ich auch zu. Aber ich gehe immer davon aus, dass der Platz vorhanden ist, den Rob laufen zu lassen, ohne ihn groß einzuschränken. Alles bahntreue kostet Taktzeit ..

    Und ich habe unseren Schlossern schon gesagt, das sie die blöden Druckluftschläuche an einem Portal anders verlegen müssen, weil ich aus nem kriechenden LIN ein PTP gemacht habe. Ergebnis, Schläuche abgerissen, aber Taktzeitgewinn von ca. 3 Sekunden .. so läuft der Hase bei uns ..

    Alles gut .. hätte erwähnen sollen "nicht auf den Code achten" oder dergleichen.

    ... und keine Sorge, die Antwort in zwei Buchstaben bekam ich ja schon ;)


    Signatur: Mein Name ist Hase. Ich weiß von nix.


    Ich muss den orangenen Kollegen nur einfach aus dem aktuellen Modul raus holen, wenn eine DEF durchlaufen wurde und die Variable TRUE wird. Nach meiner Logik, die von SJX bestätigt wurde, würde das auch funktionieren. Ich muss nun aber den dümmsten Fall absichern, wenn der MA einfach im Fehlerfall in T1 geht, ohne das die Variable TRUE wird, was aber an der Anlage nötig wäre um überhaupt was in der Zelle zu machen .. ich bastel morgen was .. ich hatte ja Teilerfolg .. nur hatte ich den Merker vergessen .. schon lustig, wenn man dem Sub eine auf den Deckel geben will, aber einfach nicht dazwischen hauen kann ^^ ..

    Hallo zusammen,


    Code
       B_AUTOEX=TRUE ;Merker TRUE setzen
       INTERRUPT OFF 10
       HALT
       INTERRUPT ON 10

    Kurze Frage, Kurze Antwort.

    Würde die Variable "B_AUTOEX" nach INTERRUPT OFF 10 auch noch vor dem HALT gesetzt werden ?

    Danke ..

    EDIT: Der Merker soll einen Reset ins CELL auslösen, er ist Global und wird im SUB wieder FALSE gesetzt.

    Das CELL wartet auf die eine oder andere Programm-Nummer. Nach $Advance wird Interrupt 10 wohl noch geschaltet, spielt aber keine Rolle. In der Initialisierung des UP, aufgrufen durchs CELL wird er auf ON gesetzt. Wäre nur interessant, ob ich die Variable noch gesetzt bekomme oder nicht.

    PTP = fahre den Punkt an, egal wie, ohne Rücksicht auf Verluste

    LIN = Halte die Bahn, ohne Kompromisse

    Überschleifen = Guck, dass Du auf der Bahn bleibst, aber ein wenig Abweichen darf sein

    .. so würde ich es mal interpretieren wollen ..


    PTP kann eine Kreisbahn werden, wenn Du aber an einem Hindernis vorbei musst, kann ein LIN hilfreich sein, um eben z.B. einen Crash zu vermeiden.

    Das Überschleifen ist ganz hilfreich, wenn Du schnell irgendwo hin musst und es der Arbeitsraum hergibt.

    Ich triggere zB bei Home-Routinen über die Vorpositionen und gebe dem Rob die Möglichkeit diese Punkte zu überschleifen, also er soll sie nur "anschneiden" und muss sie nicht direkt anfahren, da es für den Rückzug nicht nötig ist.

    Zum Bleistift, triggere ich an einer Anlage über 3 Vorpositionen zurück zur Home-Position, sieht krass eng aus, aber es funktioniert und bringt mir Taktsekunden ..


    Und Deine Sorge in Z-Richtung, die ist aus meiner Erfahrung her unbegründet. Der Endpunkt müsste schon relevant "tiefer" liegen, als der Startpunkt, dass der Rob eine Furche zieht.

    Frohes Neues gewünscht .. :)

    riecht nach Rückzugsstrategie .. 8.6er ? die mit bevorzugt SPTPs? das neue PTP? .. wieso legst die Homepos nicht einfach so, dass er ohne LIN hinkommt? Und/oder über die Vorpos nach Hause triggert ? .. Nur mal so, dass ich auch mal wieder was gepostet habe ^^

    Ich löse auf...


    Ausnahmslos alle Variablen werden bei jedem Teil was geholt wird durch die SPS neu gesetzt.

    Der Ausnahmefall ist so lange NULL bis die SPS den Wert für die letzte Lage auf x mm setzt.

    Das Modul wird bei jedem Job neu durchlaufen. Hmm .. naja .. sowas geht auch ..

    Dann macht das Sinn ..

    Weiß ich auch alles nur, weil ich mich nach einer Änderung im Setzbild wieder mit dem Feeder beschäftigen muss ..

    update ..

    Der Sub ist quer geloopt und hüpft ins bgl.src, dort konnte ich die Bedingung ausmachen, welche das Tauchen auslöst oder eben nicht.


    TauchbadInterval=ToInt16(ibDipRefillIntervalB0, ibDipRefillIntervalB1)

    TauchbadAktiv=(TauchbadInterval>0)

    IF (TauchbadInterval>0) AND (#EXT_PGNO=1) THEN

    TauchbadAktiv=FALSE

    ENDIF


    Sollte #EXT_PGNO nicht direkt verwendet werden können, würde ich die Variable irgendwo global verpacken und dann damit arbeiten wollen .. Einen Reset will ich nicht unnötig auslösen, schon aus dem Grund, weil ich nicht weiß, wie die SPS damit umgeht. Tja, .. ich arbeite ausschließlich mit "Fremdbestand" und muss mich in jede neue Anlage einlesen .. und dann sieht man sehr oft den Wald vor lauter Bäumen nicht mehr, wenn doch eine Änderung ansteht ...

    Moin,


    das Geld wäre besser in einen Kurs investiert, als direkt in einen Roboter.

    Zum spielen zuhause reicht zB ein Arduino Braccio um einzusteigen und dabei kann man gleich noch Programmiersprache C/C++ erlernen. Programmierstrukturen aufbauen, Eingänge/Ausgänge lesen/schalten etc. Zwar fehlt dem orangenem Plastik-Robbi die Wegmessung (alles über Drehwinkel der Servos), aber um einfach mal anzufangen und relativ schnellen Programmiererfolg zu haben, eine wesentlich günstigere und vor allem sicherere Alternative.

    So nen KR10 mag niedlich erscheinen, aber mit dem richtigen Werkzeug auf A6 ist auch die Hand ab, wenn die Begrenzung für T1/2 in der config nicht passt ..