Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
18. Mai 2012, 11:22:28
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: English and international Robotsupport now on Robot Forum. Also Supported by the Moderators of the roboterforum.de

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

Beiträge: 2


« am: 17. April 2008, 10:02:53 »

Moin Moin!
Ich bin relativ neu im Geschäft des Roboterprogrammierens, heißt: Hab keine Ahnung. Das Programm vom ABB-Roboter wurde von einem angeblich "Spezialisten"geschrieben, leider kann er mir auch nicht weiterhelfen.  huh
Nun zu meinem Problem: Ich möchte, oder besser der Kunde wünscht, dass wenn der Roboter (IRC5) im Automatikbetrieb (Programm läuft) läuft und dann der Override am Touchpanel auf 0 gesetzt wird, soll eine Fehlermeldung am externen Bedienfeld erscheinen, also muß ich einen digitalen Ausgang vom Roboterprogramm an die SPS senden. Z.Zt. ist es so, wenn der Roboter gestoppt ist, der Override auf 0 gesetzt wird und dann das Roboterprogramm wieder gestartet wird, bekomme ich zwar die Meldung, aber das reicht den Kunden nicht. Ich hab gehört das man den Override vielleicht mit einem Hintergrundtask die ganze Zeit überwachen könnte (CSpeedOverride=0) und dann, wenn auf Null gesetzt wird ein digi.Ausgang an die SPS gesendet wird.
Vielleicht kann mir hier ja einer weiterhelfen wie ich das Problem lösen könnte.
Danke
MoinMoin
Gespeichert
Dos6.22
Member
***
Offline Offline

Beiträge: 80


« Antworten #1 am: 17. April 2008, 10:43:44 »

nun dafür muss dein roboter multitasking können. und das gibt es bei abb nicht kostenlos. ob der roboter das kann, kannst du auf den blättern in den rosa hüllen lesen oder über das auslesen der steuerungsmodul datei mittels robotstudio.
ansonsten versuchst du einfach einen neuen task in robotstudio anzulegen, das programm sollte ja meckern, wenn es nicht geht.

andernfalls wird es schwer. eine externe sps könnte eventuell deine tcp geschwindigkeit auswerten (gibt es laut anleitung als systemausgang) und daraus ableiten, dass sich der roboter nicht mehr bewegt. nur bekommst du immer dann ein problem, wenn der roboter jobtechnisch an einer stelle stehen bleibt.

Gespeichert
Paulaner
Junior Member
****
Offline Offline

Geschlecht: Männlich
Beiträge: 116



WWW
« Antworten #2 am: 17. April 2008, 12:56:50 »

Hallo MoinMoin,
für diese Meldung brauchst du nicht unbedingt einen zweiten Task.
Du kannst auch einen Zeitlichen Interrupt erzeugen der z.B. alle 2 Sekunden aufgerufen wird und den Override auf 0% prüft. Und gegebenenfalls ein Signal an die SPS sendet.

1: Ein Signal in der IO.sys deklarieren.

      -Name "doOverride0Prozent" -SignalType "DO" -Unit "PB_Adapter" -UnitMap "19"

2: Einen Zeitinterrupt und Variablen im Modul erzeugen

  !zyklicher interrupt  für den override 0% zu senden
  LOCAL VAR intnum inOverRide;
  !zyklicher interrupt wird alle 1000ms aufgerufen
  LOCAL PERS num nITimer:=1.0;

3: Ein Programm zum Bekantgeben und Initialisieren des Interrupts
    CheckOverRide() ist das verknüpfte Programm (Trap) zu dem Interrupt

  LOCAL PROC InitInterrupts()
    !timerinterrupt für override zu senden
    IDelete inOverRide;
    CONNECT inOverRide WITH CheckOverRide;
    ITimer nITimer,inOverRide;
    ISleep inOverRide;
 ENDPROC

3: Das Programm (Trap) das aufgerufen werden soll

TRAP CheckOverRide

  IF CSpeedOverride()=0 THEN
    Set doOverride0Prozent;
  ELSE
    Reset doOverride0Prozent;
  ENDIF
  RETURN;
ENDTRAP

