Messdaten aufzeichnen ??

prinz1978

Level-2
Beiträge
149
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich stehe vor einem Problem bei uns in der Firma.Ich soll jede 15 min den ganzen Jahr Messdaten aufzeichnen die in ein datenbaustein ablegen,und wenn ich vom OP aus eintrage z.bsp.Datum 1.1.2008 Uhrzeit 15:00 dann soll er mir die richtige Messung raussuchen und am OP ausgeben.wie könnte ich so eine aufgabe angehen ?? brauche bitte von den erfahrenen Programmierer unter euch Unterstützung. Danke im vorraus
 
Abschätzungsfrage: Wieviel Messdaten in welcher Bytegröße sollen denn archiviert werden? Welche CPU steht denn zur Verfügung? In einen DB wird dies aber sicher nicht passen. Denn rund 100 Datensätze pro Tag x Anzahl Tage x (Größe Zeitstempel + Größe Daten) ist mehr als jede derzeitige S7-CPU in einem Baustein zulässt. Somit bleibt nur eine Aufteilung oder ein anderer Ansatz, z.B. Durchführen dieser Aufgabe auf einem überflüssigen PC.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PC einsetzen

Ich weiß ja nicht, um wie viele Werte es sich handelt, aber eigentlich ist dieses die typische Aufgabe für einen PC. Schreibe mal etwas detaillierter, was gemacht werden soll, dann können wir Dir bestimmte konkretere Hinweise geben.
 
das sind 384Byte Nutzdaten am Tag, dazu kommt der Zeitstempel, min. nochmal 4Byte ... also verdoppeln wir auf 768Byte am Tag ... über ein Jahr 280320Byte ... 274kB ... über mehrere Jahre kommt da ordentlich was zusammen ... maximale DB-länge bei der 315-2DP: 16kB ... d.h. du brauchst für ein Jahr ca. 18 Datenbausteine ... das nur mal so :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das sind 384Byte Nutzdaten am Tag, dazu kommt der Zeitstempel, min. nochmal 4Byte ... also verdoppeln wir auf 768Byte am Tag ... über ein Jahr 280320Byte ... 274kB ... über mehrere Jahre kommt da ordentlich was zusammen ... maximale DB-länge bei der 315-2DP: 16kB ... d.h. du brauchst für ein Jahr ca. 18 Datenbausteine ... das nur mal so :rolleyes:
Stimmt, und nach wieviel DBs ist der Arbeitsspeicher voll (bei 128K)? Also ab damit in den Ladespeicher. Und dann viel Spaß beim Suchen.
 
danke für die Antworten , ich würde es ja verkraften wenn ich einmal jährlich die Daten lösche.eine andere frage was würde passieren wenn die cpu stromausfall hätte wie würde die Messung nach Spannungswiederkehr weiterlaufen ??
 
Hallo,
Hier eine externe Variante. Wir verwenden für die Meßdatenaufzeichnung das Aufzeichnungssystem der Firma IBA. Es kann mit sämtlichen Steuerungen gekoppelt werden (S5,S7,PC-S7) und ist auch erweiterbar. Die Meßdaten werden auf einem Server gespeichert und stehen jedem zur Ferfügung für unbegrenzte Zeit ( solange das Programm und der Rechner läuft). Es können Analysen und Berichte erstellt werden und eine Online-Darstellung ist auch möglich.

Gruß
S
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich würde das Ganze auf Basis einer PC-Runtime realisieren. Das kann auch Flex ...

eine andere frage was würde passieren wenn die cpu stromausfall hätte wie würde die Messung nach Spannungswiederkehr weiterlaufen ??
Das ist davon abhängig, wie du dein Programm zur Aufzeichnung (in der CPU) gestaltest ...

Gruß
LL
 
Hallo Prinz1978

Ich habe Anlagen mit Datenaufzeichnungen gemacht, die Teile laufen gut und einfach.
CPU 314C 2PtP.
Ich schreibe die Archivdaten in einen DB im Arbeitsspeicher (max. Grösse) bis dieser voll ist, dann kopiere ich den DB mit SFC84 ins MMC, lösche den DB im Arbeitsspeicher und archiviere weiter. Die Speichermenge ist durch die Grösse des MMC begrenzt und die geht ja bis 8MB. Rücklesen aus MMC mit SFC83. Die DB's im MMC haben das Attribut"Unlinked" (Eigenschaften, Allgemein - Teil 2).
 
