Global DB Variablen im FC verarbeiten

kadney

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen. :)
Ich bin zurzeit dabei mit Step 7 ein Programm für ein Regelungsmodell zu schreiben. Das Modell hat eine Füllstands- und eine Temperaturregelstrecke.
Füllstand bzw. Temperatur werden über einen Ultraschallsensor bzw. PT100 abgefragt. (Hängen an einer SM334 8Bit)

In zwei verschiedenen Programmen möchte ich den Füllstand einmal mit einem stetigen Regler und einmal mit einem 2-Punkt Regler regeln.

An die SPS wird jetzt noch ein OP170b mit WinCC Flex 08 über Profinet angeschlossen, um den Prozess zu visualisieren. Da ich bisher nie mit DB's gearbeitet habe, habe ich z.B. die Sensorwerte aus den PEW's skaliert und in Real umgewandelt. Die Real-Werte habe ich in MD's abgespeichert, damit ich diese dann direkt in der Visu darstellen kann.


Für die beiden Regelstrecken wollte ich die Sollwerte über die Visu in Real MD's vorgeben. Da ich das Modell aber auch ohne Visu betreiben können will, hatte ich mir gedacht, dass ich einen Sollwert vorgebe und dieser dann über das Panel geändert werden kann. (Das Modell selbst hat nur 3 Taster + Schlüsselschalter, diese Werden nur für die Programmwahl am Modell selbst verwendet. Hatte ich ungünstig formuliert, damit möchte ich nicht die Sollwerte ändern, dies sollte nur via Panel geschehen. :) )

Bisher hatte ich keine Idee, wie ich das am Besten realisieren kann, bis ich gelesen habe, dass man bei DB's Startwerte vorgeben kann, die beim Start der CPU geladen werden und später auch geändert werden können. Und da einige zur Übersicht eh auf DB's setzen, wollte ich das dann mal ausprobieren.

Ich habe jetzt also einen globalen DB1 erstellt und in diesen meine Analogwerte eingetragen und bei den beiden Sollwerten einen Anfangswert in Real eingetragen und das Ganze in der Datenansicht initialisiert.

Viel Text, bis ich zum Kern komme:
Wie schaffe ich es jetzt, von den einzelnen FC's auf den globalen DB zuzugreifen? Ich habe im OB1 ein Netzwerk eingefügt, in dem ich über einen "OPN" Baustein den DB1 aufrufe.
Müsste ich jetzt nicht eigentlich im FC bei dem Fenster, in dem der Baum "Schnittstelle" ist die von mir eingetragenen Variablen sehen können um diese dann in das Programm einfügen zu können?

Ich gehe mal sehr stark davon aus, dass ich bisher irgendetwas elementares übersehen habe. :rolleyes:
Könnte mir jemand erklären, was ich bisher falsch gemacht habe? :)

Schöne Grüße
 
Zuletzt bearbeitet:
Du solltest im DB die entsprechenden Bereiche mit "Symbolik" versehen.

wenn dein DB auch in der Symboltabelle entsprechend angelegt ist kannst du zb.:

DBYXZ.TEMPERATUR_1 zugreifen.

ohne Symbolik:

DB100.DBD2 (wenn dein Wert hier als Word abgelegt ist.)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Das Ganze ist gar nicht so kompliziert, wie Du es Dir denkst.

In dem DB liegen die 3 Sollwerte. Diese verknüpfst Du an ein Ein-/Ausgabe-Feld auf dem OP. Damit kannst Du die Sollwerte schon mal vom OP aus verändern.

So wie ich es verstanden habe willst Du über die 3 Tasten dann jeweils einen der Sollwerte auswählen. Eine Möglichkeit wäre nun, den DB zu erweitern indem Du dort eine Variable für den Sollwert reservierst.

Z.B.:
DB1.DBD0 = Sollwert_aktuell (REAL)
DB1.DBD4 = Sollwert_1 (REAL)
DB1.DBD8 = Sollwert_2 (REAL)
DB1.DBD12 = Sollwert_3 (REAL)

Nun machst Du in dem FC noch die Aufrufe:

Code:
U Taste_1
SPBN m001

L DB1.DBD4
T DB1.DBD0

m001: nop 0

U Taste_2
SPBN m002

L DB1.DBD8
TDB1.DBD0

m002: nop 0

usw...

Es gibt sicher auch noch elegantere Möglichkeiten, ich halte diese Lösung aber für einfach nachvollziehbar, wenn man noch in den Anfängen steckt.

Im OB1 rufst Du dann noch den FC auf. Den OB1 musst Du nicht aufrufen. (War das ein Tippfehler?)
 
Nachdem der Tippfehler nun bereinigt wurde noch eine kurze Erklärung:

Es ist möglich, eine DB-Variable auf mehrere Arten aufzurufen.

Entweder öffnest Du zuerst den DB (wie von Dir gemacht), und machst die Operationen dann nur mit den Adressen:

Code:
L DBD 0
T DBD4

Vorteil dieser Variante: Bei mehreren Operationen mit Werten aus dem gleichen DB spart man etwas Zykluszeit.

Vorteil folgender Variante (ohne vorheriges Öffnen des DB)

Code:
L DB1.DBD0
T DB1.DBD4

1. In den Querverweisen tauchen die Operationen auf
2. Wie schon von Winman erwähnt kann man auf diese Weise symbolisch arbeiten.
 
Okay, ich danke euch beiden. :) Ist echt wesentlich einfacher, als ich dachte.
Und ja, das 2. OB sollte ein DB sein. :)

Und das mit den drei Tastern habe ich nur geschrieben, da ich nicht x Taster mit "Lade Wert X in MD XY" oder "Lade Wert Y in MD XY" belegen kann. :)

Ich hatte in der DB schon einen passenden Namen und Kommentar eingetragen. An einem entsprechenden Eingang kann ich tatsächlich einfach z.B: DB1.DBD24 schreiben. Oder einfach ein "D" und dann in der Auswahl den DB1 aufklappen und den entsprechenden Eintrag suchen. In der Visu sollte man die Variable ja über ein E/A Feld bearbeiten können, wenn ich das bisher richtig gesehen habe, ist auch noch Neuland für mich. :D
Werde mich da die Tage mal durchkämpfen und zur Not frag ich nochmal nach. :)


Vielen Dank! ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Grundsätzlich:

Das Programm sollte in der SPS eigenständlich laufen.

von der Visu (TP, . . .) werden in Merkern, noch besser in DB Variablen gelesen / geschrieben.

Das Programm in der SPS prüft das was von der Visu geschrieben wird und wenn glaubwürdig, dann nimmt es das als neue Vorgabe.

Die Anzeige an der Visu kann aktuelle Werte der SPS darstellen. Am übersichtlichsten wird das so gemacht:

Dei Werte die in der Visu dargestellt werden sollen kommen in einen DB.
Die Werte die von der Visu beschrieben werden sollen liegen in einem eigenen DB
Somit ist klar ersichtlich was von wo kommt. Das ganze wird auch als Kapselung, . . . benannt.
 
Zurück
Oben