4: So! Das ganze muß ja nur in Automatikbetrieb laufen. Im Handmodus kannst du den Interrupt deaktivieren. Dann gibst es noch zwei Programme die den Interrupt steuern. Diese Programme mußt du mit Events verknüpfen.
In der SYS.cfg
CAB_EXEC_HOOKS:

      -Routine "RestartTrapSys" -Shelf "START" -Task "T_ROB1"

      -Routine "RestartTrapSys" -Shelf "RESTART" -Task "T_ROB1"

     -Routine "SleepTrapSys" -Shelf "STOP" -Task "T_ROB1"

PROC RestartTrapSys()
  InitInterrupts;
  !zyklischen interrupt für den overridestatus zu senden
  IF OpMode()=OP_AUTO IWatch inOverRide;
  RETURN;
ENDPROC

PROC SleepTrapSys()
  !zyklischen interrupt für den overridestatus zu senden
  ISleep inOverRide;
  RETURN;
ENDPROC

Also bei mir funktioniert das Ganze ohne Probleme. Manchmal werden noch Fehlermeldungen mit der Interrupt-Warteschlange mitgeloggt aber die sind halb so wild  Denken

Wenn der Roboter sich in Automatik befindet und wird von der SPS (oder Manuell) gestartet wird das Programm " RestartTrapSys" abgearbeitet. Der Interrupt wird aktiviert.

Wenn das Programm gestoppt wird, wird das Programm "SleepTrapSys" abgearbeitet. Der Interrupt wird deaktiviert.

Viel Spaß beim programmieren  supi
Gespeichert

Erfahrung kann man nicht kaufen,
aber man kann dafür bezahlen.
MoinMoin
Neuling
*
Offline Offline

Beiträge: 2


« Antworten #3 am: 18. April 2008, 08:44:46 »

Vielen Dank erst einmal für die schnellen antworten  merci

Also mein Roboter ist Multitaskingfähig. Wäre es jetzt einfacher einen weiteren Task zu schreiben der den Override ständig überwacht? Wenn ja, könnte einer vielleicht mir den mal schreiben oder soll ich jetzt Paulaners Interrupt eintippen? (Danke Paulaner)

@: Paulaner: Hast du mal was für Daimler im Bezug des Overrides gemacht?
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #4 am: 18. April 2008, 11:18:42 »

Hallo MoinMoin,

1. dein Hintergrundtask sollte Semistatisch sein.

Des weiteren kannst Du fast den Programmcode wie unten von Paulaner beschrieben nutzen.

Ich würde da auch nicht so einen großen Aufwand draus machen.

PROC rCheckOverRide()
 VAR NUM nOverride;
 nOverride:= CSpeedOverride();

  IF OpMode()=OP_AUTO AND CSpeedOverride()=0 THEN
    Set doOverride0Prozent;
    ! Ausagebe des aktuellen Overide am TP
    TPWrite "Override="\Num:=nOverride;
  ELSE
    Reset doOverride0Prozent;
  ENDIF
 RETURN;
ENDPROC

Das sollte es gewesen sein.

Gruß...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
Sven Weyer
Moderator
Elite Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 912



WWW
« Antworten #5 am: 18. April 2008, 11:42:57 »

Also wenn Du nicht möchtest das Dein Robis nur noch schreibt würde ich das Prog von Robcheck noch etwas ändern!
Bei dem jetzigenn Stand würde er ständig die Meldung ausgeben wenn Dein Override auf 0% ist. Wäre ja doof, oder?
Würde es so machen:

PROC rCheckOverRide()
 VAR NUM nOverride;
 nOverride:= CSpeedOverride();

  IF OpMode()=OP_AUTO AND CSpeedOverride()=0 AND DOutput(doOverride0Prozent)=0 THEN
    Set doOverride0Prozent;
    ! Ausagebe des aktuellen Overide am TP
    TPWrite "Override="\Num:=nOverride;
  ELSE
    Reset doOverride0Prozent;
  ENDIF
ENDPROC

Damit bist Du sicher das Du die Meldung vom Hintergrundtask nur einmal bekommst und nicht die Das Hintergrundtask bei Overrid 0% die ganzen Ressoucen weg nimmt und Du ständig was auf dem Panel geschrieben wird.

Sven
Gespeichert

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!
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #6 am: 18. April 2008, 13:58:33 »

Hallo Sven.

Gute Idee, habe ich nicht dran gedacht. Ich glaube aber er gibt die Meldung spätestens nach dem 3.ten durchlauf des Task wieder raus.

