Pointer Adressen weiterleiten?!

Der_Schakal

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zuerst mal,

Ich hoffe ich werd nicht gleich gesteinigt, und ja ich habe die SuFu schon ausgiebig missbraucht, auch die S7 hilfe schien mir auf den Ersten Blick nicht sehr hilfreich.

Zu meinen Problem, ich habe einen Kommunikatonsbaustein gebastelt, der von einer S7 Steuerung über UDP Daten an eine andere Steuerung schickt und Empfängt. Das funktioniert soweit auch alles wunderbar und ohne Probleme.

Nur jetzt komm ich zum springenden Punkt, das senden und empfangen der Daten erledigen die Standard S7 Bausteine FB67 und FB68.
Bei den Bausteinen kann ich ein Empfangs -/ Sendefach für die Daten angeben. Wenn ich die sozusagen fest angeben, zB "P#DB62.DBX0.0 BYTE 100" funktioniert auch alles. :cool:

Da ich aber einen Baustein erstellt habe, der diese Kommunikationsbausteine intern aufruft, muss ich natürlch die beiden DB Bereiche an diesen Baustein auch angeben.
Also hab ich diese eben als INOUT-ANY deklariert, lässt sich auch alles schön anlegen. Aber ich kann eben nicht diese INOUT-ANY variable an den DATA Bereich der Beiden FBs parametrieren. :confused:

Mit L und T gehts natürlich nicht, also denk ich mir es sollte/müsste über einen Any-Pointer gehen. Nur ich hab zZ absolut keine Ahnung wie ich das bewerkstelligen soll.

Hoffe mal das mir irgendwer hier helfen kann.

Danke im Voraus
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
So ich hab mir das ganze nochmal angeschaut und mMn müsst es doch funktionieren wenn ich die angelete Pointeradresse einfach ins AR1 Lade und dann dementsprechen auf die Lokaldaten verschiebe und diese wiederrum an meinen Baustein anlege oder?

