Step 7: Any Pointer aus dem FB führen

KNEFI

Level-1
Beiträge
55
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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????:confused:
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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.
 
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 ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
:confused::confused::confused: 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
 
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 :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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 :
Code:
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]
 
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
 
... 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
 
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??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das muss doch so ausschauen, oder etwa nicht?
Code:
[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]
 
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....:ROFLMAO:

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

Danke an alle lieben helfen....:p
 
Zurück
Oben