Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
07. Februar 2012, 14:02:28
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: >> Roboterprogrammierer gesucht !? <<

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Absturz 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Absturz  (Gelesen 2146 mal)
dini
Stammgast
**
Offline Offline

Beiträge: 44



« am: 09. Dezember 2005, 13:08:28 »

Hallo zusammen,
habe da noch ein Problem bei der S4:
Bei Starten des Programmes über die Hauptroutine wird eine Initialisierung durchgeführt wo unter anderem die Homepos überprüft wird. Bei dieser Überprüfung stürzt das System ab. Dann geht nichts mehr und es hilft nur noch Aus- und Einschalten. Sobald der Rechner dann wieder hochgefahren ist, erscheint diese Meldung auf den Display: Status 10049
Netzfehler in der mitte von geschütztem Bereich der Task Main
Die Task wird von der haupt Routine neu gestartet

Da ich z.Zt. die Initialisierung mit goto überspringe läuft die Anlage, aber irgendetwas ist ja nicht in Ordnung.

So sieht die Überprüfung aus:

 PROC CheckHomePos()
    VAR num nAnswer;

    !Prüfen ob sich der Roboter in der Homeposition befindet
    WHILE PosVergleich(pHome,100,0.2)=FALSE DO
      Meldung fmNotInHome;
      TPReadFK nAnswer,"Wählen Sie MANUELL oder AUTO","MANUELL","","","","AUTO";
      IF nAnswer=5 THEN
        Meldung fmAutoHome;
        TPReadFK nAnswer,"Wählen Sie WEITER oder ABBRUCH","WEITER","","","","ABBRUCH";
        IF nAnswer=1 THEN
          mvHomePos;
          Meldung fmInHome;
          WaitTime 2;
        ELSE
          EXIT;
        ENDIF
      ELSE
        TPErase;
        Meldung fmManualHome;
        TPReadFK nAnswer,"Wählen Sie WEITER !","WEITER","","","","";
        EXIT;
      ENDIF
    ENDWHILE
    Meldung fmInHome;
    WaitTime 2;
    TPErase;
  ENDPROC

  !**********************************************************
  !*  Function Positionsvergleich                           *
  !*                                                        *
  !*  Input Parameter:      robtarget pVergleich            *
  !*                        num nMaxTrans                   *
  !*                        num nMaxRot                     *
  !*  Return Parameter:     bool bInPos                     *
  !*                                                        *
  !**********************************************************
  FUNC bool PosVergleich(robtarget pVergleich, num nMaxTrans, num nMaxRot)
    VAR bool bInPos:=TRUE;
    VAR robtarget pAktuell;

    !momentane Roboterposition einlesen
    pAktuell:=CRobT();
    !Vergleich der einzelnen Komponenten der Positionen
    !bei Wertueberschreitung wird bInPos "false"
    IF Abs(pVergleich.trans.x-pAktuell.trans.x)>nMaxTrans bInPos:=FALSE;
    IF Abs(pVergleich.trans.y-pAktuell.trans.y)>nMaxTrans bInPos:=FALSE;
    IF Abs(pVergleich.trans.z-pAktuell.trans.z)>nMaxTrans bInPos:=FALSE;
    IF Abs(pVergleich.rot.q1-pAktuell.rot.q1)>nMaxRot bInPos:=FALSE;
    IF Abs(pVergleich.rot.q2-pAktuell.rot.q2)>nMaxRot bInPos:=FALSE;
    IF Abs(pVergleich.rot.q3-pAktuell.rot.q3)>nMaxRot bInPos:=FALSE;
    IF Abs(pVergleich.rot.q4-pAktuell.rot.q4)>nMaxRot bInPos:=FALSE;
    !Rueckgabewert
    RETURN bInPos;
  ENDFUNC

Irgendjemand ne Ahnung?

 danke
Gespeichert
Micky
Junior Member
****
Offline Offline

Beiträge: 127



« Antworten #1 am: 09. Dezember 2005, 15:59:47 »

Hallo dini,

ich weiß zwar momentan noch nicht wo der Fehler ist aber Du könntest mal vor die Routine CheckHomePos die Instruktion SpyStart "Spy.log";  und danach SpyStop schreiben.

Weiterhin musst Du sicherstellen, dass das Modul in dem CheckHomPos drin enthalten ist nicht mit NoStepIn bzw. NnView geschützt ist.

Mit SpyStart werden alle ausgeführten Instruktionen in die Datei Spy.LOG im Homeverzeichnis geschrieben. Nach dem Neustart musst du nur die Datei Spy.LOG auf deinen PC kopieren und kannst Die letzten ausgeführte Instruktionen ansehen.

