# Step 7: Any Pointer aus dem FB führen



## KNEFI (20 Januar 2010)

Hallo leute ich habe mal ne frage...


Ich arbeite mit dem sfb15 "put" in einem FB. Um die ziel adresse frei eingeben zu können möchte ich das beinchen ADDR_1 und SD_1 nach aussen als IN Variable legen...

Hat da wer vllt ne lösung????


----------



## Larry Laffer (20 Januar 2010)

Hallo,
du mußt die Inhalte des von extern übergebenen ANY-Pointers an einen internen (z.B. im TEMP-Bereich angelegten) ANY-Pointer übergeben und diesen kannst du dann weiterreichen ... Anders geht es nicht ...

Gruß
LL


----------



## KNEFI (20 Januar 2010)

danke für deine antwort..

aber so ganz habe ich das noch nicht kapiert vllt kannst du es weiter ausführen?
ich habe ja einen FB 100 und in diesem rufe ich dann den sfb PUt auf.
nun möchte ich "einfach" das bein addr_1 nach aussen an dem FB100 legen um dort meine zieladresse (Pointer) angeben zu können.


----------



## Paule (20 Januar 2010)

Du kannst nicht den Input eines FB gleich an den nächsten FB durchreichen, der in dem ersten aufgerufen wird.
Wie Larry es sagt, Du musst erst den Pointer auf eine Temp legen.


----------



## KNEFI (20 Januar 2010)

entschuldigt meine blöde frage aber

ähh ich lege eine temp variable an und muss sie von außen beschreiben? vllt erklärt ihr mir wie ihr das meint schritt für schritt wäre euch sehr dankbar dafür


----------



## Larry Laffer (20 Januar 2010)

Hallo,
zum Thema ANY kopieren bitte mal hier lesen ...

Ansonsten - du kannst im TEMP-Bereich deines Bausteins Variablen beliebiger Typen anlegen - das geht genauso, wie mit den IN- oder OUT-Parametern des Bausteins ...

Gruß
LL


----------



## KNEFI (21 Januar 2010)

Also irgendwie Funktioniert das nicht.......Ich habe meinen haupt FB indem ich als multiinstanz meinen FB15 "PUT" aufrufe und nun möchte ich einfach nur den INOUT ANY kontakt nach außen an meinem Haupt FB führen..Egal was ich mache er mag nicht den Any pointer in die IN Variablen des Haupt FBs schreiben....in den Temporären bereich kann ich dann eine any variable anlegen die ich auch an den Put baustein schreiben kann. Aber diese temporäre variable lässt sich genauso wenig von außen oder von innen mit einer In variablen beschreiben..

vllt könnt ihr mir ein programm abschnitt hier einfügen?? schön wär AWL oder FUP


----------



## Larry Laffer (21 Januar 2010)

hast du dir das Beipiel hinter meinem Link angesehen ?
Wie wäre es, wenn du dein Programm hier mal einstellen würdest - dann könnte man ggf. auch etwas dazu sagen ...

Gruß
LL


----------



## KNEFI (21 Januar 2010)

Ja klar mache ich gerne......


----------



## Larry Laffer (21 Januar 2010)

Larry Laffer schrieb:


> hast du dir das Beipiel hinter meinem Link angesehen ?


 
*HIER*

...


----------



## KNEFI (21 Januar 2010)

Hi Larry....Ich habe jetzt einfach mal stumpf die passage FB2 in AWL umgesetzt und jetzt funktioniert es...Aber ich habe leider nicht den geringsten schimmer warum das so ist????

Mich würde schon interessieren wie das geht wäre nett wenn mir einer mal diese kleine Passage erklären kann( kommentieren vllt)

