Step 7 PUT / GET mit verschiedenen DBs

funkenschlosser

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe folgendes Problem:
ich möchte Daten mit der Put / Get Funktion zwischen zwei Steuerungen austauschen.
Das funktioniert auch soweit einwandfrei.
Jetzt ist es so, das ich die DB-Adresse beim Aufruf der Put / Get Funktion variabel halten möchte.
Das heißt, ich suche nach der Möglichkeit, bzw. den Syntax, wie die Parameter ADDR_1 und SD_1 angegeben werden müssen.
Die Berechnung des jeweiligen Pointers ist kein Problem, aber wie kriege ich den an die Parameter ADDR_1 und SD_1 ??

Step 7 / S7-300 / AWL

Funkenschlosser
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Betriebselektriker28,

mit dem Beispiel von Siemens habe ich auch schon experimentiert.
Mein Problem liegt aber darin, dass ich nichts finde, wo der Parameter in der ADDR_1 bzw. SD_1 als Variable angegeben wird.
Also ADDR_1:=P#DB900.DBX0.0 WORD 8 als Variable, um verschiedene DBs mit verschiedenen Längen zu übertragen.
 
Hallo TheQuest,

danke für die Antwort und den Link.
wenn ich jetzt einen Pointer zusammengesetzt habe, wie packe ich den an den ADDR_1 oder SD_1 dran??

VG Funkenschlosser
 
Man muss hierfür keine Pointer zusammenbasteln. Du kannst für jeden DB einen PUT/GET mit der selben Verbindungs-ID aufrufen. Put/Get kann man auch im Simulator testen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kurz ohne Parameterprüfung könnte der FC_anyZeiger etwa so aussehen:
Code:
FUNCTION "FC_anyZeiger" : ANY
TITLE =
VERSION : 0.1

VAR_INPUT
  BEREICHSTYP : BYTE ;   
  DATENTYP : BYTE ;   
  ANZAHL : INT ;   
  DB_NR : INT ;   
  BYTE_NR : INT ;   
  BIT_NR : INT ;   
END_VAR
BEGIN
NETWORK
TITLE =

      L     P##RET_VAL;      // Anfangsadresse RET_VAL
      LAR1  ;

      L     B#16#10;         // ANY-Kennung
      T     B [AR1,P#0.0];

      L     #DATENTYP;       // siehe Step7 Hilfe "Format des Parametertyps ANY"
      T     B [AR1,P#1.0];

      L     #ANZAHL;         // Wiederholfaktor des Datentyps
      T     W [AR1,P#2.0];

      L     #DB_NR;
      T     W [AR1,P#4.0];

      L     #BYTE_NR;
      SLD   3;
      L     #BIT_NR;
      +D    ;
      L     #BEREICHSTYP;    // siehe Step7 Hilfe "Format des Parametertyps ANY"
      TAD   ;                // (oder SLD 24)
      OD    ;
      T     D [AR1,P#6.0];

END_FUNCTION

Harald
 
Hallo zusammen,

ich möchte mich für die raschen Antworten bedanken und mich für meine späte Meldung entschuldigen. Leider bin ich erst heute dazu gekommen, mich wieder mit der Materie zu beschäftigen.
Nun funktioniert es genau so, wie es soll.
TheQuest sorgte für ein AHA-Erlebnis.

VG Funkenschlosser
 
Zurück
Oben