Step 7 DB in Excel mit S7 315

Rici

Level-2
Beiträge
128
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wir machen uns gedanken ob wir nicht unsere Daten Logger die Temperatur messen, nicht in der Steuerung Realisieren. S7 315 2DP

- Speichern
Es sind etwa 3000 tausent integerwerte plus Zeit und Datum im Ringspeicher.
Die maximale größe eines DB's ist 16k wir benötigen etwa 12k, also müsste es gehen.
Speichern geschiet ein mal in 20 min je 4 Integer, somit mache ich mir keine gedanken über die Zykluszeit.

- Auslesen
Diese Daten sollen aus der Steuerung ausgelesen werden und in Excel Tabelle eingetragen werden, durch eine onlineverbindung.

Frage: 1-Könnte es mit einem OPC Server funktionieren, wir hatten mal einige Werte mit dem Browser aus der Steuerung ausgelesen.

2-Ist es möglich mit dem OPC Server so viele Daten auszulesen.

3- Wenn es mit dem OPC Server nicht Funktioniert, wie würdet Ihr es machen.


Danke im Vorraus
 
Hallo,

1. warum nicht ?

2. nicht alle in einem Rutsch - aber davon merkst du m.E. nichts.

3. es ginge ja auch mit LibNoDave (z.B.) - da müßtest du halt noch etwas dazu programmieren - aber beim OPC-Server ja auch ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es sind etwa 3000 tausent integerwerte plus Zeit und Datum im Ringspeicher.
Die maximale größe eines DB's ist 16k wir benötigen etwa 12k, also müsste es gehen.
Wie kommst Du auf 12kByte? Ich komme auf etwa 6kByte oder 30kByte oder 6MByte oder 30MByte ... :confused:

Hier ist ein fertiges Beispiel wie Excel mithilfe von Libnodave Daten aus einer S7-CPU liest:
Programmbeispiel für grafische Datenanzeige mit EXCEL + LIBNODAVE

Harald
 
Ich habe sowas in der Art in C# und mit Libnodave gemacht, das Prog crawlt sich durch 1000 Datensätze über einige DBs verteilt, gibt je nach Suchoption Ergebnisse in ein Datagridview und schreibt den kompletten Bestand in ein .csv
Die eigentlich Kunst ist da, sich möglichst einfach die DB Nummern und die Offsets für die Bitadressen pro Datensatz ausrechnen zu lassen.
 
Danke für die schnelle Antworten,
PN/DP

mein Gedankengang zur größe: 750 Messungen je 4 Int,p pro 4 Integerwerte kommt Datum und Uhrzeit
Pro Int wird 2kByte verbraucht, ich habe 3000 Int also 6000kByte
Zeit und Datim sind je Dint also 8 kByte pro Messung 6000kByte

Korregiert mich bitte wenn es falsch ist
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich ordne mal Deinen Gedankengang wie folgt:

Ein INT belegt 2 Byte
Ein DATE_AND_TIME belegt 8 Byte

Alle ca. 20 Minuten willst Du einen Datensatz von 4 INT + Datum und Uhrzeit speichern --> das macht 4 * 2 + 8 = 16 Byte je Datensatz

Du willst einen Ringpuffer für 750 solcher Datensätze haben --> 750 * 16 Byte = 12000 Byte ~ 12kByte

Der Ringpuffer könnte wie folgt aussehen
Code:
   Buffer : ARRAY  [1 .. 750 ] OF STRUCT
    timestamp : DATE_AND_TIME ;
    Wert1 : INT ;
    Wert2 : INT ;
    Wert3 : INT ;
    Wert4 : INT ;
   END_STRUCT ;

Tip: Wenn Du die Datensätze in einen festen genauen Zeitraster speicherst, dann ist es nicht unbedingt nötig, den Timestamp in jedem Datensatz zu speichern. Es würde reichen, wenn man den Zeitstempel eines bestimmten Datensatzes weiß/speichert und könnte die Zeitstempel der anderen Datensätze errechnen. Dann hätte ein Datensatz nur die halbe Größe bzw. könnte der Ringpuffer bei gleicher Größe doppelt so viele Datensätze speichern.

Harald
 
Zurück
Oben