Dann kann man ggf. auch sagen, wo der Fehler liegt.

 waffen100

Grüße Micky
Gespeichert
dini
Stammgast
**
Offline Offline

Beiträge: 44



« Antworten #2 am: 09. Dezember 2005, 16:13:39 »

Hallo Micky,
werde das mal so machen wie du es vorgrschlagen hast.
Ich vermute jedoch, das es irgendwo Hardwaremäßig hakt, da diese Routine nicht neu einprogrammiert wurde, sondern der Absturz plötzlich kam.

Schönes Wochenende
Gespeichert
Werner Hampel
Administrator
Forenjunkie
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1476



WWW
« Antworten #3 am: 09. Dezember 2005, 22:19:27 »

an der Routine liegts nicht.

Hab auch noch nie geschafft die S4 Steuerung mit Programmcode zum Absturz zu bringen.  pfeif
Eher ein Betriebssystemfehler oder Hardwaredefekt.  Confused
Gespeichert

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.
mod-poser
Gast
« Antworten #4 am: 14. Dezember 2005, 19:49:52 »

Hi,

wer hat das denn mal im Original programmiert ?
So ungefähr sieht die Init bei uns auch aus.

!Prüfen ob sich der Roboter in der Homeposition befindet
    WHILE PosVergleich(pHome,100,0.2)=FALSE DO
      Meldung fmNotInHome;
      TPReadFK nAnswer,"Wählen Sie MANUELL oder AUTO","MANUELL","","","","AUTO";
      IF nAnswer=5 THEN
        Meldung fmAutoHome;
        TPReadFK nAnswer,"Wählen Sie WEITER oder ABBRUCH","WEITER","","","","ABBRUCH";
        IF nAnswer=1 THEN
          mvHomePos;
          Meldung fmInHome;
          WaitTime 2;
        ELSE
          EXIT;
        ENDIF
      ELSE
        TPErase;
        Meldung fmManualHome;
        TPReadFK nAnswer,"Wählen Sie WEITER !","WEITER","","","","";
        EXIT;
      ENDIF
    ENDWHILE
>>>>>>> 1:1 und die strings fm... sind alles 5 Feld Arrays, oder ?

Prüfe mal folgendes:
  Die Funktion Positionsvergleich hat bei uns dieses Problem:
     Sind in den Quaternien der zu prüfenden Position e-hoch Terme enthalten, bekomme ich fast nie ein true.
     Denn ABB rechnet anders als alle anderen !
     So geht das unter S4c plus : 0 +0.1+0.1+0.1+......-0.1-0.1-0.1.... Du erhälst nie wieder ein Ergebiss=0,
     und wenn Du ewig so hoch und runter rechnest.
     Aber so geht dass:
       const num zahl:=0.1;
       pers num ergebnis:=0;
 
       ergebnis:=ergebnis+round(zahl\dez:=1);
       ergebnis:=ergebnis-round(zahl\dez:=1);

  Die Werte der Homepos siehst Du indem Du das robtarget in der in der Programmzeile mit dem Cursor
  markierts und dann Menu Bearbeiten>Punkt 8. Oder KorrPos die Position einfach mal etwas umorientiert.
  Probleme machen immer Positionen, die im Bild Bewegen über das Menu Ausrichten(Allign) positioniert
  wurden.

Hoffe Ich konnte Dir helfen.
msc
Gespeichert
dini
Stammgast
**
Offline Offline

Beiträge: 44



« Antworten #5 am: 15. Dezember 2005, 08:03:39 »

Hallo mod-poser,
ursprünglich ist diese Init-Routine bei Inbetriebnahme der Anlage durch einen ABB-Mitarbeiter geschrieben worden.
Deine Idee werde ich mal aufnehmen, wird aber noch ein Weilchen dauern. Habe im Augenblick ein Problem mit einen Motoman.

 merci
Gespeichert
Micky
Junior Member
****
Offline Offline

Beiträge: 127



« Antworten #6 am: 16. Dezember 2005, 17:33:11 »

Hallo dini,

wir haben diesen Positionsvergleich als aller erste Version auf der S4 eingesetzt, sind dann umgestiegen auf einen Jointtargetvergleich. Seitdem es die Weltzonen gibt, verwenden wir diese um die Homeposition zu überwachen, so dass wir zum einen nur den Ausgang abfragen brauchen bzw. die Homepositionsmeldung direkt an eine SPS oder eine Lampe melden können.

PROC PowerOn() 
    VAR jointtarget jDelta;
    VAR jointtarget jHome;
 
    !Homeposition als jointtarget umrechnen
    jHome:=CalcJointT(pHome,tGreifer\WObj:=wobj0);
    !
    !Max. Abweichung der einzelnen Achsen festlegen
    jDelta.robax:=[ 2, 2, 2, 2, 2, 2];
    jDelta.extax.eax_a:=5;
    !
    !Weltzone für die Homeposition definieren
    WZHomeJointDef\Inside, shHomePos, jHome, jDelta;
    WZDOSet\Stat,wzHomePos\Inside,shHomePos,doIRBinHome,high;
    !
ENDPROC

So dass die Abfrage in Deiner Routine CheckHomepos wie folgt aussieht:

WHILE Doutput(doIRBinHome)=low DO
      Meldung fmNotInHome
       ...


 supi

Grüße Micky
Gespeichert
burlibua
Moderator
Junior Member
*****
Offline Offline

Beiträge: 110


« Antworten #7 am: 05. Januar 2006, 09:10:28 »

Ich würde die Abfrage der HomePos mit CJointT()  abfragen dann kannst du die Freigabe zum Automatischen Home anfahren in Grad der Achse bestimmen und brauchst nicht mit xyz-Q1-4
dich herumquälen.  Außerdem ist es möglich den Bediener etwas zu führen --- Fahrmal das Ding mit Achse 1 mehr nach rechts---oder so.

Ich glaub da muß mal eine routine her oder ?

mfG Burlibua
Gespeichert
mischwarz
Junior Member
****
Offline Offline

Geschlecht: Männlich
Beiträge: 128



« Antworten #8 am: 27. Januar 2006, 07:31:41 »

Ich mache es wie folgt :

 !------------------------------------------------------------
 !Funktion     : fTestPos
 !Description  : Testet die Aktuelle Position mit der angegebenen
 !             : Wenn keine uebereinstimmung,wird in angegebene
 !             : position gefahren mit verringerter Geschwindigkeit
 !Parameter
 ! Position    : Vergleichsposition
 ! Tool        : Vergleichstool
 ! Werkobjekt  : vergleichswerkobjekt
 !------------------------------------------------------------
  LOCAL FUNC bool fTestPos(
    PERS robtarget Position,
    PERS tooldata Tool,
    PERS wobjdata Werkobj)

    VAR robtarget pTemPos;
    VAR num nOridist;
    VAR num nPosDist;

    ! Testet Aktuelle Position mit angegebenen Tool und WerkObj
    ! und vergleicht mit Sollposition
    ! wenn nicht identisch, wird in sollposition gefahren
    StopMove;
    pTemPos:=CRobT(\Tool:=Tool\WObj:=Werkobj);
    pTemPos.trans:=Position.trans-pTemPos.trans;
    pTemPos.rot.q1:=Abs(Position.rot.q1)-Abs(pTemPos.rot.q1);
    pTemPos.rot.q2:=Abs(Position.rot.q2)-Abs(pTemPos.rot.q2);
    pTemPos.rot.q3:=Abs(Position.rot.q3)-Abs(pTemPos.rot.q3);
    pTemPos.rot.q4:=Abs(Position.rot.q4)-Abs(pTemPos.rot.q4);
    nPosDist:=Sqrt(Pow(pTemPos.trans.x,2)+Pow(pTemPos.trans.y,2)+Pow(pTemPos.trans.z,2));
    nOridist:=Abs(pTemPos.rot.q1)+Abs(pTemPos.rot.q2)+Abs(pTemPos.rot.q3)+Abs(pTemPos.rot.q4);
    IF ((nOridist<0.1) AND (nPosDist<5)) THEN
      StartMove;
      RETURN TRUE;
    ELSE
      TPErase;
      TPWrite "             ACHTUNG!!          ";
      TPWrite "  Fehlermeldung aus TestPos      ";
      TPWrite "  Manipulator nicht in Testposition  ";
      TPWrite "  Manipulator in Testposition oder Abbruch";
      TPReadFK reg1,"Roboter-Programm","","","","TestPos","Abbruch";
      IF reg1=4 THEN
        StartMove;
        TPErase;
        TPWrite "          ACHTUNG         ";
        TPWrite " Fehlermeldung aus TestPos      ";
        TPWrite " Manipulator bewegt sich zur Testposition ";
        WaitTime 2;
        MoveJ Position,v50,fine,Tool\WObj:=Werkobj;
        WaitTime 0.2;
        RETURN TRUE;
      ELSE
        prog_exit;
      ENDIF
    ENDIF
  ENDFUNC
Gespeichert

Es gibt immer einen Weg. ( Wohin auch immer er führen mag )
mischwarz ANNO 2001
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Absturz « vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS