Beiträge von ASK_ROBOTER

    Hallo GreenH,
    ich kenne auch keine Möglichkeit die Kommastellen bei Robtargets zu begrenzen aber mit einem kleinem PC-Programm wäre das möglich. Mit C# und dem Framework sollte das machbar sein.


    Bevor du das Programm vom Roboter in dein Offlinesystem einspielst müßten die gewünschten Module mit den Robtargets und Werkobjekte durch ein anderes Programm gekürtzt werden.
    Gruß Paulaner

    Hallo xyz,
    keine Ahnung ob das die Lösung ist aber ändere mal die WAIT FOR Anweisung in


    WAIT FOR ENDWERT <= INK_GEB_ANTR_H * 256 + INK_GEB_ANTR_L


    es könnte ja sein das der aktuelle Wert von deinem Geber nicht 100%tig gleich dem Endwert ist.
    Mit dem <= (größer gleich) Vergleich ist auch der Wartebefehl erfüllt wenn der aktuelle Wert größer als der Endwert ist.
    Erholsames Wochenende :beerchug:
    Gruß Paulaner

    Hallo MoinMoin,
    für diese Meldung brauchst du nicht unbedingt einen zweiten Task.
    Du kannst auch einen Zeitlichen Interrupt erzeugen der z.B. alle 2 Sekunden aufgerufen wird und den Override auf 0% prüft. Und gegebenenfalls ein Signal an die SPS sendet.


    1: Ein Signal in der IO.sys deklarieren.


    -Name "doOverride0Prozent" -SignalType "DO" -Unit "PB_Adapter" -UnitMap "19"


    2: Einen Zeitinterrupt und Variablen im Modul erzeugen


    !zyklicher interrupt für den override 0% zu senden
    LOCAL VAR intnum inOverRide;
    !zyklicher interrupt wird alle 1000ms aufgerufen
    LOCAL PERS num nITimer:=1.0;


    3: Ein Programm zum Bekantgeben und Initialisieren des Interrupts
    CheckOverRide() ist das verknüpfte Programm (Trap) zu dem Interrupt


    LOCAL PROC InitInterrupts()
    !timerinterrupt für override zu senden
    IDelete inOverRide;
    CONNECT inOverRide WITH CheckOverRide;
    ITimer nITimer,inOverRide;
    ISleep inOverRide;
    ENDPROC


    3: Das Programm (Trap) das aufgerufen werden soll


    TRAP CheckOverRide


    IF CSpeedOverride()=0 THEN
    Set doOverride0Prozent;
    ELSE
    Reset doOverride0Prozent;
    ENDIF
    RETURN;
    ENDTRAP


    4: So! Das ganze muß ja nur in Automatikbetrieb laufen. Im Handmodus kannst du den Interrupt deaktivieren. Dann gibst es noch zwei Programme die den Interrupt steuern. Diese Programme mußt du mit Events verknüpfen.
    In der SYS.cfg
    CAB_EXEC_HOOKS:


    -Routine "RestartTrapSys" -Shelf "START" -Task "T_ROB1"


    -Routine "RestartTrapSys" -Shelf "RESTART" -Task "T_ROB1"


    -Routine "SleepTrapSys" -Shelf "STOP" -Task "T_ROB1"


    PROC RestartTrapSys()
    InitInterrupts;
    !zyklischen interrupt für den overridestatus zu senden
    IF OpMode()=OP_AUTO IWatch inOverRide;
    RETURN;
    ENDPROC


    PROC SleepTrapSys()
    !zyklischen interrupt für den overridestatus zu senden
    ISleep inOverRide;
    RETURN;
    ENDPROC


    Also bei mir funktioniert das Ganze ohne Probleme. Manchmal werden noch Fehlermeldungen mit der Interrupt-Warteschlange mitgeloggt aber die sind halb so wild :denk:


    Wenn der Roboter sich in Automatik befindet und wird von der SPS (oder Manuell) gestartet wird das Programm " RestartTrapSys" abgearbeitet. Der Interrupt wird aktiviert.


    Wenn das Programm gestoppt wird, wird das Programm "SleepTrapSys" abgearbeitet. Der Interrupt wird deaktiviert.


    Viel Spaß beim programmieren :supi:

    Hallo XYZ und auch ein Hallo an die anderen,
    hast du schon was programmieren können?
    hier noch eine Lösung wie man das Ganze machen kann.
    Irgendwo mußt du das Programm für deine beide Motoren aufrufen. Wie schon geschrieben kannst du das im SUBMIT Interpreter machen oder du programmierst einen Interrupt der über einen Timer ausgelöst wird.
    Beispiel:
    Im Programmkopf in deinem Hauptrogramm mußt du den Interrupt deklarieren.


    ;TAKTGENERATOR FÜR REGELUNG
    INT Takt=-150


    GLOBAL INTERRUPT DECL 1 WHEN $TIMER_FLAG[1]==TRUE DO PD_Regelung()
    INTERRUPT OFF 1
    $TIMER[1]=Takt


    Beim Start ist Timer_flag[1] false: weil negativer wert (takt=-150)


    so jetzt kommt ein wenig programmcode
    ..
    ..
    irgendwann wenn gewünscht (roboter ist bereit für seine arbeit) kannst du den Timer starten und den Interrupt aktivieren.


    INTERRUPT ON 1
    $TIMER_STOP[1]=FALSE


    ab diesem Zeitpunkt wird das Programm (PD_Regelung()) alle 150 ms aufgerufen. Den Taktgeber kann man natürlich anpassen.


    wenn die Arbeit erledigt ist kannst du den Interrupt wieder deaktivieren.
    INTERRUPT OFF 1
    $TIMER_STOP[1]=TRUE
    ;Taktgeber wider mit Startwert initialisieren
    $TIMER[1]=Takt



    Das Programm PD_Regelung kannst du in einer eingenen Datei schreiben.
    Programmkopf und Programmende sollte so aussehen.
    ;===============================================
    ;PD_REGLER
    ;===============================================
    GLOBAL DEF PD_Regelung()
    ;interrupt regelung unterbrechen
    INTERRUPT OFF 1
    ;taktgeber init
    $TIMER_STOP[1]=TRUE
    $TIMER[1]=Takt


    ;==============
    ;hier kommt dein code für die regelung rein
    ;==============


    ;interrupt regelung aktivieren
    INTERRUPT ON 1
    $TIMER_STOP[1]=FALSE
    END



    So und jetzt mußt du (nur :uglyhammer_2: ) noch die Regelung schreiben. Leider habe ich in KRL noch keine Regelung programmiert. Aber ich füge mal ein PD-Regler in C ein. Das ganze sollte dann in KRL umgesetzt werden. Ich hoffe das es ein wenig hilft :denk:


    Also die Regelung ist für eine kleine Roboterplattform mit zwei Motoren links/rechts. Mit dieser Regelung kann das Teil vor/zurück und Kurven fahren. m pro sekunde und radiaten pro sekunden.
    Das Programm mußt du für deinen Bedarf kürzen. Schau dir Speedsystem() an.

    Hallo Forummitglieder,
    danke noch mal für die verschiedenen Lösungswege.


    Genau das habe ich gesucht: MMC_REAL_ROUTINE
    Werde das gleich mal einbinden.
    Noch eine Frage: Wo findet man diesen Parameternamen in der Doku? In der aktuellen Doku habe ich diesen Parameter nicht gefunden.
    :supi:
    Thanks a lot
    Paulaner

    Moin Moin,
    diese Filtereinstellung habe ich nicht gemeint. Ich möchte gerne ohne diesen Filter die Anzahl der Programme reduzieren. Am besten nur die Anzeigen lassen die das Bedienpersonal benutzen darf.
    Mit einem Übergabeparameter könnte man das machen, wäre aber nur eine Alternative.
    Bei den Flex-Pedant Einstellungen habe ich irgendwas mit "geschützen Funktionen ...." und "nur warnung bei Zugriff" gelesen!
    Kann man über RobotStudio Online diese Einstellungen durchführen :?:


    Bis dann Paulner

    Hallo Zusammen,
    gibt es eine Möglichkeit bei der IRC_5 Steuerung die Auswahl der Routinen zu begrenzen?
    Über das Menü Test --> PZ auf Routine wird eine Auswahl aller Aufruffähigen Programmen angezeigt. Kann man für diese Auswahl, Programme angeben die nicht angezeigt werden sollen? Wenn Ja: Wo denn?
    :jawohl:
    Bei vielen Programmen ist es ein wenig nervig das entsprechende Programm zu suchen.
    mfg Paulaner

    Servus Robomann,
    wie muß man sich diesen Greifer und die Sensoren den vorstellen?
    Fährst du nur eine Position an und die Sensoren liefern dir Werte oder muß der Roboter mehrere Positionen an der Palette anfahren?
    Gruß Paulaner

    Hallo Freidenker26,
    willst du den TCP Speed über ein Bussystem übertragen?
    Für dieses Problem mußt du nur ein Analogessignal das auf der entsprechende Unit angelegt ist erzeugen.
    z.b. so:


    -Name "giKameraWinkel" -SignalType "AI" -Unit "profi" -UnitMap "80-95"\
    -MaxPhys 32767 -MaxBitVal 32767 -MinPhys -32767 -MinBitVal -32767


    Ok! Das ist ein Analogeingang aber das Funktioniert auch mit Ausgängen.
    Mit 16 Bits kanst du einen Wert von -32767 bis +32767 darstellen. Mit einigen änderungen kannst du dein Signal auf dein Wünsche anpassen.


    Dieses Signal mußt du dann noch mit dem TCP-Speed Ereignis verbinden.
    Viel Erfolg.

    Hallo Noob,
    ja da gibt es schon was. :ylsuper:
    Ich selbst habe es noch nicht benutzt, deshalb gibt es keine Garantie darauf.
    Bei den System-Ausgängen mußt du ein Ausgang hinzufügen. Dieses Signal kannst du mit einem bestimmten Ereignis verbinden. Wenn du Status drückst erscheint eine Auswahl der Ereignisse die man wählen kann. Ein Ereignis nennt sich TCP Speed. Das mußt du verwenden. Im Handbuch bei Systemparameter wird das ganze ausführlich beschrieben.
    Funktioniert mit einem Analogausgang. Den mußt du bei "Signal Name" angeben.
    Gruß Paul
    :beerchug:

    Hallo Loubna,
    hört sich interessant an was du da programmieren willst. Ich habe auch mal einen AMR in der Schule gebaut. Der hatte aber zum Glück nur zwei Räder. Als Controller habe ich einen Eyebot verwendet. Das Betriebssystem hatte schon einige Funktionen parat für Rotations- und Translationsbewegungen.
    z.b. eine funktion mit zwei paramter vw(v,w) v=m/s w=radianten/s


    Schau mal da rein:
    http://robotics.ee.uwa.edu.au/eyebot/
    Bei Filme und Bilder.
    Da gibt es ein Fahrzeug mit 4 Rädern dass solche Bewegungen ausführen kann! Glaube ich!
    Denke mal das du beide Geschwindigkeitsregler verbinden muß. Muß eine Funktion werden.
    Wie sehen denn die Räder aus?Was passiert eigentlich wenn ein Rad in der Fahrrichtung steht.Blockiert das nicht?

    Servus Rapsody,
    deine Programmzeile ist wahrscheinlich über die Bedienoberfläsche programmiert worden. Und über das "Ändern"-Menü kannst du auch die Lineargeschwindigkeit einstellen.
    Oder
    In der Bas.src sind auch Standartfunktionen enthalten.Diese kannst du auch verwenden. Aber du mußt die Befehle im Editor eintippen.


    BAS(#VEL_CP,1.0)


    Die Lineargeschwindigkeit beträgt 1,0 m/s. Gültig ab der nächsten Linearbewegung.
    Oder
    Direkt die Systemvariable "$VEL.CP" verwenden.


    $VEL.CP=0.5


    Die Lineargeschwindigkeit beträgt 0,5 m/s. Gültig ab der nächsten Linearbewegung.


    Hoffe ich konnte dir irgendwie helfen. :zwink:

    Hallo Robotic74,
    so der Bus läuft! Hat ein wenig gedauert aber das ist normal wenn man mit neuer Software arbeitet. Der Grund war die internen Slotsbelegung von der ET200X. Die Hotline von Siemens hat mich auf die richtige Spur gebracht. Die Slots 1 bis 4 werden schon der ET200X verwendet erst danach also bei Slot 5 dürfen die Erweiterungsmodule eingefügt werden.
    Anbei zwei Bilder wie die Konfiguration mit der Softing-Software aussehen soll.
    :P :zwink:

    Hallo robotic74,
    ich bin genauso wie du es schreibst vorgegangen. Leider ohne Erfolg.
    Die Hardware wäre:
    1 ET200x Modul 141-1BF12-0xB0
    2 8xDI 141-1BF31-0xA0
    3 8xDI 141-1BF31-0xA0
    4 4xDO 141-1BD40-0xA0
    5 4xDO 141-1BD40-0xA0
    die GSD-Datei habe ich bei Siemens runtergeladen.
    Ich glaube daß ich irgendwas mit der Softingsoftware falsch mache. Arbeite jetzt das erste mal damit! :huh:
    Bei der Hilfedatei von Softing steht geschrieben das man jeweils für eine Baugruppe einen sogenannten Slot paramentrieren (hinzufügen) soll.
    In der Doku von ABB über Profibus wird dieser Vorgang nicht so beschrieben. Diese Slots werden bei der Konfiguration nicht erwähnt.
    Was ist jetzt hier richtig?
    Die Adressen und der Pfad für die ini-Datei ist korrekt.

    Hallo,
    ich habe einen IRC5 Roboter der mit einer Profibuskarte von der Firma Softing ausgestattet ist. Master/Slave Karte! An dem Masterkreis hängt eine ET200x drann. Damit steuert der Roboter seinen Greifer. Und jetzt brauche ich ein Beispiel oder ein Tip wie ich mit der Configurations-Software von Softing den Masterkreis zum laufen kriege. Vieleicht hat auch jemand eine CNF-Datei die ich mir anschauen kann.
    Kann mir jemand da weiter helfen? :danke:
    Bei den PDF-Dateien von ABB und Softing gibt es einige Unterschiede über die Konfiguration.
    Bis dann.
    :idea: