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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: db variabel beschreiben und lesen

  1. #1
    Registriert seit
    19.08.2007
    Beiträge
    162
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    gibt es eine Möglichkeit einen DB variabel zu beschreiben.
    Was ich meine ist, ich möchte einen Baustein erzeugen bei dem ich nur den db als Eingang bzw einen zweiten db als Ausgang angebe und in diesem Baustein soll dann der DB gelesen bzw. geschrieben werden. Die länge der Bytes ist aber unterschiedlich. Das heißt ich muss evtl. mal die ersten 7 Bytes aus dem DB und dann evtl. die ersten 12 Bytes aus dem DB lesen und schreiben Usw. Ich will den Db also nur als Datenspeicher nutzen um dort eine Variabele Länge an Datenbytes zu hinterlegen.
    Weil normal kann ich ja maximal ein doppelwort auslesen und schreiben und muss dieses ja auch definiert über dbx.dbdx angeben!?

    Ich hoffe ich konnte rüber bringen was ich meine!?

    Gruß
    Zitieren Zitieren db variabel beschreiben und lesen  

  2. #2
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von demmy86 Beitrag anzeigen
    Das heißt ich muss evtl. mal die ersten 7 Bytes aus dem DB und dann evtl. die ersten 12 Bytes aus dem DB lesen und schreiben Usw. Ich will den Db also nur als Datenspeicher nutzen um dort eine Variabele Länge an Datenbytes zu hinterlegen.
    Weil normal kann ich ja maximal ein doppelwort auslesen und schreiben und muss dieses ja auch definiert über dbx.dbdx angeben!?
    Was du brauchst, ist ein variabler Any-Zeiger.
    http://sps-forum.de/showthread.php?t=12923
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  3. #3
    Registriert seit
    16.05.2007
    Ort
    im Stahlwerk...
    Beiträge
    1.178
    Danke
    120
    Erhielt 429 Danke für 236 Beiträge

    Standard

    Zitat Zitat von demmy86 Beitrag anzeigen
    Ich will den Db also nur als Datenspeicher nutzen um dort eine Variabele Länge an Datenbytes zu hinterlegen.
    Schau mal nach der Systemfunktion "SFC22". Damit kann man einen DB zur Laufzeit erzeugen.

    Gruß Approx
    Nihil est in cpu, quod non fuerit in intellectu" - Nichts ist in der CPU, was nicht (zuvor) im Verstand war.

  4. #4
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.595
    Danke
    63
    Erhielt 261 Danke für 221 Beiträge

    Standard

    Zitat Zitat von demmy86 Beitrag anzeigen
    Weil normal kann ich ja maximal ein doppelwort auslesen und schreiben und muss dieses ja auch definiert über dbx.dbdx angeben!?
    Wie schon gesagt wurde "ANY-pointer" erzeugen. Mit "SFC20 BLKMOV" kann auch mehr als ein Doppelwort kopiert werden. Bei unterschiedlichen DB-Größen mußt du aber aufpassen, dass die Bereichslängen stimmen, sonst steht die CPU...
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  5. #5
    demmy86 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.08.2007
    Beiträge
    162
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Und wie Funktioniert das nun mit dem sfc 20?

    Wie muss ich da angeben in welchen DB ich wieviele bytes schreiben bzw lesen will??

    Ich versteh das noch nicht ganz. Und die Simatichilfe ist da auch nicht sehr hilfreich.

    Gibt es denn einen Variablentyp der einen DB beschreibt? denn ich muss ja jedesmal dem Baustein einen anderen Quell und Ziel Db zuweisen wenn ich das so richtig verstanden habe?
    Geändert von demmy86 (09.08.2011 um 23:42 Uhr)

  6. #6
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von demmy86 Beitrag anzeigen
    Ich versteh das noch nicht ganz. Und die Simatichilfe ist da auch nicht sehr hilfreich.
    Schon mal den geposteten Link angeschaut?
    Wo gibt es denn genau noch Probleme?
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  7. #7
    demmy86 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.08.2007
    Beiträge
    162
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi,
    ich hab den Beitrag gelesen. Ich Programmiere in SCL und rätsele gerade wie ich denn da diese Anyvariable beschreiben muss um 12Byte aus einem DB in ein Byte array ein zu lesen?

  8. #8
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von demmy86 Beitrag anzeigen
    Ich Programmiere in SCL und rätsele gerade wie ich denn da diese Anyvariable beschreiben muss um 12Byte aus einem DB in ein Byte array ein zu lesen?
    Aber dann ist es ja noch viel einfacher.
    Dann brauchst doch nur die Anzahl der FOR-Schleife übergeben und in dieser Schleife wird Quelle auf Ziel kopiert.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  9. #9
    demmy86 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.08.2007
    Beiträge
    162
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja schon, das mir schon klar.

    nur wie muss ich diese Anyvariable beschreiben um z.b db10 aus zu wählen und die ersten 12 byte?

    ich habe es jetzt so versucht.

    Code:
    VAR_TEMP
         Quell_DB : ANY;
         Quelle AT Quell_DB : STRUCT 
           ID    : BYTE; 
           TYP   : BYTE; 
           CNT   : INT; 
           DBN   : INT; 
           SAD   : INT;
           PTR   : INT; 
          
        END_STRUCT;
          
       Ziel_DB : ANY;
    END_VAR
     
    BEGIN
    Quelle.ID := 10; // 10 Für S7
    Quelle.TYP := 2 ; // 2 Für Byte (4 für Word)
    Quelle.CNT := 12; // Anzahl
    Quelle.DBN := 10; // Datenbaustein (0 wenn nicht auf DB's zugegriffen wird)
    Quelle.SAD := 0; //Anfangsadresse
    Quelle.PTR := 84;//84 für DB (83 für Merkerbereich)
    is das so korrekt?

    für was is dieser PTR gut???
    das is leider alles was ich bisher herausfinden konnte!
    Geändert von demmy86 (10.08.2011 um 01:26 Uhr)

  10. #10
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    Zitat Zitat von demmy86 Beitrag anzeigen
    ...

    Code:
    VAR_TEMP
         Quell_DB : ANY;
         Quelle AT Quell_DB : STRUCT 
           ID    : BYTE; 
           TYP   : BYTE; 
           CNT   : INT; 
           DBN   : INT; 
           PTR   : DWORD; 
          
        END_STRUCT;
          
       Ziel_DB : ANY;
    END_VAR
     
    BEGIN
    Quelle.ID := 10; // 10 Für S7
    Quelle.TYP := 2 ; // 2 Für Byte (4 für Word)
    Quelle.CNT := 12; // Anzahl
    Quelle.DBN := 10; // Datenbaustein (0 wenn nicht auf DB's zugegriffen wird)
    Quelle.PTR := dw#16#84000000;  //Byte- und Bitadresse des Datenbausteins 84 für DB (83 für Merkerbereich)
    is das so korrekt?

    für was is dieser PTR gut???
    Byte- und Bitadresse des Datenanfangs, aber Achtung die ersten 3 Bits sind für die Bitadresse.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

Ähnliche Themen

  1. Bit-Index variabel?
    Von Metabastler im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 02.10.2011, 22:53
  2. Datenbaustein Variabel beschreiben
    Von Spendel im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 28.07.2010, 09:29
  3. Baustein Find und DB variabel
    Von skyvan im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.05.2010, 16:43
  4. DBD laden, Adresse variabel
    Von SPS Toni im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 22.01.2010, 13:44
  5. DB Variabel aufrufen
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 10.02.2006, 15:04

Lesezeichen

Berechtigungen

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