1.Run= Set doOverride0Prozent + Meldung
2.Run= Reset doOverride0Prozent
3.Run= weil ja resetet wurde ->Set doOverride0Prozent + Meldung

Wenn dann so.

PROC rCheckOverRide()
 VAR NUM nOverride;
 nOverride:= CSpeedOverride();

 IF OpMode()=OP_AUTO AND CSpeedOverride()=0 AND DOutput(doOverride0Prozent)=0 THEN
      Set doOverride0Prozent;
     ! Ausagebe des aktuellen Overide am TP
     TPWrite "Override="\Num:=nOverride;
 ELSEIF  OpMode()=OP_AUTO AND CSpeedOverride()>0 THEN
      Reset doOverride0Prozent;
 ENDIF

ENDPROC

Gruß...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
rmac
Global Moderator
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 282


« Antworten #7 am: 18. April 2008, 15:54:39 »

Hallo ihr Optimierungsfetischisten,

was haltet ihr denn von folgenden Vorschlägen:

  • Erstens würde ich doOverride0Prozent in doOverride0Proz umbenennen, weil "doOverride0Prozent" mehr
    als 16 Zeichen lang ist und das mag die Steuerung nicht (denke ich).
  • Zweitens würde ich dann doOverride0Proz in der System-Konfig. invertieren

Die Signal-Invertierung vorausgesetzt, sollte Folgendes schon ausreichen (ohne TPWrite):
Code:
  PROC rCheckOverRide()
    IF OpMode() = OP_AUTO SetDO doOverride0Proz, CSpeedOverride();
  ENDPROC

oder mit TPWrite:
Code:
  PROC rCheckOverRide()
    VAR DIONUM dioOvrPrev;
    dioOvrPrev := DOutput(doOverride0Proz);
    IF OpMode() = OP_AUTO SetDO doOverride0Proz, CSpeedOverride();
    IF (dioOvrPrev = 0) AND (DOutput(doOverride0Proz) = 1) TPWrite "Override=0";
  ENDPROC

Man könnte sich die Konfig-Invertierung auch sparen und stattdessen ausserhalb (in der SPS) invertieren.
Ist nicht getestet, aber sollte gehen, oder ?

Gruß und schönes WE schonmal   beerchug
rmac
Gespeichert
Paulaner
Junior Member
****
Offline Offline

Geschlecht: Männlich
Beiträge: 116



WWW
« Antworten #8 am: 18. April 2008, 16:27:57 »

Hallo @rmac

dein Vorschlag sieht nach weniger Arbeit aus.  grinser043
Mit den 16 Zeichen: es können jetzt auch Signale verwendet werden die mehr als 16 besitzen.
Oder ist das von der Softwareversion abhängig?
Gruß Paulaner
Gespeichert

Erfahrung kann man nicht kaufen,
aber man kann dafür bezahlen.
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #9 am: 18. April 2008, 16:36:34 »

Code:
  PROC rCheckOverRide()
    VAR DIONUM dioOvrPrev;
    dioOvrPrev := DOutput(doOverride0Proz);
    IF OpMode() = OP_AUTO SetDO doOverride0Proz, CSpeedOverride();
    IF (dioOvrPrev = 0) AND (DOutput(doOverride0Proz) = 1) TPWrite "Override=0";
  ENDPROC

Gute Idee. Vieleicht übersehe ich ja was, aber ich denke Problem macht hierbei die Zeile

IF OpMode() = OP_AUTO SetDO doOverride0Proz, CSpeedOverride();

CSpeedOverride() hat doch ein Bereich von 0-100. Als GOutput sollte es gehen. Nur dann hätte müsste er wieder 1 Byte verschiessen.

Gruss und ich gehe jetzt auch ins WE. Also schönes WE
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
rmac
Global Moderator
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 282


« Antworten #10 am: 18. April 2008, 16:49:59 »

@Paulaner,
also ich hatte vor meinem Posting extra nochmal nachgeschlagen. Im
"Technisches Referenzhandbuch Steuerungssoftware IRC5
Systemparameter RobotWare 5.05
Dokumentnr: 3HAC 17076-3Überarbeitung: A"
steht unter "Parametergruppe I/O | Signal | Name":
"Zulässige Werte: Eine Zeichenfolge gemäß den RAPID-Regeln im Handbuch RAPID-Übersicht, Kapitel
Grundlegende Elemente.
"
Dort wiederum steht:
"Die maximale Länge jedes Bezeichners beträgt 16 Zeichen, von denen jedes Zeichen
signifikant ist. Groß- und Kleinschreibung wird bei Bezeichnern nicht unterschieden.
"

