Beiträge von elias

    Hi,


    soll der Dialog bloss an einer bestimmten Stelle im Programm sichtbar sein, oder immer? Wenn die Tasten immer Sichtbar sein sollen musst Du es fast mit UserTech machen.
    Ansonsten kannst Du das ganz mit der Strucktur $MSG_T machen (wenn Du den Submitinterpreter nicht brauchst muesste es auch da drin gehen (hab ich aber noch nie probiert)). Erst ne #DIALOG Meldung rausgeben, Antwort auswerten, und mit Swrite und deinem die Zaehler ne #NOTIFY Meldung klopfen und ausgeben.


    Alternativ kannst Du Deine Zaehler auch in MonConfig.ini (weiss nich so genau wie die heisst) rein machen dann koennen se immer ueber Ansicht-->Variable-->Uebersicht den aktuellen stand anschauen.
    Wenn Du aber UserTech hast wuerd ichs damit machen.


    Gruss Elias

    Hallo,


    ich wuerds mal damit versuchen das ich in der Interruptroutine nach der Berechnung, einen Interrupt ausloese mit einer hoehren Prioritaet. Da ich sowas noch nie gemacht habe, und auch nicht weiss wofuer das gut ist, kann ich Dir nicht sagen ob mein Vorschlag auch wirklich funktioniert. Wobei ich marvins Vorschlag: Das Rueckpositionieren einfach auszuschalten besser finde, wenn Du es an keiner anderen stelle brauchst (wie z.B. NOT-AUS).


    Gruss Elias

    Hallo,


    Form 2 ist bei dem neuen Treiber zu verwenden also dn2drv.o. Da Du bei den digitalen IOs auch schon Form 1 verwendest denke ich das Du den Treiber dndrv.o benutzt.


    Gruss Elias

    Hallo,


    schau mal ganz unten in der IOSYS.INI nach, da steht alles drinnen, mit deinem Treiber sollte es mit der Form 1 gehen, ich habse mal aus der IOSYS.INI raus kopiert:


    ;Analog Inputs and Outputs:
    ;
    ; Form 1:
    ; {token}{num}={byte},{res},{type}[,CAL{factor}]
    ;
    ; {token} ANIN or ANOUT
    ; {num} number of the analog channel (1..i)
    ; {byte} byte offset over all peripheral devices (0..m)
    ; Offset starts with 0 at the first device and
    ; ends with m at the end of the last device.
    ; {res} resolution of the analog value (number of bits)
    ; {type} type of analog value
    ; 0 : right justified without sign
    ; 1 : right justified with sign
    ; 2 : left justified without sign
    ; 3 : left justified with sign
    ; {factor} maximum analog value, decimal without prefix,
    ; hexadec. with prefix 0x or octal with prefix 0
    ; "CAL 0" or no entry sets factor to its maximum
    ; Example:
    ; ANIN1=10,12,3
    ; The analog input No.1 is used. The byte offset on
    ; peripheral side is 10, the resolution is 12 bit and the
    ; type of analog value is 3 (left justified with sign).
    ; The maximum binary analog value is 2047.
    ;


    Gruss Elias

    Sers,


    cool! Ich kannte diese Funktion nicht und hab deshalb auch nochmal in den Handbuechern nachgeschaut, habs allerdings nur in den Handbuechern fuer SW 5.x gefunden. Gibts das erst seit 5.x oder ist das bei 4.x bloss nicht dokumentiert??


    Gruss Elias

    Sers,


    ich wuerd mir Konstanten mit den Zahlenwerten, wenn Dein Signal z.B. DI_GripperClosed heisst und auf Eingang 3 liegt, dann wuerd ich mir ne Konstante machen die IC_GripperClosed die den Wert 3 hat.
    Du kannst natuerlich auch den Namen als String uebergeben, dann muss aber Dein Programm alle moeglichen Namen kennen, dadurch ist es nicht mehr so leicht zu haendeln, und die wieder Verwendtbarkeit laesst auch zu wuenschen uebrig.


    Gruss Elias

    Hallo,


    ich habe jetzt schon einige Roboter mit Mess- bzw. Suchfahrten realisiert, ich hatte es noch nie benoetigt eine Suchfahrt zu wiederholen, und ich habe sowohl Verschiebungen als auch Verdrehungen gemessen. Um eine Verschiebung in eine Richtung und/oder Verdrehung, von einem Bauteil zu messen reicht eigentlich eine Kante (wenn diese bei dem Bauteil immer gleich ist), und zwei Digitale Sensoren. Bei einer Verschiebung in der Ebene braucht man ne zweite Kante und nen dritten Sensor. In Deinem Fall habt Ihr ja ne Verschiebung/Verdrehung im Raum das muesste ich erst sehen um das zu Beurteilen, aber hier hat man ja lediglich ne Verschiebung in eine Richtung, und keine Verdrehung.
    Ich finde auf jedefall, das Du recht hast, das eine pauschale Antwort ein Schmarrn ist. Ich hatte mal zwei Roboter bei denen hatte ich eine Verschiebung und ein Verdrehung in der Ebene, und einen Versatz in der Hoehe. Die Hoehe hatte ich anfangs ueber analoge Sensoren gemessen, damit war ich aber sehr unzufrieden, da ich zum Messen immer Stehen bleiben musste, also langsam, es war immer ein gefummel die Sensoren zu Teachen, selbst mit einer Teach-Routine die ich dazu geschrieben habe, und sie haben immer sehr geschwankt von den Werten die sie mir angezeigt haben, war abhaenig wie gut/sauber die Oberflaeche des Teils war, also zugenau und dadurch ungenau, sie waren unglaublich teuer.
    Mit der Wiederholgenauigkeit von normalen digitalen Sensoren hatte ich bis jetzt noch nie probleme.
    Aber nun mal zurueck zum Thema, Deinen Vorschlag von einem Sensor der stationaer angebracht ist, ist der beste (manchmal bin ich einfach verwirrt, und seh den Wald vor lauter Baeumen nicht), wenn es der Platz zu laesst. Wenn jedoch kein Platz ist finde ich nach wie vor, wenn das hier konstruktiv halbwegs geloest ist, ist ein digitaler Sensor besser, man muss zum messen nicht stehen bleiben, und es ist meiner Meinung nach billiger, so ne Mess-Software ist ja sofort zusammen genagelt, und von der genauigkeit hab ichs bis jetzt immer so auf 5 zehntel hingekriegt bis auf nen Millimeter. Ich weiss ja nicht wie genau das werden soll, aber ich Denke mit nem analogen am Robi, wirds auch nicht genauer sondern man hat nur mehr Scherereien, und ich bin nach wie vor der Meinung eine Anlage sollte nur so gut wie noetig, und so einfach wie moeglich sein.



    Gruss Elias

    Hallo,


    wenn Du das mit einem Sensor loest, solltest Du ein paar Sachen bedenken:


    Bei einem Laser-Sensor sollte die Oberflache der Scheibe gut sein, wenns ne Buerste ist wirds wahrscheinlich nix, wenn de einen benutzen solltest, nimm nen digitalen, und keinen analogen, womit die Aufloesung ja hinfaellig ist.


    Von einem Kraftsensor wuerde ich Dir ganz abraten weil, der ist teuer und Du schrubst ihn bei jeder fahrt, also Du hast einen hohen Verschleiss/Wartungsaufwand, und eine hohe Stoeranfaelligkeit. Du muesstes auch die abnutzung Deiner Sensorvorrichtung beruecksichtigen, womit Du wieder am Anfang stehen wuerdest.


    Ich wuerde abhaengig vom Material der Scheibe, einen 0815 induktiven oder kappazitiven Sensor (Naeherungsschalter) verwenden, ist meiner Meinung nach die billigste und beste Loesung fuer das Problem.


    Was Du auf jeden fall machen solltest, ist, wenns n Kuka ist, die Schnellen Messeingaenge dazu kaufen.


    Die Position der Scheibe wuerde ich dann mittels Interrupt messen. Ob Du dass dann direkt auf die Punkte aufrechnest, oder mit einer Tool- bzw. Baseverschiebung realisierst ist reine Geschmackssache. Es funktionieren alle drei wege.


    Gruss Elias

    Hallo,


    die aktuelle Geschwindigkeit am TCP muesstes Du mit $VEL_ACT auslesen koennen. Du kannst das dann in Deinem Programm so machen:


    Decl Signal AO_ActVel Anout[1]


    ....


    Anout on AO_ActVel = 1.0 * $VEL_ACT



    mit



    Anout off AO_ActVel



    beendest Du dann das Zyklische beschreiben.


    Wenn Dus lieber mit digitalen Ausgaengen haben willst, kannst Du das auch im Submit Interpreter machen:


    Teil fuer die Configdat:


    Decl Signal DO_ActVel $out[1] To $out[15]
    Decl Bool B_ActVelOn = False


    Teil fuer die SPS.SUB:


    if B_ActVelOn then
    DO_ActVel=$VEL_ACT
    else
    DO_Actvel=0
    endif


    Im Programm kannst Du das ganz dann durch setzen der Variable B_ActVelOn ein und ausschalten.


    Zum Ueberschleifen PTP-saetze kannst Du mit C_PTP uberschleifen, LIN- und CIRC-saetze kannst Du mit C_DIS, C_VEL und C_ORI ueberschleifen, wobei ich da bis jetzt immer mit C_DIS ausgekommen bin.


    Fuer C_PTP kannst Du den Maximalen Ueberschleifweg mit der Variablen $APO_DIS_PTP[1-6] einstellen.


    Ansonsten stellst Du alles ueber die Strucktur $Apo ein.


    $APO.CPTP stellst Du den Uberschleifweg, in Porzent bezogen auf die Winkel, fuer die PTP Saetze ein.


    $APO.CDIS stellst Du die ueber schleif Distanz in mm, fuer die Lin und Circ saetze ein.


    $APO.CORI is in Grad


    $APO.CVEL is wieder in Prozent bezogen auf $VEL.


    Ich bin grad zu faul das jetzt genauer zu schreiben, vielleicht machts ja wer anders, oder Du schaust mal ins Handbuch.



    Naturlich kannst Du Dir ein Programm fuer die Initialisierung schreiben, das rufst Du dann halt bei Programmstart auf.


    Gruss Elias