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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 27 von 27

Thema: Bereich kopieren - verschiedene Datentypen

  1. #21
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.316
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von RobiHerb Beitrag anzeigen
    In anderen Sprachen (C, PASCAL...) gibt es das Konstrukt UNION, da kann mann den gleichen Speicherbereich beliebig interpretieren.
    Bei SCL gibt es ebenfalls UNION - heißt da "AT-View". Weil aber selbst STRUCTs bunt verwürfelt "optimiert" im Speicher verteilt angeordnet werden, kann AT nicht auf "optimiertem" Speicher verwendet werden. Siemens läßt da noch nichtmal eine INT-Variable "AT" eine Word-Variable zu.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #22
    Registriert seit
    31.01.2016
    Ort
    In der naehe von São Paulo, in der Naehe vom Strand...
    Beiträge
    44
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Variable wird nicht initialisiert... und wird gelb unterstrichen dargestellt.

  3. #23
    Registriert seit
    10.11.2009
    Beiträge
    12
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Man könnte ja die einzelnen Array Bytes seiner struktur zuweisen .... das ist aber mit viel aufwand verbunden. Man müsste dann auch noch die Byte reihenfolge beachten
    in etwa so :
    Code:
    #dwtmp := #arrIN[x];
    #dwtmp := SHL(IN := #dwtmp, N := 8 + #arrIN[x];
    #dwtmp := SHL(IN := #dwtmp, N := 8 + #arrIN[x];
    #dwtmp := SHL(IN := #dwtmp, N := 8 + #arrIN[x];
    #strucOUT.dw := #dwtmp;
    
    #strucOUT.bool_1 := #arrIN[x].%X0

  4. #24
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.316
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Wenn der FC nur die FOR-Schleife enthält, dann meckert der Compiler, daß die Variable i nicht initialisiert würde?
    Sind die Compiler-Programmierer bekloppt? Wer weiß, was für eine "Optimierung" denen da wieder eingefallen ist...
    Welche TIA-Version hast Du?

    Code:
    FUNCTION "FCxxx" : Void
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_INPUT 
          Menge : Int;
       END_VAR
    
       VAR_TEMP 
          i : Int;
       END_VAR
    
    BEGIN
       // #i:=0; //wird zum initialisieren gebraucht, sonst meckert Compiler
    
       // Schleife
       For #i := 0 To (#Menge - 1) Do
          ;
       End_For;
    END_FUNCTION
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #25
    Registriert seit
    10.11.2009
    Beiträge
    12
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Laut der Hilfe für die Funktionen Peek und Poke:

    Wenn Sie am Parameter AREA den Bereich 16#84 für einen Datenbaustein angeben, dann können Sie nur auf Datenbausteine mit der Bausteineigenschaft "Standard" zugreifen.

    Der Kompiler gibt keine fehlermeldung ... aber die Funktion arbeitet auch nicht solange bausteine "Optimiert" sind

  6. #26
    Registriert seit
    01.10.2012
    Beiträge
    203
    Danke
    12
    Erhielt 56 Danke für 36 Beiträge

    Standard

    So in der Art sollte es doch auch in TIA gehen.

    Code:
    TYPE UDT_Serial
        STRUCT
        // Typbeschreibung
    eins,zwei,drei,vier,fuenf:INT;
    blubb:ARRAY[0..94] OF char;
        END_STRUCT
    END_TYPE
    
    DATA_BLOCK DB_Serial
        STRUCT
        blubb:UDT_Serial;
        END_STRUCT
    BEGIN
    
    END_DATA_BLOCK
    
    
    DATA_BLOCK DB_Array
        STRUCT
        input:ARRAY[0..99] OF BYTE;
        END_STRUCT
    BEGIN
    
    END_DATA_BLOCK
    
    
    FUNCTION FC_Serial : void
    
    VAR_TEMP
        _tempserial:UDT_Serial;
        _sicht AT _tempserial:ARRAY[0..99] OF BYTE;
    i:INT;
    END_VAR
    
    FOR i:=0 TO 99 BY 1 DO
        _sicht[i]:="DB_Array".input[i];
    END_FOR;
    
    "DB_Serial".blubb := _tempserial;
    
    END_FUNCTION
    Nüchtern betrachtet war es besoffen besser.

  7. #27
    Snape ist offline Benutzer
    Themenstarter
    Registriert seit
    12.11.2007
    Beiträge
    92
    Danke
    1
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe TIA V13 SP1.
    Meine aktuelle Lösung ist READ_LITTLE. Ich muss zwar jedes Element einzeln rausholen, aber somit ist die Weiterverarbeitung wesentlich einfacher.

Ähnliche Themen

  1. TIA Datentypen kopieren, Datentypen kopieren
    Von Dublin im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 17.06.2015, 16:37
  2. Verschiedene bereichslängen kopieren
    Von -Melanie- im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 18.02.2010, 18:24
  3. DB bereich kopieren / Syntaxproblem
    Von Kodan im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 30.04.2008, 19:21
  4. Antworten: 0
    Letzter Beitrag: 25.04.2007, 07:50
  5. Daten von einem DB inTemp Bereich kopieren
    Von neuer_user im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 05.10.2006, 14:29

Lesezeichen

Berechtigungen

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