20. März 2019, 18:33:25
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[offen] Interrupt verbinden bzw. aktivieren mit Eingangssignal


normal_post Autor Thema: [offen] Interrupt verbinden bzw. aktivieren mit Eingangssignal  (Gelesen 1634 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

22. August 2018, 14:02:21
Gelesen 1634 mal
Offline

padostms


Hallo Kollegen!
Ist es möglich ein Interrupt mit einem eingangssignal zu aktivieren?Also möchte so machen wenn diese signal vorhanden ist dann ist diese Interrupt aktiv.Wichtig ist es deshalb weil diese interrupt beeinflusst die Bearbeitungsparameter deswegen wäre es gut wenn nur dann aktiv wäre wenn der Roboter im GS steht.
Hoffe war ich nicht zu kompliziert :lol:
Danke im Voraus
« Letzte Änderung: 22. August 2018, 14:12:12 von padostms »
  • gefällt mir    Danke

Heute um 18:33:25
Antwort #1

Werbung

Gast

22. August 2018, 14:27:39
Antwort #1
Offline

Robiman

Global Moderator
Das wird nur mit Multitasking funktionieren.
  • gefällt mir    Danke

22. August 2018, 14:37:01
Antwort #2
Offline

padostms


Hallo!
Des ist ok.Habe kein multitasking.Würde es gehen beim aktivierte Interrupt es zu ignorieren?Also ist zb verbunden Roboter arbeitet aber wird die Interrupt nicht "abgearbeitet".
Danke
  • gefällt mir    Danke

22. August 2018, 14:39:43
Antwort #3
Offline

Robiman

Global Moderator
dafür gibt's Isleep und Iwatch, damit lassen sich Interrupts aktivieren und auch deaktivieren
Aber wenn dein Programm steht läuft auch kein Interrupt!
  • gefällt mir    Danke

22. August 2018, 14:45:17
Antwort #4
Offline

padostms


Program läuft!Wartet auf freigabe.Nur roboter steht.Ich probiere mit isleep.
Danke
  • gefällt mir    Danke

Heute um 18:33:25
Antwort #5

Werbung

Gast

29. August 2018, 15:59:07
Antwort #5
Offline

padostms


Hallo!

Habe mit ipers idelete Probiert. Problem ist es das es schon vorher ausgeführt  und neu berechnet wird. Geht es in eine Trap Routine Interrupts und Signal zu verbinden oder geht es nur von eine Hauptroutine? Vom haupt ist es deswegen nicht gut weil dann steht der Roboter sowieseo.Frage deswegen weil dann könnte ich es mit eine Eingang verbinden und würde nur dann ablaufen wenn diese Eingang vorhanden ist.

Danke Euch!

Hier das Program.


PROC main()
    Initialisieren;
  Produktion;
  WHILE bAblauf DO
    WaitTime 0.2;
  ENDWHILE
ENDPROC

PROC Initialisieren()
  Auswahl;
   ! Interruptsignalle verbinden
   CONNECT persndurchm WITH DatachangeAR;
    CONNECT persnBreite WITH DatachangeAR;
    CONNECT persnOben WITH DatachangeAR;
    CONNECT persnUnten WITH DatachangeAR;
    CONNECT persnSeite WITH DatachangeAR;
    CONNECT persnLagerho WITH DatachangeAR;
    CONNECT persnLagerhu WITH DatachangeAR;
    CONNECT persnDeckelh WITH DatachangeAR;
    CONNECT persGeschw WITH DatachangeAR;
   CONNECT IStoerungDreht WITH IStoerung;
   IPers nlagerdurchmesser, persnDurchm;
    IPers nlagerbreite, persnBreite;
    IPers nAnz_Oben,persnOben;
    IPers nAnz_Seite,persnSeite;
    IPers nAnz_Unten,persnUnten;
    IPers nDeckelhoehe,persnDeckelh;
    IPers nGeschwindigkeit,persGeschw;
  ISignalDi DI10_RobinPaPos,high,RobinPaPos;
  ISignalDI DI10_StöDrehTi,high,IStoerungDreht
  Rechnen;
  Bewegung;
ENDPROC
« Letzte Änderung: 29. August 2018, 16:27:54 von padostms »
  • gefällt mir    Danke

30. August 2018, 11:54:06
Antwort #6
Offline

Hermann


Verstehe das Problem überhaupt nicht, glaube da braucht man eine Glaskugel.
Um welchen Interrupt aus dem Code geht es denn?
Man könnte im Trap das Aktivierungssignal selbst abfragen und wenn es nicht gesetzt ist ohne weitere Aktion wieder zurückspringen.
Edit:
Ausserdem kann man, wenn das Roboterprogramm zwar läuft aber auf eine Freigabe wartet, genausogut auch noch auf das Aktivierungssignal reagieren, dann benötigt man nicht mal einen Interrupt. Bzw. man weiss ja eh schon dass der Roboter in der GS steht.
Warum kompliziert, wenn es auch einfach geht?
« Letzte Änderung: 30. August 2018, 11:59:24 von Hermann »
  • gefällt mir    Danke

30. August 2018, 12:53:31
Antwort #7
Offline

padostms


Hallo Hermann!
Das ist die DatachangeAR.Wenn ich hier die Signal einschreibe bleibt das Roboter stehen solange die Signal nicht kommt.
TRAP DatachangeAR
    TPErase;
    tpwrite "Bitte Warten bis Roboter Fertig ist";
Retourschreiben;
info;
TPWrite "Daten wurden geändert";
Rechnen;
ENDTRAP
Um diese(Alle)
CONNECT persndurchm WITH DatachangeAR;
    CONNECT persnBreite WITH DatachangeAR;
    CONNECT persnOben WITH DatachangeAR;
    CONNECT persnUnten WITH DatachangeAR;
    CONNECT persnSeite WITH DatachangeAR;
    CONNECT persnLagerho WITH DatachangeAR;
    CONNECT persnLagerhu WITH DatachangeAR;
    CONNECT persnDeckelh WITH DatachangeAR;
    CONNECT persGeschw WITH DatachangeAR;
   IPers nlagerdurchmesser, persnDurchm;
    IPers nlagerbreite, persnBreite;
    IPers nAnz_Oben,persnOben;
    IPers nAnz_Seite,persnSeite;
    IPers nAnz_Unten,persnUnten;
    IPers nDeckelhoehe,persnDeckelh;
    IPers nGeschwindigkeit,persGeschw;
Das ist eine Überwachung für Datenänderung.Wird beim PZmain aufgerufen und reagiert nur dann wenn etwas geändert wurde.
Möchte das es nur dann aktiv wird wenn der Roboter im Grundstellung steht.
Danke!
Hoffe so ist besser erklärt.
  • gefällt mir    Danke

31. August 2018, 09:21:48
Antwort #8
Offline

Hermann


Da bringt dann das Abschalten des Interrupts auch nichts, die Daten können dann geändert werden ohne dass es überhaupt gemerkt wird. Der Benutzer kann die Pers Daten jederzeit ändern, auch ohne Grundstellung, aber der Interrupt wird dann halt nicht ausgelöst, und keiner hat's gemerkt :zwink: .

Hoffentlich werden die Daten die da geändert werden nicht direkt im Ablauf verwendet, sondern im UP Rechnen() auf die im Verfahrprogramm benutzten kopiert/umgerechnet. Wenn das nicht der Fall ist, dann sollte es so geändert werden.

Und dann kann man sich die Sache mit den Interrupts komplett sparen. Einfach in der Grundstellung nachdem das Signal für den Produktionsstart kommt die Berechnung ausführen, vorher ggfs. die aktuellen Daten mit den alten Daten vergleichen, um bei Änderungen eine Meldung auszugeben. Fertig.
Keine Interrupts, keine Seiteneffekte, alles schön sequentiell für die meisten Roboterversteher verständlich, und auch nach einem Jahr noch schnell überblickbar.

Wenn man unbedingt mit den Interrupts arbeiten will:
TRAP DatachangeAR
 if not InGrundstellung then
  ! Merker fuer Aenderung, damit man vor dem naechsten Produktionsstart
  ! neu Berechnen und Meldung ausgeben kann
  Datengeaendert:=true;  
  TPErase;
  tpwrite "Bitte Warten bis Roboter Fertig ist";
 else
  Retourschreiben;
  info;
  TPWrite "Daten wurden geändert";
  Rechnen;
 endif
ENDTRAP
Dann im Hauptprogramm noch die neue boolsche Variable "Datengeaendert" auswerten.
  • gefällt mir    Danke

Heute um 18:33:25
Antwort #9

Werbung

Gast

05. September 2018, 17:16:53
Antwort #9
Offline

RoboHans


    VAR intnum intnumR1_Timer_Painting;
    VAR intnum intnumR2_Stop_Timer;
   
    PROC Init_Interrupt_TimerPainting()
        !Interrupt is connected on two Signals.
        IDelete intnumR1_Timer_Painting;
        CONNECT intnumR1_Timer_Painting WITH TRAP_TimerStart;
        ISignalDI Paint,1,intnumR1_Timer_Painting;
       
        IDelete intnumR2_Stop_Timer;
        CONNECT intnumR2_Stop_Timer WITH TRAP_TimerStop;
        ISignalDO simDO_TimerWait,1,intnumR2_Stop_Timer;
       
    ENDPROC
   
    PROC Intr_StartTimer()
        !Befor Paint Routine.
        Init_Interrupt_TimerPainting;
        IWatch intnumR1_Timer_Painting;
        IWatch intnumR2_Stop_Timer;
        RETURN ;
    ENDPROC
    PROC Intr_SleepTimer()
        !After Paint Routine.
        ISleep intnumR1_Timer_Painting;
        ISleep intnumR2_Stop_Timer;
        RETURN ;
    ENDPROC
   
   
    TRAP TRAP_TimerStart
        TimerIsStarted := TRUE;
        ClkStart cTimer{nR1_CyclePart};
    ENDTRAP
   
    TRAP TRAP_TimerStop
        TimerIsStarted := FALSE;
        ClkStop cTimer{nR1_CyclePart};
    ENDTRAP

Ich mach es immer so.
Gestartet und Gestoppt wird der Interrupt mit Eventroutinen. Musst du dir für deine Bedürfnisse zusammenbauen

06. September 2018, 07:16:11
Antwort #10
Offline

padostms


Hi!
Leider werden diesen Daten weiterverarbeitet.Die beeinflussen das Ablauf zb. welche höhe der Roboter fährt.Deswegen ist es wichtig das der Roboter im GS steht und nicht im Bewegung ist.
Würde auch ohne Interrupt machen aber ohne Multitasking würde es nicht gehen oder seid Ihr auf ein andere meinung?
Wäre es auch möglich das ich die Daten vergleiche aber die Berechnung erst später mache(Robi im GS).So könnte die Ablauf nicht beeinflussen und musste die Bediener nicht aufs Robi warten.Hmmmm.
MFG
Tamas
  • gefällt mir    Danke

06. September 2018, 07:58:12
Antwort #11
Offline

Hermann


Das geht doch extrem einfach:

Man hält die Parameter im Prinzip doppelt vor.
Ein Satz, der aktiv ist und mit dem die Bewegungen abgefahren werden.
Der zweite Satz wird vom Bediener geändert, das ist jederzeit möglich und beeinflußt die Bewegungen nicht.
In der GS werden die Parameter die der Benutzer ändern kann auf den aktiven Parametersatz kopiert.
Kein Interrupt, kein Multitasking, die Welt ist nicht so kompliziert wie man häufig denkt.
  • gefällt mir    Danke

06. September 2018, 09:20:46
Antwort #12
Offline

Programmiersklave


Das ist ja jetzt die unrühmliche Fortsetzung von diesem Thread, in welchem schon aufgezeigt wurde, wie man es anders machen könnte. 
Manchmal kommt man an einen Punkt, an dem man sich eingestehen muss, dass man sich verstrickt hat. Dann sollte man nochmal von vorn anfangen, alles andere bringt nichts. Meist ist die Aufgabe dann auch deutlich schneller erledigt als beim ersten Mal.

Grüße,
Michael
  • gefällt mir    Danke

Heute um 18:33:25
Antwort #13

Werbung

Gast

07. September 2018, 15:38:28
Antwort #13
Offline

padostms


Hallo!
Ja Programmiersklave hast eben recht wollte keine neue Tread anfangen und die Sache gehört e dazu.Aber deine meinung ist auch wichtig trotzdem verstehe nicht was dich stört.Wenn des dich so stört dann kannst es einfach ignorieren.
Möchte für diese Projekt so viel Informationen ,variationen sammeln wie es geht.
Danke
Tamas
« Letzte Änderung: 07. September 2018, 16:14:03 von padostms »

10. September 2018, 08:31:08
Antwort #14
Offline

Programmiersklave


Och nööööö. Mich stört da nix, nur dass jetzt andere Leute alles nochmal erfinden, was schon mal erfunden wurde.

Grüße,
Michael


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