20. Januar 2019, 18:06:06
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

 Programm laden beim ABB Roboter


normal_post Autor Thema:  Programm laden beim ABB Roboter  (Gelesen 7546 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

11. April 2005, 17:51:16
Gelesen 7546 mal
Offline

markus007ABB


Mein Problem ist folgendes:
 Ich Programmiere einen ABB Roboter bei dem ich 54 Verschiedene Teile handhaben muss. Damit das ganze Funktioniert muss ich dafür 54 verschiedene Programme anlegen. Wenn man nun aber in die Auswahlliste der verschiedenen Prozeduren hineingeht sind das dann natürlich unzählig viele. Um das zu unterbinden möchte ich je nach Programmtype automatisch nur das Programm das ich benötige in den Arbeitsspeicher laden. Und das ganze wenn geht in Automatik. Das heisst: Die SPS gibt dem Roboter die Programmnummer vor, und der Roboter lädt sich dann das Benötigte in den Speicher. Hat von euch vielleicht schon mal jemand so eine Anwendung gehabt?? :danke:
  • gefällt mir    Danke

Heute um 18:06:06
Antwort #1

Werbung

Gast

14. April 2005, 08:28:48
Antwort #1
Offline

Hermann


Hallo,
 sieh mal im Handbuch unter den Befehlen 'Load' und 'Unload' nach.
 
 Sollte sich so ähnlich wie im folgenden geschildert machen lassen (nur mal so aus dem Gedächtnis hingeschrieben, also ohne Gewähr auf absolute Richtigkeit)
 
 Var string NewModname;
 Var num ii;
 ii:=2;  ! Hier Einlesen der Nummer von der SPS anstelle der 2
 NewModname:="Modul"+NumToStr(ii,0);
 Load "HOME:"\File:=NewModname+".MOD";
 ! Aufruf des Programms ueber Variable, damit ohne geladenes
 ! Modul kein Fehler auftritt
 %"Prog"+NumToStr(ii,0)%;
 ! Nach Programmende das Modul wieder rausschmeissen
 UnLoad "HOME:"\File:=NewModname+".MOD";
 
 Es müsste dann ein Modul Modul2.MOD im Home-Verzeichnis geben und in diesem Modul müsste eine Routine Prog2 existieren.
 
 Gruss Hermann
  • gefällt mir    Danke

14. April 2005, 15:38:31
Antwort #2
Offline

markus007ABB


Habs jetzt so gelöst - müsste Funktionieren.
 
  !=========================================================
  !======   Programmmodul in Arbeitsspeicher laden   =======
  !=========================================================
 PROC Programm_laden()
   ! String "Modulname" beschreiben
   ! Die Module heißen: "Programm_1 bis Programm_22"
   Modulname:="Programm_"+NumToStr(ProgNr,0);
   ! Wenn ein Programm angewählt ist dann zuerst speichern
   ! und dann abwählen
   IF Prog_Nr>=1 THEN
    Save "HOME:"\File:=Modulname+".MOD";
    UnLoad "HOME:"\File:=Modulname+".MOD";
   ENDIF
   Prog_Nr:=Prog_von_SPS;
   Load "HOME:"\File:=Modulname+".MOD";
 ENDPROC
  • gefällt mir    Danke

14. April 2005, 15:40:02
Antwort #3
Offline

markus007ABB


Hallo Hermann !
 
 Kannst du mir erklären bzw. schreiben wo folgender beschrieben steht:
 -->  %"Prog"+NumToStr(ii,0)%;
 Was bedeuten zb.: die %-Zeichen ????
 
 Vielen Dank !!!!
  • gefällt mir    Danke

19. April 2005, 14:44:05
Antwort #4
Offline

Hermann


Hallo,
 ich hab es damals in dem Beispielprogramm im Modul base_mt.sys gefunden. In der Doku habe ich nur bei der Beschreibung des Befehls 'StartLoad' in der Datei 'System_Datentypen_Routinen.pdf' etwas darüber gefunden.
 
  PROC CallByVar(string Name,
                 num   Number)
   IF (Number-Trunc(Number) <> 0) OR (Number<0) THEN
    ErrWrite "CallByVar fault", "Argument Number is not an integer or"
             \RL2:= "is negative.";
    Stop;
    EXIT;
   ENDIF
   %Name+NumToStr(Number,0)%;
  ENDPROC
 
 
 Sinn der Sache ist, das man einen Unterprogrammaufruf programmieren kann, obwohl das aufgerufene Unterprogramm noch gar nicht im Speicher vorhanden ist.
 Normalerweise wird ja schon beim Laden des Programms überprüft, ob alle augerufenen Unterprogramme vorhanden sind. Über die % kann man ein sogenanntes 'late binding' erreichen, dann wird der Unterprogrammname erst bei der Abarbeitung der Zeile zusammengebaut und ausgewertet.
 
 Lange Rede kurzer Sinn:
 
 Wenn das Programm so aussieht, dann kann man es laden ohne Fehler, erst beim Ablauf ergibt es einen Fehler.
 
 Module testprog
 
 
 Proc main()
  %"programm_1"%;
  %"programm_2"%;
 endproc
 
 Proc programm_1 ()
  waittime 1;
 endproc
 endmodule
 
 Sieht die Sache folgendermassen aus, dann gibt es schon beim Laden des Programms einen Fehler, weil die Routine programm_2 fehlt:
 
 Module testprog
 
 Proc main()
  programm_1;
  programm_2;
 endproc
 
 Proc programm_1 ()
  waittime 1;
 endproc
 endmodule
 
 Hoffe das hilft über die Schwierigkeiten hinweg.
 
 Gruss aus dem Schwabenland
 Hermann
  • gefällt mir    Danke

Heute um 18:06:06
Antwort #5

Werbung

Gast

20. April 2005, 09:53:23
Antwort #5
Offline

Werner Hampel

Administrator
 Sauber, das könnte ab und zu helfen.
« Letzte Änderung: 26. Juni 2005, 10:37:08 von Werner Hampel »
  • gefällt mir    Danke
Menschen brauchen Roboter, aber auch Roboter brauchen Menschen.
Roboter sichern die Arbeitsplätze und den Fortschritt der Industrieländer, da sie kostengünstig und qualitativ hochwertig produzieren.
Ohne Automatisierung mit Robotern werden unsere Produkte in Billiglohnländern hergestellt.

24. Juni 2005, 20:23:53
Antwort #6

Bugatti

Gast
Hallo Markus

Das abarbeiten von 54 verschiedenen RoboterProgrammen kann man
auch lösen in dem man ein Hauptprogramm(Modul) schreibt und anschliessend die 54 einzelnen ProgrammModule über die SPS Programmnummer über den Modulnamen (Stringfunktion)                aufruft . das heisst ohne den Befehl Load / Unload
Nachteil bei der Load/Unload sache wenn man im einzelnen ProgrammModul Variablen programmiert hat und einen
Unload  macht das man einen Bindereferenzfehler bekommt bzw. man kann die Bindereferenz komplett deaktivieren aber man bekommt dann überhaupt keine Meldung mehr auch wenn sie richtig wäre

m.f.g.

bugatti

bij@bugattis.at

p.s.
Programm beispiel kann ich dir schicken.
Wenn ich euch weiter helfen kann meldet euch hab mich die letzten 5 Jahre bei ABB mit den Orangernen herumgeschlagen .
  • gefällt mir    Danke

26. Juni 2005, 00:38:26
Antwort #7
Offline

burlibua


Hallo Markus

Interessant wäre ob die 54 verschiedenen Programme nur verschiedene Positionen besitzen oder ein komplett anderer Ablauf.  Wenn die Positionen getauscht werden müssen dann
ist es möglich in mehrere Module die gleichen Variablen zu benützen. Wie schon mein Freund
bugatti dir einige Tips gegeben hat mußt du wenn du die Positiionen wechselst des Binde referenz ausschalten. Da nach dem unload die Steuerung die Variable nicht mehr besitzt und
somit auf "Referenzfehler"anspricht. Nach dem Ausschalten der Binde Referenz wird die
Steuerung bis zur Programmzeile laufen in der eine Variable benützt wird die nicht geladen ist.
PS Wenn du Module lädst immer mit Befehl Load vom Programm da wenn das Modul unter Menüpunkt Laden Module nicht mit unload zu entfernen ist.

  • gefällt mir    Danke

14. Juli 2005, 11:15:29
Antwort #8
Offline

Sven Weyer

Global Moderator
Hallo Markus,
beim Verwenden von verschiedenen Typen ist es wie schon angedeutet auch möglich über gleiche Variablen vorher die benötigten richtigen Daten auch zuzuweisen. Hilfreich sind hierbei auch immer die Datenfelder. Sollten sich die Typen gleichen würde die Sorgen mit Load und Unload Geschichte sein. Denn das Problem hierbei ist das von Hand geladene bzw. gelöschete Module Schwierigkeiten machen.
Das heißt Module welche von Hand geladen wurden können nicht automatisch wieder vom Programm gelöscht werden. Daher bin ich immer bestrebt diesem Problem aus dem Wege zu gehen.

Viel Spaß.
  • gefällt mir    Danke
Wer nichts macht macht keine Fehler!
Wer keine Fehler macht kann nichts daraus lernen!
Wer nichts lernen kann kann sich nicht weiterentwickeln!
Wer sich nicht entwickelt geht unter!

Heute um 18:06:06
Antwort #9

Werbung

Gast

25. Juli 2005, 04:30:21
Antwort #9
Offline

burlibua


Wenn man sich auf das automatische Laden von Modulen mit Load beschränkt gibt es auch keine Probleme.  Wenn Du nach Start von Haupt alle "Typenmodule" löscht  (Unload) und nach Typenabfrage dann das richtige Typenmodul mit Load lädst werden die Positionen im Programm automatisch korrigiert. Vorteil wenn du nach Positionskorrektur die Änderung speichern möchtest  brauchst du nur das Modul manuell speichern mit Ansicht-- Module--
Modul Auswählen-- Datei -- Modul  speichern. Willst du die Korrektur nur temporär dann wird nach dem nächsten Typenwechsel das Modul neu geladen und die Korrektur ist wieder weg.
mfG Burlibua
  • gefällt mir    Danke


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH