Zustandsmeldung

  • Hi ich habe bei mir im weiteren Submit paar zustandsmeldungen Programmiert!


    Es funktioniert alles wie es soll. Allerdings wird mir durch die Repeat- Until Schleife nur einen zustand Angezeigt.


    Ziel soll sein alle möglichen zustände Anzuzeigen. Wenn ein zustand behoben wurde wird die meldung gelöscht egal ob noch andere fehler vorhanden sind!


    Mal angenommen ich möchte 3 Zustände Anzeigen.... durch die Variable JobnR kann ich dann im Submit abfragen ob der zustand noch aktiv ist oder nicht.


    Wenn nicht dann kann ich mit

    Code
    result = Clear_KrlMsg (nHandle)

    die meldung löschen. Jetzt die Frage...werden die anderen meldungen dann auch gelöscht wenn ein zustand ok ist?

    Da es im Submit läuft muss ich es ja permanent abfragen...


    Hat da jemand eine idee wie ich es sonst umsetzen kann?



  • Schritt für Schritt zum Roboterprofi!
    • Hilfreich

    Hallo Woodys,


    Folgende Probleme fallen mit bei diesem Code auf:

    Je nachdem wann die Vairiable geändert wird, bspw Zeile 15, würde die Meldung nicht Gelöscht.

    Ich würde die Variable nHandle nach dem löschen der Nachricht wieder auf "0" oder ähnliches setzen.


    Was meinst du mit "andere Meldungen?" es wird nur die Meldung mit dem Jeweiligen Handle gelöscht.


    Ich persönlich mache es so:


  • Kleiner Nachtrag:


    Ich empfehle die Variable iHandleBar und iHandleFoo in der INIT Zeile vom Submitinterpreter auf -1 zu setzen, sodass auch nach dem Submittinterpreterreset immer eine Meldung ausgegeben wird.

  • Hi danke für die Info....

    Ehm ich verstehe deinen code nur Halbwegs...

    Was hat Foo und Barzu bedeuten?

    Wusste nicht dass diese Schreibweise auch funktioniert....womit tue ich die Meldung Absetzen?

    Die Zustandsmeldung habe ich aus dem Handbuch erst mal so rein kopiert damit ich sehe wie es funktioniert.


    Zeile 15 ist wait sec 0.5 ja ....das ganze läuft auf Multisubmit darum nicht so tragisch...

    ich hänge jetzt mal den completten code rein...

    Zu verstehen ist es so ....das Programm läuft im Submit. Mal Streng genommen es Treffen alle zustände ein b_Ueberwachung_AUS und JobnR 1-7 dann möchte ich dass auch alle Zustandsmeldungen angezeigt werden. in der Tat sind es dann 8 Zustäde. Wenn jetzt nach und nach diese zustände beseitigt werden , dann sollen auch nach und nach die meldungen gelöscht werden.


    Ich habe jetzt ein beispiel von dir in meins übersetzt ...odb ich das so verstanden habe

    Code
    IF b_Ueberwachung_AUS and (nHandle <= 0) THEN
      MsgState(nHandle, "Sicherheit", "Arbeitsraeume sind Deaktiviert!!!")
     ENDIF
     IF not b_Ueberwachung_AUS  and (nHandle > 0) THEN
      Wait for Clear_KrlMsg(nHandle) or true
      nHandle = -1
     ENDIF 

    Hmm wenn er jetzt in der ersten If abrage die meldung ausgibt dann ballert doch der Submit in jedem durchlauf die meldung raus bis Not b_Uberwachung_AUS ansteht oder ?

    Einmal editiert, zuletzt von woodys ()

  • Hey Woody,


    foo und bar sind Beispielvariablen.


    Das er in der Schleife hängt ist ja sogesehen noch okay, allerdings ist das Problem, dass wenn innerhalb dieser Wartebedingung die Variable sich ändert, wird die Repeat_Until schleife sofort verlassen, somit wird das Clear_KrlMsg() nicht mehr aufgerufen. Wenn dann müsste man die Wartebedingung vor der IF-Anweisung einfügen, aber auch dann besteht noch die gefahr, dass sich die Variable genau in dem Satz-Wechsel ändert.

    Außerdem wird in diesem Fall natürlich nur eine Meldung abgesetzt, da der Submit-Zeiger dann in der Repeat_Until schleife hängen bleibt, bis die Meldung wieder gelöscht werden kann.


    Bezüglich der von mir verwendeten Funktionen (welche die Meldungen absetzen):

    Guck mal in die KRC://R1/System/MsgLib.src , dort ist bereits von Haus-Aus eine Libary, mit der recht einfach Meldungen abgesetzt werden können. (Auch Hinweismeldungen usw) Ist in dem Kommentar recht gut beschrieben. In den meisten Fällen reicht diese Libary erfahrungsgemäß aus. Natürlich kannst du es aber auch komplett selber Programmieren ;)


    Deine "Übersetzung" ist grundsätzlich korrekt, es ist jedoch anzumerken, das die Variable nHandle für jede Meldung extra angelegt werden muss, da diese ja auch einzelt wieder gelöscht werden soll.

    Also:


  • Hi also ich habe den Code jetzt nochmal etwas ausgeschmückt....

    Hab mir jetzt auch mal die MSG.Lib angesehen....Puh da es dort mit Funktionen zu tun hat komm ich überhaupt nicht klar...Hab mir schon mehrmals Funktionen angesehen um deren zusammenhänge zu verstehen....naja ist jetzt aber ein anderes Thema....


    Es sieht mal nicht schlecht aus allerdings hab ich noch ein kleines Problem...

    Es werden mehrere zustände angezeigt soweit so gut. Habe alle JobnR meldungen und b_Uberwachung_AUS anzeigen lassen können.


    dann wollte ich i_Anfahrausschuss anzeigen lassen...ging auch leider wurde der direkt wieder gelöscht. d.h solange i_Anfahrausschuss ==0 ist wurde es angezeigt und direkt wieder gelöscht....da finde ich den fehler nicht.


    nächster versuch war i_Anfahrauschuss und b_Uberwachung_AUS anzeigen lassen.....sobald b_Uberwachung_AUS auf True war hat er mir ca 85 Meldungen angezeigt natürlich nur solange bis ich es wieder auf false geschaltet habe.


    im zuge dessen noch 2 fragen ...


    Code
    Wait for Clear_KrlMsg(nHandleUeberwachung) or true

    wie kommt es dazu das das die meldung wieder zurück nimmt?

    ich mein wie kommt es dazu dass bei wait for...... Clear ausgeführt wird? oder wann wechselt der zustand von false auf true?

    davor war es ja

    result = Clear_KrlMsg (nHandle)


    und was bedeutet -1 ?

    So sieht es aktuell aus

    Einmal editiert, zuletzt von woodys ()

  • Hey,


    zu 1)

    Schau mal in Zeile 47, da verwendest du den falschen Handle (nHandleUeberwachung statt nHandleAussschuss) (Kopierfehler)


    zu 2)

    kannst auch result = Clear_KrlMsg(nHandleXXXXXX) benutzen. Musst dann halt die Variable "result" noch deklarieren. Durch das WaitFor hat man das halt verhindert das man die Variable nicht definieren muss, da ich den Rückgabewert nicht auswerte.

  • Ok okay....tatsächlich kopierfehler :D

    Wenn man den ganzen Tag am programmieren ist erkennt man irgendwann seine eigene Handschrift nicht mehr.... wird morgen erledigt.


    Zu 2.

    Wait For ist doch eine Warte Anweisung woher weiß ich dass der Rückgabe wert geändert wird? Es gibt doch keinen Befehl zur Ausführung den Wert zu ändern....


    Moment....hat das was mit den Funktionen der MSG.LIB zu tun? Dort werden nämlich IN OUT Parameter verwendet....

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
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden