S7 200 und indirekte Adressierung

Rengel

Well-known member
Beiträge
117
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen!

Ich habe ein kleines Problem mit der indirekten Adressierung.

Als erstes mal eine kurze Beschreibung der Aufgabenstellung:

Ich programmiere grad an einem Ofen rum, der auch erfasste Temperaturwerte abspeichern soll. Hierzu habe ich mir überlegt den Messwert jede viertel Stunde einzulesen.Dieser befindet sich dann in AEW0.
Jetzt wollte ich durch einen Pointer den Wert z.B. an die Adresse VW2000 verschieben und danach den Pointer um 2 erhöhen so das er das nächste mal wenn das Unterprogramm zur Datenspeicherung aufgerufen wird den Messwert in VW2002 speichert.

Kurz gesagt:
Der Wortwert der in AEW0 steht soll an die Stelle übertragen werden, auf die der Pointer zeigt.


Nach reichlich Recherche und suchen habe ich aber eine solche Pointerfkt. in MicroWin noch nicht gefunden.

Das einzige das ich finde sieht so aus:
DerWert auf den der Pointer zeigt, wird nach (z.B.) VW2000 übertragen.


Also genau falsch herum wie ich es brauche:(

Gibt es da eine Möglichkeit oder weiß jemand einen anderen Weg die Aufgabenstellung zu realisieren?


DAnke für alle Tipps und Ideen

MfG

Rengel
 

HaraldG

Active member
Beiträge
28
Punkte Reaktionen
0
Hallo,

was mir spontan dazu einfällt:

die Sache mit den Pointern müsste man auch umdrehen können

MOVW AEW0, *VD2000

Demnach müsste das AEW in die Adresse geschrieben werden, die im VD2000 steht. Startadresse in VD2000 angeben und dann Viertelstündlich Inkrementieren

:oops: Keine Ahnung ob's wirklich funktioniert - interessiert mich aber
selbst.



Nächste Möglichleit:

BMW VW2000, VW2002, 100
MOVW AEW0, VW2000

1. VW2000 nach VW2002 schieben; Anzahl: 100 Worte, ältester Wert
steht also im VW2100 (?)
2. Analogwert nach VW2000 transferieren
Der älteste Wert im VW2100 wird automatisch überschrieben.

Diese Variablenschieberei funktioniert allerdings umgekehrt wie Du es beschrieben hast:
"Wert z.B. an die Adresse VW2000 verschieben und danach den Pointer um 2 erhöhen so das er das nächste mal wenn das Unterprogramm zur Datenspeicherung aufgerufen wird den Messwert in VW2002 speichert."


Dann gibt's ja noch die Sache mit den Tabellenoperationen (FIFO, LIFO, etc.). Bin bis jetzt noch nicht in Versuchung gekommen dies zu nutzen.


Wie gesagt, mit der ersten Sache, mit dem Pointer, bin ich mir nicht sicher ob's funktioniert - der zweite Vorschlag müsste aber gehen (so würd' ich's machen - iss aber Geschmackssache)


MfG

Harald
 

hubert

Well-known member
Beiträge
376
Punkte Reaktionen
25
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Rengel.

Das was HaraldG mit dem Pointer sagt stimmt schon. Ich würde es auf jedenfall über Pointer machen ist deutlich einfacher. Als Beispiel.
Alle 15 Minuten wird die Temperatur gesichert. Nach 100 soll der Pointer neu erstellt werden, somit wird bei der nächsten Sicherung der älteste Wert überschrieben.

// Pointer erstellen
LDN M1.0 // Pointer erstellen
OW>= VW2, +100 // Nach 100 Sicherungen Pointer neu erstellen (OPTION)
MOVD &VB2000, VD0 // VD0 als Pointer auf VB2000 erstellen
MOVW +0, VW2 // Lösche Istanzahl der Sicherunge (OPTION)
S M1.0, 1 // Pointer wurde erstellt
// Daten sichern
LD M2.0 // Taktflanke alle 15 Minuten
MOVW AEW0, *VD0 // Analogwert an Pointer übertragen
+D +2, VD0 // Zugriffsadresse in VD0 für Pointer um 2 erhöhen
INCW VW2 // Anzahl der Sicherung (OPTION)

Solltest du nach fragen zu Pointerprogrammierung bei der S7-200 haben, so kann ich dir gerne weiterhelfen.

MfG

Hubert
 
OP
R

Rengel

Well-known member
Beiträge
117
Punkte Reaktionen
0
Hallo!

Danke euch!

Auf die Idee mit dem *VD2000 als Zieladresse hätte ich aich selber drauf kommen können :oops: Manchmal gibt es Tage, da sieht man den Wald vor lauter Bäumen nicht ;)

Werde das am Wochenende mal probieren, eher werde ich es leider wohl nicht schaffen
 
Oben