Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Aufruf der Ziehensteuerung eines PickAndPlace-Roboter

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Aufruf der Ziehensteuerung eines PickAndPlace-Roboter (1453 mal gelesen)
EineFrage
Mitglied



Sehen Sie sich das Profil von EineFrage an!   Senden Sie eine Private Message an EineFrage  Schreiben Sie einen Gästebucheintrag für EineFrage

Beiträge: 11
Registriert: 09.04.2013

erstellt am: 05. Jun. 2013 16:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich programmiere derzeit an einem PickAndPlace-Roboter, welcher BEs aus Einzelnstationen entnimmt und in Lager legt. Zwischen den Einzelstationen, dem PickAndPlace und den Lagern gibt es keine Kanten, was ja aber im Eigentlichen kein Problem darstellen sollte (Winkel + Zeitentabellen sind gesetzt).

Das Programmieren der Zielsteuerung war soweit kein Problem. Der Roboter entimmt brav im Round-Robin-Prinzip aus den Einzelnstationen und legt im richtigen Lager ab.

Tricky wird es aber jetzt im Bezug auf die Ziehensteuerung. Der Quellcode hierfür sieht recht einfach aus. Es sei erwähnt, dass die BEs eine Eigenschaft names transportTarget vom Typ objekt haben, welches das Transportziel angibt. Zudem ist dafür gesorgt, dass immer mindestens ein Lager nicht voll, da BEs über einen später ausgeführten Code (mit Hilfe einer Tablle auf jedem Lager: expectedObjects) weiterbewegt werden:

Code:

is
  blockList : table;
  nextObject : object;
do
  -- initializing
  nextObject := void;
  blockList.create;
  ?.fwBlockList(blockList);

  -- choose next MU to move
  for local counter := 1 to blockList.yDim loop
    if (blocklist[1, counter].transportTarget.empty) then
      nextObject := blocklist[1, counter];
      exitloop;
    end;
  next;

  -- unblocking MU
  if (NOT (nextObject = VOID)) then
    -- adding object to movement queue
    local expectedObjects := ref nextObject.transportTraget.expectedObjects;
    expectedObjects.insertRow(expectedObjects.yDim +1);
    expectedObjects[1, expectedObjects.yDim] := nextObject;
    ?.unblock(nextObject);
  end;
end; 


Nachdem der erste Transport mit dieser Methode gut klappt ist es jetzt jedoch so, dass die Ziehensteuerung nach jedem Transport noch einmal aufgerufen wird - und kein Transport durchgeführt wird (Zielsteuerung wird nicht aufgerufen, obwohl ja ein BE unblocked wurde), was dazu führt, dass expectedObjects mehr BEs enthält als es eigentlich sollte. Es scheint dabei keine Rolle zu spielen, ob "Standardwinkel anfahren" gesetzt ist, oder nicht. Ich bin mir nun nicht sicher warum die zweite Ausführung durchgeführt wird und wie ich jetzt erkenne, ob danach tatsächlich ein Transport druchgeführt wird, oder nicht. Gibt es hier eine gute Methode? Kann ich von "Hand" einen Transport antriggern?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EineFrage
Mitglied



Sehen Sie sich das Profil von EineFrage an!   Senden Sie eine Private Message an EineFrage  Schreiben Sie einen Gästebucheintrag für EineFrage

Beiträge: 11
Registriert: 09.04.2013

erstellt am: 05. Jun. 2013 16:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Für den Fall, dass das wichtig sein sollte: Die verwendete PlanSim Version ist 10.0.2

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 05. Jun. 2013 22:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für EineFrage 10 Unities + Antwort hilfreich

Die Ziehensteuerung wird aufgerufen, wenn Ihr Objekt leer und aufnahmebereit ist (also kurz nach dem Umlagern) oder wenn ein neues Teil eintrifft. Das ist die normale Funktionsweise.

Etwas zu Ihrer Methode: Sie haben ein paar Fehler:

Code:

if (NOT (nextObject = VOID)) then
    -- adding object to movement queue
    --local expectedObjects := ref nextObject.transportTraget.expectedObjects;
    -- sollte bestimmt sein
    local expectedObjects := ref nextObject.transportTarget.expectedObjects;
    --expectedObjects.insertRow(expectedObjects.yDim +1);
    --wenn Sie am Ende einer Tabelle eine Zeile einfügen, dann ändert sich yDim nicht
    --schreiben Sie einfach ans Ende der Tabelle
    expectedObjects[1, expectedObjects.yDim+1] := nextObject;
    ?.unblock(nextObject);
  end;



Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EineFrage
Mitglied



Sehen Sie sich das Profil von EineFrage an!   Senden Sie eine Private Message an EineFrage  Schreiben Sie einen Gästebucheintrag für EineFrage

Beiträge: 11
Registriert: 09.04.2013

erstellt am: 06. Jun. 2013 11:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für die Antwort. Die Frage die sich mir allerdings stellt ist: Warum wird die Ziehensteuerung aufgerufen, wenn das unblocking nichts bewirkt? Sehr verwirrend.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz