Roboterprofis für Ihren Erfolg
Roboterprogrammierer auf Stundenbasis engagieren
jetzt Preise und verfügbare Roboterprogrammierer anfragen

Autor Thema:  Problem mit "$MSG_T.VALID"  (Gelesen 4634 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

mhuebn

  • Gast
Problem mit "$MSG_T.VALID"
« am: 27. Januar 2005, 09:37:05 »
Hallo zusammen,
 ich habe ein Problem mit der Nachrichtenfunktion von KRL.
 
 Von Zeit zu Zeit bleibt das Programm in folgender Schleife hängen:
  WHILE $MSG_T.VALID == TRUE
 WAIT sec 0.05
 ENDWHILE  
Kann mir da vieleicht jemand weiterhelfen?
 
 Danke, M. Hübner
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline waldbauernbua

  • fünfter Post
  • *
  • Beiträge: 5
  • Bewertet: 0
Re: Problem mit "$MSG_T.VALID"
« am: 28. Januar 2005, 18:57:16 »
Hi, das Problem müßte vom Vorlaufzeiger kommen, Verlängere einfach die Wartezeit.
 wait sec 0,5
 oder evtl. höher
 
 Gruß
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline elias

  • Forum Mitglied LV 6
  • *
  • Beiträge: 51
  • Bewertet: 0
Re: Problem mit "$MSG_T.VALID"
« am: 31. Januar 2005, 13:22:41 »
Hallo, ich hatte das Problem auch schon öfter, bei mir hat dass, mit der Zeit hochsetzen nichts gebracht. Ich hab $MSG_T.VALID dann immer von Hand auf True gesetzt damit war das Problem wieder behoben. Alerdings wüsste ich auch mal gerne was da die Ursache ist.
 mfg elias
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
IF ROBOTER_STEHT AND SPS_VORHANDEN THEN
   WHILE NOT ROBOTER_LAEUFT
      $LOOP_MSG[]="SPS IST SCHULD!"
   ENDWHILE
   $LOOP_MSG[]="                              "
ENDIF

Geld ohne Arbeit! Keine Arbeit ohne Geld!

Offline Hermann

  • Forum Legende LV 2
  • *
  • Beiträge: 1394
  • Bewertet: +61
Re: Problem mit "$MSG_T.VALID"
« am: 06. Februar 2005, 18:32:14 »
Das Problem ist auch bei Kuka bekannt, denn im Beispiel von Kuka sieht das so aus:
 
 COUNTER=0
 WHILE  (($MSG_T.VALID==TRUE) AND (COUNTER<20))
 ;because sometimes valid does not change to false
 COUNTER=COUNTER+1
 WAIT SEC 0.2
 ENDWHILE
 WAIT SEC 0.2
 IF COUNTER>=20 THEN
 GOTO NOCHM
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

mhuebn

  • Gast
Re: Problem mit "$MSG_T.VALID"
« am: 07. Februar 2005, 12:14:32 »
Wo ist
  :NOCHM  ?
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Hermann

  • Forum Legende LV 2
  • *
  • Beiträge: 1394
  • Bewertet: +61
Re: Problem mit "$MSG_T.VALID"
« am: 07. Februar 2005, 23:32:54 »
Sorry, dachte das wäre klar:
 Halt ganz am Anfang der Ausgaberoutine. wichtig ist dass
 danach zuerst mal $MSG_T.Valid auf false gesetzt wird.
 Also ungefähr so:
 DEF  MSGTXT (NR :IN)
 DECL INT NR
 
 DECL INT ANSWER
 DECL INT COUNTER
 DECL INT OFFSET
 DECL STATE_T STATE
 DECL MSG_T EMPTY_MSG
 DECL INT I
 
 NOCHM:
 
 EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] " ",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[] " ",ANSWER 0}
 
 $MSG_T.VALID=FALSE
 $MSG_T=EMPTY_MSG
 $MSG_T.MODUL[]=" "
 
 ;copy input-string, to make sure, that .key gets 40 characters
 FOR I=1 TO  58
 $MSG_T.KEY=ERR_TEXT[NR].TEXT
 ENDFOR
 
 
 $msg_t.param[]="  "
 
 $MSG_T.KEY[59]=" "
 $MSG_T.KEY[60]=" "
 $MSG_T.PARAM_TYP=#VALUE
 $MSG_T.VALID=TRUE
 
 COUNTER=0
 WHILE  (($MSG_T.VALID==TRUE) AND (COUNTER<20))
 ;because sometimes valid does not change to false (KUKA-Live !!)
 COUNTER=COUNTER+1
 WAIT SEC 0.2
 ENDWHILE
 WAIT SEC 0.2
 
 IF COUNTER>=20 THEN
 GOTO NOCHM
 ENDIF
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline elias

  • Forum Mitglied LV 6
  • *
  • Beiträge: 51
  • Bewertet: 0
Re: Problem mit "$MSG_T.VALID"
« am: 08. Februar 2005, 11:01:43 »
Danke!!!!
 mffg elias
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
IF ROBOTER_STEHT AND SPS_VORHANDEN THEN
   WHILE NOT ROBOTER_LAEUFT
      $LOOP_MSG[]="SPS IST SCHULD!"
   ENDWHILE
   $LOOP_MSG[]="                              "
ENDIF

Geld ohne Arbeit! Keine Arbeit ohne Geld!

Offline iRobot

  • Forum Mitglied LV 8
  • *
  • Beiträge: 76
  • Bewertet: 0
Re: Problem mit \
« am: 28. Februar 2011, 08:40:24 »
Hallo,

der Thread ist nun schon ein wenig älter, dennoch ist das Thema aktuell.
 
Ich habe ähnliche Probleme mit der Meldungsausgabe. Ist die Wartezeit in der Schleife zu gering oder werden kurz hintereinander Meldungen ausgegeben, so kommt es vor, dass die Variable $MSG_T.VALID nicht mehr auf FALSE zurück fällt. Daher habe ich mir im sps.sub eine kleine Routine geschrieben und wollte fragen, ob das jemand schon so gelöst hat bzw. ob das auf diesem Wege zulässig ist. Die SW-Version ist 5.2.19 auf einem KRC2.

        ;***************************************
        ; $MSG_T.VALID Fehler korrigieren
        ;***************************************
        IF ($MSG_T.VALID == TRUE) THEN
            IF ($TIMER_STOP[2] == TRUE) THEN
                $TIMER_STOP[2] = FALSE
            ENDIF
           
            IF ($TIMER[2] > 1000) THEN
                $MSG_T.VALID = FALSE
                $TIMER_STOP[2] = TRUE
                $TIMER[2] = 0
            ENDIF
        ENDIF

Wird eine Meldung ausgegeben und fällt der Wert der Variable $MSG_T.VALID nicht innerhalb einer Sekunde auf FALSE, wird der Wert von sps.sub auf FALSE gesetzt. Syntaxfehler gabs keine, ausprobieren konnte ich es allerdings auch noch nicht. Evtl. hat da jemand Erfahrung mit gemacht.

Gruß
iRobot
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
Never argue with an idiot. He will lower you to his level and beat you with experience. - Bob Smith

Ich leide nicht an Realitätsverlust... ich genieße ihn.

Tilman

  • Gast
Re: Problem mit \
« am: 28. Februar 2011, 09:28:03 »
Hallo iRobot,

Deine Lösung beinhaltet folgende Probleme  :denk::

1) Wenn es sich um eine Quittierungsmeldung oder eine Dialoganfrage handelt, wird ja $MSG_T.VALID auf FALSE gesetzt, um anzuzeigen, daß die Meldung quittiert wurde. Dein Programm macht das dann automatisch...

2) Angenommen, daß bei einer Hinweismeldung das automatische Zurücksetzen funktioniert. Na, dann rattert Dein Timer trotzdem weiter :cry:. Und bei der nächsten Meldung, setzt er VALID sofort auf FALSE.

Also, Idee interessant, die Programmierung sollte verbessert werden.

