Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: Dynamischer Pointer???

  1. #1
    Registriert seit
    21.07.2005
    Beiträge
    222
    Danke
    54
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    HAllo Leute!!!
    Steh auf dem Schlauch.
    Ich soll bei einem bestehenden (ist so etwas wie ne Rezeptur) Programm zu jeder Rezeptur gewisse Werte (kwh,Bh,Durchsatzleistung...) zuweisen.
    Habe folgendes Problem: Ich will mit SFC20 Daten vom DB10 in den DB20 schieben.
    Mein Problem ist aber das ich immer gewisse Datenbereiche sowohl beim lesen als auch beim schreiben ansprechen soll. D.h. Wenn Rezeptur Nr:1 (liegt als Int Zahl vor) dann P#DB10.DBX 0.0 Byte 4.
    Mit jeder erhöhung der Rezeptur soll der Pointer um den vorgegebenen Datenbereich (hier z.B. 4Byte) weiterspringen.
    Wär für jede Hilfe sehr DANKBAR.

    L.G.
    Zitieren Zitieren Dynamischer Pointer???  

  2. #2
    Registriert seit
    30.03.2005
    Beiträge
    239
    Danke
    22
    Erhielt 2 Danke für 2 Beiträge

    Standard

    .....etwa so, allerdings ohne sfc20:

    Beispiel:

    Rezeptnummer=int


    L rezeptnummer
    L 12
    *I //jedes rezept hat 12 Byte
    SLW 3 //wegen dimension, keine bitadresse
    LAR1 //Adressregister laden



    Auf DB10
    L DBD[ar1, P#0.0] ersten 4 Bytes kopieren
    T DB20.dbd0

    Auf DB10
    L DBD[ar1, P#4.0] zweiten 4 Bytes kopieren
    T DB20.dbd4

    Auf DB10
    L DBD[ar1, P#8.0] dritten 4 Bytes kopieren
    T DB20.dbd8


    das wars schon...
    Zitieren Zitieren das geht mit dem adressregister....  

  3. #3
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  4. #4
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!

    Du kannst das ganze über einen ANY - Pointer den du dir selber baust lösen:

    Code:
    //ANY Pointer für Datentypen
          L     P##Temp_ANY_Pointer_in
          LAR1  
          L     B#16#10                     //Syntax ID für Step7
          T     LB [AR1,P#0.0]
          L     B#16#2                      //Wert für TYP: 1 Bool, 2 Byte, 3 Char, 4 Word, 5 Int, 6 Dword, 7 Dint, 8 Real, 9 Date, A TOD, B Time, C S5Time, E DT, 13 String
          T     LB [AR1,P#1.0]
          L     4                        //Anzahl der zu Übertragenden Daten
          T     LW [AR1,P#2.0]
          L     10                      //Datenbausteinnummer
          T     LW [AR1,P#4.0]
          L     P#DBX 0.0                   //Bereichszeiger, in diesem Fall vom ersten Bit an. Für deine 2.Rezeptur brauchst du dann  P#DBX 4.0 
          T     LD [AR1,P#6.0]
     
    L     P##Temp_ANY_Pointer_out
          LAR1  
          L     B#16#10                     //Syntax ID für Step7
          T     LB [AR1,P#0.0]
          L     B#16#2                      //Wert für TYP: 1 Bool, 2 Byte, 3 Char, 4 Word, 5 Int, 6 Dword, 7 Dint, 8 Real, 9 Date, A TOD, B Time, C S5Time, E DT, 13 String
          T     LB [AR1,P#1.0]
          L     4                        //Anzahl der zu Übertragenden Daten
          T     LW [AR1,P#2.0]
          L     20                      //Datenbausteinnummer
          T     LW [AR1,P#4.0]
          L     P#DBX 0.0                   //Bereichszeiger, in diesem Fall vom ersten Bit an. Für deine 2.Rezeptur brauchst du dann  P#DBX 4.0 
          T     LD [AR1,P#6.0]
     
     
     CALL  SFC   20
           SRCBLK :=#Temp_ANY_Pointer_in
           RET_VAL:=MW0
           DSTBLK :=#Temp_ANY_Pointer_out
    die Pointer deklarierst du als Temp Variable mit den Datentyp ANY.
    Du kannst dir ja den Bereichszeiger auch noch selbst bauen. Also wenn du noch eine Variable Deklarierst mit #Bereichszeiger (Dword) dann kannst du im Vorfeld die Adresse berechnen und in den Bereichszeiger schreiben. (siehe mertens2 anfang)

    godi

Ähnliche Themen

  1. Antworten: 16
    Letzter Beitrag: 23.05.2017, 16:03
  2. dynamischer db aufruf
    Von misconduct im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 24.11.2007, 22:42
  3. Antworten: 4
    Letzter Beitrag: 23.05.2007, 12:18
  4. Aufbau dynamischer Arrays
    Von Ralle im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 27.02.2007, 17:36
  5. dynamischer Global DB Step7 - S7-300 CPU 315 -2DP
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.10.2005, 10:47

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •