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

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

Thema: Struktur in Array of Bytes kopieren

  1. #1
    Registriert seit
    26.11.2013
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich möchte gerne Daten von einem Profibus-Gerät lesen.
    Es handelt sich dabei um eine 6 Byte große Struktur.

    Eine passende UDT namens "SensorData" habe ich schon angelegt.

    TYPE "SensorData"
    STRUCT
    StatusDevice : Byte;
    StatusMesswert : Byte;
    Messwert: Real;
    END_STRUCT;
    END_TYPE


    Zum Lesen der Daten nutze ich DPRD_DAT (SFC14). Leider kann man DPRD_DAT keine Strukturen übergeben sondern nur einfache Arrays.
    Ich habe nun ein 6 Byte großes Array definiert (Temp_1 : Array [1 .. 6] of Byte) und damit die Daten gelesen.

    Gibt es eine Möglichkeit dieses Array in eine gleich große Struktur vom Typ "SensorData" zu kopieren?
    Zitieren Zitieren Struktur in Array of Bytes kopieren  

  2. #2
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    Der SFC20 "BlockMove" sollte das können.
    kind regards
    SoftMachine

  3. Folgender Benutzer sagt Danke zu SoftMachine für den nützlichen Beitrag:

    gargantua (26.11.2013)

  4. #3
    gargantua ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.11.2013
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe gleich mal in der Hilfe nachgeschaut.
    BLKMOVE gibt es nur bei der S7-1500, ich habe die S7-1200 .
    Dort gibt es nur MOVE_BLK, der funktioniert aber auch nur mit Arrays.

  5. #4
    Registriert seit
    02.04.2013
    Beiträge
    143
    Danke
    7
    Erhielt 22 Danke für 20 Beiträge

    Standard

    Etwas gebastelt in SCL. Musst du wissen, ob's dir gefällt

    Im Datenbaustein "DATEN":
    SensorDaten vom Typ "SensorData"

    im FC noch eine temp. Variable tmp_dword als DWord angelegt

    Code:
    "DATEN".SensorDaten.StatusDevice := #Temp_1[1];
    "DATEN".SensorDaten.StatusMesswert := #Temp_1[2];
    #tmp_dword.B0:=#Temp_1[3];
    #tmp_dword.B1:=#Temp_1[4];
    #tmp_dword.B2:=#Temp_1[5];
    #tmp_dword.B3:=#Temp_1[6];
    "DATEN".SensorDaten.Messwert:=DWORD_TO_REAL(#tmp_dword);
    HINWEIS:
    Bei der S7-1200 (ab FW V2.0) und der S7-1500 haben Sie die Möglichkeit, bitweise auf Variablen vom Datentyp Byte, Word oder DWord zuzugreifen. Hierfür benötigen Sie STEP 7 V11+SP1+Update 2 (oder höher).
    Quelle

    Geändert von shutdown_TIA12 (26.11.2013 um 15:25 Uhr)

  6. Folgender Benutzer sagt Danke zu shutdown_TIA12 für den nützlichen Beitrag:

    gargantua (26.11.2013)

  7. #5
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    Sc.... TIA,
    hast recht,
    das ist dieser Beitrag: HIER .

    Aber vielleicht weiss da einer der anderen
    User mehr, die mit TIA arbeiten.

    Alternativ verschiebst die 6 Byte mit dem
    Move-Befehl erstmal einzeln.
    kind regards
    SoftMachine

  8. #6
    gargantua ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.11.2013
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    doppelt geposted
    Geändert von gargantua (27.11.2013 um 09:53 Uhr)

  9. #7
    gargantua ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.11.2013
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    doppelt geposted
    Geändert von gargantua (27.11.2013 um 09:54 Uhr)

  10. #8
    gargantua ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.11.2013
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @shutdown:
    Das ist natürlich die sauberste Lösung. Werde ich wohl so übernehmen.

    Ich komme eigentlich aus der C/C++ Welt, deshalb eine Frage:
    Gibt es bei TIA-Strukturen so etwas wie Padding (d.h. zwischen einzelnen Elementen einer Struktur werden Leerbytes eingefügt, so dass die Elemente immer auf einer durch 2 oder 4 teilbaren Speicher-Adresse liegen)? Das würde mir erklären warum DPRD_DAT nur mit Arrays funktioniert.

  11. #9
    Registriert seit
    29.04.2012
    Beiträge
    195
    Danke
    13
    Erhielt 42 Danke für 37 Beiträge

    Standard

    Was ist das für eine TIA Version? V12 hat damit kein Problem.

    Mit AT müsste man es so oder so überlisten können, siehe hier:
    http://support.automation.siemens.co...ew/de/57132241

    Unbenannt.jpg

  12. #10
    Registriert seit
    02.04.2013
    Beiträge
    143
    Danke
    7
    Erhielt 22 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Pipboy, ja so gehts auch, wenn man auf nichtoptimierter Baustein umschaltet. Man büßt jedoch an Performance...

Ähnliche Themen

  1. Struktur in Array
    Von ipacsre im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 19.05.2010, 20:08
  2. nacheinander bytes aus db in ein merker kopieren
    Von Robert_k im Forum Simatic
    Antworten: 32
    Letzter Beitrag: 09.05.2008, 21:18
  3. WinCC flex Variable, Struktur, Array
    Von xhasx im Forum HMI
    Antworten: 3
    Letzter Beitrag: 11.06.2007, 16:30
  4. Struktur aus DB in Programmstruktur kopieren
    Von gnikre im Forum Programmierstrategien
    Antworten: 4
    Letzter Beitrag: 05.06.2007, 09:56
  5. Bytes und Bits in DWORD kopieren
    Von Supervisor im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 12.05.2006, 00:39

Lesezeichen

Berechtigungen

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