DB und Pointer

PhilippL

Level-1
Beiträge
250
Reaktionspunkte
28
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe ein kleine Anfängerfrage. Bzw. ich hab mich durch mehrere Threads gelesen und werd aber nicht wirklich schlauer.

Ich habe folgenden Quelltext und möchte diesen in einen FB packen.
Von aussen möchte ich gerne den DB und die Adresse für den Zeiger vorgeben.

Code:
      AUF   [COLOR=red]DB    12[/COLOR]                    // DB mit Sende/Empfangsbereich
      L     14                          // Größe des Empfangspuffers
      L     #Channel                    // Empfangskanal
      LAR1  P#[COLOR=red]DBX 4.0[/COLOR]                   // Zeiger auf Empfangsbereich
      U     #RTrigger
      UC    SFB  226                    // RECEIVE
      T     MW   202                    // Anzahl Daten die empfangen wurden
      UN    #RTrigger                   // Trigger auf 1 setzen, damit Daten empfangen werden
      S     #RTrigger
      L     14                          // 14 Empfangsbytes werden erwartet
      <>I   
      SPB   SEND

Machbar ist so etwas mittels ANY-Datentyp wenn ich das richtig verstanden habe. Nur die Frage wie geht das??? Hat jemand für mich ein einfaches Beispiel???

Vielen Dank für eure Hilfe

Gruß

Philipp
 
Hallo,

ich sag soweit mal danke! Wenn ichs verstanden hab gibts keine Fragen mehr... ich denk jedoch da werden noch einige kommen... :confused:

Gruß Philipp
 
Geht evtl. auch ohne Any, wenn du

Code:
AUF DB 12
durch

Code:
L DBNR
T DBNR_Temp
AUF DB [DBNR_Temp]
ersetzt und DBNR als Int-Parameter übergibst. DBNR_Temp ist eine Word.

Das hängt davon ab, ob immer der Adresse im DB immer dieselbe sein kann. Wenn auch diese variiert, ist Any tatsächlich sinnvoller.

PS: Wo hast du den Code her und was für eine SPS (SFB226???) ist das eigentlich?
Der UC-Aufruf sieht wie ein umgewandelter CALL aus.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe folgenden Quelltext und möchte diesen in einen FB packen.
Von aussen möchte ich gerne den DB und die Adresse für den Zeiger vorgeben.

Machbar ist so etwas mittels ANY-Datentyp wenn ich das richtig verstanden habe.

Hallo Philipp,

eigentlich braucht man hier keinen ANY-Zeiger, man kann auch mit einem POINTER arbeiten.

Hier mal ein kurzes Programmbeispiel:

Code:
// OB1 : Hauptprogramm
 
// POINTER (P#DBX0.0)
 
      CALL  FB   100 , DB100
       DB_NUMMER :=DB200
       DB_POINTER:=P#DBX 0.0
      NOP   0
 
 
// DB-POINTER (P#DB200.DBX4.0)
 
      CALL  FB   120 , DB120
       DB_POINTER:=DB200.DBW4
      NOP   0

Code:
// FB100 : POINTER
 
// DB-POINTER
//
// BYTE 0  Datenbausteinnummer
// BYTE 1  Datenbausteinnummer
//
// BYTE 2  Bereichszeiger
// BYTE 3  Bereichszeiger
// BYTE 4  Bereichszeiger
// BYTE 5  Bereichszeiger
 
 
// POINTER
 
      AUF   #DB_NUMMER                  // DB öffnen 
 
      L     P##DB_POINTER               // POINTER
      LAR1  
 
      L     D [AR1,P#2.0]               // POINTER Bereichszeiger
      LAR1  
 
 
// Daten (WORD) kopieren
 
      L     W [AR1,P#0.0]
      T     W [AR1,P#2.0]

Code:
// FB120 : DB-POINTER
 
// DB-POINTER
//
// BYTE 0  Datenbausteinnummer
// BYTE 1  Datenbausteinnummer
//
// BYTE 2  Bereichszeiger
// BYTE 3  Bereichszeiger
// BYTE 4  Bereichszeiger
// BYTE 5  Bereichszeiger
 
 
// DB-POINTER
 
      L     P##DB_POINTER               // POINTER
      LAR1
 
      L     W [AR1,P#0.0]               // POINTER DB-Nummer
      T     #DB_NUMMER
 
      AUF   DB [#DB_NUMMER]             // DB öffnen
 
      L     D [AR1,P#2.0]               // POINTER Bereichszeiger
      LAR1  
 
 
// Daten (WORD) kopieren
 
      L     W [AR1,P#0.0]
      T     W [AR1,P#2.0]

Gruß Kai
 

Anhänge

  • OB1.pdf
    3,6 KB · Aufrufe: 25
  • FB100.pdf
    2,9 KB · Aufrufe: 28
  • FB120.pdf
    2,9 KB · Aufrufe: 24
PS: Wo hast du den Code her und was für eine SPS (SFB226???) ist das eigentlich?
Der UC-Aufruf sieht wie ein umgewandelter CALL aus.

Der Code ist ein Stück meiner eigenen Gedankenwelt entsprungen... der System Function Block Aufruf kommt von einem Berthel PanelCon20, welches mit S7 programmiert wird. Man verwendet dort zum lesen und schreiben der RS232 Schnittstelle die SFB's 226 und 227

Gruß Philipp

BTW: Eure Hilfe war mal wieder sehr gut ich bin mit meinem Problem ein gutes Stück weiter! Danke an alle!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

jetzt bleibt doch mal locker ich hab mir die Unterlagen von Volker angesehen und mein Problem selbst gelöst (find ich persönlich besser als fertige Lösungen, da ist der Lerneffekt größer). Allerdings muß ich sagen, dass Lösungsvorschläge wie der von Kai auch mal nicht ganz ohne sind um neue oder andere Ideen zubekommen und jetzt laßt den armen Kai in Ruhe er gibt sich wie viele andere hier im Forum Mühe anderen (mir :-D ) bei ihren Problemen zu helfen. :)

Gruß Philipp
 
Zurück
Oben