1    TAR1 #save_AR1
2    TAR2 #save_AR2
3    LAR1 P##DB_Addr_1
4    LAR2 P##Temp_any
5    L D [AR1,P#0.0]
6    T LD [AR2,P#0.0]
7    L D [AR1,P#4.0]
8    T LD [AR2,P#4.0]
9     L D [AR1,P#2.0]
10   L W [AR1,P#8.0]
11   T LW[AR2,P#8.0]
12   LAR1 #save_AR1
13   LAR2 #save_AR2

Danke nochmal für deinen Link Larry


----------



## Larry Laffer (21 Januar 2010)

Hallo,
der ANY-Pointer ist eine 10-Byte-Sequenz, die einen Datenbereich beschreibt. Du kannst einen ANY-Pointer nicht durchreichen sondern mußt ihn nachbilden. Die Nachbildung muß in dem Fall die gleichen Inhalte haben, wie das Original. Das macht das nachfolgende Script :
	
	



```
1 TAR1 #save_AR1[COLOR=#ff0000]      // alten AR1-Pointer sichern[/COLOR]
2 TAR2 #save_AR2[COLOR=red]      // alten AR2-Pointer sichern[/COLOR]
3 LAR1 P##DB_Addr_1[COLOR=#ff0000] // den Anfang des Speicherbereichs wo der Quell-Pointer steht ins AR1 schreiben[/COLOR]
4 LAR2 P##Temp_any[COLOR=#ff0000]  // den Anfang des Speicherbereichs des Temp-ANY ins AR2 schreiben[/COLOR]
5 L D [AR1,P#0.0][COLOR=#ff0000]      // die ersten 4 Byte des Quellpointers einlesen[/COLOR]
6 T LD [AR2,P#0.0]    [COLOR=red]// und wegschreiben[/COLOR]
7 L D [AR1,P#4.0][COLOR=#ff0000]      // die nächsten 4 Byte des Quellpointers einlesen[/COLOR]
8 T LD [AR2,P#4.0]    [COLOR=red]// und wegschreiben[/COLOR]
10 L W [AR1,P#8.0][COLOR=#ff0000]      // die letzten 2 Byte des Quellpointers einlesen[/COLOR]

11 T LW[AR2,P#8.0]    [COLOR=red]// und wegschreiben[/COLOR]
12 LAR1 #save_AR1[COLOR=#ff0000]     // alten/ursprünglichen AR1-Pointer restaurieren[/COLOR]
13 LAR2 #save_AR2[COLOR=#ff0000]     // alten/ursprünglichen  AR2-Pointer restaurieren[/COLOR]
```


----------



## KNEFI (22 Januar 2010)

WOW. Danke das ist echt cool von dir .......

Vielen dank...


----------



## KNEFI (22 Januar 2010)

Hey Larry....Kannst du mir vllt beantworten ob der FB 15 PUT längen beschränkt ist oder ob ich vllt noch was an den zeigern ändern muss weil momentan kann ich nur 16 bit übertragen kann???
Ich schreibe jetzt (freu) außen an meinem fb als Quelle DB1001.dbd4010

aber wie gesagt es lassen sich nur 16 bit übertragen...???ich möchte gern ein doppelwort übertragen


----------



## Paule (22 Januar 2010)

KNEFI schrieb:


> Ich schreibe jetzt (freu) außen an meinem fb als Quelle DB1001.dbd4010


Du übergibst doch einen Any-Pointer, also:

```
P#DB1001.DBX4010.0 Byte 4
```


----------



## Larry Laffer (22 Januar 2010)

... in der Siemens-Hilfe steht außerdem dazu :





> Suie müssen darauf achten, dass die über die Parameter ADDR_i und SD_i definierten Bereiche in der Anzahl, in der Länge und im datentyp zueinander passen.


Ist das bei dir so ?

Gruß
LL


----------



## KNEFI (25 Januar 2010)

HI....Ich habe mal den aktuellen Status als Datei angehängt könnt ihr euch ja mal angucken......
Das problem besteht weitehin mit den 16 von 32 Bit??


----------



## Paule (25 Januar 2010)

Das muss doch so ausschauen, oder etwa nicht?

```
[COLOR=black]10 L [COLOR=red]D[/COLOR] [AR1,P#[COLOR=red]6[/COLOR].0] // die letzten 2 Byte des Quellpointers einlesen[/COLOR]
[COLOR=black]11 T [COLOR=red]LD[/COLOR][AR2,P#[COLOR=red]6[/COLOR].0] // und wegschreiben[/COLOR]
[/QUOTE]
```


----------



## KNEFI (25 Januar 2010)

Hier ist mein Stand bisher......


----------



## KNEFI (25 Januar 2010)

HI Leute ....Alles zurück habe meinen fehler gefunden ich habe bei meiner auswertung des DWord auf ==i und Uw abgefragt das kann ja nicht funktionieren....das ist da wohl von meinem vorherigen Versuch stehen geblieben....

So ich werde jetzt mal zu testphase übergehen.....

Danke an alle lieben helfen....


----------



## Baginnomicica (25 Januar 2010)

*Step 7 Any Pointer aus dem FB führen*

Hallo Habe genau das gleiche Problem wie Duggi, bekomme auch diese Fehlermeldung, wenn ich es im xp-Modus installen will Win7 Prof. 64bit. Brauche das dringend am laufen Danke schonmal im voraus


----------



## Proxy (25 Januar 2010)

Baginnomicica schrieb:


> Hallo Habe genau das gleiche Problem wie Duggi, bekomme auch diese Fehlermeldung, wenn ich es im xp-Modus installen will Win7 Prof. 64bit. Brauche das dringend am laufen Danke schonmal im voraus



Wie wer? bist du im richtigen Thema? Naja ich würde mal schauen ob Siemens das für Win7 in XP mode freigegeben hat.


----------

