Findet man hier: http://www.roboterforum.de/rob….0.html;msg35160#msg35160
-
-
Hallo allerseits.
Ich glaube eine einfache, saubere und definitive Lösung zum Problem gefunden zu haben. Zumindest funktioniert sie an meiner KRC1 (v4.1.7 SP08) tadellos. Die Lösung mit dem COUNTER hat bei mir nämlich gar nichts gebracht. Das Programm ist damit einfach nur endlos in der Zählerschleife gelaufen, da $MSG_T.VALID auch nach x Aufrufen der Meldung nie FALSE wurde.
Was aber bei mir geholfen hat, ist einfach ein WAIT SEC 0.2 hinter dem Setzen des Meldungstyps. Also z.B.:
Zusätzlich solltet ihr bei Statusmeldungen ein WAIT SEC 0.5 hinter $MSG_T.RELEASE=TRUE setzen, denn meiner Analyse nach bleibt das Programm immer dann in der WHILE-Schleife hängen, wenn der Release einer Statusmeldung nicht geklappt hat oder einfach im Programm fehlt. Dies erkennt man daran, dass die Statusmeldung im Meldungsfenster nicht verschwindet wenn sie sollte. Die Wartezeit hinter dem Release verringert die Häufigkeit mit der das Release ausfällt. Sollte es dennoch passieren löst die Wartezeit hinter $MSG_T.TYP das Problem.
Auf die Lösung bin ich gekommen, weil mir aufgefallen ist, dass die original MSG_DEMO.src aus dem TP-Verzeichnis in der Ablaufart "Inkremental Step" einwandfrei lief. In den anderen Ablaufarten dagegen funktionierte das Programm nicht zuverlässig. Ich schlussfolgerte, dass der Steuerung irgendein Schritt zu schnell ging und setzte einfach hinter jede Zeile ein WAIT SEC 0.2 und siehe da das Problem war gelöst. Anschließend habe ich die Wartezeiten Schritt für Schritt wieder entfernt und beim $MSG_T.TYP tauchte das Problem wieder auf.
Dann hat in einem anderen Thread noch einer berichtet, dass seine Statusmeldungen nicht verschwunden sind, was bei mir auch der Fall war. Das konnte ja nur auf einen fehlenden Release zurückzuführen sein.
Hier also meine Version der MSG_DEMO.src. Wäre cool zu wissen ob das auch bei anderen funktioniert.
Code
Alles anzeigen&ACCESS RVP &COMMENT Example on user messages DEF msg_demo_vLoulli( ) DECL INT ANSWER, OFFSET DECL STATE_T STATE DECL MSG_T EMPTY_MSG ;---------------------Acknowledgement-Message---------- ;The programm is stopped until this message is acknowledged over the softkeys. EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] " ",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[] " ",ANSWER 0} $MSG_T=EMPTY_MSG $MSG_T.KEY[]="DEMO1: Acknowledgement%1" ;%1 will be replaced by $MSG_T.PARAM[] $MSG_T.PARAM[]="-Message" $MSG_T.PARAM_TYP=#VALUE $MSG_T.TYP=#QUIT WAIT SEC 0.2 ;mandatory to solve a bug with unreleased status messages $MSG_T.VALID=TRUE WHILE $MSG_T.VALID WAIT SEC 0.05 ENDWHILE ;---------------------Status-Message---------- ;This message should disappear after it is released. EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] " ",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[] " ",ANSWER 0} $MSG_T=EMPTY_MSG $MSG_T.KEY[]="DEMO2: Status-Message" $MSG_T.TYP=#STATE WAIT SEC 0.2 ;mandatory to solve a bug with unreleased status messages $MSG_T.VALID=TRUE WAIT SEC 4 ;the status-message should disappear after this delay $MSG_T.RELEASE=TRUE WAIT SEC 0.5 ;mandatory to help reducing a bug with unreleased status messages ;-------------------Dialog-Query---------------- ;This message allows user reply over the softkeys. EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] " ",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[] " ",ANSWER 0} $MSG_T=EMPTY_MSG $MSG_T.KEY[]="DEMO3: DIALOG-Message, Please choose one of the below options:" $MSG_T.DLG_FORMAT[]="A|B|C" $MSG_T.TYP=#DIALOG WAIT SEC 0.2 ;mandatory to solve a bug with unreleased status messages $MSG_T.VALID=TRUE WHILE ($MSG_T.VALID==TRUE) WAIT SEC 0.05 ENDWHILE ANSWER=$MSG_T.ANSWER ;---------------------Notification-Message---------- ;This message is displayed until it is acknowledged but the programm is not stopped. EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] " ",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[] " ",ANSWER 0} $MSG_T=EMPTY_MSG OFFSET=0 ;SWRITE converts ANSWER to a string and represents also an alternative to using $MSG_T.PARAM[] SWRITE($MSG_T.KEY[],STATE,OFFSET,"DEMO4: Notification, The previously chosen option was number: %d",ANSWER) $MSG_T.TYP=#NOTIFY WAIT SEC 0.2 ;mandatory to solve a bug with unreleased status messages $MSG_T.VALID=TRUE END
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