# TIA V13 Bitmeldung projektieren



## Swissfighter88 (22 Juli 2015)

Hallo miteinander

Trotz all meinen Bemühungen über diverse andere Beiträge schlauer zu werden, wurde ich es einfach nicht!

Meine Überlegungen die ich zur Zeit mache sind folgende:

- Stör-, Warn- und Betriebsmeldungen in der SPS programmieren und an einem Panel Darstellen.
- Für jede Meldegruppe gibt es einen separaten DB. Der DB soll Bausteinoptimiert erzeugt werden!


In der "Classic-Welt" ist mir das Vorgehen bekannt...
Aber wie mache ich das mit einem Bausteinoptimierten DB?

Meine erste Idee ist wie folgt:

- DB Betriebsmeldungen erstellen
- Variable "Motormeldung" vom Typ INT einfügen. 
- In einem FB ein Programm schreiben, welches bei erfüllter Bedienung  mittels dem Slice-Zugriff das erste BIT der Variable "Motormeldung"  setzt. (Betriebsmeldungen.Motormeldung.X1)
- In den HMI-Variablen eine neue Variable Namens "Motormeldung"  erstellen und als PLC-Variable die im DB Betriebsmeldungen erstellte  Variable "Motormeldung" angeben. 
- Unter dem Punkt HMI-Meldungen > Bitmeldungen eine Meldung erstellen  mit der Triggervariable der vorhin erstellten HMI-Variable.

Funktioniert wunderbar! Nur bin ich mir nicht sicher ob ich auf dem Holzweg bin!? 
Im allgemeinen stört mich die geringen Informationen in der SPS! Wenn  ich einen Slice-Zugriff mache, weiss ich nur das ich z.B. auf das erste  BIT eines INT zugreife. Was dieses Bit
aber für eine Meldung generiert, sehe ich nur über das HMI...

Gibt es da noch bessere Ansätze? Möchte unbedingt bei Bausteinoptimiert bleiben!
Und übrigens wurde ein INT genommen, da die HMI-Variable kein WORD erlaubt.

Gruss


----------



## silverfreaky (22 Juli 2015)

ich mache das in der klassischen SPS so.

DATA_BLOCK "DB_Alarme"
TITLE =Die alarm-Nummer im DB ist identisch mit der Nummer im
//WinCCflexible-Bitmeldungen
//
//in dem Fall ein Array mit 30 Wordvariablen im DB10
//Der Text im DB Kommentar wird von der entsprechenden Nummer einfach in das Textfeld des Wordarrays übernommen,
//
{ S7_language := '7(1) Deutsch (Deutschland)  20.07.2015  06:04:30' }
VERSION : 0.1


  STRUCT     
   alarm_009 : BOOL ;    
   alarm_010 : BOOL ;    
   alarm_011 : BOOL ;    //
   alarm_012 : BOOL ;    
   alarm_013 : BOOL ;    
   alarm_014 : BOOL ;    //
   alarm_015 : BOOL ;    //
   alarm_016 : BOOL ;    //
   alarm_001 : BOOL ;    //
   alarm_002 : BOOL ;    //
   alarm_003 : BOOL ;    //alarm_003 
   alarm_004 : BOOL ;    //alarm_004 
   alarm_005 : BOOL ;    //alarm_005 
   alarm_006 : BOOL ;    //alarm_006 
   alarm_007 : BOOL ;    //alarm_007 
   alarm_008 : BOOL ;    //alarm_008 
   alarm_025 : BOOL ;    //alarm_025 /Störung Ventil 


Im HMI lege ich ein absolutes array an, das aus word ist.Das mache ich so groß das es alle Bitvariablen abdeckt.Die Störmelde-Nummer entspricht dann der Nummer der Alarmvariable.Den Text übernehme ich vom Alarm DB -Kommentar.Du siehst die Bytes sind vertauscht.So musst du jetzt quasi weitermachen.
ich weiss nicht ob das bei dir geht.Kenne mich mit dem neuen System nicht aus.


----------



## Matze001 (22 Juli 2015)

Hallo,

das Bediengerät erlaubt schon den Datentyp "Word" - Aber nicht als interne Variable.
Wenn Du eine SPS-Word Variable verknüpfst funktioniert das.

Wo ist jetzt dein Problem mit dem Slice zugriff?

```
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%X0 = Bitmeldung 1
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%X1 = Bitmeldung 2
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%X2 = Bitmeldung 3
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%X3 = Bitmeldung 4
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%X4 = Bitmeldung 5
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%X5 = Bitmeldung 6
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%X6 = Bitmeldung 7
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%X7 = Bitmeldung 8
```

Mit X8 - X15 könnte man jetzt noch die Quittiervariablen machen und gut.

Quittieren tue ich z.B. so:


```
"BITMELDUNGEN".STOERUNGEN.GRUPPE1.%B1 := (255 - "BITMELDUNGEN".STOERUNGEN.GRUPPE1.%B0);
```

Dann werden alle Bitmeldungen quttiert, die gegangen sind. Ist eine Meldung noch nicht gegangen kann sie nicht quittiert werden.

Mit folgendem Werte ich eine Sammelstörung aus:


```
("BITMELDUNGEN".STOERUNGEN.GRUPPE1.%B0 > 0)
```

Edit: und hier meine DB-Deklaration







Grüße

Marcel


----------



## Swissfighter88 (23 Juli 2015)

Danke euch beiden!

*Variante von silverfreaky*
Super Sache für nicht optimierte Bausteine! Werde ich mir merken

*Variante von Mate001*
Probleme mit dem Slice-Zugriff habe ich eigentlich nicht. Ich möchte einfach meinen Programmcode übersichtlich behalten.
Danke für deine Codebeispiele. Sind echt nützlich. Ich setze das Mal so um.

Grüsse


----------



## Swissfighter88 (23 Juli 2015)

Hallo nochmals

@ Mate001:
 Kannst du mir die Idee mit der Quittiervariable noch ein wenig genauer Erklären? 
Ansätze sind mir klar, aber wie ich das Ganze im WinCC realisiere nicht!

Gruss


----------



## Ullus (30 Juni 2016)

Hallo,

Kann mir jemand sagen, warum ich für eine einfache Bitmeldungen überhaupt INT/WORD-Variablen benötige und nicht mit simplen BOOL arbeiten kann?

Ich will – wie der Themenstarter – auf einem Panel Bitmeldungen anzeigen (und gegebenenfalls auch quittieren)
Viele meiner Störmeldungen kommen auf der SPS hardwaremäßig als Digitaleingang und werden als BOOL verarbeitet. Eigentlich könnte ich die 1:1 im Meldesystem als Trigger verwenden. Wegen dem Meldesystem muss ich jetzt aber zusätzlich dazu überall noch Integer-Vars anlegen, damit das Meldesystem sie verarbeiten kann...
Mit erscheint diese Restriktion im TIA-Portal einfach überflüssig. Aber vielleicht verstehe ich als Neuling auf diesem Gebiet einfach irgend etwas nicht richtig...

Zusatzfrage (TIA v13sp1):
Wenn ich eine Bitmeldung mit einer Integer-Variable als Trigger anlege (funktioniert soweit), ist das Feld für die Quittiervariable ausgegraut und ich kann sie nicht definieren.
Wenn ich als Trigger eine BOOL-Variable verwende, kann ich ich plötzlich eine Quittiervariable festlegen (bekomme dann aber natürlich die Fehlermeldung wegen der BOOL, die nicht akzeptiert wird als Bitmeldung)
Was muss ich machen um beides richtig projektieren zu können?

LG


----------

