Aus einem standardisierten Baustein in einen DB Schreiben

MartinST83

Level-2
Beiträge
47
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen. Leider konnte ich dazu nichts googeln oder in der Hilfe finden. Mir fällt nicht mal ein wonach ich suchen sollte..

Folgendes habe ich vor: Ich habe mir einen Baustein geschrieben, der mir jede Sekunde einen aktuellen Wert in ein Array[0...3599] of real schreibt.
Dieser Baustein soll dann von außen getriggert werden, damit er eine FOR Schleife einmal durchfährt und alle 3600 Werte addiert. Funktioniert soweit.

Jetzt kommt es aber: Ich möchte aber auch von außen einen DB angeben wo er dann dieser Werte übergibt, da ich diesen Baustein 24x aufrufen möchte.
Ich komme auf keine Lösung um eben als Output Variable einen DB mit 3600 Array´s zu platzieren. Wenn ich den aufrufe und dann einen DB mit der gleichen Struktur anhänge, haut er mir immer einen Fehler raus..

Kann mir hierzu jemand helfen wie man sowas macht?

S7/1214C mit TIA16

Vielen Dank!
 
Zuletzt bearbeitet:
Du kannst doch einfach als INOUT einen UDT übergeben.
Erstellst dann halt 24DB's immer mit dem gleichen UDT und im Baustein selber schreibst du den UDT ebenfalls an die Schnittstelle.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Array[1..3599] hat keine 3600 Werte!

Array[1..3599] hat 3599 Werte.
Array[0..3599] hat 3600 Werte.

Das könnte wichtig sein, wenn Du mit einer FOR-Schleife 3600 Werte addierst. Dann läufst Du ggf. in einen Bereichslängenfehler.

3600 Array´s zu platzieren.
3600 Arrays? Schreibfehler?
 
hätte ich versucht. Habe einen UDT angelegt. Array 0...3599 of real. diesen habe ich als INOUT im FB deklariert.
ich habe einen Globalen DB erstellt und ebenfalls mit den gleichen UDT. wenn ich dann im OB1 den Baustein aufrufe und eben die INOUT Variable belege, macht er rot mit der Meldung:
"SDer Datentyp DB_Produktion des Aktualparameters passt nicht zum Datentyp Stundenproduktion des Formalparameters.
 
Array[1..3599] hat keine 3600 Werte!

Array[1..3599] hat 3599 Werte.
Array[0..3599] hat 3600 Werte.

Das könnte wichtig sein, wenn Du mit einer FOR-Schleife 3600 Werte addierst. Dann läufst Du ggf. in einen Bereichslängenfehler.


3600 Arrays? Schreibfehler?
Danke für den Hinweis, habe es jetzt oben ausgebessert um nicht zu verwirren.
 
hätte ich versucht. Habe einen UDT angelegt. Array 0...3599 of real. diesen habe ich als INOUT im FB deklariert.
ich habe einen Globalen DB erstellt und ebenfalls mit den gleichen UDT. wenn ich dann im OB1 den Baustein aufrufe und eben die INOUT Variable belege, macht er rot mit der Meldung:
"SDer Datentyp DB_Produktion des Aktualparameters passt nicht zum Datentyp Stundenproduktion des Formalparameters.
Nur noch mal um sicher zu gehen du hast vorne dran und drinnen den UDT benutzt?
Kannst du vllt doch nocheinmal screenshots machen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstelle in einem oder mehreren globalen DB jeweils ein oder mehrere Variablen (die Arrays) vom Datentyp "Stundenproduktion" - die kannst Du dann am FB verschalten. Etwa so:
Code:
MyDB
Static
> Stundenproduktion_1 : "Stundenproduktion"
> Stundenproduktion_2 : "Stundenproduktion"
> Stundenproduktion_3 : "Stundenproduktion"
...

Harald
 
ich möchte die Tagesproduktion von meiner PV Anlage berechnen und visualisieren. Wenn möglich aktualisiert im Minutentakt...
ich bekomme einen aktuelle PV Leistung (KWh)als REAL rein.
 
Array [0..3599] und 24 x aufrufen hört sich für mich nach Sekunden an. Das wären 86400 Datenpunkte. Die zu visualisieren dürfte schon eine Herausvorderung sein. (egal mit welchem System)
Wenn du den Min, Max und Durchschnitt je Minute speicherst würde das die Anzahl der Datenpunkte schon auf 4320 reduzieren. Ich denke ein Viertelstundenwert würde für die Visu auch ausreichen. Das wären dann 288 Datenpunkte. Damit sollte auch die 1214C klar kommen.

Zum berechnen der Gesamtleistung am Tag kannst du den Sekundenwert ja weiterhin aufaddieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das würde ich extern machen. Die Daten bspw. an einen Raspberry Pi oder einen industrietauglichen IPC schicken, per Node-RED verarbeiten und in einer Zeitreihendatenbank (bspw. InfluxDB) ablegen.
 
Zurück
Oben