Step 7 DB Array Any Pointer

heiling36

Level-2
Beiträge
59
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute!!

Bin noch ganz frisch in dem Geschäft, deshalb kenn ich mich noch nicht so aus!!

Mein Problem:

Ich will einen Any Pointer Basteln der in einem DB (Array) einen Wert ausließt und in einen anderen DB reischreibt.

Weiter wird hierfür über das HMI eine Abfragezahl angegeben welche die Array zahl ist.

Anschließend werden die Daten am HMI angezeigt. (Dies macht mir keine Sorgen)

Kann mir da wer helfen??

MFG
Stefan

Step7 v5.5 SP4
Simatic 400
 
Zuletzt bearbeitet:
Hallo,
dafür brauchst du erstmal noch keinen ANY-Pointer (jedenfalls lese ich das aus der Beschreibung so nicht heraus) sondern "nur" das Wissen um die indirekte Adressierung. In dem Link findest du eine gute Beschreibung dazu. Lies dich doch da erstmal ein ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, den Link hab ich vorher schon mal durchgelesen, hab ihn auf meiner Suche schon mal gefunden.

Tja mein Chef sagt ich muss es mit einem Any Pointer machen, als er dies gestern sagte war das das erstemal das ich den Begriff Any Pointer überhaupt hörte!!
 
Tja mein Chef sagt ich muss es mit einem Any Pointer machen, als er dies gestern sagte war das das erstemal das ich den Begriff Any Pointer überhaupt hörte!!

und natürlich will man ungern schlauer sein als der chef ... aber vielleicht bastelst du dir eine lösung mit "indirekter adressierung" zurecht und fragst dann deinen chef, ob er das mit ANY Pointern meinte - wenn er ja sagt, darfst du weiterhin gern schlauer sein, wenn nein und er weiterhin auf ANY besteht übrigens auch...
 
Tja ... wenn dien Chef das so sagt dann mußt du es ggf. auch so machen.
Dann mußt du dir den ANY-Pointer auf deine Quell-Variable und den auf deine Ziel-Variable zusammenbauen und dann mit Blockmove (SFC20) den Inhalt des Einen auf den Anderen übertragen ... ist ein bißchen "mit Kanonen auf Spatzen schiessen ..." ... aber es ist ja vielleicht auch einen Art Lerneffekt daran gekoppelt ...

Was hast du denn schon selber dazu geproggt ...?
Was verstehst du beim ANY-Pointer konkret nicht ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ich hab mal begonnen die AR und den geöffnete DB No auf ne Temp Variable zu speichern, um dann zum schluss diese Daten wieder einzuspeichern.

Hab mir aus Foren und Simatic Hilfe mal was gebastelt (siehe Anhang)

Im Grunde is es so das ich 2 Pointer angelegt habe, der eine ließt die Daten aus und überspielt sie auf den anderen, die Variablen sind derzeit noch alles IN Variablen, sprich kann sie von aussen dann Beschreiben. Aber wie gehts nun weiter???

Aja und natürlich is ein lerneffekt damit verknüpft, hat er auch so gesagt!!

Interresant wäre auch zu wissen warum diese Adressierung W#16#1002 , was bewirkt die?? hab auch schon in nem Pointer gesehen der war mit DW#16#7FFFF adressiert???????
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    24,7 KB · Aufrufe: 67
Zuletzt bearbeitet:
W#16#1002 ist die mir bekannte Kennung für einen ANY-Pointer.

In deinem Programm beschreibst Du 2x hintereinander das Doppelwort 6, einmal mit der DB-Kennung und einmal mit der Anfangsadresse.
Die must Du vorher verodern.
 
Aja stimmt, hab die DB-Kennung mal rausgenommen, brauch ich glaub ich nicht.

Komm ja mit nem Pointer in den FB rein, dieser Zeigt auf den Anfang des ersten Arrays.
So nun frag ich mich wie ich weiter tun soll, hab inzwischen wiedermal einiges verändert am Prog!
Mal zur Grundinfo, 1 Array is 26 Byte lang, das es auszulesen gilt. Das erste mir wichtige startet bei 44.0!
Spiele jetzt das ganze mal 1 mal durch da ich insgesamt das ganze 3 mal brauche, sich aber nur die adressen ändern.

Jetzt mal eine Frage, ich habe eine IN Variable als Any deklariert, hier liegt ein Pointer drauf mit der Startadresse meines ersten wichtigen arrays (sprich 44.0)
Kann ich jetzt diese Variable direkt nutzen, auf einen anderen Pointer kopieren, und diesen dann ausgeben??
Sprich ich versuche die IN Variable ins AR1 zu laden, hab den Datentyp Wort deklariert, und 13 Wiederholungen eingestellt, bedeutet 26 Byte oder??
Danach hab ich die Startadresse ausgerechnet über anforderungsnummer mal 26, da ich jetzt mal davon ausgehe das die adresse 0.0 in wahrheit die adresse 44.0 im DB ist!? Ist das korrekt soweit??

MeinenAnfang sieht man in der Anlage.

Bin jetzt die 3. Woche in dem Job, deshalb bin ich mir fast sicher das ich irgendwas übersehe!!
 

Anhänge

  • Unbenannt1.PNG
    Unbenannt1.PNG
    5,4 KB · Aufrufe: 36
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute!!
Problem gelöst, hab einfach zu kompliziert gedacht!! Der Pointer is eigentlich gar ned so kompliziert wie er aussieht, aber für alle die Anfangs genauso Planlos sind wie ich will ich mal meine Lösung hier reinstellen. Zunächst zur Grundinfo, hab alles in nen Multiinstanz FB geschrieben, an der Stelle wo dieser FB aufgerufen wird hab ich einen Pointer an die IN Variable gelegt, In Variable mit Name iRefPosTyp1 und Typ Any!!

Im FB steht dann der Code im Anhang, und schon funktioniert die Geschicht.

Aja bei der Out Variable steht ebenfalls ein Pointer der anzeigt wo im gewünschten DB der Datensatz beginnt!!

Hoffe ich konnte vielleicht auch mal wen helfen :)
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    12,7 KB · Aufrufe: 59
Zurück
Oben