Messdaten Speichern in DB

Pidi

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen !

Ich bin ein Anfänger in Sachen SPS und habe leider gerade ein kleines Problem:

CPU: 313C
Software: Step 7 V5.4 SP3

Und zwar lese ich mittels einer Analogkarte Messwerte ein, die sich ständig ändern.
Diese Werte möchte ich nun in EINEM DB fortlaufend Speichern.

folgends funktioniert aber leider schreibe ich da ja nur auf die Adresse 0

L PEW752
T DB1.DBW 0

Wie kann ich die Adresse variabel machen ?

Habe nun mittlerweile einiges herumprobiert und auch die SuFu genutzt bin aber bis jetzt nur soweit gekommen :confused:

Vielen Dank

Gruss Pidi
 
Dazu müßt du die Adresse erhöhen, das geht mit indirekter Adressierung. Siehe dazu in der FAQ des Forums unter FIFO. LIFO, Pointer, Indirekte Adressierung.

Hier hat jemand mal einen Baustein für so etwas in der Art geschrieben, kannst es dir ja mal ansehen:

http://www.sps-prog.de/Download/download.html

2. Download
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In Kurzform kann das auch so aussehen:

Code:
      UN    M    180.0                  //Speicherimpuls
      SPB   ENDE

      L     MW   100                    //Index der Sprungadresse
      SLD   3
      LAR1  

      L     PEW  752
      AUF   DB     1
      T     DBW [AR1,P#0.0]

      L     MW   100
      L     2
      +I    
      T     MW   100

ENDE: R     M    180.0

Zum Speichern einmalig M180.0 setzen.
Achtung, du mußt MW100 irgendwann mit dem Startwert (hier 0) füllen, Außerdem mußt du kontrollieren, wann MW 100, also dein Index zu groß für den DB wird, sonst geht die SPS in Stop.

Erhöhung des Index immer um 2, da ein Wort aus 2 Byte besteht. Geht auch anders, aber so zeigt der Index immer das Wort an, das er beschreiben würde, also Index = 100 --> DB1.DBW100
 
Hallo

Vielen Dank für die schnelle Hilfe !

Das erste Programm funktioniert bei mir leider nicht, da ich Kein SCL habe.

Das Beispielprogramm von dir funktioniert soweit recht gut !!
Nur nun die Frage, wie kann ich die Größe des DB ändern -> Wenn ich einen Db neu erstelle kann ich maximal bis MW100 = 4 schreiben und dann geht die SPS in STOP (Hast Du ja bereits erwähnt das ich da aufpassen muss)

Wie und bis zu was für einem maximal Wert kann ich den DB erweitern ?

Gruss Pidi
 
Hallo,

@Profis... sagt mir falls ich falsch liege :)

Ein DB darf max. 8kByte groß sein

D.h. die legst innerhalb deines DB ein Array an mit 4000 Worten und schreibst deine Werte wie im Bsp. rein. Achte darauf, dass dein MW100 nicht größer als 8000 wird.

Schöne Grüße

Philipp
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

@Profis... sagt mir falls ich falsch liege :)

Ein DB darf max. 8kByte groß sein

D.h. die legst innerhalb deines DB ein Array an mit 4000 Worten und schreibst deine Werte wie im Bsp. rein. Achte darauf, dass dein MW100 nicht größer als 8000 wird.

Schöne Grüße

Philipp

Das mit dem Array ist die schnellste Methode, aber ich glaube bei einer S7-300 waren es doch 16K, by the way, 8k reuchen vielleicht bereits :p.
Dynamisch kann man einen DB leider nicht verändern, du mußt ihn von vornherein für die größte Datenmenge auslegen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
bin zwar kein profi, aber du liegst falsch:

bei 312 bis 315 sind es max 16kB, 317, 319 und alle 400er max 64kB

Hallo,

genau euch hab ich gemeint @Ralle & vierlagig :ROFLMAO:

Das es bei einer 400er 64kB sind war mir klar... ich dacht nur immer es wären 8k... hab mir eben aber den Spaß gemacht und nachgeschaut...
Ihr habt natürlich recht!

Vielen Dank fürs aufklären!

Schöne Grüße

Philipp
 
Dynamisch kann man einen DB leider nicht verändern, du mußt ihn von vornherein für die größte Datenmenge auslegen.

kann man wohl! wenn man den DB während der laufzeit erstellt mit SFC22 CREATE_DB

... "ja", wird der ralle jetzt sagen, "das ist aber nicht dynamisch ändern!" ... "ja", sagt der 4L dann, "denk doch mal weiter" ;)

wenn du den DB vergrößern oder verkleinern möchtest, legst du einen zweiten an, mit der gewünschten neuen länge und kopierst mit SFC20 BLKMOVE das ganze gedöns da rein, mußt natürlich beim verkleinern auf die neue länge achten. und den alten DB löschst du mit SFC23 DEL_DB. brauchst dafür quasi nur zwei speicherplätze für jeweils eine DB-nummer, den bereich kann man bei der SFC22 festlegen ... bei einer abfrage mußt du dann nur noch gucken auf welchen DB man zugreift ... wenn man immer auf den selben zugreifen möchte, muß man halt zwei mal kopieren und zweimal löschen...
 
kann man wohl! wenn man den DB während der laufzeit erstellt mit SFC22 CREATE_DB

... "ja", wird der ralle jetzt sagen, "das ist aber nicht dynamisch ändern!" ... "ja", sagt der 4L dann, "denk doch mal weiter" ;)

wenn du den DB vergrößern oder verkleinern möchtest, legst du einen zweiten an, mit der gewünschten neuen länge und kopierst mit SFC20 BLKMOVE das ganze gedöns da rein, mußt natürlich beim verkleinern auf die neue länge achten. und den alten DB löschst du mit SFC23 DEL_DB. brauchst dafür quasi nur zwei speicherplätze für jeweils eine DB-nummer, den bereich kann man bei der SFC22 festlegen ... bei einer abfrage mußt du dann nur noch gucken auf welchen DB man zugreift ... wenn man immer auf den selben zugreifen möchte, muß man halt zwei mal kopieren und zweimal löschen...

LOL, ich setz mal rein, was ich dir im ICQ gesagt habe, bevor ich deinen Beitrag gelesen hab:

4L:
btw: dynamischesdb-vergrößern ist möglich!

Ralle:
ach ne
klar, db löschen und neu erzeugen
vergiß das
ist doch Vollmist
Da wir ohnehin i.d.R. inzwischen Speed7 einsetzen, ist das Speicherplatzproblem nicht mehr ganz so akut, also gleich den DB in max. Länge erzeugt. Mit der Version, die 4L vorschwebt bringt man das Gebälk der SPS schnell zum krachen :)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Grüß Gott !

So nach langem Suchen habe ich nun endlich rausgefunden wie man ein Array erzeugt(ich glaube ich brauch echt noch nen Grundlagenkurs)

So komme ich jetzt erst einmal weiter.

Vielen Dank allen beteiligten !!

Gruss Pidi
 
Mit der Version, die 4L vorschwebt bringt man das Gebälk der SPS schnell zum krachen :)

wieso? muß natürlich sauber umgesetzt sein und keine daten geschrieben oder gelesen werden, während man den baustein vergrößert/verkleinert ... ansonsten ist das ne feine sache - wie oft macht man denn sone größenanpassung?

um auch sicher zu gehen, dass alle daten rein passen, kann man zusätzlich mit SFC24 TEST_DB die länge ermitteln ...
 
wieso? muß natürlich sauber umgesetzt sein und keine daten geschrieben oder gelesen werden, während man den baustein vergrößert/verkleinert ... ansonsten ist das ne feine sache - wie oft macht man denn sone größenanpassung?

um auch sicher zu gehen, dass alle daten rein passen, kann man zusätzlich mit SFC24 TEST_DB die länge ermitteln ...

Wobei man da auch gleich einen DB machen kann der den CPU Speicher zur Hälfte belegt, denn für die ganze Kopierprozedur verbraucht man ja mindestens doppelt soviel Speicher als der DB eigentlich benötigen würde.

OK, wenn man von 20 Messstellen redet dann lohnt sich das vielleicht (ein DB nach dem anderen vergrössern), aber sonst?

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ehrlich gesagt ist es mir scheißegal ob das sinn macht, es geht! das ist mir wichtig und wenn man einen gesunden spieltrieb sein eigen nennt findet man garantiert eine anwendung!

man verbrät übrigens kaum speicher, da die SFCs sowieso schon alle auf der CPU vorhanden sind...
 
@4L

Ja klar, man kann immer viel mehr tun als Sinn macht! Das ist dann in den Programmen zu sehen, die teilweise so in SPS-en rumschwirren und Instandhalter und Produzenten zum verzweifeln bringen. :ROFLMAO:
 
@ralle:

du weißt doch selber wie akribisch ich kommentiere, hast es schließlich schon gesehen

und heulender instler bin ich selber
 
Zurück
Oben