Wenn du ein festes Aufzeichnungsintervall hast kannst du dir den Zeitstempel auch einsparen.
Dann machst du dir pro Monat einen Datenbaustein. Mal angenommen du kannst im Integer speichern hast du 24*4 Werte á 2 Byte = 192 Bytes pro Tag = 5952 Bytes pro Monat.

Das gestaltet die Suche im Datenbaustein nebenbei auch sehr einfach:

Je nach eingegebenem Monat entsprechenden DB öffnen. Die Adresse lässt sich dann einfach aus (Tag -1 )* Anzahl Tageswerte + Anzahl Tagesviertelstunden bestimmen.
 
Ich antworte mal hier wie ich das programmtechnisch meine.
Pro Monat einen DB, z.B.
DB101 = Januar
DB102 = Februar
.
.
.

Im DB dann ein ARRAY[0..2975] OF INT.

Auswertung könnte man dann so machen:
Code:
// zu öffnender Monats-DB
      L     #iMonat
      L     100
      +I    
      T     #iDB
      AUF   DB [#iDB]
// Offset im DB bestimmen
      L     #iTag
      L     1
      -I    
      L     96                          // Anzahl Messwerte pro Tag
      *I    
      T     #iTagesoffset
// Stundenoffset
      L     #iStunde
      L     4                           // 4 Intervalle / Stunde
      *I    
      T     #iStundenoffset
// Intervalloffset
      L     #iMinute
      L     15
      /I    
      T     #iIntervalloffset
// Gesamtoffset im DB bestimmen
      L     #iTagesoffset
      L     #iStundenoffset
      +I    
      L     #iIntervalloffset
      +I    
      T     #iOffset
      L     2                           // Länge eines Messwertes in Byte
      *I    
      T     #iOffset
// Pointerformat für indirekte Adressierung
      L     #iOffset
      ITD   
      SLD   3
      T     #dwAddr
// Wert holen und ausgeben
      L     DBW [#dwAddr]
      T     #iWert
Nur so als grobes Gerüst und nur mal kurz getestet.

Musst dir dann noch deine Jahresauswertung einbauen (wenn Platz ist würd ich die noch 12 Vorjahres-DBs anlegen).
Außerdem sollte die Zeit nach UTC gehen, dann gibts keine Probleme mit Sommer-/Winterzeit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke nochmal für eure Bemühungen.

Ein kleines Programm Beispiel als Anhaltspunkt währe super,wie ich die Messwerte richtig ablege ,und wie ich sie wieder finde,was müsste ich machen wenn ein DB voll ist,oder bei Spannungswiederkehr die weiterspeicherung mache.-->( dort wo die Messung abgebrochen wurde ) unsw. ich hab echt kein Plan wie ich es angehen soll.:confused: :sm23:

danke im vorraus

mfg
 
Ein kleines Programm Beispiel als Anhaltspunkt währe super,wie ich die Messwerte richtig ablege ,und wie ich sie wieder finde,was müsste ich machen wenn ein DB voll ist,oder bei Spannungswiederkehr die weiterspeicherung mache.-->( dort wo die Messung abgebrochen wurde ) unsw. ich hab echt kein Plan wie ich es angehen soll.:confused: :sm23:

Ich beziehe mich mal auf meine Version oben, da fallen nämlich die meisten der von dir genannten Probleme weg.

Wenn du in meinem Programmbeispiel die letzten beiden Zeilen in einen Schreibbefehl in den Datenbaustein änderst, kannst du damit deinen Messwert passend wegspeichern. Als Eingangsparameter Tag/Monat/Stunde/Minute nimmst du dann die Systemzeit aus denen du die Werte als Integer extrahierst. Dann landet der Messwert automatisch zu jeden neuen 15-Minuten Intervall an der richtigen Position.

Wenn du nur 12 DBs verwendest und das Jahr außen vor lässt, arbeitet der Baustein wie ein Ringpuffer mit Platz für Daten von einem Jahr (bei einem neuen Jahr werden die alten Daten überschrieben).
 
danke erstmal,und beim abfragen wie siehts dann aus wie rufe ich die daten dann auf wenn ich z.bsp am op eingebe 01.10.2008 15:00 wie finde ich den passenden messwert ??
 
Zurück
Oben