Analogwerte nacheinander in DB´s speichern

Drexta

Member
Beiträge
16
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich möchte 5 verschiedene Drucksensoren mit einer 8x12 BIT Analogkarte einlesen und speicher. Es sollen soviele Daten wie möglich über den längst möglichen Zeitraum gespeichert werden, die genaue Datenerfassung ist jedoch vorrangig.

Das Speichern in einem DB funktioniert bereits, auch das weiterspringen in den nächsten DB sobald dieser voll ist. Jedoch ist dies ziemlich einfach und somit ziemlich groß geschrieben. Für jeden DB gibt es ein neues Netzwerk. Die Funktion mit dem Array ist ebenfalls bekannt.

so sieht der AWL Code für einen DB aus, der sich pro DB wiederholt.
Code:
      UN    M      2.1                  // DB der Reihe nach aktivieren
      SPB   NEX1            
      UN    M    180.0
      SPB   END1
 
      L     "POINTER 1"             // MW100 
      SLD   3
      LAR1  
      L     "DRUCK 1"                // PEW 256 Drucksensor 1
      AUF   "Datenspeicher Stufe 1-1" // DB 1
      T     DBW [AR1,P#0.0]
      L     "POINTER 1"
      L     2
      +I    
      T     "POINTER 1"
END1: R     M    180.0
NEX1: NOP   0

Gibt es eine kompakte Möglichkeit diese große Datenmenge zu speichern.
Folgende Hardware steht zu verfügung:

Siemens S7 314
8MB Speicherkarte
Analalogkarte 331 8x12Bit

Danke schonmal für die Antworten
 

Sinix

Well-known member
Beiträge
1.588
Punkte Reaktionen
216
Hallo,
aus deiner Beschreibung entnehme ich wohl folgende Frage:
Es sollen soviele Daten wie möglich über den längst möglichen Zeitraum gespeichert werden,
...
Gibt es eine kompakte Möglichkeit diese große Datenmenge zu speichern.

Die Daten in den DB speichern ist eine Sache, je öfter - desto schneller ist der Speicher voll.
Mittelwertbildung oder ähnlich würde die Datenmenge schonmal reduzieren.
Interessant wäre was du mit den Daten vor hast und wie oft der Drucksensor abgefragt werden soll?

MfG MK
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
Zuviel Werbung?
->Hier kostenlos registrieren
Wenn Du kein Komprimierungsverfahren verwenden willst, wirst Du pro Wert und pro Zeiteinheit ein Wort brauchen.
Das hast Du auch schon programmiert. Was ist nun die Frage?
Kompakt? Meinst Du mit weniger Code? Dann eventuell einen überlangen Adresspointer generieren, und einen Code schreiben, der dann den gewünschten DB vor dem Schreiben öffnet.
Beispiel:
DB-Länge 16384 Byte
Für Messwert 1 hast Du DB1, 2, 3, 4, 5, ... bis 10 (die müssen natürlich hintereinander liegen)
Ist der Adresspointer nun auf zB 35000, musst Du den DB3 öffnen und in Adresse (35000 - 2x16384) schreiben.


PS: Der M180.0 ist der Trigger fürs Speichern nehme ich an.
Das nicht erfüllte "SPB END1" macht das VKE1 wenn nicht gesprungen wird "1/true"", daher wird nach der Speicherung des Wertes der M180.0 zurückgesetzt. Ich würde aber dennoch ein SET davorschreiben, weil es so nicht sehr hübsch ist.
Kann aber sein, dass Du was ganz anderes damit vorhattest, ist mir nur aufgefallen.
 
OP
D

Drexta

Member
Beiträge
16
Punkte Reaktionen
0
Ich möchte die Druckwerte einfach nacheinander Speichern und wenn die max. Datenmenge erreicht ist soll er von vorne wieder übnerschreiben.

Unser Code sieht nun folgendermaßen aus:

Code:
UN    M    180.0                                       // gibt takt vor (erstmal provisorisch)                          
      SPB   ENDE
      L     MW   100
      SLD   3
      LAR1  
      L     "DRUCK 1"
      AUF   DB [MW 10]                                         // Auswahl nächster DB wenn voll
      T     DBW [AR1,P#0.0]                                 // registerindirekter Pointer
      L     MW   100                                              //Pointer
      L     2                                                           // Pointer zwei stellen hoch (int)
      +I    
      T     MW   100
ENDE: R     M    180.0
      NOP   0




das Adressierungsverfahren ist nun Registernindirekt geschrieben. Ich möchte das ganze aber Speicherindirekt haben, da ich nachher 5 veschiedene Messwerte gleichzeitung aufnehmen möchte.
Wie kann man das ganze umschreiben damit es Speicher indirekt läuft.

Danke
 
Zuletzt bearbeitet:

IPC Bernhard

Well-known member
Beiträge
185
Punkte Reaktionen
13
Hallo

Wie lange soll das vor sich hinlaufen?
Was ist der Sinn dahinter, diese Werte in
der Steuerung zu haben und nicht irgendwo
in einer Visualisierung als Trend?

Wenn es um eine kurzweilige Diagnose geht könntest du auch
einen PC mit Flexible Runtime nehmen und einen Trend
anlegen.

Oder wenn es um Sptizen bzw. Ausreisser oder
ein Drift von einem Sensor geht
dann reicht doch ein Eintrag in den DB mit dem Wert und
dem Zeitstempel dazu.

Gruß
Bernhard
 
Oben