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

Ergebnis 1 bis 7 von 7

Thema: Doppelwort auf Out Parameter Typ Arry of bit

  1. #1
    Registriert seit
    19.12.2006
    Beiträge
    185
    Danke
    25
    Erhielt 26 Danke für 21 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Jungs,

    mich hat eine sogenannte Denkblokade erwischt

    Folgende Ausgangsposition:

    Ich habe einen DB in dem in einem Doppelwort einzelne Daten im Bitformat abgelegt sind.
    Jetzt möchte ich in einem FB ein out Parameter als Array of Bool (0..31) anlegen und die Daten aus dem Doppelwort hinein kopieren.

    Erster Ansatz war folgender:

    Code:
    L DBxx.DBDxx //Bit Daten im Doppelwort
    TAD //drehen
    T #tempDoppelwort //Lokale Variable an Adresse L0.0
    
    U L 0.0
    = #OutArray[0]
    
    U L 0.1
    = #OutArray[1]
    
    U L 0.2
    = #OutArray[2]
    
    //usw.

    Funktioniert, gefällt aber nicht wirklich bei 32 Bits

    Kann ich das out Array nicht irgendwie indirekt adressieren wie:

    Code:
    LAR 1 P##OutArry
    
    L  DBxx.DBDxx //Bit Daten im Doppelwort
    T D[AR1,P#0.0]


    Oder ist das totaler Stuss? Ich bin leider nicht so fit was die Programmierung mit indirekter Adressierung angeht und würde mich freuen wenn mir jemand auf die Sprünge helfen kann.



    Gruß
    Daniel
    Zitieren Zitieren Doppelwort auf Out Parameter Typ Arry of bit  

  2. #2
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  3. #3
    mkd ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.12.2006
    Beiträge
    185
    Danke
    25
    Erhielt 26 Danke für 21 Beiträge

    Standard

    Hallo,

    da habe ich mich gleich mal bedankt

    Also, folgendes funktioniert

    Code:
    LAR1  P##OutArray
    
    L     #tempDoppelwort
    TAD   
    T     D [AR1,P#0.0]
    das auch
    Code:
    LAR1  P##OutArray
     LAR2 P##tempDoppelwort
    
    L     D [AR2,P#0.0]
    TAD   
    T     D [AR1,P#0.0]
    In meinem Fall nutze ich dann Variante 1, auch wenn ich nicht wirklich verstehe warum ich mit TAD die Reihenfolge der Akkus tauschen muss damit Bit 0 im Doppelwort auch Index0 [0] im Array ist

    In einem anderen FAQ Beitrag habe ich gelesen, dass man nicht ohne weiteres AR2 in einem FB nutzen darf. Was hat das auf sich und wie kann ich trotzdem AR2 ohne Probleme nutzen?

    und wech...

  4. #4
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    In meinem Fall nutze ich dann Variante 1, auch wenn ich nicht wirklich verstehe warum ich mit TAD die Reihenfolge der Akkus tauschen muss damit Bit 0 im Doppelwort auch Index0 [0] im Array ist
    hast du schon mal was von BIG und LITTLE ENDIAN gehört??
    Stichwort:Bytereihenfolge
    Hier zum Nachlesen:http://de.wikipedia.org/wiki/Little_Endian

    In einem anderen FAQ Beitrag habe ich gelesen, dass man nicht ohne weiteres AR2 in einem FB nutzen darf. Was hat das auf sich und wie kann ich trotzdem AR2 ohne Probleme nutzen?
    Wenn du einen Multiinstanzfähigen FB hast dann mußt du bei indirekter Adressierung den Offset von AR2 dazuzählen, da der FB das AR2 benutzt.
    Ausserdem immer wenn man die Adressregister verbiegt,

    Code:
     
    am anfang
     
    TAR1 #AR1save
    TAR1 #AR2save
     
    Programm
     
    und am ende 
    LAR1 #AR1save
    LAR2 #AR2save
    damit der nachstehende Baustein wieder ein sauberes AR zur Verfügung hat.
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  5. Folgender Benutzer sagt Danke zu Gerhard K für den nützlichen Beitrag:

    mkd (24.04.2010)

  6. #5
    mkd ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.12.2006
    Beiträge
    185
    Danke
    25
    Erhielt 26 Danke für 21 Beiträge

    Standard

    Hi,

    o.k. also sind die Daten im Doppelwort wohl als Big Endian gespeichert und das Array ist entsprechend als Little Enday aufgebaut.

    Die Begrifflichkeiten kannte ich nicht, sehr wohl aber das Problem durch "try and error" Tests. Sonst hätte ich ja kein
    Code:
    TAD
    eingefügt

    Das Sichern der AR´s vor indirekter Adressierung und zurückschreiben danach habe ich, dank des Forums, bis jetzt zur "Sicherheit" immer angewendet.

    Wenn du einen Multiinstanzfähigen FB hast dann mußt du bei indirekter Adressierung den Offset von AR2 dazuzählen, da der FB das AR2 benutzt.
    Kannst du das evt. näher erläutern? Wie groß und warum Offset?



    Gruß
    Daniel

  7. #6
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    offset weil die FB´s mit dem AR2 arbeiten.
    aber gib bei der suche mal multiinstanz ein.da gibt es einige beiträge wo das schon beschrieben wird.
    lg
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  8. #7
    Registriert seit
    14.11.2008
    Beiträge
    66
    Danke
    3
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Beste Variante:
    Zitat Zitat von mkd Beitrag anzeigen
    Code:
    LAR1  P##OutArray
    
    L     #tempDoppelwort
    TAD   
    T     D [AR1,P#0.0]
    AR1 muss in der Regel nicht gesichert werden (solange man keinen eigenen Code hat, der davon abhängt). AR2 würde ich sichern, damit die Verwendbarkeit der Funktion nicht eingeschränkt wird.

    Welche TAD/TAW/... Variation nötig ist, zeigt sich am besten durch Online-Beobachten.

Ähnliche Themen

  1. Doppelwort formatieren
    Von Sybkal im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 11.05.2011, 19:02
  2. Ein Bit aus Doppelwort finden
    Von Flo im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 15.04.2010, 23:37
  3. ANY-Format auf Doppelwort?
    Von Jordy im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 08.10.2007, 10:23
  4. Datenbaustein arry ansprechen
    Von totalfuchs im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 22.09.2005, 11:53
  5. Antworten: 2
    Letzter Beitrag: 29.07.2005, 08:25

Lesezeichen

Berechtigungen

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