Viele Grüße,
Tilman/Frankreich
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline iRobot

  • Forum Mitglied LV 8
  • *
  • Beiträge: 76
  • Bewertet: 0
Re: Problem mit \
« am: 28. Februar 2011, 13:21:41 »
Hi Tilman,

zu 1) sollte kein Problem, da ich keine Quittierung benötige. Das sind lediglich Statusmeldungen, die in einem externen Programm abgespeichert werden. Also kein Problem, wenn die Meldung direkt wegquittiert wird.

zu 2) Ich habe den Code dahingehend angepasst, dass ein Umschalten der Variablen auf FALSE innerhalb der IF-Abfrage abgefangen wird und der Timer nicht bis zum Nimmerleinstag weiterläuft. Entweder schafft es die Systemsoftware den Wert auf FALSE zu setzen, dann wird der Timer gestoppt und resettet. Oder der Timer läuft ab, da es die Systemsoftware nicht schafft, und setzt die Variable zurück und dann wird der Timer resettet.

        ;***************************************
        ; $MSG_T.VALID Fehler korrigieren
        ;***************************************
        IF ($MSG_T.VALID == TRUE) THEN
            IF ($TIMER_STOP[2] == TRUE) THEN
                $TIMER_STOP[2] = FALSE
            ENDIF
           
            IF ($TIMER[2] > 1000) THEN
                $MSG_T.VALID = FALSE
            ENDIF
           
            IF ($MSG_T.VALID == FALSE) THEN
                $TIMER_STOP[2] = TRUE
                $TIMER[2] = 0
            ENDIF
        ENDIF
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
Never argue with an idiot. He will lower you to his level and beat you with experience. - Bob Smith

Ich leide nicht an Realitätsverlust... ich genieße ihn.

Tilman

  • Gast
Re: Problem mit \
« am: 28. Februar 2011, 13:36:59 »
Hallo iRobot,

Du schreibst folgendes:

IF ($MSG_T.VALID == TRUE) THEN

               ...

IF ($MSG_T.VALID == FALSE) THEN
....
ENDIF

ENDIF

Hatten gerade eine lustige Diskussion darüber, ob das überhaupt möglich ist... Ich glaube aber, daß es nicht das ist, was Du willst. Also, die innere Verschachtlung gehört vor/hinter den ersten Test.

Viele Grüße,
Tilman
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Tilman

  • Gast
Re: Problem mit \
« am: 28. Februar 2011, 14:14:09 »
Guck mal! So könnte man das machen.

IF NOT $MSG_T.VALID THEN                 ;zeit initialisieren
 $TIMER[2]=-1000
ENDIF
$TIMER_STOP[2]=NOT $MSG_T.VALID   ;timer on waehrend valid==true
IF $TIMER_FLAG[2] THEN                     ;nach 1s, valid zuruecksetzen
 $MSG_T.VALID=FALSE
ENDIF

Anmerkung: den Timer könnte man auch die ganze Zeit rattern lassen. Oder man könnte zusätzlich die Bedingung stellen, daß der Typ der Message #NOTIFY ist...

Ob das wirklich Sinn macht (die Lösung von Hermann funktioniert ja), steht auf einem anderen Blatt...

Viele Grüße,
Tilman/Frankreich
« Letzte Änderung: 28. Februar 2011, 14:35:08 von Tilman »
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline iRobot

  • Forum Mitglied LV 8
  • *
  • Beiträge: 76
  • Bewertet: 0
Re: Problem mit \
« am: 28. Februar 2011, 14:38:59 »
Du bist mir mit der zweiten Antwort zuvor gekommen  :uglyhammer_2:

Warum sollte das nicht möglich sein? Wenn ich in die äußere IF-Abfrage reinkomme und mein Timer ist größer als 1000, dann setzt er mir die Variable auf FALSE und dann gelange ich in den inneren zweiten Zweig wo der Timer resettet wird. Das einzige Problem dabei ist, wenn mir die Variable außerhalb der IF-Abfrage vom System zurück gesetzt wird, da gebe ich Dir Recht.

Mögliche Konstellationen:

