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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Byte to Bool in SCL

  1. #1
    Registriert seit
    14.06.2005
    Beiträge
    223
    Danke
    9
    Erhielt 15 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich habe mal wieder ein SCL Problem,

    Da ich PEBs verarbeite kann ich keine Bools verwenden ohne diese vorher zu zerlegen. Nun dachte ich mir ich kann das doch direkt im Baustein machen.

    Heist ich würde nur noch ein Byte einlesen und die einzelnen Bits im Baustein verarbeiten. Wie zerlege ich das im SCL Code ?

    Danke.
    Zitieren Zitieren Byte to Bool in SCL  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo (nochmal) ...
    Bei dieser Geschichte ist auch der AT-Befehl (wie in dem anderen Thread) die beste Vorgehensweise. Allerdings kannst du hier nicht auf Byte-Basis arbeiten sondern auf WORD-Basis - liegt an der Grundform der Speicherbelegung ... S7 will immer in Richtung WORD/INT als Grundlage.
    Du könntest also eine AT-Sicht auf einen WORD oder eine Struktur aus 2 Byte als BOOL-Array (z.B) machen.

    Das könnte dann z.B. so aussehen :
    Code:
    myVar1 : WORD ;
    myVar2 AT myVar1 : struct 
                                Byte1 : byte ;
                                Byte2 : byte ;
                                end_struct ;
    myVar3 AT myVar1 : array[0..15] of Bool ;
    
    usw.
    Du kannst hier nun, wie schon von Ralle in dem anderen Thread demonstriert, mittels myVar3 auf die einzelnen Bits des myVar1 zugreifen oder diese verändern.

    Gruß
    Larry

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

    paula23 (29.01.2011)

  4. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Allerdings kannst du hier nicht auf Byte-Basis arbeiten sondern auf WORD-Basis - liegt an der Grundform der Speicherbelegung ... S7 will immer in Richtung WORD/INT als Grundlage.
    Wie kommst du zu dieser Annahme dass eine AT-Sicht auf Byte nicht funktioniert, bzw. die Aussage mit WORD/INT als Grundlage?
    Code:
    b1 : BYTE;
    a_b1 AT b1 : ARRAY[0..7] OF BOOL;
    Funktioniert auf jeden Fall.

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

    paula23 (29.01.2011)

  6. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo Thomas,
    ich kann mir vorstellen, dass das sogar funktioniert was du da schreibst - gestestet habe ich es nicht. Ich wäre da aber sehr vorsichtig mit weiteren deklarierten Variablen weil wenn du nach deinem Byte ein weiteres Byte anlegst so wird es im Speicher nicht an der nächsten Word-Adresse sondern an der folgenden Byte-Adresse angelegt - und das kann dann (gerade in Verbindung mit AT) zu "lustigen" Effekten kommen.
    Ergo ... geht möglicherweise ... ich halte mich da aber doch auch gerne an die "Spielreglen" und Besonderheiten von SCL.

    Gruß
    Larry

  7. #5
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard

    Hallo allerseits,

    anbei ein Link auf einen Threade der vor einiger Zeit lief.

    http://www.sps-forum.de/showthread.p...611#post237611

    viel Grüße Bernard
    Zitieren Zitieren Byte nach Array of Bool  

  8. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Ich wäre da aber sehr vorsichtig mit weiteren deklarierten Variablen weil wenn du nach deinem Byte ein weiteres Byte anlegst so wird es im Speicher nicht an der nächsten Word-Adresse sondern an der folgenden Byte-Adresse angelegt
    Wenn das erste Byte z.B. in den Lokaldaten an Adresse 0.0 angelegt wird, wo sollte denn eine zweite Variable vom Typ Byte deiner Meinung nach angelegt werden, wenn nicht an Adresse 1.0? Du legst doch nicht wenn du in AWL programmierst ein Reservebyte dazwischen, oder doch?

  9. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    @Thomas:
    Manchmal habe ich schwer das Gefühl, ihr wollt mich nicht verstehen ...

    Nein ... ich lege da kein Reserve-Byte dazwischen. Das ist auch nicht das, was ich meinte ...
    Sowohl deine "b1" wie auch deine "a_b1" verwenden trotz anders lautender Deklaration vom Speicher erst mal ein WORD. Was ich meinte ist : wenn hinter deiner b1 noch eine b2 gleichen Typs (also auch Byte) unmittelbar dahinter deklariert wird, so ist sie ggf. mit in dem Zugriffsbereich der a_b1. Ich habe da jetzt leider keine Möglichkeit, das zu testen - werde ich aber alsbald mal nachholen. Was passiert da also mit b2 ?
    Aber vielleicht nimmt ja vor Montag (eher kann ich nicht) noch Einer den Ball auf - das würde mich jetzt nämlich selbst interessieren ...

    Gruß
    Larry

  10. #8
    paula23 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.06.2005
    Beiträge
    223
    Danke
    9
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Ich danke euch, ich denke das wird helfen.

  11. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    @Thomas:
    Manchmal habe ich schwer das Gefühl, ihr wollt mich nicht verstehen ...

    Nein ... ich lege da kein Reserve-Byte dazwischen. Das ist auch nicht das, was ich meinte ...
    Sowohl deine "b1" wie auch deine "a_b1" verwenden trotz anders lautender Deklaration vom Speicher erst mal ein WORD. Was ich meinte ist : wenn hinter deiner b1 noch eine b2 gleichen Typs (also auch Byte) unmittelbar dahinter deklariert wird, so ist sie ggf. mit in dem Zugriffsbereich der a_b1. Ich habe da jetzt leider keine Möglichkeit, das zu testen - werde ich aber alsbald mal nachholen. Was passiert da also mit b2 ?
    Das ist auch schwer zu verstehen. Vor allem, wenn der Fragesteller ein BYTE! in 8 Bits zerlegen will, du in deinem ersten Beispiel mit Word und Structs um die Ecke kommst.

    Alle elementaren Datentypen die größer/gleich 2 Byte sind, sowie zusammengesetzte Datentypen wie Strukturen, UDT, Arrays etc. fangen im Speicher immer auf einer geraden Adresse an.
    Inwiefern diese "Lücke" im Speicher die sich manchmal ergibt, und einer AT-Sicht auf eine Variable vor dieser Lücke Probleme bereiten soll ist mir schleierhaft.

  12. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Das ist auch schwer zu verstehen. Vor allem, wenn der Fragesteller ein BYTE! in 8 Bits zerlegen will, du in deinem ersten Beispiel mit Word und Structs um die Ecke kommst.
    Wenn du es nicht verstanden hast ... kein Problem ... ich erkläre es dir gerne noch einmal ...
    Was war unklar ?

Ähnliche Themen

  1. Wie kann man Hi-Byte Low-Byte spiegeln?
    Von Klärmolch im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 11.12.2010, 20:58
  2. Umwandeln von INT nach Byte u Byte + n
    Von Gerold im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.04.2009, 10:07
  3. Bool und Byte
    Von Anaconda55 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.09.2008, 20:21
  4. Antworten: 4
    Letzter Beitrag: 08.07.2008, 08:52
  5. Bool-Array in Byte-Array
    Von Techniker im Forum Sonstige Steuerungen
    Antworten: 10
    Letzter Beitrag: 13.01.2006, 19:12

Lesezeichen

Berechtigungen

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