melderz de
TRANSCRIPT
-
8/17/2019 Melderz De
1/8
-
8/17/2019 Melderz De
2/8
02.97.01 So/Al/20/KRLMeldErzeug de 2
Inhaltsverzeichnis
1 Programmieren von Anwendermeldungen 3. . . . . . . . . . . . . . . . . . . .1.1 Begriffsbestimmung 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.1.1 Hinweismeldungen 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.1.2 Zustandsmeldungen 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.1.3 Quittierungsmeldungen 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.1.4 Dialoganfragen 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.1.5 Simulation 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2 Anwendung 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2.1 Hinweismeldungen 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2.2 Zustandsmeldungen 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2.3 Quittierungsmeldungen 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2.4 Dialoganfragen 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.2.5 Simulation 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.3 Beispielprogramm“MSG_DEMO.SRC” 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.4 Variablen und Deklarationen 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
-
8/17/2019 Melderz De
3/8
02.97.01 So/Al/20/KRLMeldErzeug de 3
1 Programmierenvon AnwendermeldungenInnerhalbvon Anwenderprogrammen und Technologiepaketen (KRL) bestehtdie Möglich-
keitfreidefinierbareMeldungenzurAnzeige auf demKCP zu bringen. Grundsätzlich kannmanhierzwischenHinweismeldungen,Zustandsmeldungen,QuittungsmeldungenundDia-loganfragen unterscheiden. Wichtigster Bestandteil ist hierfür eine standardisierteSchnitt-stelle zwischen Grundsystem und Bedienoberfläche. Die jeweils unterschiedlichen Mel-dungstypen erfordern spezifische Handhabung, wobei darüber hinaus noch zwischenMeldungen mit Datenbankzugriff (TECH--Pakete) und einfachen User--Meldungen ohneDatenbankzugriff unterschieden wird.Für Inbetriebnahme und Testzwecke, steht mitder sogenannten Simulation einMechanis-mus zur Verfügung, der es erlaubt logische Ausdrücke durch UND--Verknüpfung mit einerdirektvonderBedienoberflächesteuerbarenVariablezusimulieren.Sinnvolleinsetzenkannman diesen Mechanismus vor allemin Schleifenabruchbedingungen.
1.1 Begriffsbestimmung
1.1.1 HinweismeldungenEinfachsteArtvonMeldungendielediglichInformationscharakterbesitzen.DieAbarbeitungdes laufendenAnwenderprogramms wirdnichtunterbrochen. DieMeldungen müssen nichtquittiertwerden.Denkbar istauchderenEinsatz fürProgrammfortschrittsanzeigen ineinemspeziellen Fenster der BOF. Hinweismeldungen lassen sich von der KRL--Ebene nicht lö-schen.
1.1.2 ZustandsmeldungenZustandsmeldungenbesitzenInformationscharakterundwerdenquasi automatischzurück-genommen. Die Abarbeitungdes laufenden Anwenderprogramms kannbedingt unterbro-chen werden.Zustandsmeldungen sind nicht quittierbar, sie müssen vom Verursacher (Anwenderpro-gramm) explizitgelöscht werden. Es kannjeweils nur eine aktive Meldung abgesetzt wer-den.
1.1.3 QuittierungsmeldungenQuittierungsmeldungenzeigenStörungendes Programmfortschrittes an. Erstnachexplizi-tem Quittieren der anstehenden Meldung kann der Programmlauf fortgesetzt werden. Mitder Quittierung wirddie Aktive Meldung automatisch gelöscht.
1.1.4 DialoganfragenÜberDialoganfragenwirdderBedieneraufgefordertzwischenfreidefinierbarenAlternativenauszuwählen. Das Ergebnis der Bedienereingabe wirdin einer entsprechenden KRL-- Va--riablehinterlegt. Mitder Bedienereingabe wirdderDialogautomatischgeschlossen undderzuvor unterbrochene Programmlauf fortgesetzt.
1.1.5 SimulationIn Analogie zuder bekanntenSimulationstaste beiWAIT FOR-- Anweisungen wirdautoma-tisch dieSimulationstastezurAnzeige gebracht.Das Drückender SimulationstastebewirktdasLöschenderkorrespondierendenMeldungundläßteineentsprechendebool’scheKRL--Variable aufFALSE abfallen. DerProgrammablauf wirdnichtunterbrochen. DieSimulationkann zumgezielten Verlassen von Schleifen eingesetzt werden.
-
8/17/2019 Melderz De
4/8
02.97.01 So/Al/20/KRLMeldErzeug de 4
1.2 AnwendungDie Schnittstelle zwischenKRL--Anwenderprogrammund Bedienoberfläche wirddurchdiesogenannte MSG--Struktur repräsentiert. Um allen, der möglichen Einsatzfälle gerecht zuwerden, ist die MSG--Struktur als rechtkomplexes Gebilde angelegt.STRUC MSG_T
BOOL VALID
FeuertdieMeldungab(TRUE). J e nachMeldungstypwirdVALID unterschiedlichbehandelt. (siehe 1.1.1 bis 1.1.4)
BOOL RELEASE
veranlaßt das Löscheneiner ZustandsmeldungMSG_TYP TYP,
Definition des Meldungstypsgültige Werte: #NOTIFY Hinweismeldung
#STATE Zustandsmeldung#QUIT Quittierungsmeldung#DIALOG Dialoganfrage
CHAR MODUL[12]
Textvariable die einen eindeutigenModulbezeichner (Mo--dulschlüssel) enthält, welcherdemDatenbankzugriffdient.IstMODUL einLeerstringsowirdKEY als Meldungstextin--terpretiert . Wenn KEY einemPlatzhalter für PARAM ent--hältwerden beide verknüpft. IstModulnichtleerund inderDatenbank kann kein Eintragmit entsprechendemSchlüsssel gefunden werden , dannwird KEY als Mel--dungstextausgegeben, wobei KEY nichtmit einemPara--meter verknüpft werdenkann.
CHAR KEY[40]
Textvariable die einen eindeutigenSchlüssel zumMel--dungstextderDatenbankenthält. IstMODUL einLeerstringoder MODUL wird in der Datenbank nicht gefunden, wirddies imMeldungsfenster unter Verursacher angezeigt undder KEY direkt als Meldungstext interpretiert.
MSG_PRM_TYP PARAM_TYP
Typ -- Definition vonPARAMgültige Werte: # VALUE Zahlenwertoder Text
ohne Datenbankzugriff.PARAM wird direktmitdemKey verknüpft.
#WORDS $MSG.PARAM[] wird ig--noriert
#KEY Datenbankschlüssel,existiertkein entspre--chender Eintrag im“MO--DUL”wirdder Schlüsselals Parameterstringüber--nommen
CHAR PARAM[20]
zusätzlicher Parameter der mit demeigentlichen Mel--dungstextverknüpft zur Anzeige gebracht wird. Der Inhaltvon PARAM wird in Abhängigkeit von PARAM_TYP inter--pretiert.
-
8/17/2019 Melderz De
5/8
02.97.01 So/Al/20/KRLMeldErzeug de 5
CHAR DLG_FORMAT[70]
Formatstringder bei Dialoganfragen die Beschriftung derSoftkeys definiert. DieeinzelnenSoftkeys werdendurch“|”voneinander getrennt. Es könnenmaximal 7 Softkeys belegtwerden. J ederSoftkeyrepräsentiertdabei einemögli--che Dialogantwort. Es ist darauf zu achten, daß die Be--schriftung jedes einzelnen Softkeys nicht länger als ca.10Zeichen ist und nur die jeweils benötigte Anzahl Softkeysdefiniertwird. DiemöglichenAntwortensollteneinensinn--vollen Zusammenhang mit demMeldungstextergeben.z.B.: MSG.MODUL=”BAUTEIL1.SRC ”
MSG.KEY=”Wiederholen?”MSG.DLG_FORMAT=”J a|Nein”
Dieso definiertenSoftkeys werdendynamischinderSoft--keyleiste an jeweils freienPositionen eingereiht.
INT ANSWER Liefertdas ErgebniseinerDialoganfrage.Derzurückgelie--ferte Wertgibtan welcher Softkey gedrücktwurde. DieZählungergibt sichbei aufsteigenderReihenfolgeausdenFormatstringDLG_FORMAT, wobei die Zählungmit1be--ginnt. In Anlehnungandas vorhergehendeBeispiel würdedas Drückendes Softkeys “Nein”ANSWER =2zurücklie--fern.
Standardvorbesetzung der MSG--Struktur:
DECL MSG_T $MSG_T= { VALID FALSE, RELEA SE FALSE ,TYP #NO TIFY, MODUL[] ” ”, KEY[] ” ”,PARAM_TYP #VALUE, PARAM[] ” ”, DLG_FORMAT[] ” ”, ANSWER }
DerSimulationsmechanismuskommtmiteinersehreinfachenSchnittstelleaus,dieüberfol-gende globale Variablen realisiert ist.
BOOL $LOOP_CONT
Simulationsergebnis das als Schleifenabbruchbedingungeingesetztwerdenkann. $LOOP_CONT fälltauf den WertFALSE ab, sobald die Simulationstaste gedrückt wurde.Muß auf den WertTRUE geschaltetwerden bevor mittels$LOOP_MSG gefeuertwird.
CHAR $LOOP_MSG[60]
Feuert die Simulation sobaldder Wertungleich Leerstringist und bringt den enthaltenen Textsowie dieSimulations--taste zur Anzeige.
Muß auf Leerstringzurück gesetztwerden umdieSimula--tion zu beenden.
GrundsätzlicheerfordertjedeArtvonMeldungundderSimulationsmechanismus eine spe-zifischeAbfolgeimAnwenderprogramm(Handshake). IndenPunkten1.1.1 -- 1.1.5istdiesezeitliche Abfolge dargestellt.
1.2.1 Hinweismeldungen
(1) $MSG_T--Struktur füllen;
(2) Feuern indem$MSG_T.VALID =TRUE gesetzt wird;
(3) Meldung wird nun angezeigt;(4) Warten $MSG_T.VALID==FALSE(5) weiter mitnächster Meldung
-
8/17/2019 Melderz De
6/8
02.97.01 So/Al/20/KRLMeldErzeug de 6
1.2.2 Zustandsmeldungen(1) $MSG_T--Struktur füllen;(2) $MSG_T.RELEASE =FALSE setzen;
(3) Feuern indem$MSG_T.VALID =TRUE gesetzt wird;(4) Zustandsmeldungwird nun angezeigt;G
G
G
(5) Zustandsmeldungwieder Löschen indem$MSG_T.RELEASE=TRUE gesetzt wird;(6) Meldung istnicht mehr sichtbar;(7) Warten auf $MSG_T.VALID==FALSE ;(8) Weiter mitnächster Meldung;
1.2.3 Quittierungsmeldungen(1) $MSG_T--Struktur füllen;(2) Programmlauf stoppen(3) Feuern indem$MSG_T.VALID =TRUE gesetzt wird;(4) Quittierungsmeldung wirdnun angezeigt;G
G
G
(5) QuittierungsmeldungkannbeiBedarfgelöschtindem$MSG_T.RELEASE=TRUE ge-setzt wird;
(6) Wenn der Bediener die Meldung quittiert wird $MSG_T.VALID automatisch auf FALSE zurück gesetzt;
(7) Sobald$MSG_T.VALIDaufFALSE gehtkannmitdemProgrammlauffortgesetztwer-den;
(8) Weiter mitnächster Meldung;
1.2.4 Dialoganfragen
(1) Programmlauf stoppen(2) $MSG_T--Struktur füllen;n(3) Feuern indem$MSG_T.VALID =TRUE gesetzt wird;(4) Dialoganfrage wird nun angezeigt;G
G
G
(5) Dialoganfrage kann bei Bedarf gelöscht werden indemMSG.RELEASE=TRUE ge-setzt wird;
(6) Wenn der Bediener die Meldung quittiert wird $MSG_T.VALID und $MSG_T.REA-LEASE automatischauf FALSE zurück gesetzt;
(7) Sobald $MSG_T.VALID auf FALSE geht kann das Ergebnis der Anfrage in
-
8/17/2019 Melderz De
7/8
02.97.01 So/Al/20/KRLMeldErzeug de 7
$MSG_T.ANSWER abgeholt und mit demProgrammlauf fortgesetzt werden;(8) Weiter mitnächster Meldung;
1.2.5 Simulation(1) $LOOP_CONT=TRUE setzen;(2) Feuern indem$LOOP_MSG=”Meldungstext”gesetzt wird;(3) Simulationstaste und Meldungstext werden nun angezeigt;(4) Simulation kann aktivbeendetwerden indem$LOOP_MSG[] =”“gesetzt wird;G
G
G
(5) Sobaldder Anwender die Simulationstaste betätigtwird$LOOP_CONT automatischauf FALSE gesetzt.
(6) Simulation beendenindem$LOOP_MESSAGE[]mitLEERZEICHEN aufgefülltwird.(7) Simulationsmeldungund Softkey ”SIMULATION”werden nicht mehr angezeigt.(8) Weiter mitnächster Simulation oder Meldung;
1.3 Beispielprogramm“MSG_DEMO.SRC”
DECL INT ANSWER
DECL INT OFFSET
DECL STATE_T STATE
DECL MSG_T EMPTY_MSG EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] ” ”,KEY[] ” ”,PARAM_T YP #VALUE,PARAM[] ” ”,DLG_FORM AT[] ” ”,ANSWE R 0}
;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --QUIT TIE RUN GSMELD UN G -- -- -- -- -- -- -- -- -- --
$MSG_T= EMPTY _MSG ;Reinitialisierung
$MSG_T.MODUL[]=” ”
$MSG_T.KEY[]=”DEMO : QUIT --MESS AGE + % 1”
$MSG_T.PARAM[]=”PARAM”
$MSG_T.PARAM_TYP=#WORDS
$MSG_T.TYP=#QUIT $MSG_T.VALID=TRUE ;feuern
WHILE $MSG_T.VALID ;auf Quittierung warten
WAIT SEC 0.05
ENDWHILE
;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --DIALO GANFRA GE -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
$MSG_T= EMPTY _MSG ;Reinitialisierung
$MSG_T.MODUL[]=” ”
$MSG_T.KEY[]=”DEMO: DIALOG + %1”
$MSG_T.PARAM[]=”PARAM”
$MSG_T.PARAM_TYP=#KEY
$MSG_T.TYP=#DIALOG
-
8/17/2019 Melderz De
8/8
02.97.01 So/Al/20/KRLMeldErzeug de 8
$MSG_T.DLG_FORMAT[]=”A|B|C”
$MSG_T.VALID=TRUE ;feuern
WHILE $MSG_T.VALID ;auf Beantwortung warten
WAIT SEC 0.05
ENDWHILE
ANSWER=$MSG_T.ANSWER
;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --HINWEISMELD UNG -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
$MSG_T= EMPTY _MSG ;Reinitialisierung
$MSG_T.MODUL[]=” ”
$MSG_T.KEY[]=”DEMO: DIALOG ANSWER = %1” ;”%1” symbolisiert einen Platzhalter fuer den Parameterstring
OFFSET=0
SWRITE($MSG_T.PARAM[],STATE,OFFSET,”%d”,ANSWER)
;formatierte Ausgabe der vorhergehenden
;Dialogantwort in den Parameterstring
$MSG_T.PARAM_TYP=#VALUE ;warten um Meldung sicher zu Anzeige zu bringen
$MSG_T.VALID=TRUE ;feuern
WHILE $MSG_T.VALID
WAIT SEC 0.05
ENDWHILE
;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- SIM UL ATIO N-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
$LO OP_C ON T= TRU E ;Vorbesetzung
$LOOP_M SG[]=”HALLO ich die SIMULATION von $IN[10] !” ;feuern
WHILE $LOOP_CONT or $IN[10] ;Simulation der Abruchbedingung $IN[10]==TRUE
ENDWHILE
$LOOP_MSG[]=” ”
EN D
1.4 Variablen und Deklarationen
Implementiert in $operate.datund$option.datauf Steuerungsebene.ENUM MSG_TYP NOTIFY, STATE, QUIT, DIALOG
ENUM MSG_PRM_TYP VALUE, WORDS, KEY
STRUC MSG_T BOOL VALID, BOOL RELEASE, MSG_TYP TYP, CHAR MODUL[12],CHAR KEY[40], MSG_PRM_TYP PARAM_TYP, CHAR PARAM[20], CHAR DLG_FOR- MAT[70], INT ANSWER
DECL MSG_T $MSG_T={ VALID FALSE, RELEASE FALSE, TYP #NOTIFY, MODUL[] ” ”, KEY[] ” ”, PARAM_TYP #VALUE, PARAM[] ” ”, DLG_FO RMAT[] ” ”, ANSW ER 0, }
BOOL $LOOP_CONT=FALSE
CHAR $LOOP_MSG[60] 1