1. Die Variable ist zu Beginn des Programmblocks FALSE => der Block wird übersprungen.
2. Die Variable ist zu Beginn des Programmblocks TRUE => der Block wird betreten, der Timer gestartet, sonst passiert erstmal nichts. Beim nächsten Mal ist die Variable immer noch TRUE, der Block wird wieder betreten, der Timer ist evtl. immer noch nicht so weit. Es passiert wieder nichts. Beim nächsten Mal wird wieder der Block betreten, der Timer hat den Wert überschritten, die Variable wird auf FALSE gesetzt und der Timer dadurch resettet.

JETZT PROBLEM:
3. Die Variable ist TRUE, der Block wird betreten, der Timer gestartet. Die Variable wird außerhalb der IF-Abfrage auf FALSE gesetzt: der Block wird nicht mehr betreten und der Timer läuft weiter.

Ich habe wie von Dir empfohlen die Abfrage hinter den Block gesetzt, damit sollte eigentlich alles erschlagen sein. Dann wird er zwar ständig den Timer stoppen und resetten wollen wenn die Variable FALSE ist, allerdings sollte das ja kein Problem sein.

        ;***************************************
        ; $MSG_T.VALID Fehler korrigieren
        ;***************************************
        IF ($MSG_T.VALID == TRUE) THEN
            IF ($TIMER_STOP[2] == TRUE) THEN
                $TIMER_STOP[2] = FALSE
            ENDIF
           
            IF ($TIMER[2] > 1000) THEN
                $MSG_T.VALID = FALSE
            ENDIF
        ENDIF
       
        IF ($MSG_T.VALID == FALSE) THEN
            $TIMER_STOP[2] = TRUE
            $TIMER[2] = 0
        ENDIF

Besten Dank schon mal  :biggrins:
iRobot
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
Never argue with an idiot. He will lower you to his level and beat you with experience. - Bob Smith

Ich leide nicht an Realitätsverlust... ich genieße ihn.

Offline iRobot

  • Forum Mitglied LV 8
  • *
  • Beiträge: 76
  • Bewertet: 0
Re: Problem mit \
« am: 28. Februar 2011, 14:57:25 »

Nein, Sinn würde es machen wenn der Mechanismus funktioniert und man sich über sowas keine Gedanken machen müsste  :mrgreen:
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
Never argue with an idiot. He will lower you to his level and beat you with experience. - Bob Smith

Ich leide nicht an Realitätsverlust... ich genieße ihn.

Offline Twister

  • Forum Mitglied LV 15
  • *
  • Beiträge: 193
  • Bewertet: +2
Re: Problem mit \
« am: 28. Februar 2011, 20:39:33 »
Hallo,

wieso machst es nicht so?
Einfach im Hauptprogramm. Du wills es sowieso automatisch quittieren.

IF $MSG_T.VALID THEN
  WAIT SEC 1.0
  $MSG_T.VALID = FALSE
ENDIF

Gruß
Twister
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert
Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...


xx
Problem mit $MSG_T Message

Begonnen von HarryH

8 Antworten
2805 Aufrufe
Letzter Beitrag 03. April 2008, 08:06:51
von LindePaul
xx
Meldungen $MSG_T auch unter KRC4 läuffähig???

Begonnen von HarryH

2 Antworten
1292 Aufrufe
Letzter Beitrag 26. März 2012, 08:41:08
von Programmiersklave
xx
Justage Problem !!Mastering Problem.!!

Begonnen von bipinpaul

8 Antworten
2271 Aufrufe
Letzter Beitrag 03. Juli 2007, 08:24:33
von bipinpaul
xx
Problem bei dem von PTP zum LIN

Begonnen von mkilber

9 Antworten
2526 Aufrufe
Letzter Beitrag 14. April 2008, 09:55:04
von StefanW
xx
Problem bei Signalvereinbarung

Begonnen von Maschinenfütterer

9 Antworten
1235 Aufrufe
Letzter Beitrag 30. November 2010, 10:26:11
von Stethi
 

über das Roboterforum

Nutzungsbedingungen Impressum
Sitemap