MultiMove Independent mit zwei Robotern und einem Controller

  • Hallo,


    ich bin neu in der ABB-Welt und muss nun mein erstes Projekt bearbeiten. Ein MultiMove System mit den Optionen Multitasking, MultiMove Independent.


    In Robotstudio werden ja beide Roboter unter einer Steuerung angezeigt. Teilen sie sich sozusagen eine EA-Liste oder kann man irgendwo zwei von einander getrennte Listen anlegen? Wo oder wie kann ich jedem Roboter eine eigene IP verpassen?


    Ebenso finde ich im RobotStudio diesen I/O Configurator nicht, wo man Excel-Listen in und exportieren kann. Laut Handbuch soll im Reiter RAPID, dann links wo Steuerung steht, noch ein zweter Reiter mit "Files" sein, wo ich z.B. die EIO.cfg bearbeiten kann. Ich sehe diesen Reiter aber nicht. Für Tipps wäre ich äußerst dankbar.


    Ich benutze noch die unaktivierte Vollversion.

  • ANZEIGE
  • Eine Steuerung, EINE E/A-Liste, EINE IP. Es ist sozusagen EIN Roboter mit ZWEI Manipulatoren.


    Zu dem Anderen: in der Titelleiste (ganz oben) ist dieses Symbol mit dem Pfeil nach unten, das am weitesten rechte in der Sammlung links. Dort im Untermenü "Windows" gucken, ob "Dateien" angehakt ist.


    Grüße,
    Michael

  • Danke Programmiersklave. Wenn man weiß, wo es steht, dann funktioniert es auf einmal .. verblüffend.
    Ich muss dann also in der EA-Liste strikt nach Roboter trennen wegen Freigaben etc. Welche Sortierform/Aussehen muss denn die Excel-Tabelle haben, dass RoboStudio sie frisst? Ich benutze die Version 6.06.01.

  • Das mit dem Format der Excel-Listen konnte ich mir selbst beantworten durch exportieren einer eio.cfg.
    Nächste Frage:
    Es gibt ja Standard Variablen bei ABB, zB. diMotorOn etc. Kann man die Signale einfach duplizieren? Also zB. diMotorOn_R1 und diMotor_R2 oder geht sowas nicht bzw. kann man das den Robotern dann so nicht konkret zuweisen? Es geht hier konkret darum, dass man einen Roboter stoppen kann während der andere seine Jobs weiter abarbeitet. Gäbe es nur ein Signal, würden ja beide stoppen (Grundstellungsfahrt oder sowas).

  • Hm, bin mir nicht ganz sicher, was Du mit Standardvariablen meinst. Es gibt sog. Systemsignale (Eingänge und Ausgänge), die mit physischen Signalen verbunden werden können, aber immer nur mit einem.
    Und vieles davon gilt natürlich für das gesamte System. Andere kannst Du (bzw. musst Du) bei der Konfiguration mit einem Tasknamen ausstatten, für welche Task das Signal gilt.
    Motoren ein und Start und Stop etc. gilt natürlich immer für das gesamte System. Wenn Du einzelne Roboter starten und anhalten willst, dann musst du das im Programm individuell regeln.
    Generell ist es nicht ohne weiteres möglich, nur einen Task zu starten. Wenn man auf Automatik umschaltet, aktiviert die Steuerung immer alle Tasks und weist auch explizit darauf hin. Dann lässt der Systemeingang für "Start" eben alle Programme laufen. Was man dann im Programm damit macht, ist eine andere Sache.
    Wie gesagt, betrachte das ganze als einen Roboter mit zwei Manipulatoren. Jeder hat eine eigene Programmtask und eigene Koordinatensysteme, aber nicht eigene Signale oder eigene Sicherheiten. Die nächstkleinere Hierarchietrennung unterhalb von "System" ist "Task". E/A und Parameter gelten systemweit, wobei viele Parameter sich auf einzelne Tasks beziehen können. CONST und VAR sind maximal taskweit, nur PERS können taskübergreifend sein. MODULE und alles darin sind schon die nächste Hierarchieebene unterhalb von TASK.


    Grüße,
    Michael


  • Hallo irProgrammierer!


    Ich habe solche liste wenn du brauchst!
    Ist es sehr einfach die einzige nachteil ist das es mit 32bit VBA erstellt wurde!


    MFG


    Tamas

  • @[size=3][font=Verdana, Arial, Helvetica, sans-serif]padostms du hast eine PN.[/font][/size]
    [size=3][font=Verdana, Arial, Helvetica, sans-serif]@Programmiersklave[/font][/size]
    [font=Verdana, Arial, Helvetica, sans-serif]Mit Standardsignale meine ich glaube ich die Systemsignale (zB diStart,diMotOnSTart,diStop,diSysReset etc ...).[/font]
    [font=Verdana, Arial, Helvetica, sans-serif]Jeder Roboter hat einen eigenen Task, in dem meine Programme liegen werden. Ich habe unter I/O erstmal zwei virtuelle Units (Rob1 und Rob2) erstellt, das gleiche unter Unit Type, um erstmal arbeiten zu können, da die Roboter noch nicht da sind.[/font]
    [font=Verdana, Arial, Helvetica, sans-serif]Dann bin ich gerade dabei eine eio.cfg zu erstellen. Da gibt man ja dann die Unit(Rob1/Rob2), UnitMap etc.ein,die dann den Signale zugewiesen werden sollen. [/font]
    [font=Verdana, Arial, Helvetica, sans-serif]So nun zu meinem Problem: Ich kann diese Systemsignale jeder Unit zuweisen (diStart_R1 und diStart_R2 als Beispiel). Klappt das so? Oder sind diese Systemsignale nur einmal "verwendbar"?[/font]
    [font=Verdana, Arial, Helvetica, sans-serif]Ich hoffe du verstehst, was ich meine. Wie im ersten Post geschrieben, möchte ich, dass Roboter 1 stoppen kann während Roboter 2 seine Job weitermacht. Daher die Überlegung mit den getrennten Signalen![/font]

  • Die Systemsignale sind nur einmal "verwendbar", solange sie nicht taskbezogen sind. Es gibt ja nur ein "System". Es kann nur das ganze System gestoppt werden auf diese Weise. Es gibt ein paar, die einer Task zugeordnet werden können, z. B. gibt es neuerdings was, womit man auslesen kann, dass eine Task läuft. Die gehen dann auch mehrfach. Aber start und stop gehören nicht dazu.
    Die Unit bezeichnet nicht den Roboter, sondern die verwendete E/A-Karte. Da kannste ja mehrere haben, z.B. einen Buskoppler hier und einen dort, oder mehrere Device-Net Buskoppler und irgendwo noch eine Profibusanbindung, solche Szenarien. Das hat mit den Manipulatoren rein gar nichts zu tun.
    Du kannst dann ein Systemsignal mit einem echten Signal verknüpfen, welches irgendwo auf eine dieser Units gemapped ist. (Das muss man ebenfalls selbst konfigurieren.) Die Steuerung weiss dann beispielsweise: wenn auf dem Signal 42 auf der Unit DN_Board666 der Zustand von low nach high wechselt, dann bedeutet das, ich muss den Programmzeiger in allen Tasks auf "Main" setzen und starten. Das parametrierbare Systemsignal ist quasi nur ein definierter System-Interrupt. System! Nicht Task.


    Wenn Du willst, dass einer der Roboter aufhört, während der andere weitermacht, dann geht das nur so, dass im Programm ein beliebiger (anderer) Eingang abgefragt wird, der die fraglichen Bewegungstask dann durch eine Warteschleife oder Selbstbeendigung einschläfert. Wobei die Selbstbeendigung vielleicht nur halb in Deinem Sinne wäre, denn starten lässt sich eine tote Task natürlich nicht so ohne weiteres. Die Task selbst ist ja tot, und das System lässt sich nicht starten, solange eine andere Bewegungstask noch läuft.
    Du hast in dieser Konfiguration eine irre Menge an Möglichkeiten, die eigentlich jedes wünschenswerte Szenario abdeckt. Nur so, wie Du es Dir gerade vorstellst, geht es nicht.


    Wenn die Anlage weniger als ~100 Signale hat, würde ich außerdem empfehlen, die Konfiguration in RobotStudio selbst zu machen, statt mit einem Editor oder gar Excel EIO.CFGs zu generieren, denn letzteres erzeugt eine Menge Frust.


    Solange die Roboter noch nicht da sind, kann man sich mit einer virtuellen Steuerung in RobotStudio behelfen. Man muss dann nur (weil man den echten Schlüssel ja noch nicht hat) darauf achten, die gleichen Optionen anzuwählen, die beim System mitbestellt wurden. Übrigens: wenn die Roboter da sind, zuerst sofort ein Backup machen und gut verwahren!


    Grüße,
    Michael

  • Hallo, ich habe ein ähnliches Problem mit Multimove indeependent und möchte mich deshalb hier ranhängen.

    Zitat

    Du hast in dieser Konfiguration eine irre Menge an Möglichkeiten, die eigentlich jedes wünschenswerte Szenario abdeckt. Nur so, wie Du es Dir gerade vorstellst, geht es nicht.


    Wäre folgendes auch möglich:
    Roboter1 fährt Crash (normalerweise stoppt dann ja das Programm), Roboter2 zwei läuft ganz normal weiter, Programm von Roboter1 kann, ohne Roboter2 zu beeinflussen, neu gestartet werden? Wenn ja, wie? Danke


  • Hallo, ich habe ein ähnliches Problem mit Multimove indeependent und möchte mich deshalb hier ranhängen.


    Das ist kein Problem, das ist ein Feature. Wenn Du willst, dass die Roboter völlig unabhängig laufen, dann brauchst Du zwei separate Steuerungen. MultiMove ist dafür gedacht, dass mehrere Roboter ZUSAMMEN im Team arbeiten, wenn auch vielleicht mit unabhängigen Bewegungen und Programmabläufen. Teamarbeit bedeutet, dass es nur ein Start-Signal gibt, und dass das ganze Team stoppt, wenn einer im Team ein ernsthaftes Problem kriegt. Ein Crash ist ein ernsthaftes Problem.


    Is' wie auf'm Sportplatz. Steht ein umgefallener Spieler sofort von selbst wieder auf und rennt weiter, ist alles gut. Muss er vom Platz getragen werden, wird das Spiel unterbrochen und muss explizit neu gestartet werden. Nicht zwangsläufig von vorne, aber doch auf Kommando des Schiedsrichters. Sollen zwei Spiele unabhängig laufen, brauchste zwei Sportplätze und zwei Schiedsrichter.


    Grüße,
    Michael

  • Ein neues Problem ist aufgetaucht, weshalb ich wieder mal auf eure Schwarmintelligenz angewiesen bin. Es geht mir nochmal um die Systemsignale. Zu manchen System Outputs kann man ja Roboter zu ordnen(siehe Screenshot). Da ich 2 Roboter in der Zelle habe, muss ich jetzt die 7 Ausgangssignale duplizieren, sodass jeder Roboter die jeweiligen Ausgangssignale besitzt?

  • Ja.
    Es müssen schon verschiedene Signale sein. Gibt drei Möglichkeiten:
    1.) Du brauchst sie gar nicht - dann kannst Du sie weglassen.
    2.) Du brauchst sie einzeln - dann brauchst Du einzelne Signale
    3.) Du brauchst sie verODERt oder verUNDet - dann legst Du sie auf virtuelle Signale, die in der Konfiguration der CrossConnections dann mit einem phys. Singnal verknüpft werden.


    Grüße,
    Michael

  • Mittlerweile steht die Anlage beim Kunden und wir sind in den Endzügen. Mir ist ein Problem begegnet, bei dem mir der ABB Support nicht helfen kann und ich mir nur über einen "Trick" weiterhelfen konnte.
    Folgende Situation:
    - 2 Roboter mit Multimove Independent über einen Controller und Multitasking
    - je Roboter ein Main-Task + einen semistatischen SubTask
    - Roboter 1 arbeitet mit einem ISRA Kamerasystem, dieses System wird auch über einen extra Task gesteuert
    Beim ersten Mal starten der Automatik liefen die Programmzeiger der Main-Routinen nicht los, obwohl alle korrekten Startsignale der SPS kamen. (diMotonStart) Die Semistatischen Task starteten natürlich einwandfrei.
    Ich konnte den Programmzeiger nur zum Starten zwingen, in dem ich eine Eventroutine angelegt habe. Die beim Startsignal durch die SPS den Task startet.
    Laut Kollegen war das noch nie so und ich als Rookie kann man mir auch nicht erklären, warum man dafür eine extra Eventroutine anlegen muss. Hatte jemand schon mal das Problem oder kennt von der Beschreibung des Problems aus eine Lösung?
    Beste Grüße irProgrammierer

  • Wenn die Event-Routine auf START als Systemereignis reagiert, dann wurde auch irgendwas gestartet. Daher wäre meine erste Vermutung, dass sich das, was immer da beim ersten Mal gestartet wurde, sich auch sogleich selbst wieder beendet oder von außen beendet wird.


    Was ich nur weiß, ist, dass das Startverhalten der Bewegungstasks unterschiedlich lange dauern kann. Wenn ich z. B. neue Module reinlade, dauert der Start bei dieser Task messbar länger. Ich hatte auch bei einer älteren Steuerung schon den Effekt, dass ein verbundenes RS für eine Verzögerung sorgte.
    Sollte also irgendwas im Hintergrund darauf hoffen, dass beide Haupttasks gleichzeitig und sofort starten und den Start ansonsten verwerfen, könnte das schiefgehen.


    Normalerweise achtet ABB auch peinlich darauf, dass man nirgends fatale Rekursionen bauen kann, und das, was Du gemacht hast, wäre theoretisch eine fiese solche. Deshalb denke ich, dass er einfach den MAIN-Entry nicht findet, so wie er konfiguriert ist. Teile dieses Systems (nicht alle in letzter Konsequenz) sind CASE-sensitive. Ich würde die Hauptroutine einfach wieder "main" nennen, bei beiden, und dann mal gucken.


    Grüße,
    Michael

  • Wir haben beide Fälle probiert. Anfangs hießen beide Haupttasks normal "main", gleiches Problem wie nach der Umbennennung. Das lustige ist, dass er anzeigt, dass die Tasks laufen (GO-Symbol), nur bewegt sich halt der Zeiger nicht durch das Programm sondern bleibt an der ersten Zeile nach der Deklaration stehen.
    Auch längeres warten hat bei uns nichts gebracht(30-60sek). Ich empfehle keinem ein Multimove-System :D


    EDIT: Hier noch ein Screenshot der Fehlermeldung. Die MEldung ist aber widersprüchlich. Ich setzte auf dem FlexPendant alle Zeiger auf Main und versetzte den Roboter in Automatik, da läuft nichts mehr.

  • Die Fehlermeldung deutet daraufhin, dass über das Signal "StartMain" versucht wurde den PZ auf Anfang von Main zu setzen, die Task aber noch gelaufen ist. Für ein Setzen des PZ auf Main per "StartMain" muss das Programm vorher stehen! Also zuerst Signal 'Stop' dann 'StartMain' dann 'Start'. Evtl. liegt ja dort auch der Hase für das andere Problem begraben: Signalfolge 'Stop' 'StartMain' 'Start'.

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden