WinCC flexible: Anzahl anstehender Fehlermeldungen mit VB-Skript ermitteln

herdi

Level-1
Beiträge
50
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hätte mal wieder eine kurze Frage:
Ist es möglich die Anzahl gerade anstehender Fehler-Bitmeldungen in einem VB-Skript abzufragen?

Danke sehr.

Gruß

Herdi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo johnij,

wie meinst du das mit den "Trägern". Ich arbeite erst seit ca 1 Woche mit WinCC flexible und wurschtel mich da gerade erst durch..

Danke

Herdi
 
Hallo johnij,

wie meinst du das mit den "Trägern". Ich arbeite erst seit ca 1 Woche mit WinCC flexible und wurschtel mich da gerade erst durch..

Danke

Herdi

Hallo,

Nehmen wir an, du hast deine Meldungen in DB10.dbw0 und DB10.Dbw2
projektiert:

Code:
DB10.DBx0.0--> Not-Aus gedrückt
DB10.DBX0.1--> Einer hat auf die SPS gepinkelt :ROFLMAO:
DB10.DBX0.2--> Die Sps streikt
..
.
..)

In WCF hast du schon in der Variablen_Rubrike:
Meldung0: Db10.DBw0
Meldung1: Db10.DBw2

Im Skript

Summe=Meldung0+Meldung1

johnij
 
Verstehe ich nicht. Wenn nur ein oberstes Bit gesetzt ist, habe ich nach der Addition 32768 Fehlermeldungen (oder -32768 wenn als Signed Int) interpretiert.
 
Hallo miteinander,

eigentlich habe ich eine etwas anders gelagerte Lösung im Auge...

Ich bräuchte in einem Skript die Info wieviele Fehler (aus den Bitmeldungen) gerade anstehen. Eigentlich reicht mir auch schon die Aussage ob überhaupt Fehler anstehen.

Ich denke dass sich diese Info irgendwie aus der Runtime-Umgebung gewinnen lassen müsste. Kann man auslesen wieviele Zeilen einer Meldeanzeige belegt sind bzw. kommt man an den Wert der den Meldeindikator sichtbar werden lässt?

Gruß

Herdi
 
wenn du nur wissen willst, ob überhaupt eine störung anliegt kannst du deinen störmeldebereich einfach auf 0 vergleichen.

wenn du was besonderes willst, schau mal hier.
http://www.sps-forum.de/showthread.php?t=15348
unter wince

hab das geschrieben, um störungen einer fremdanlage ins netzwerk zu kopieren ohne das die aber das störmeldearchiv verhunzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meldungen

Sorry aber mein wissensstand Nein. Wäre toll wenns wer besser weiss.
Mach doch für deine Auswertung der Fehlerbits einen Vergleich auf null.
wenn deine Bits im
Bereich db2.dbx0.0 bis db2.dbx3.7 liegen
langt es schon wenn du db2.dbd0 auf 0 vergleichst fertig fehler liegt an.

Kanst natürlich auch ne kompfortablere lösung machen mit XOD zwischen Fehler und Quittierbits. Dann hast Du die info ob noch unquittierte fehler anliegen.

Gruss Wälder

Sorry Volker war zu langsam......
 
Zuletzt bearbeitet:
Einfach in S7 pogramm jedes alarm-wort (Merker oder DB) mit "ungleich Null" testen.
Hast du z.b. nur 160 alarmen (16 wörter), denn brauchst du kein durchlauf-schleife oder ähnliches

Code:
      O(    
      L     0
      L     "AlarmWort0"
      <>I   
      )     
      O(    
      L     0
      L     "AlarmWort1"
      <>I   
      )
usw.     
      O(    
      L     0
      L     "AlarmWort10"
      <>I   
      )     
      =     "AlarmVorhanden"

Als reine übung habe ich auch ein versuch in VBS von dein ursprüngliche frage:

Tags: AlarmArray, NoActiveAlarms.
Code:
Dim i, j, tempAlarmTag, tempNoAA, SizeOfAlarmArray
SizeOfAlarmArray = 10 'Manuell einstellen
tempNoAA = 0
For i = 0 to SizeOfAlarmArray
  tempAlarmTag = smarttags("AlarmArray")(i)
  For j = 1 to 16
    tempAlarmTag = tempAlarmTag * 2
    If tempAlarmTag > 65535 Then
      tempNoAA = tempNoAA + 1
      tempAlarmTag = tempAlarmTag - 65536
    End If
  Next
Next
NoOfActiveAlarms = tempNoAA
Bin nicht ganz sicher ob ein tag mit bit 16 aktiv, als "65536" oder als "-32768" interpretiert.
 
Verstehe ich nicht. Wenn nur ein oberstes Bit gesetzt ist, habe ich nach der Addition 32768 Fehlermeldungen (oder -32768 wenn als Signed Int) interpretiert.

Das hat damit nix zu tun
Das war nicht die fertige Lösung.
Ich brauche nicht alles von a bis z zu schreiben.
Klaro nach der Summe kommt eine Maskierung....

