# Aus einem standardisierten Baustein in einen DB Schreiben



## MartinST83 (25 April 2022)

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!


----------



## NicoSch (25 April 2022)

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.


----------



## MFreiberger (25 April 2022)

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.



MartinST83 schrieb:


> 3600 Array´s zu platzieren.


3600 Arrays? Schreibfehler?


----------



## MartinST83 (25 April 2022)

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.


----------



## MartinST83 (25 April 2022)

MFreiberger schrieb:


> Array[1..3599] hat keine 3600 Werte!
> 
> Array[1..3599] hat 3599 Werte.
> Array[0..3599] hat 3600 Werte.
> ...


ja stimmt, Schreibfehler. habe natürlich 0...3599 deklariert.


----------



## MFreiberger (25 April 2022)

Kannst Du von dem Aufruf und von Deiner Bausteinschnittstelle mal Screenshots hier einstellen?


----------



## MartinST83 (25 April 2022)

MFreiberger schrieb:


> Array[1..3599] hat keine 3600 Werte!
> 
> Array[1..3599] hat 3599 Werte.
> Array[0..3599] hat 3600 Werte.
> ...


Danke für den Hinweis, habe es jetzt oben ausgebessert um nicht zu verwirren.


----------



## NicoSch (25 April 2022)

MartinST83 schrieb:


> 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?


----------



## PN/DP (25 April 2022)

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:

```
MyDB
Static
> Stundenproduktion_1 : "Stundenproduktion"
> Stundenproduktion_2 : "Stundenproduktion"
> Stundenproduktion_3 : "Stundenproduktion"
...
```

Harald


----------



## MartinST83 (25 April 2022)

MFreiberger schrieb:


> Kannst Du von dem Aufruf und von Deiner Bausteinschnittstelle mal Screenshots hier einstellen?


Ganz rechts der UDT


----------



## NicoSch (25 April 2022)

Du musst den udt an den baustein schreiben.
Also
Stundenproduktion.Kwh
bzw so wie dein DB dann heisst plus .Kwh


----------



## MartinST83 (25 April 2022)

NicoSch schrieb:


> Du musst den udt an den baustein schreiben.
> Also
> Stundenproduktion.Kwh
> bzw so wie dein DB dann heisst plus .Kwh
> ...


Mann oh Mann!!... ja, jetzt nimmt er es ... so ein Vollhonk!

Vielen Dank!


----------



## Onkel Dagobert (25 April 2022)

MartinST83 schrieb:


> .. da ich diesen Baustein 24x aufrufen möchte...


Das wären 345.600 Byte im Arbeitsspeicher der S7-1214C. Das könnte unter Umständen etwas eng werden.


----------



## MartinST83 (25 April 2022)

Onkel Dagobert schrieb:


> Das wären 345.600 Byte im 75kB großen Arbeitsspeicher der S7-1214C. Das könnte unter Umständen etwas eng werden.


da hast du recht, die 1200er hat sich gleich mal vertschüsst.. ich brauch eine andere Lösung..


----------



## Onkel Dagobert (25 April 2022)

Was hast du denn mit den ganzen Daten vor? Musst du sie wirklich alle speichern?


----------



## MartinST83 (25 April 2022)

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.


----------



## holgermaik (26 April 2022)

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.


----------



## roboticBeet (26 April 2022)

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.


----------

