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.:
$MSG_T.TYP=#STATE
WAIT SEC 0.2
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.
Hier also meine Version der MSG_DEMO.src. Wäre cool zu wissen ob das auch bei anderen funktioniert.
&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
Alles anzeigen