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

Ergebnis 1 bis 8 von 8

Thema: Teil eines arrays kopieren

  1. #1
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus zusammen,

    Ich würde gerne aus einem 6 byte static array, 4 byte ab byte 2 in ein dword kopieren (ohne scl). kann mir da jemand behilflich sein ? danke
    Zitieren Zitieren Teil eines arrays kopieren  

  2. #2
    Registriert seit
    05.09.2011
    Beiträge
    176
    Danke
    43
    Erhielt 28 Danke für 20 Beiträge

    Standard

    Also entweder kopierst du einfach byteweise oder du bildest dir einen ANY-Pointer auf dein Array mit entsprechenden Versatz und kopierst dann per Block Move falls ich mich jetzt nicht irre
    Wo liegt den das Ziel dword?

    Myarray: Array [1..6] of Byte

    Myarray[3], Myarray[4], Myarray[5] und Myarray[6] möchtest du jetzt in dein dword kopieren? Verstehe ich das richtig??

  3. #3
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von nutellahase Beitrag anzeigen
    Also entweder kopierst du einfach byteweise oder du bildest dir einen ANY-Pointer auf dein Array mit entsprechenden Versatz und kopierst dann per Block Move falls ich mich jetzt nicht irre
    Wo liegt den das Ziel dword?

    Myarray: Array [1..6] of Byte

    Myarray[3], Myarray[4], Myarray[5] und Myarray[6] möchtest du jetzt in dein dword kopieren? Verstehe ich das richtig??
    genau, so habe ich es jetzt gemeint. wie bekomme ich die vier nun in ein dword.

  4. #4
    Registriert seit
    05.09.2011
    Beiträge
    176
    Danke
    43
    Erhielt 28 Danke für 20 Beiträge

    Standard

    Vorweg, ich bin selber kein AWL Experte! Hab mich jetzt auch wieder kurz einlesen müssen. Also ich gehe davon aus dass du, wenn du von static Array schreibst, einen FB hast.
    Dann brauchst du im Prinzip nur dein Array in das AR1 laden und dann das Doppelwort mit den Versatz von P#2.0 in dein Dword kopieren! Vorher die Register retten und nach Bearbeitung wiederherstellen. Und einen ev. Multiinstanzoffset miteinberechnen!

    mfg

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Variante 1 mit Bit-Schieben und ein-verodern:
    Code:
          L     #statArray[3]
          SLD   8
          L     #statArray[4]
          OD    
          SLD   8
          L     #statArray[5]
          OD    
          SLD   8
          L     #statArray[6]
          OD    
          T     #statDword
    Variante 2 über indirekte Adressierung:
    Code:
          L     P##statArray
          TAR2  
          UD    DW#16#FFFFFF
          +D    
          LAR1  
          L     D [AR1,P#2.0]
          T     #statDword
    Wenn du keinen Multiinstanz-FB verwendest kannst du dir die AR2 Offset-Berechnung sparen.

  6. Folgende 2 Benutzer sagen Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Limette (26.11.2012),nutellahase (26.11.2012)

  7. #6
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Variante 1 mit Bit-Schieben und ein-verodern:
    Code:
          L     #statArray[3]
          SLD   8
          L     #statArray[4]
          OD    
          SLD   8
          L     #statArray[5]
          OD    
          SLD   8
          L     #statArray[6]
          OD    
          T     #statDword
    Variante 2 über indirekte Adressierung:
    Code:
          L     P##statArray
          TAR2  
          UD    DW#16#FFFFFF
          +D    
          LAR1  
          L     D [AR1,P#2.0]
          T     #statDword
    Wenn du keinen Multiinstanz-FB verwendest kannst du dir die AR2 Offset-Berechnung sparen.
    vielen dank. kann es leider nicht ausprobieren daher frage: wird bei deinen varianten high und low byte getauscht wie bei einem blkmove(4 byte array auf dword - soweit ich weiß ) oder müsste ich dazu variante 1 ein wenig modifizieren ?

  8. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Die Bytereihenfolge ist in Varianten 1 und 2 gleich. Ob da was gedreht wird kann man nicht sagen, da es sowas in einem Array ja nicht gibt.

    Die Bytes landen so wie ich es geschrieben habe in folgenden Bytes des Akkus
    [3] in Akku HH
    [4] in Akku HL
    [5] in Akku LH
    [6] in Akku LL

    Wenn also in [6] eine 1 steht und in den anderen 3 Bytes 0, dann ergäbe diese Bytekombination wenn man das Dword als Dint interpretieren würde den Dezimalwert 1.

  9. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Limette (26.11.2012)

  10. #8
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Die Bytereihenfolge ist in Varianten 1 und 2 gleich. Ob da was gedreht wird kann man nicht sagen, da es sowas in einem Array ja nicht gibt.

    Die Bytes landen so wie ich es geschrieben habe in folgenden Bytes des Akkus
    [3] in Akku HH
    [4] in Akku HL
    [5] in Akku LH
    [6] in Akku LL

    Wenn also in [6] eine 1 steht und in den anderen 3 Bytes 0, dann ergäbe diese Bytekombination wenn man das Dword als Dint interpretieren würde den Dezimalwert 1.
    Ok, danke.
    Kurze Hilfe noch: Angenommen in [6] würde immer noch eine 1 stehen und ich würde die Bytes tauschen:
    Code:
          L     #statArray[5]
          SLD  8
          L     #statArray[6]
          OD           
          SLD  8      
          L     #statArray[3]
          OD           
          SLD  8     
          L     #statArray[4] 
          OD          
          T     #statDword
    hätte das zur Folge:
    0000 0000 0000 0001 0000 0000 0000 0000 ?

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 06.04.2011, 15:39
  2. Auflistung eines Arrays unter WinCC
    Von Maggro im Forum HMI
    Antworten: 0
    Letzter Beitrag: 20.10.2008, 14:44
  3. Antworten: 5
    Letzter Beitrag: 03.07.2008, 23:10
  4. Antworten: 8
    Letzter Beitrag: 24.03.2007, 13:15
  5. Teil eines DINT's-Wert kopieren
    Von churchill im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 19.04.2004, 20:05

Lesezeichen

Berechtigungen

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