ABB ASEA IRB 6/2

  • ich suche nämlich aktuell noch die Möglichkeit nach dem Starten des schweißens zu einem nächsten Punkt zu fahren also eine Naht zu schweißen.

    Im S3 heißt das PATH für eine gerade Strecke oder CORNER für eine Rundung


    Bei mir gibt es das nicht... nur SAME, FINE, COARSE und... muss ich nochmal rein schauen was noch.

  • ANZEIGE
  • Nabend da bin ich wieder.


    Also mit dem schweißen klappt soweit habe alles heraus gefunden muss nur noch ordentliche Schablonen bauen für meine Sachen und dann programmiere ich richtig und dann korrigiere ich die schweißparameter. Anschließend ein Foto von den Nähten und eventuell ein Video.


    Daa einzige was ich nicht heraus gefunden habe ist:


    1. Wie wähle ich den jeweiligen Schweißtisch an, im programmier Prozess?(es geht mit dem Teachpendant immer nur Nummer 2, der auch zuletzt die Referenzfahrt gemacht hat)


    2. Wie geht er nach dem Ablauf des Schweißprogrammes wieder in die "Home" Position um auf den nächsten Befehl zu warten, also Operator 1 Ready oder Operator 2 Ready?


    3. Bei dem Cleaning Programm also Spattercleaning fragt er mich wenn ich es nach dem schweißen einfüge (CALL PROG 300) folgendes: PATTERN? YES NO


    Ist dies ein Patternprogramm?


    Für den Getränkewunsch benötige ich aber zumindest die Sorte und die Anschrift für den Versand :D


    Grüße

  • 3. Bei dem Cleaning Programm also Spattercleaning fragt er mich wenn ich es nach dem schweißen einfüge (CALL PROG 300) folgendes: PATTERN? YES NO

    Pattern ist Muster. Für Dich in dieser Situation NO oder gleich nächster Befehl einfügen.

    Call Instruktion lässt diverse Möglichkeiten zu:


    CALL PROG 987 => Fix wird Prog 987 aufgerufen und von Anfang bis Schluss oder 1. RETURN abgearbeitet

    CALL PROG REG x => Flexibel wird Prog aufgerufen abhängig vom aktuellen Wert in Register x und von Anfang bis Schluss oder 1. RETURN abgearbeitet

    CALL PROG 123 REG y => Fix wird Programm 123 aufgerufen. Wert in Register y gibt vor, welcher Teil des Progs abgearbeitet wird. (Massgebend RETURNs)

    CALL PROG REG x REG y => Kombination aus Punkt 2 und 3. Wird oft zum Palettieren verwendet. Schweissen eher nein!


    Für's Verständnis solcher Instruktionen wäre es eigentlich besser, Du würdest mal noch auf Deutsch umschalten.



    1. Wie wähle ich den jeweiligen Schweißtisch an, im programmier Prozess?(es geht mit dem Teachpendant immer nur Nummer 2, der auch zuletzt die Referenzfahrt gemacht hat)


    2. Wie geht er nach dem Ablauf des Schweißprogrammes wieder in die "Home" Position um auf den nächsten Befehl zu warten, also Operator 1 Ready oder Operator 2 Ready?


    Du hast jetzt irgendwas programmiert, wie Du schreibst!

    Keine Ahnung was...… (Prognummer 1000, 2000,x?, TCP, wie fängt Dein Prog an, wie Bist Du exakt vorgegangen oder einfach mal was gemacht ???? )

    Ich kann's nicht beurteilen ohne Zeile Code.


    Prinzipiell habe ich Dir betreffend Punkt 1 wie 2 schon mal geschrieben betreffend dieser Hilfsprogramme, die wir geladen haben.

    Die Struktur Deiner Anlage ist vorhanden.

    Programm 0 gibt die vor. Erklärung dazu habe ich Dir schon mal gepostet.

    ABB ASEA IRB 6/2


    Auch ein neues Schweissteil programmiert man über starten dieser Struktur mit Anwahl des Tisches über Operator Panel.

    Richtige Tischseite wird dann auch gleich scharf gemacht über die Struktur und er läuft Dir auch gleich ins Prog 1000 / 2000.

    Da stoppt man das Prog und fängt dann an, den Ablauf zu teachen.

    Viele hatten für dieses eine Vorlage, dass sie ab Diskette jedesmal geladen haben. Dies müsste auch Dein Ziel sein.


    In Programm 0 springst Du ins Programm 100 und da gleich ins Programm 101.

    Kannst Du dieses mal posten.

    Müsste generelle Ausgangsposition des Roboters enthalten sein. Hast Du diese schon angepasst auf Dein Layout?

    Kannst Du mal Anfang und Schluss des Programms 1000 oder 2000 posten. Da müsste ersichtlich sein, wie die Homepositionen für Positionierer 1 oder 2 gemacht worden sind.


    Mir fehlt auch aktuell die Übersicht, was alles im Speicher vorhanden ist.

    Müssten dies mal komplett auflisten.



    Für den Getränkewunsch benötige ich aber zumindest die Sorte und die Anschrift für den Versand :D

    Ehrlich. Wenn wirklich alles sauber und perfekt läuft würde ich lieber mal bei Dir vor Ort "ein Lokales" trinken kommen und dazu ein bisschen fachsimpeln. Ennsen deutet auf Österreich. Passt dass?

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • moin,


    Ne bin genauso vorangegangen, dass ich das PROG 0 so beibehalte.

    Funktioniert auch so dass ich OP1 Ready drücke und er fährt das ab was ich ihm programmiert habe, nur zum Schluss habe ich dann versucht mit CALL PROG 0 wieder in die HOME Position zu fahren, allerdings ohne Erfolg.


    Zu den Schweißtischen das hatte ich verstanden.

    Mir ging es nun nur darum dass ich die jeweilige Seite positioniere beim programmieren.

    Oder ist es so dass ich dann bei CALL PROG 1000 die Tischseite 1 aktiviert habe und bei CALL PROG 2000 die 2. Seite?


    Wobei hier dann entweder die Seiten vertauscht worden sind oder irgendwas nicht funktioniert... denn wenn ich im PROG 1000 bin kann ich nur Seite 2 drehen.

    Ich schaue gleich mal nach was die PROGs 100 und 101 sagen und posten diese hier.


    Das Layout des Roboters passt eigentlich sehr gut, also die HOME Position. Daran bräuchte ich nichts machen.


    Also wäre es sinnig wenn ich die Struktur habe und er bei OP1 READY sowie OP2 READY zu dem entsprechenden Tisch fährt, bis dahin alles beizubehalten und den Rest zu löschen des Schweißprogrammes 1000 / 2000 und anschließend eine neue Diskette nehmen und diese als Grundprogrammsicherung nimmt von der man dann auch neue Programme schreibt, richtig ?


    Ich bin zwar einmal im Jahr in Österreich / Obertauern aber nur zum Snowboarden aber lebe im tiefsten Westen Deutschlands 😅.

  • nur zum Schluss habe ich dann versucht mit CALL PROG 0 wieder in die HOME Position zu fahren, allerdings ohne Erfolg.

    Prog 0 am Schluss aufrufen ist schlechte Idee.

    Würde sich in sich so verschachteln, dass nach gewissen Durchgängen Programm sich aufhängt.


    In Programm 1000 /2000 ist Anfang erste Position "Home"-Position der entsprechenden Station, dito die letzte Position.

    Am Schluss des Programmes gehört ein RETURN. Über dieses verlässt er das Unterprogramm und springt eine Ebene höher.

    Da Programm 0 Prog 1000 / 2000 aufgerufen hat landest Du automatisch wieder darin und die Abfragen der Stationen kommen.



    Oder ist es so dass ich dann bei CALL PROG 1000 die Tischseite 1 aktiviert habe und bei CALL PROG 2000 die 2. Seite?

    Müsste so sein.

    Beim Aufbau der Stationen darauf geachtet, dass sie übereinstimmen mit Seiten des OP-Panels?


    Wobei hier dann entweder die Seiten vertauscht worden sind oder irgendwas nicht funktioniert... denn wenn ich im PROG 1000 bin kann ich nur Seite 2 drehen.

    Verdrahtung je geprüft des OP-Panels? War bis jetzt nie ein Thema.

    Welche Relais ziehen wann KA 4 und 5 müssten wir ja noch für etwas haben.

    Habe auch noch nie ein Schaltplan betreffend Panel gesehen, was Du gepostet hast.


    Also wäre es sinnig wenn ich die Struktur habe und er bei OP1 READY sowie OP2 READY zu dem entsprechenden Tisch fährt, bis dahin alles beizubehalten und den Rest zu löschen des Schweißprogrammes 1000 / 2000 und anschließend eine neue Diskette nehmen und diese als Grundprogrammsicherung nimmt von der man dann auch neue Programme schreibt, richtig ?

    In diese Richtung geht es schlussendlich, genau. :supi:


    Das wäre meiner Meinung nach Anlagentechnisch das nächste Ziel, dass wir erreichen sollten.

    Wir wissen, wie alle "Hilfsprogramme" funktionieren / vorhanden sind, und dass diese so ablaufen, wie wir es haben wollen.


    Mir bis jetzt bekannte Programme von Deiner Anlage:

    Programm 0,10,20,100,101,300,1000,2000

    Hat es noch mehr?

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • guten Morgen und ein frohes neues Jahr wünsche ich erstmal :)


    So also die Programme 0, 10, 20, 100 hatte ich ja aufgelistet.


    Habe vorhin mal versucht das Programm 1000 von der Diskette die dabei war zu laden aber das will er nicht... habe dann mal eine ganz neue Diskette genommen und wollte diese formatieren (nu um zu schauen ob er das wenigstens macht) aber da sagt er auch error....


    Wollte mir anschauen wie die das Programm 1000 aufgebaut haben und dann ab dem Punkt weiter zu machen von da wo ich es verwenden könnte...


    Nun muss ich leider dich fragen wie du das Programm 1000 bzw 2000 aufbauen würdest, also im Endeffekt nur start und Ende des Programms. Das schweißen und von Punkt zu Punkt fahren weiß ich ja.


    Grüße

  • Nun muss ich leider dich fragen wie du das Programm 1000 bzw 2000 aufbauen würdest, also im Endeffekt nur start und Ende des Programms. Das schweißen und von Punkt zu Punkt fahren weiß ich ja.


    Bitte bitte. So wird dies nichts.


    So also die Programme 0, 10, 20, 100 hatte ich ja aufgelistet.

    Du hast diese nicht komplett aufgelistet, Sorry! Auch Programm 101 wolltest Du schon lange posten, aber....

    Mir bis jetzt bekannte Programme von Deiner Anlage:

    Programm 0,10,20,100,101,300,1000,2000

    Hat es noch mehr?

    Wir schreiben hier kein Buch, wo es auf Schreibfehler nicht ankommt.

    Wir schreiben Programmcode, und da musst Du alles haben zur Übersicht, sonst wird das nix.

    Sehe z.B. nicht, wo TCP aktiviert wird und mit welchem Du arbeitest. TCP neu eingemessen ????????

    Ich hab mal das zusammengetragen, was Du in diversen alten Posts mal gezeigt hast....


    Bitte kontrolliere / ergänze diese.


    Funktioniert nun Start über Prog 0 die Stationswahl am OP-Panel ? Verdrahtung geprüft?

  • moin,


    Sorry hab es immer vergessen.. dachte hätte es schon gepostet..


    PROG 101


    10 V=700 MM/S MAX=1500MM/S

    20 TCP 1

    30 ROBOT COORD

    40 FRAME 0

    50 POS V=55% REFPOINT OFF

    60 RETURN



    Habe schon Programm 2000 und 1000 geschrieben um zu schauen ob die Tischaktivierung funktioniert und ob das OP Panel richtig verdrahtet ist.

    Klappt alles einwandfrei!


    Ich hatte einen Denkfehler bzw habe mir mal das PROG 0 genauer angeschaut...


    Dachte ich könnte auch nur OP1 beladen und den nur laufen lassen... also sobald wr fertig geschweißt hat und in home Position ist, wieder OP1 READY drücken und er fährt wieder OP1 an aber habe dann gemerkt dass er erst den OP2 abfahren muss um den OP1 freizugeben.


    Aber ich denke mal man könnte hier ein ähnliches Programm auf 1 für das schweißprogramm 1000 und 2 für das 2000er legen, indem er dann immer nur eine Seite anfahrt. So kann man auch einseitig arbeiten ohne immer beide Seiten zu füllen... oder sehe ich das falsch?


    Die Auflistung deiner Seite ist perfekt und stimmt so! Vielen Dank!


    Grüße

  • kann man auch einseitig arbeiten ohne immer beide Seiten zu füllen... oder sehe ich das falsch?



    Das Programm 0, dass Du geladen hast, stammt von einer Roboterstation, wo Du Tischseite 1 / 2 horizontal drehen kannst.



    Das hast Du ja nicht, oder?

    Mach mal ein Photo Deiner Anlage, wo man die Anordnung Deiner Anlage sieht.

    Im Programm werden Eingang 1 und 2 abgefragt. (Welche Seite zum Roboter wäre).

    An Klemme 14 / 15 hängt aber gar nichts. Eingang 1 und 2 werden also immer 0 sein. Darum auch das verhalten, was Du schreibst!


    Weiter sind vermutlich Abfrage Eingang3 und 4 verdreht. Du hattest ja schonmal erwähnt, dass mit der Aktivierung was falsch sein sollte.

    Eingang 3 (LED 3 linke Karte) müsste durch Drücken OP-Ready Station 1 kommen.

    Als Folge müsste Programm 10 Station 1 aktivieren.

    Danach sollte Programm 1000 kommen mit Schweissablauf.


    CALL PROG 60 wird wohl Schreibfehler von Dir sein. Sonst bitte PROG 60 mal posten.


    Was hältst Du von:



    Kannst ja mal testweise dieses eingeben bei PROG 9999 und dies dann mal starten als Hauptprogramm.


    Gruss SJX

  • Moin,


    Ja das PROG 60 ist ein Schreibfehler von mir sollte PROG 10 sein.


    Das Programm 0, dass Du geladen hast, stammt von einer Roboterstation, wo Du Tischseite 1 / 2 horizontal drehen kannst.

    Ok das würde es erklären. Ich probiere das neue PROG 9999 mal aus und sage bescheid.



    Von der Aufteilung her passt es perfekt mit dem OP Panel wenn ich vor der Anlage stehe ( vorm OP Panel) ist links OP1 Ready und rechts OP2 Ready und dort werden dann auch die Tischseiten OP1 Links und OP2 rechts aktiviert, also passt perfekt!


    Foto vom gesamten kommt.


    Habe noch eine Frage bezüglich des REFPOINT OFF


    Ist das so richtig?

    denn ich habe nun ein zweri mal was programmiert (für die Schablonen die auf den Tischen liegen) und wenn ich das Programm dann wenn es fertig ist Starte, fährt er beim ersten Punkt schon gute 5cm über den eigentlichen eingespeicherten Punkt an.

    oder hat das damit nichts zutun?


    Grüße

  • Habe noch eine Frage bezüglich des REFPOINT OFF


    Ist das so richtig?

    denn ich habe nun ein zweri mal was programmiert (für die Schablonen die auf den Tischen liegen) und wenn ich das Programm dann wenn es fertig ist Starte, fährt er beim ersten Punkt schon gute 5cm über den eigentlichen eingespeicherten Punkt an.

    oder hat das damit nichts zutun?

    ….. POS V=xx% REFPOINT OFF

    Mit dieser Zeile schaltest Du eine mögliche eingeschaltete Verschiebung AUS (OFF).

    Macht man Sicherheitshalber rein, dass sicher keine Programmverschiebung aktiv ist bei Programmstart.

    Über ….. POS V=xx% REFPOINT ON (EIN) könnte man tatsächlich eine Verschiebung punktbezogen aktivieren.


    Sollte also mit Deiner Problematik nichts zu tun haben.

    Betrifft es Punkt mit Zone Fine ?

    Richtiger TCP aktiv beim Teachen der Position? Hast Du den überprüft/passt er ? Sonst unbedingt einmessen bevor Du anfängst zu Teachen!


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • ….. POS V=xx% REFPOINT OFF

    Mit dieser Zeile schaltest Du eine mögliche eingeschaltete Verschiebung AUS (OFF).

    Macht man Sicherheitshalber rein, dass sicher keine Programmverschiebung aktiv ist bei Programmstart.

    Über ….. POS V=xx% REFPOINT ON (EIN) könnte man tatsächlich eine Verschiebung punktbezogen aktivieren.

    Ok weiß ich bescheid !



    Richtiger TCP aktiv beim Teachen der Position? Hast Du den überprüft/passt er ? Sonst unbedingt einmessen bevor Du anfängst zu Teachen!

    Werde ich dann mal überprüfen und einmessen. Hoffe das steht in dem S3 Handbuch drin? Habe das noch nicht gemacht.

    Ennsen und JANL:

    Sollten wir "Problematiken" trennen in separate Themen?

    Ja wäre eventuell eine gute Idee , würde das aber auch gerne mitverfolgen und lernen.

    Also wäre schön wenn Ihr mich darin einmal kurz erwähnt damit ich nicht suchen brauche :D


    Grüße

  • Nabend,


    Wollte mich noch al gemeldet haben.


    Habe den TCP nicht neu eingestellt weil ich es irgendwie nicht verstanden habe..


    Allerdings habe ich ein Programm geschrieben für die 2. Tischseite und und da scheint soweit alles zu funktionieren.


    Manchmal habe ich das Gefühl dass er ein par Mucken macht aber kann auch einfach ein Bedienerfehler sein....


    Grüße

  • Habe den TCP nicht neu eingestellt weil ich es irgendwie nicht verstanden habe..

    Werner hat mal ein Tutorial zur Erklärung gemacht, was ein TCP ist und was für Vorteile dies hätte für Dich:


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Vermessungsmethode ist beim IRB6 leicht anders.


    Bei kurzen geraden Nähten ists sicher bei Deinem Robi nicht so so wichtig.

    Bögen, ums Eck Schweissen kannst Du aber vergessen, wenn er nicht passt.


    Attached noch Hinweis, was Du einstellen musst, dass er um den gerade aktiven TCP umorientiert im Handverfahren.

    Nach Startup müsste TCP 0 aktiv sein, was auch bei Dir im Zentrum des Flansches ist.

    Im Programm fährt Du, wie ich gesehen habe, mit TCP 1. Nach Abarbeitung dieser Zeile sollten diese Daten dann aktiv sein.


    Zur "Automatischen" Toolvermessung braucht man eine Spitze, die im Arbeitsbereich des Robis fixiert ist.

    Weiter muss bei der ersten Vermessung Brenner wie Brennerhalterung demontiert werden, dass man mit dem Zentrum des Flansches zur Spitze fahren kann.


    Achtung: Bereits geteachte Positionen müssen danach nachkorrigiert werden! Crashgefahr!


    Als Ausgangslage muss TCP 0 aktiv sein!

    Unter der HAND müsstest Du Untermenü TOOL finden.

    Danach müsste Abfrage kommen nach der Nummer des TCP's.

    CHANGE wählen

    Müsste kommen AUTO DEF für automatische Definition.

    Abfrage nach neuer Startposition mit Ja bestätigen.

    Jetzt das Zentrum des Flansches (TCP0) des Roboters so genau wie möglich an die Spitze stellen und danach ST POS Position übernehmen.

    Danach wegfahren und Brenner neu montieren (Evtl. vorher prüfen in Lehre, ob Brennerhals Winkel passt).

    Saubere Stickout-Länge des Drahtes einstellen und danach den Draht so exakt wie möglich zur gleichen Spitze stellen.

    Punkt übernehmen mit ENDPOS.

    Am besten danach aktivieren und mal Umorientieren an der Spitze. Drahtspitze sollte +- bei der Spitze bleiben, wenn Du Brenner schwenkst.


    Über diese 2 Punkte berechnet der Roboter die Distanz zwischen Flanschmitte und Deiner Drahtspitze. Das ist der ganze Trick.


    Gruss SJX

  • Mahlzeit,

    Da bin ich wieder.


    Hab mich nun ausgiebig mit dem Programmieren beschäftigt und das klappt alles wie ich es mir vorstelle👍👍👍

    Danke für deine Hilfe das war großartig! Bild von einer perfekten Naht kommt noch ;)


    Habe aber ein Problem! Egal wie ich es angehe... beim INITDIS (neue Diskette)

    Kommt " DISK MEMORY FAULT 28" schreibsxhutz ist raus... ich habe das Gefühl dass das Laufwerk defekt sein könnte? Denn auf eine schon formatierte Diskette speichert er auch keine Programme....


    Grüße

  • Hallo Ennsen,


    Zerkratzt es Dir die Oberfläche der "Speicherscheibe" der Diskette ?

    Reinigungsdiskette mal probiert ?

    Was macht die Laufwerks-LED während den Schreib / Lesezugriffen?

    Du sagst, Formatieren und speichern geht nicht. Wie ist es mit lesen von Disk? Zeigt er Dir hier noch die Blöcke an, die auf einer schon beschriebenen Disk sind? (Vorsicht, nicht aktuelle Programme überschreiben!)

    Musstest ja mal die DSPC 110 tauschen. Was zeigt diese an während Floppy-Handling?


    Floppy-Tausch ist nicht einfach und nicht jedes 3.5" Floppy läuft an der S2. Problematik siehe hier:

    https://www.robot-forum.com/ro…?postID=126477#post126477


    Alternativen zu Floppy gibt's, selber aber nie probiert an einer S2.

    https://www.swerob.se/produkter/


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Moin,


    Danke für den Tip mit dem DDR ! ich habe die mal angeschrieben und werde dieses Laufwerk bestellen weil es auch einfacher ist für die Datensicherung und ich die Programme schneller und einfacher abrufen kann.


    Meine Erfahrungen und den Umbau werde ich natürlich hier posten!


    Danke :)


    Grüße

  • Moin,


    Also nun ist das Laufwerk bestellt.


    Allerdings habe ich nun ein neues Problem... ich weiß nicht ob der Roboter mich nicht mag...


    Drahtvorschub funktioniert plötzlich nicht mehr beim Schweißvorgang.

    Manueller Drahtvorschub geht und bei beiden prozessen ob manuell oder beim Schweißstart leuchtet die rote LED im Vorschubkoffer für Drahtvorschub.


    was nun? was könnte kaputt sein?


    grüße

  • Manueller Drahtvorschub geht und bei beiden prozessen ob manuell oder beim Schweißstart leuchtet die rote LED im Vorschubkoffer für Drahtvorschub.

    Welche LED? Hast Du ein Bild?


    Unterschied von "manueller" Drahtvorschub zu "Schweissstart" ist normalerweise der analoge Ausgang des Roboters, wo wir auch schon herumgekämpft hatten. Da warens schlechte Kontakte in den WAGO-Klemmen, die Du ja danach ersetzt hast.

    Da die Spannungen des analogen Ausgangs mal gemessen beim Start ?

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden