# Zuordnung und Schutz der Speicherbereiche



## Christoph_BS (11 Mai 2010)

Hallo Leute,

ich bin relativ neu in der SPS-Programmierung. Ich entwickel zur Zeit auf einer S7-224XP CPU mit Step 7. 
Man legt ja eine Vielzahl von Variablen (bzw. Speicherbereiche an). Die Speicherbereiche koennen ja von 0 bis mehrere Tausend gehen.
Wie lege ich jetzt am sinnvollsten meine Variablenpositionen fest?
Fange ich bei Speicherbereich  0 an, oder bei z.B. 1000 ? . Lege ich zuerst die Bitpositionen fest (V) und dann die Bytes (VB) und schließlich die Words (VW).
Immoment ist bei mir alles durcheinander.
Des Weiteren habe ich oft das Problem, dass ich mehrere Strings verwendet. Die Anfangsposition ist ja dann z.B. der Speicherbereich VB 1000. Wenn ich jetzt jedoch eine andere Variable auf Speicherbereich VB 1001 lege und der String z.B. drei Zeichen lang ist, so wird die Variable auf 1001 ohne Warnung überschrieben. Kann ich mich dagegen irgendwie schützen ?


----------



## Beren (11 Mai 2010)

*gelöscht*


----------



## Christoph_BS (11 Mai 2010)

Danke für die schnelle Antwort. Ich muss mich noch mit den Begriffen auseinander setzen, die man bei SPS-Programmierung verwendet.
Ne ich meine das, was ich unter Symboltabelle eingebe.
Also Symbol und dann zugehörige Adresse.
Ich typisiere in dem Sinne, dass ich über den Speicherbereich (oder dann besser Symbol) sage, dass es sich um V,VB,VW (Bit,Byte,Word) handelt. Aber für Strings kann man nur die Anfangsadresse angeben, es gibt keinen extra Datentyp String, wo ich auch die Länge angeben kann. Da die Stringlänge meiner verwendeten Strings variabel ist, können auch schonmal 10- 50 Speicherbereiche (Adressen) ab Anfangsposition überschrieben werden.
Merker sind "nur" für das Debuggen wichtig oder?


----------



## Beren (11 Mai 2010)

*gelöscht*


----------



## Christoph_BS (11 Mai 2010)

Ok,
Ich habe bisher immer gedacht, dass der Datenbaustein zum initialisieren ist.
Ich könnte dort z.B. schreiben 
RecMsg : VB1600 "                  " //20 Bytes Speicher reservieren
Meinst du das so ?
Das ist schonmal eine gute Idee, um vorzubeugen, dass mein String RecMsg ausversehen andere Variablen überschreibt, wenn ich die maximale Länge des Strings kenne.
Aber ich muss trotzdem vorher in der Symboltabelle RecMsg als Symbol und VB1600 als Adresse festgelegt haben, sonst bekomme ich ein rotes Fehlerkreuz im DB.
Zurück zu meiner ersten Fragen, welche Adresse sollte ich den z.B. RecMsg geben, ich habe jetzt einfach VB1600 zugeordnet, es könnte aber genausogut auch VB100, VB233 oder sonstwas sein. Ich mache das immoment willkürlich.


----------



## Beren (11 Mai 2010)

*gelöscht*


----------



## PN/DP (11 Mai 2010)

*S7-200*



Beren schrieb:


> Leg einfach mal einen DB in Deinem Projekt an. Dann erklärt sich das von selbst. (Hilfe benutzen....)





Christoph_BS schrieb:


> Ich entwickel zur Zeit auf einer S7-224XP CPU mit Step 7.


Einen DB anlegen geht nicht. Es geht hier um S7-200 und Step7-Micro/WIN.



Christoph_BS schrieb:


> Zurück zu meiner ersten Fragen, welche Adresse sollte ich den z.B. RecMsg geben, ich habe jetzt einfach VB1600 zugeordnet, es könnte aber genausogut auch VB100, VB233 oder sonstwas sein. Ich mache das immoment willkürlich.


Bei Step7-Micro/WIN zählt nur die eigene Ordnungsliebe und Disziplin.
Da muß man sich vorher Gedanken machen, welche Variablen zusammengehören, 
und die dann selber zusammen anordnen. Zwischen den logisch zusammengehörenden
Variablen-Gruppen genügend Reserve-Platz lassen für spätere Erweiterungen der 
Gruppe ohne Adressverschiebung. Man könnte sich diese Variablengruppen in dem 
einen Datenbaustein auch rein gedanklich als mehrere DB vorstellen.

Also vorher abschätzen, wieviel Speicherplatz eine Funktionsgruppe etwa benötigt
und dann mit genügend Platz die Variablen auf den absoluten Adressen festlegen.
Das kann am Anfang ruhig alle 1000er Adressen geschehen, der Variablenspeicher 
der 224XP ist groß ...

Alle Daten, die nach "draußen" gehen (TD200, Kommunikation), auf besonders "schöne" 
einprägsame Adressen legen. Oder es wird von außen vorgegeben, auf welchen Adressen
die liegen müssen/sollen.

Speicherbereiche lassen sich nicht voreinander schützen!
Wenn man Strings verarbeiten will, dann vorher abschätzen, wie lang die maximal 
werden können und eben diesen Maximalplatzbedarf ab der String-Anfangsadresse
freihalten.

Gruß
Harald


----------



## Beren (11 Mai 2010)

*gelöscht*


----------



## Christoph_BS (12 Mai 2010)

Kein Problem,
vielen Dank für eure Hilfe.


----------

