TIA V13 Bitmeldung projektieren

Swissfighter88

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
Code:
"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:

Code:
"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:

Code:
("BITMELDUNGEN".STOERUNGEN.GRUPPE1.%B0 > 0)

Edit: und hier meine DB-Deklaration

attachment.php


Grüße

Marcel
 

Anhänge

  • bitmeldungen.PNG
    bitmeldungen.PNG
    13,2 KB · Aufrufe: 459
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:
Zurück
Oben