Ich gehe daher davon aus, dass EA-Bezeichner auch nicht länger als 16 Zeichen sein dürfen,
(auch nicht bei RWare 5.x) ich kann's aber mangels IRC5 nicht testen.
Edit: vielleicht ist auch meine Doku nicht mehr aktuell oder das wurde im letzten Release geändert.
Wenn ihr die Möglichkeiten habt das zu testen, würde mich das Ergebnis natürlich brennend interessieren...

@Robcheck01,
bei SetDO kann als Value ein beliebiger NUM angegeben werden.
Value = 0 setzt den Ausgang zurück
Value <> 0 setzt den Ausgang (also auch 100)
insofern braucht man keine Gruppe dafür...

Gruß
rmac
Gespeichert
Paulaner
Junior Member
****
Offline Offline

Geschlecht: Männlich
Beiträge: 116



WWW
« Antworten #11 am: 23. April 2008, 09:17:35 »

@rmac,
ich habe auch mal nachgeschaut! Aber leider nix gefunden was die Zeichenlänge der Signalnamen betrifft. Auf jeden Fall können die Signalnamen mehr als 16 Zeichen betragen. Wahrscheinlich 32, aber das habe ich noch nicht ausprobiert. Bei der IRC5 kommt keine Fehlermeldung und die Signale können im Programm so angesprochen werden.
Gruß Paulaner
Gespeichert

Erfahrung kann man nicht kaufen,
aber man kann dafür bezahlen.
rmac
Global Moderator
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 282


« Antworten #12 am: 23. April 2008, 09:34:37 »

Moin Paulaner,

[...]Bei der IRC5 kommt keine Fehlermeldung und die Signale können im Programm so angesprochen werden.[...]

D.h. es kommt keine Fehlermeldung wenn du die manuell in der eio.sys einträgst und dieses eio.sys dann in
das System lädst oder wenn du die über das TP eingibst/konfigurierst ?
Und dieser Signalname kann dann im RAPID-Programm ohne Kürzung so verwendet werden ?
Das wundert mich doch sehr....
Welche RWare Version hast du denn ?

Danke erstmal für die Infos....
Gruß
rmac

PS.: noch was vergessen: Kannst du mal ausprobieren (wenn möglich) ob auch normale Bezeichner/Variablennamen
(direkt im Programm) auch länger als 16 Zeichen akzeptiert werden ?
Gespeichert
Dos6.22
Member
***
Offline Offline

Beiträge: 80


« Antworten #13 am: 23. April 2008, 15:35:22 »

habe gerade mal in eines meiner letzten projekte nachgeschaut. habe da auch e/a die genau 32 zeichen lang sind. da ist dann aber wirklich schluss.
roboter irc5.
ich hatte die namen damals nicht über das tp angelegt. ich meine, ich habe sie direkt in die eio.cfg geschrieben und dann die datei hochgeladen.
aber ich bin mir ziemlich sicher, dass man solange namen auch mit robotstudio anlegen kann.

ich habe bei mir auch sehr viele variablennamen die länger als 16 zeichen sind. die machen ebenfalls keine probleme.

Name: RobotWare
Version: 5.09.1020.01

Gespeichert
rmac
Global Moderator
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 282


« Antworten #14 am: 23. April 2008, 15:41:15 »

Also,

ich habe mal in einem anderen Forum nachfragen lassen und da kam gerade die Antwort,
dass in "neueren" Versionen Bezeichner (und damit auch Signalnamen) 32 Zeichen lang sein dürfen und
zwar (vermutlich) ab Version 5.09 !
Das müsste dann aber eigentlich auch in den dazugehörigen Dokus stehen.

Wieder was dazu gelernt  applaus

Dann können Anwender/Programmierer ab Ver. 5.09. meinen Einwand in dem vorherigen Posting bzgl. der
16 Zeichen Einschränkung ja ignorieren....  zwink

Bis dahin
rmac
Gespeichert
Seiten: [1] Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: Geschwindigkeit (Override) auf Null « 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