MW und DW

waldy

well-know member
Beiträge
2.124
Reaktionspunkte
148
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo, ich hätte gerne eine frage,
wenn ich schreibe in Programm MW1
und dann brauche ich noch eine DW,und wenn schreibe ich DW1
ist das Richtig oder Falsch
liegen DW1 und MW1 in gleiche Speicherbereich
oder wenn schreibe ich MW1 , dann soll ich DW3 schreiben
könnten Sie bitte unterschied in speicher bereich zwischen MW udn DW erklären
gruß waldy
 
waldy schrieb:
wenn ich schreibe in Programm MW1
und dann brauche ich noch eine DW,und wenn schreibe ich DW1
ist das Richtig oder Falsch
Das ist nicht falsch, aber bei der Benutzung von MW1 beachte, dass es die BYTES MB1 und MB2 umfasst. Das nächste benutzbare Merkerwort ist dann MW3. Die meisten Leute ziehen es vor, Merkerworte auf gerade Adressen (0,2,4,6..) zu legen.
liegen DW1 und MW1 in gleiche Speicherbereich
Nein
oder wenn schreibe ich MW1 , dann soll ich DW3 schreiben
könnten Sie bitte unterschied in speicher bereich zwischen MW udn DW erklären
gruß waldy
Es sind verschiedene Speicherbereiche. MWs existieren immer,
DWs nur innerhalb von Datenbausteinen(DB), die Du erst erzeugen musst (entweder auf dem Programmiergerät oder mit Systemfunktionen z.B. beim Programmstart oder vor dem ersten Gebrauch). Jeder DB erhält einen eigenen Speicherbereich entsprechend seiner Länge. Daher ist das Datenwort DW2 in DB4 ein anderes als das DW2 in DB3.
Du must angeben, welcher DB gemeint ist. Bei der S5 benutzt Du den Befehl
A DB 4
und ab jetzt werden alle Datenworte aus DB4 genommen, bis Du einen anderen Baustein benutzt.
Bei der S7 heißt das AUF DB 4. Zusätzlich kannst Du noch bei jedem Befehl ausdrücklich angeben, welcher DB gemeint ist: DB4.DBW 12 benutzt Datenwort 12 aus DB4.
Bei der S7 werden DB-Adressen byteweise gezählt wie die Merkeradressen auch.
Bei der S5 ist das anders: Die Adresse zählt wortweise hoch. Es gibt also ein Datenwort 0 und ein Datenwort 1, die beide komplette 2-Byte Worte sind und sich nicht überschneiden. Um auf Bytes der S5-Datenworte zuzugreifen, gibt es die Adressierung linker und rechter Hälften: DL1 und DR1 meinen das linke oder rechte Byte im DW1.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo, Vielen Dank für ganz gute erklärung
und jetzt möchte noch was zu fragen
ich habe gesehen dass, z.B. DB1 steht in FB x ganz oben , am anfang programme(das ist klar).
Und meine Frage- kann ich DB1 in OB1 zu schreiben und damit DB1 wird immer seit Start Programme eingeschaltet / exestieren

gruß waldy
 
waldy schrieb:
hallo, Vielen Dank für ganz gute erklärung
und jetzt möchte noch was zu fragen
ich habe gesehen dass, z.B. DB1 steht in FB x ganz oben
Tut mir leid, ich verstehe nicht gut, was du meinst. Eine Anweisung A DBx oder AUF DBx steht insofern oft am Anfang, da im Rest des Bausteins damit gearbeitet wird.
, am anfang programme(das ist klar).
Und meine Frage- kann ich DB1 in OB1 zu schreiben und damit DB1 wird immer seit Start Programme eingeschaltet / exestieren
Meinst du hier wieder die Anweisung den DB zu benutzen, also
A DB 1
oder AUF DB 1 ?
Die kannst du an den Anfang des OB1 stellen, wenn du nur einen einzigen DB benutzt.
Du kannst solche Dinge aber auch einfach ausprobieren. Das geht schneller, als wenn du hier nach allem fragst. Du kannst nichts kaputtmachen; die SPS geht höchstens in Stop. Dann solltest du bei der S5 im PG die Funktion "USTACK" aufrufen, um die Ursache zu ermitteln. Du bekommst dann z.B. angezeigt, dass der aufgerufene DB nicht vorhanden ist, außerdem die Adresse der Anweisung, die den Fehler verursacht hat. Bei der S7 verwendest du die Funktion Zielsystem/Diagnose.
Du kannst der SPS auch beim Abarbeiten des Programms zusehen, bei der S5 mit der Funktion "Testen", bei der S7 über den Menüpunkt "Beobachten". Dann schreibst du 2 DBs mit verschiedenem Inhalt und kannst sehen, welcher benutzt wird.
 
Die kannst du an den Anfang des OB1 stellen, wenn du nur einen einzigen DB benutzt.

bin ich mir nich sicher ob das funktioniert.
zumindest die s5(95u) setzt nach JEDEM aufruf eines ob das register in dem die db nummer steht wieder auf 0.

und wenn im ob1 ein db aufgerufen wird bin ich mir nicht sicher ob dieser in einem anderen baustein noch offen ist...

zumindest ist das so wenn ien zeit oder alarm ob das programm unterbricht.
 
hallo,
na ja, bei mir das ist immer problemmer, kurz zu beschreiben und damit es ist nicht immer steht klar drauf , was möchte ich aussagen
1- "ich habe gesehen dass, z.B. DB1 steht in FB x ganz oben "
ich wolte nur sagen, das ich habe andere geschrieben Programme gesehen habe und da steht am anfang Programme befehl
A DB1
und wenn baustein ist zu, dann diese DB ist auch weg und diese DB kann man nur in bestimte Baustein bearbeiten

und ich möchte fragen
kann man in OB 1 sofort schreiben Befehl
A DB 1
damit kann ich von jede PB, FB aus diese DB1immer ständig(in jede zeit zugreifen kann) die DW1-DW10 zu lesen und weiter bearbeiten
gruß waldy
 
halllo, zusammen,
wie immer eine Frage,
z.B. in FB1 bis FB5 brauche gleiche DW1-DW10 abfragen,
deswegen habe ich gedacht dass ich darf DB 1 in OB1 offnen
OB1
A DB1
und dannjede mal nach gebraucht DW1 in FB1 FB5 ausrufen

und dann in nächste FB6-FB8 brauche ich noch eine DB 2
darf ich zweite DB in FB6 schon offnen und folgen DW als DW 11-DW20

oder wie könnte ich das realiesieren, das in FB1 - FB5 könnte ich gleiche DW abrufen
und in andere DB2 ab FB6 könnte ich mit andere DW bearbeiten
gruß waldy
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es wird immer nur mit einem DB gearbeitet. Wenn du also in FB 1 bis 5 mit DB1 gearbeitet hast un dann FB6 aufrufst, der mit DB2 arbeiten soll, schreibst Du "A DB2" vor dem Aufruf von FB6. Soll in FB6 mit Daten aus beiden DBs gearbeitet werden, mußt du jedesmal den DB wechseln:
Code:
A DB 1
L DW 6
A DB 2
T DW3
Kopiert den Wert von DW6 des DB1 nach DW3 des DB2. Alle nachfolgenden Operationen mit DWs (oder DL/DR) benutzen nun DB2, wenn du nichts weiter angibst.
 
Zurück
Oben