um die Einzelnen gesetzten Bits zu zählen


johnij
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das hat damit nix zu tun
Das war nicht die fertige Lösung.
Ich brauche nicht alles von a bis z zu schreiben.
Klaro nach der Summe kommt eine Maskierung....

um die Einzelnen gesetzten Bits zu zählen


johnij
Sorry, aber das ist auch nicht die Lösung. Beispiel: In Wort1 Bit 0 = 1 und in Wort2 Bit 0 = 1. Nach Addition steht in der Summe 2. Dort ist ein Bit gesetzt. Es stehen aber zwei Fehler an. Diese Lösung ist somit falsch. Richtig wäre, die Bits der Worte zu zählen und die Summe der gesetzten Bits zu addieren.
 
Danke für die Antworten. ich hatte gehofft dass es eleganter geht in dem man Werte der Runtime hierfür nehmen kann. Jetzt zähle ich halt doch die Bits.

Gruß

Herdi
 
Es geht einfach mit (wenigem Aufwand):

Code:
Dim Anzahl_Word ' Anzahl der Worte, in den die Meldungen kommen
Dim i, Meldung_vorhanden
i=0
Meldung_vorhanden=0
While (i<= Anzahl_Word) And (Meldung_vorhanden=0)
 
if SmartTags(Meldung)(i)<>0 then
Meldung_vorhanden=1
end IF
i=i+1
Wend

johnij
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, aber das ist auch nicht die Lösung. Beispiel: In Wort1 Bit 0 = 1 und in Wort2 Bit 0 = 1. Nach Addition steht in der Summe 2. Dort ist ein Bit gesetzt. Es stehen aber zwei Fehler an. Diese Lösung ist somit falsch. Richtig wäre, die Bits der Worte zu zählen und die Summe der gesetzten Bits zu addieren.


Sorry ich hatte mich verschrieben

Eigentlich die Summe der Bits

Danke für die Feststellung

johnij
 
mal ne andere frage
warum willst du das im script machen und nicht direkt in der steuerung?
 
@johnij
sehe ich das richtig, dass du jede Meldevariable mit wertänderung (meine annahme) verknüpfst und dann dein script auslösst ? Na ja ob das dein System nicht ausbremst wenn Du beispielsweise in mehreren Worten gleichzeitig gehende und kommende fehler hast ? Ändert sich wert = Starte script geht fehler wieder weg script wird erneut gestartet .
es ist ja nur 1 Script zur selben zeit möglich. Motzt WCF nicht wenn du 2x dass selbe anstösst ?

@Volker
genau da liegt der Hund begraben was will er
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@johnij
sehe ich das richtig, dass du jede Meldevariable mit wertänderung (meine annahme) verknüpfst und dann dein script auslösst ? Na ja ob das dein System nicht ausbremst wenn Du beispielsweise in mehreren Worten gleichzeitig gehende und kommende fehler hast ? Ändert sich wert = Starte script geht fehler wieder weg script wird erneut gestartet .
es ist ja nur 1 Script zur selben zeit möglich. Motzt WCF nicht wenn du 2x dass selbe anstösst ?

@V

Hallo Waelder,
eigentlich muss das Skript bei jeder Wertänderung aufgerufen werden
(das beeinflusst negativ die Prozessorleistung) Aber,
man könnte das Skript in bestimmten Zeitabständen Aufrufen
(Nachteilhaft falls man prozesskritische Ereignisse hat).

Schlussfolgerung:wie erwähnt wurde, wäre die SPS eine vernünftige Lösung

johnij
 
Hallo miteinander,

bei mir gings eigentlich nur darum dass ich das das Bearbeiten-Ereignis der Meldung dazu hernehme in eine andere Visu-Page zu springen, dort dann die Quittiererei unabhängig von der Meldeanzeige erledige und dabei wieder zurück zur vorherigen Seite springe. Dort soll dann aber falls kein weiterer Fehler anliegt die Meldeanzeige unsichtbar sein.

Ich prüfe nun im beim Zurückspringen mit Hilfe des Skriptes ob das der letzte anstehende Fehler war und schalte wenn ja die Meldeanzeige unsichtbar.

Ich hatte gedacht dies geht einfacher in dem man die WinCC-eigene Meldungsverwaltung nach anstehenden Fehlern "fragen" kann.

Es ist ja nicht zwangläufig so dass die Trigger-Bits für die vielen einzelnen Fehlermeldungen alle in wenigen Bytes stehen. Die können ja wild verstreut sein. Und dann hätte es gereicht die alle einmal bei den Bitmeldungen einzutragen und nicht nochmal im Skript an alle denken zu müssen...

Soweit dazu...

Gruß

Herdi
 
dann gehst du die sache von der völlig falschen seite an.

projektiere in der vorlage ein meldefenster für die störungen.
dieses wird eingeblendet wenn eine störung 'kommt'.
wenn alle störungen quittiert sind, verschwindet das fenster wieder unabhängig davon ob die störung noch anliegt.
 
Zurück
Oben