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

 Absturz


normal_post Autor Thema:  Absturz  (Gelesen 3709 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

09. Dezember 2005, 13:08:28
Gelesen 3709 mal
Offline

dini


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:
  • gefällt mir    Danke

Heute um 18:06:36
Antwort #1

Werbung

Gast

09. Dezember 2005, 15:59:47
Antwort #1
Offline

Micky


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
  • gefällt mir    Danke

09. Dezember 2005, 16:13:39
Antwort #2
Offline

dini


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
  • gefällt mir    Danke

09. Dezember 2005, 22:19:27
Antwort #3
Offline

Werner Hampel

Administrator
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.  :?
  • 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.

14. Dezember 2005, 19:49:52
Antwort #4

mod-poser

Gast
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
  • gefällt mir    Danke

Heute um 18:06:36
Antwort #5

Werbung

Gast

15. Dezember 2005, 08:03:39
Antwort #5
Offline

dini


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:
  • gefällt mir    Danke

16. Dezember 2005, 17:33:11
Antwort #6
Offline

Micky


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
  • gefällt mir    Danke

05. Januar 2006, 09:10:28
Antwort #7
Offline

burlibua


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
  • gefällt mir    Danke

27. Januar 2006, 07:31:41
Antwort #8

mischwarz

Gast
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
  • gefällt mir    Danke

Heute um 18:06:36
Antwort #9

Werbung

Gast


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