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

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

Thema: Byte's falsch sortiert

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

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Kollegen (innen), ich habe gerade ein Blockade und bräuchte mal einen Tipp von Euch.

    Ich lese Daten von einem DP-Slave.
    Dieser gibt mir 4 Werte auf 20 Byte raus die folgendermaßen aufgebaute sind:
    Code:
    Byte   0 -  3 = Messwert in Real + Byte   4 = Statuswert
    Byte   5 -  8 = Messwert in Real + Byte   9 = Statuswert
    Byte 10 - 13 = Messwert in Real + Byte 14 = Statuswert
    Byte 15 - 19 = Messwert in Real + Byte 19 = Statuswert
    Das Problem:
    Der DB soll die Daten symbolisch aufnehmen.
    Wenn ich ihn aber symbolisch schreibe habe ich ja logischer weise 4 Byte mehr, da mir ja nach dem Statusbyte ein Byte fehlt, bis es wieder mit der nächsten Realzahl losgeht. Dem Übergeber ist das egal er hängt alle Daten einfach hinten dran, grad wie sie kommen.
    Siehe Bild 1, die Daten lese ich mit der SFC14 siehe Bild 2

    Möglichkeit 1: Entweder muss ich jetzt die Daten zwischen speichern und das Statuswort rausoperieren und irgendwie hinten ansetzen, oder
    Möglichkeit 2: die Daten zwischenspeichern und das fehlende Byte reinschubsen.

    Möglichkeit 2 gefällt mir besser, allerdings fehlt mir dazu gerade der Ansatz.

    Habt Ihr noch andere Ideen oder einen Ansatz zur Möglichkeit 2?

    Danke im Voraus

    PS: Wird ja verständlicherweise immer erwartet.
    S7-315er , alles außer KOP, FUP, und Graph.
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Paule (20.03.2010 um 15:41 Uhr) Grund: Ergänzung
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <
    Zitieren Zitieren Byte's falsch sortiert  

  2. #2
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Eventuell mit 4 Aufrufen des SFC20 kopieren.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  3. #3
    Registriert seit
    06.01.2005
    Ort
    im schönen Lipperland
    Beiträge
    4.472
    Danke
    498
    Erhielt 1.143 Danke für 736 Beiträge

    Standard

    Kannst Du nicht erst alles in einen DBx reinschreiben und dann mit L und T in den entsprechenden richtigen DBy reinschreiben ?

    Aber irgendwie ist mir die Lösung zu einfach zu deinem Problem
    Früher gab es Peitschen .... heute Terminkalender

  4. Folgender Benutzer sagt Danke zu Lipperlandstern für den nützlichen Beitrag:

    Paule (20.03.2010)

  5. #4
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    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 Lipperlandstern Beitrag anzeigen
    Kannst Du nicht erst alles in einen DBx reinschreiben und dann mit L und T in den entsprechenden richtigen DBy reinschreiben ?
    Leider nicht da ich auf jeden Fall an einer Stelle keine symbolische Zuweisung hätte, entweder beim Ziel oder bei der Quelle.

    @Rainer, klar das wäre eine Möglichkeit : P#DB1.DBB 5.0 Byte 4
    Aber das Problem mit der symbolische Zuweisung hätte ich nun bei der BLKMOVE Adressierung ja auch, oder?
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  6. #5
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Grundsätzlich geht sowhl Axels als auch meine Lösung. Die Daten kommen (gepackt) in einen Zwischen-DB ohne (auch ohne sinnvolle Symbole). Dann transferierst du die Daten in den DB mit Symbole. Und im restlichen Programm verwendest du nur noch diesen.
    Code:
    // Frei nach Axel, x ist dabei der gackte und y der strukturierte DB
    L DBx.DBD0
    T DBy.DBD0
    L DBx.DBB4
    T DBy.DBB4
    
    L DBx.DBD5
    T DBy.DBD6
    L DBx.DBB9
    T DBy.DBB10
    
    L DBx.DBD10
    T DBy.DBD12
    L DBx.DBB14
    T DBy.DBB16
    
    L DBx.DBD15
    T DBy.DBD18
    L DBx.DBB19
    T DBy.DBB22
    Den gepackten DB wirst Du allerdings nicht symbolisch hinbekommen.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  7. Folgender Benutzer sagt Danke zu Rainer Hönle für den nützlichen Beitrag:

    Paule (20.03.2010)

  8. #6
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    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 Rainer Hönle Beitrag anzeigen
    Grundsätzlich geht sowhl Axels als auch meine Lösung. Die Daten kommen (gepackt) in einen Zwischen-DB ohne (auch ohne sinnvolle Symbole). Dann transferierst du die Daten in den DB mit Symbole. Und im restlichen Programm verwendest du nur noch diesen.

    Den gepackten DB wirst Du allerdings nicht symbolisch hinbekommen.
    Ja, ich glaube mit dem "nur für das einlesen verwendeten DB" als gepackter Übergabe DB wäre die einfachste Lösung.

    Ich war gerade an der Überlegung den ersten DB als Any einzulesen die Endadresse zu ermitteln und dann über 3 Schleifen die Bytes in die Länge ziehen.
    Sprich beim ersten Durchgang die letzten 15 Byte um 1 Byte nach hinten verschieben, Schleife 2 wiederum die letzten 10 Byte um 1 Byte zurück u.s.w.
    Dann würde in den "leeren Bytes" aber auch noch Werte stehen, wäre zwar egal aber auch nicht schön.

    Der Programmieraufwand wäre da wahrscheinlich doch zu hoch.
    Manchmal muss die Lösung halt doch einfacher aber dafür nicht ganz so schön sein.
    Danke Euch.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  9. #7
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Leider nicht da ich auf jeden Fall an einer Stelle keine symbolische Zuweisung hätte, entweder beim Ziel oder bei der Quelle.
    ...
    Und wenn Du zum Zwischenspeichern vor dem Transfer in den Ziel-DB einen Merkerbereich nimmst?
    Da bist Du doch freier bei der Symbolisierung.

  10. #8
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    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 hucki Beitrag anzeigen
    Und wenn Du zum Zwischenspeichern vor dem Transfer in den Ziel-DB einen Merkerbereich nimmst?
    Da bist Du doch freier bei der Symbolisierung.
    Mit der Aussage dass ich bei der symbolischen Zuordnung bei Merkern ein bisschen freier bin, hast Du Recht, bringt mir allerdings nichts da ich ja dann bei der SFC14 auch den Merkerbereich über Pointer angeben müsste:
    Code:
    P#M100.0 Byte 20
    Und wenn es geht vermeide ich das.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  11. #9
    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

    Hi,

    Code:
    FUNCTION_BLOCK FB10
    
    VAR_INPUT
      LADDR : WORD;
      MESS : POINTER;
      _MESS AT MESS : STRUCT
        DBNr : WORD;
        Adr : DWORD;
      END_STRUCT;    
    END_VAR
    
    VAR
      _Daten : ARRAY [0..19] OF BYTE;
    END_VAR
    
    VAR_TEMP
      RetVal : INT;
      Adr : INT;
      i, iB, iW : INT;
    END_VAR
    
    BEGIN
      
      // Daten lesen
      RetVal := DPRD_DAT(LADDR := LADDR ,RECORD := _Daten);
    
      // Anfangsdresse von Pointer ermitteln
      Adr := DWORD_TO_INT(SHR(IN:=SHL(IN:=_MESS.Adr,N:=8),N:=11));
      
      iB := 0;
      
      // Schleife zum verteilen der Daten
      FOR iW := 0 TO 3 DO
        FOR i := 0 TO 4 DO
          WORD_TO_BLOCK_DB(_MESS.DBNr).DB[Adr+iW*6+i] := _Daten[iB];
          iB := iB + 1;
        END_FOR;   
      END_FOR;
      
    END_FUNCTION_BLOCK
    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)

  12. Folgender Benutzer sagt Danke zu dalbi für den nützlichen Beitrag:

    Paule (20.03.2010)

  13. #10
    Avatar von Paule
    Paule ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Daniel,

    was soll ich sagen?

    >>> Genial <<<
    it's just perfect

    Viel kürzer als ich den AWL - Code vor Augen hatte.
    Und "Symbolisch"

    Tausend Dank
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 13.05.2017, 20:02
  2. Oscat sortiert nicht richtig?
    Von d3nnis.c im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 08.08.2008, 18:36
  3. Antworten: 4
    Letzter Beitrag: 08.07.2008, 08:52
  4. Windows sortiert - aber wie?
    Von Perfektionist im Forum PC- und Netzwerktechnik
    Antworten: 9
    Letzter Beitrag: 02.11.2007, 12:04
  5. Dateien sortiert kopieren
    Von volker im Forum Stammtisch
    Antworten: 8
    Letzter Beitrag: 23.10.2006, 21:18

Lesezeichen

Berechtigungen

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