Beiträge von Hermann

    Hallo,
    genau so ist es.


    Das $advance=0 hatte ich nur vom Vorposter kopiert.
    Das kann man in der Interrupt-Routine getrost weglassen, da ist es
    nämlich viel zu spät dafür, denn da kann der Vorlaufzeiger
    schon lange über das Ende des Unterprogramms, in dem
    der Interrupt ausgelöst wird, hinausgewandert sein.
    Und zurückholen kann man den nicht mehr :(


    Hermann

    Hallo,
    dann mach' es so wie ich es am Anfang schon geschrieben habe:



    und fertig ist die Laube.


    Kein Include (gibt es nämlich auf ABB-Robotern nicht) und nix.
    Die Prozedur selectBrush() ist dann global bekannt und kann
    ohne weiteres aus jedem anderen Modul aufgerufen werden.


    Das ist ja der Witz an den Modulen. So kann man gemeinsame Teile
    (oder Standardroutinen) in einem Modul halten, und braucht's
    nur zu kopieren.


    Hermann

    Hi,
    irgendwie steh' ich echt auf dem Schlauch :huh:. Verstehe ich das jetzt so richtig:


    - Es gibt mehrere Module B001_001, B001_002 .... mit verschiedenen
    brushdata's.


    - Du willst in jedem dieser Module das selbe 'Zeug' includieren, nämlich
    die Variablen koagulierung und die Prozedur selectbrush()


    Vielleicht erkennst Du schon, dass ich mit der Lackiererei nix am Hut habe,
    aber mit 'Modulen laden' habe ich schon einiges gemacht, scheint mir hier
    aber absolut nicht notwendig zu sein.


    Wenn meine Vermutung stimmt, dann ist's wirklich extrem einfach zu realisieren.


    Im Zweifelsfall könnte man die Daten auch schlicht und einfach in eine
    Textdatei schreiben und von dort einlesen (ist aber auch nicht gerade
    turboschnell :()


    Hermann

    Hallo,
    weiss jetzt nicht wo das Problem liegt :kopfkratz:.


    Ich würde die beiden Teile jeweils in ein einzelnes Modul packen,
    nicht irgendwie includieren wollen.
    Macht doch nix, wenn die beiden Teile in unterschiedlichen Modulen
    stehen. Die Daten sind global bekannt, also kann aus dem
    einen Modul jeweils auf Daten / Prozeduren aus dem anderen
    zugegriffen werden.


    Hermann

    Hallo,
    also wenn da wirklich Fliesskommazahlen übertragen werden sollen,
    dann muss man die, soweit ich das beurteilen kann im Roboter
    Bit für Bit selber zusammenrechnen.


    Einfacher ist es da in der SPS die Fliesskommazahl in einen Interger-
    Wert umzurechnen und diesen dann in der KRC wieder umrechnen.


    Sowas wie:
    Auf der SPS den Wert mit 100 multiplizieren und nur den
    ganzzahligen Anteil an die KRC übergeben, dann auf dem Roboter
    wieder durch 100 teilen, dann hat man zwei Nachkommastellen.


    Hermann

    Hallo,
    soweit ich mich noch erinnern kann gehören bei der Siemens-
    Baugruppe die untersten 3 oder 4 Bits nicht zum Messwert.


    Code
    01101011 01110000
    |||||||| |||||
    Messwert


    Irgendwie lässt sich das dann mit dem links-/ rechtsbündigen
    mit- ohne Vorzeichen einstellen.
    War mir aber wie schon gesagt immer zu blöd und hab's selber
    ausgerechnet, da weiss ich dann wie es berechnet wird.


    Hermann

    Hallo,
    da würde ich doch mal sowas schreiben:

    Code
    INb20=5,0,x1    ;$IN[161-164]
    OUTb20=5,0,x1    ;$OUT[161-164]
    
    
    ANIN1=5,2,16,2    
    ANIN2=5,4,16,2    
    ANIN3=5,6,16,2    
    ANIN4=5,8,16,2


    Warum sollte da 22/24/26/28 stehen, genau das ist nämlich der Offset.
    Ich verwende die Analog-Definitionen so gut wie nie, sondern
    verwende normale Ganzzahlen und berechne mir den Wert dann selber.


    Im Zusammenhang mit Technologiepaketen, die Analogwerte
    verarbeiten wird diese Methode dann aber nicht funktionieren.


    Hermann

    Hallo,
    immer wieder die gleiche Diskussion:


    Wiederholgenauigkeit: Die Genauigkeit, mit der EIN
    bestimmter Punkt immer wieder angefahren wird.


    Bahngenauigkeit: Die Genauigkeit, mit der eine berechnete
    Bahn (und sei es nur eine gerade Linie zwischen zwei
    Punkten) abgefahren wird.


    Beispiel: Linearfahrt zwischen zwei geteachten Punkten:
    der Startpunkt und der Endpunkt werden auf
    Null Komma soundsoviel (siehe Datenblatt) genau angefahren.
    Die 'gerade' Bahn dazwischen weicht bei den meisten
    Robotern um ein ZIGFACHES dieses Null Komma
    soundsoviel von der idealen Geraden ab.
    Diese Genauigkeit gibt kaum ein Roboterhersteller an (Mir fällt auf
    Anhieb gar keiner ein, müsste da erst mal suchen).


    Diese zwei 'Parameter' eines Roboters unterscheiden sich deutlich.
    Die Auflistung oben enthält die Wiederholgenauigkeit.
    Das Ausgangspost scheint aber die Bahngenauigkeit von 0,1mm
    zu fordern. Solche Bahngenauigkeiten habe ich bisher nur bei
    Scaras gesehen.


    Hermann

    Hallo,
    habe jetzt keine wirklich praktischen Erfahrungen mit der Denso-Mechanik,
    kann aber aus meinen Erfahrungen mit Bosch-Scaras berichten:


    Der Unterschied der Positionen bei links-/rechtsarmig deutet auf einen falschen
    Nullpunkt der Achsen 1 und/oder 2 hin, oder wie Stefan schon beschrieben hat
    auf eine mechanische Ungenauigkeit des Tools.


    Wenn 'ohne Tool' gefahren werden muss, dann muss natürlich sichergestellt
    sein, dass der Greifer (oder die Messpitze) exakt in der Drehachse der Pinole
    steht (Kontrolle durch Drehen der Achse 4). Ansonsten ist die Aufgabe
    nicht lösbar!


    Der Versatz beim Berechnen der Positionen ist erklärbar durch:
    - falscher Nullpunkt Achse 2 (Achse 1 würde nur ein Verdrehen des
    Koordinatensystems erzeugen).
    - falsche Armlängen der Arme 1 und/oder 2
    - denkbar, aber doch etwas abwegig wären dann noch
    Messsystemabweichungen


    Bei Bosch wurden diese Parameter bei jeder Mechanik genau ausgemessen
    und in die Maschinenparameter eingetragen.
    Und anschliessend durch eine lineare Messfahrt mit analogen Sensoren über eine
    'schiefe Bahn', sowie eine links-/rechtsarmige Fahrt in einen Messschacht kontrolliert!


    Wie das bei Denso läuft weiss ich nicht.


    Wenn man jetzt an einem Roboter wieder die Standard-Parameter
    einstellt (warum auch immer) dann fährt der selbstredend nicht mehr
    so genau, als wenn man die individuell ermittelten Parameter verwendet.


    Um da mal Grössenordnungen anzugeben:
    Bei den Bosch-Geräten wurden Armlängenabweichungen im Zehntel-mm
    Bereich ermittelt (wenn mich meine Erinnerung nicht täuscht dann waren
    das maximal mal 1,5 Zehntel, häufig deutlich unter 1/10). Aber die
    Auswirkungen bei der Linearfahrt sind da deutlich zu sehen/messen
    gewesen.


    Hermann


    Hallo Roland,
    ist der Druck vielleicht in der Zwischenzeit gewichen?
    Wie war denn die Lösung jetzt?
    Wäre nett das zu erfahren.


    Hermann

    Hallo,
    das Thema wurde hier schon einige Male zumindest indirekt angesprochen.


    Such mal nach Interrupt, brake und resume.


    Kurzerklärung:
    -Hauptprogramm als Endlosschleife erstellen, darin einen Interrupt auf
    einen Eingang definieren.
    -In der Endlosschleife ein Unterprogramm aufrufen, in dem dann
    nochmal in einer Endlosschleife die eigentliche Aufgabe erledigt wird.
    -In die Interrupt-Prozedur nur ein Brake und resume programmieren.


    Gruss Hermann

    Hallo,
    ja klar kann es sein, dass die fehlenden Not-Aus-Taster das Problem darstellen.
    Ohne Schaltplan wirst Du da nicht sehr weit kommen.


    Ich kenne jetzt das MP10 nicht, stell doch mal ein Bild der Steuerung mit
    dem MP10 hier rein.


    Es gab da einige unterschiedliche Bedienfelder, auf den meisten war da ein
    Taster, mit dem man die Antriebe einschalten konnte.


    Hermann

    Hallo,
    wenn ich mich noch recht erinnere kommt die Not-Aus-Meldung auch wenn nur die Antriebe
    ausgeschaltet sind.
    Lassen die sich nicht einschalten? (Knopf am Bedienfeld).


    Die Referenzpunkte kann man normalerweise auch über das PHG anfahren,
    aber natürlich nur bei eingeschalteten Antrieben.


    Hermann


    Am besten forderst Du das aktuelle Lastenheft an. Gib es inzwischen auf DVD. Da stehen dann alle Vorschriften und Pflichtenhefte drin.


    Und verbringst dann die nächsten 2 Tage mit dem Durchackern desselben. Um am Ende
    der zwei Tage festzustellen, dass da so gut wie nix über Software drin steht.


    Programmierrichtlinien haben wir bis jetzt im Neckartal keine verwendet (in den letzten
    Monaten ca. 8 Roboter), da es keine gab.
    Im Moment sind sie dabei die Wiest-Vermessung der Roboter verbindlich einzufordern.


    Die Prisma-Schnittstelle muss in letzter Zeit auch immer sein (ist aber kein Problem,
    da muss man eigentlich nur den OPC-Server installieren und ein paar Variablen einigermassen
    sinnvoll besetzen, den Objekt-Broker haben die selber installiert, sollte aber auch kein
    grosses Problem darstellen).


    Gruss Hermann

    Hi,
    dann halt so wie Robcheck geschrieben hat in der EIO.CFG nach den Zeilen
    #
    EIO_CROSS:


    einfügen:


    -Lact "*E01" -Lres "dogun"


    Dann nimmt der Ausgang dogun den invertierten Zustand von E01 an.


    Falls die Zeilen
    #
    EIO_CROSS:
    nicht vorhanden sind, einfach einfügen.


    Nochmal im Telegrammstil:
    - Speichern der aktuellen E/A-Konfiguration (oder ein komplettes Backup erstellen)
    - Ergänzen der obigen Zeilen in der EIO.CFG aus der Sicherung.(mit Anpassung von E01 und A01 an Deine verwendeten Namen)
    - Laden der geänderten EIO.CFG im Systemparameter-Menü


    Ansonsten mal das Handbuch bemühen Stichwort Querverbindungen oder Corssconnection im Abschnitt
    Systemparameter.


    Diese einfache Vorgehensweise kann nicht verwendet werden, wenn der Ausgang 'dogun' auch im Anwenderprogramm gesetzt / zurueckgesetzt werden soll. Da muss man etwas mehr Hirnschmalz investieren und
    am besten noch mit simulierten Ausgängen arbeiten.


    Also:
    - Wenn E01 gesetzt ist, dann soll dogun zurückgesetzt sein?
    - Im Programm soll man dogun setzen / zurücksetzen können


    Dann eine Simulierte Karte mit einem Ausgang Sdogun in der Konfiguration eintragen (oder einen ansonsten nicht verwendeten Ausgang verwenden)


    In der EIO.CFG eintragen:


    #
    EIO_CROSS:
    -Lact "Sdogun & *E01" -Lres "dogun"


    Im Programm immer nur den Ausgang Sdogun setzen / zurücksetzen.


    Hermann

    Hallo,
    naja, sobald die Querverbindung eingerichtet ist nimmt der Ausgang immer den gleichen
    Zustand wie der querverbundene Eingang an. Da gibt es dann nichts mehr zu beeinflussen,
    das ist dann immer so. Wird im Hintergrund automatisch erledigt.


    Querverbindung wird in den Systemparametern eingerichtet.


    Hermann

    Hallo,
    vermutlich sind da in deinem Prozess 'unerlaubte' Befehle drin.
    Erlaubt ist sind da nur ganz wenige Befehle, hauptsächlich sowas wie:


    DO[100]=(DI[101] OR DI[100]);


    auf keinen Fall kann man Sprünge verwenden.


    Gruss Hermann