Code:
      LAR1  P##Data_Rec
      L     LB [AR1,P#0.0]
      T     LB     0
      L     LB [AR1,P#1.0]
      T     LB     1
      L     LW [AR1,P#2.0]
      T     LW     2
      L     LW [AR1,P#4.0]
      T     LW     4
      L     LW [AR1,P#6.0]
      T     LW     6
      L     LW [AR1,P#8.0]
      T     LW     8

Data_Rec ist die ANY INOUT Variable am FC
 
So ich hab mir das ganze nochmal angeschaut und mMn müsst es doch funktionieren wenn ich die angelete Pointeradresse einfach ins AR1 Lade und dann dementsprechen auf die Lokaldaten verschiebe und diese wiederrum an meinen Baustein anlege oder?

Code:
      LAR1  P##Data_Rec
      L     LB [AR1,P#0.0]
      T     LB     0
      L     LB [AR1,P#1.0]
      T     LB     1
      L     LW [AR1,P#2.0]
      T     LW     2
      L     LW [AR1,P#4.0]
      T     LW     4
      L     LW [AR1,P#6.0]
      T     LW     6
      L     LW [AR1,P#8.0]
      T     LW     8

Data_Rec ist die ANY INOUT Variable am FC

Jo das sollte so gehen, du kannst das aber auch kürzer schreiben:

Code:
      LAR1  P##Data_Rec
      L     LD [AR1,P#0.0]
      T     LD     0
      L     LD [AR1,P#4.0]
      T     LD     4
      L     LW [AR1,P#8.0]
      T     LW     8

und wenn du deinem Pointer in den Lokaldaten noch einen Namen gibts (z.B. ANY1) und die Adresse darauf ins AR2 lädst ist's voll Symbolisch...

Code:
      LAR1  P##Data_Rec
      LAR2  P##ANY1
      L     LD [AR1,P#0.0]
      T     LD [AR2,P#0.0]
      L     LD [AR1,P#4.0]
      T     LD [AR2,P#4.0]
      L     LW [AR1,P#8.0]
      T     LW [AR2,P#8.0]
 
So ichs jetzt so gemacht, und siehe da... nichts :/ interessanterweise kommt beim laden/transferieren ein Bereichslängenfehler? Da frag ich mich doch, wo soll da der Bereich nicht passen, wenn eigentlich alles gleich "groß" ist?

sobald ich die erste L/T Anweisung einblende und übertrage meckert die CPU schon wegen den Bereichslängenfehler...

Code:
LAR1  P##Data_Rec
LAR2  P##T_Source
L     LD [AR1,P#0.0]       
T     LD [AR2,P#0.0]
L     LD [AR1,P#4.0]
T     LD [AR2,P#4.0]
L     LW [AR1,P#8.0]
T     LW [AR2,P#8.0]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So ichs jetzt so gemacht, und siehe da... nichts :/ interessanterweise kommt beim laden/transferieren ein Bereichslängenfehler? Da frag ich mich doch, wo soll da der Bereich nicht passen, wenn eigentlich alles gleich "groß" ist?

sobald ich die erste L/T Anweisung einblende und übertrage meckert die CPU schon wegen den Bereichslängenfehler...

Code:
LAR1  P##Data_Rec
LAR2  P##T_Source
L     LD [AR1,P#0.0]       
T     LD [AR2,P#0.0]
L     LD [AR1,P#4.0]
T     LD [AR2,P#4.0]
L     LW [AR1,P#8.0]
T     LW [AR2,P#8.0]

Sorry, war natürlich falsch...

So sollts aussehen:

Code:
LAR1  P##Data_Rec
LAR2  P##T_Source
L     D [AR1,P#0.0]       
T     D [AR2,P#0.0]
L     D [AR1,P#4.0]
T     D [AR2,P#4.0]
L     W [AR1,P#8.0]
T     W [AR2,P#8.0]
 
Zuletzt bearbeitet:
Ich hab dir mal eine Quelle für einen FB angehängt, da mache ich das mit dem Kommunikations-FB (FB14) Get aus der Standard-Library.
Allerdings wollte ich außen an den FB keinen Pointer schreiben, sondern DB-Nummer, Startbyte und Länge. So kann man auch einfache Variablen-DBW nutzen um zur Laufzeit die Ziele zu ändern ohne direkt am Pointer herumspielen zu müssen. Den Teil könntest du einfach für dich adaptieren.
Einfach das .txt löschen und in Step7 importieren.
 

Anhänge

  • Get.AWL.txt
    4,8 KB · Aufrufe: 16
Zuviel Werbung?
-> Hier kostenlos registrieren
So ich hab mir das ganze nochmal angeschaut und mMn müsst es doch funktionieren wenn ich die angelete Pointeradresse einfach ins AR1 Lade und dann dementsprechen auf die Lokaldaten verschiebe und diese wiederrum an meinen Baustein anlege oder?

Code:
      LAR1  P##Data_Rec
      L     LB [AR1,P#0.0]
      T     LB     0
      L     LB [AR1,P#1.0]
      T     LB     1
      L     LW [AR1,P#2.0]
      T     LW     2
      L     LW [AR1,P#4.0]
      T     LW     4
      L     LW [AR1,P#6.0]
      T     LW     6
      L     LW [AR1,P#8.0]
      T     LW     8

Data_Rec ist die ANY INOUT Variable am FC

Siehe auch das folgende Programmbeispiel, in dem in einem FC zwei ANY-Pointer aus dem IN-Bereich in den TEMP-Bereich kopiert werden:

http://www.sps-forum.de/showpost.php?p=290237&postcount=5

http://www.sps-forum.de/showpost.php?p=290238&postcount=6

Gruß Kai
 
Sorry, war natürlich falsch...

So sollts aussehen:

Code:
LAR1  P##Data_Rec
LAR2  P##T_Source
L     D [AR1,P#0.0]       
T     D [AR2,P#0.0]
L     D [AR1,P#4.0]
T     D [AR2,P#4.0]
L     W [AR1,P#8.0]
T     W [AR2,P#8.0]


Tata, kaum macht man es richtig, funktioniert es auch ;) einzig wenn ich das AR2 Lade zickt der Kommunikationsbaustein(?) herum, schreibe ich es aber in die Lokalwörter geht es wunderbar...

:s10:
 
Zurück
Oben