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

Ergebnis 1 bis 5 von 5

Thema: B&R Typecast ??

  1. #1
    Registriert seit
    19.07.2004
    Beiträge
    414
    Danke
    44
    Erhielt 34 Danke für 20 Beiträge

    Rotes Gesicht


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe ein Bitarray (32-bit) und möchte wissen, ob eines dieser Bits gesetzt ist.
    Ich wollte aber nicht so gerne alle Bits durchgehen, sondern über Typecasting abfragen ob das UDINT <> 0 ist.
    Leider bin ich mal wieder zu doof etwas rauszufinden
    Hat jemand von Euch einen Tip ???

    So sehen die Arrays aus:

    Code:
    VAR
        Gruppe_1 : ARRAY[0..31] OF BOOL := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
        Gruppe_2 : ARRAY[0..31] OF BOOL := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
        Gruppe_3 : ARRAY[0..31] OF BOOL := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
        Meldungen : ARRAY[0..31] OF BOOL := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
        Sammelalarm : BOOL := FALSE;
        Sammelmeldung : BOOL := FALSE;
    END_VAR

    Danke schon mal ...
    Geändert von Lazarus™ (15.10.2012 um 12:46 Uhr)
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt



    Zitieren Zitieren B&R Typecast ??  

  2. #2
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Meiner Meinung nach ist ein CAST nicht zulässig, da nirgendwo die Norm vorschreibt, wie die Bits gespeichert werden MÜSSEN. Man kann zwar wissen, dass sie so oder so abgelegt sind aber das kann sich bei der nächsten Software Version des Compilers schon geändert haben.

    Deshalb nutze ich die PACK und UNPACK Funktionalitäten und speichere alles in Worten oder Bytes.

    Z.B.

    IF (theImage.bSSIOk = FALSE) THEN
    bSSIEr := PACK (
    B0 := stEqualWord01.bEqu,
    B1 := stEqualWord02.bEqu,
    B2 := stEqualWord03.bEqu,
    B3 := stEqualWord04.bEqu,
    B4 := stEqualWord09.bEqu,
    B5 := stEqualWord10.bEqu,
    B6 := stEqualWord11.bEqu,
    B7 := theSSIFlag); (* from extern CHK_SSI PRG *)
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren PACK und UNPACK  

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

    Lazarus™ (16.10.2012)

  4. #3
    Registriert seit
    13.09.2010
    Beiträge
    113
    Danke
    0
    Erhielt 18 Danke für 18 Beiträge

    Standard

    Auch boolsche Werte werden byteweise im Speicher abgelegt. Bei einem 32 Bitarray kommen also 32 Byte respektive 16 Wörter zusammen.
    Die Größe der Arrays erlaubt es aber durchaus, dass Du es in einer Schleife durchläufst. Das hat den Vorteil, dass Du weißt ob eines der Elemente 0 oder 1 ist und vor allem welches. Wenn das Element nicht interessiert, sondern nur ob ein oder mehrere Elemente ungleich 0 sind kann man sich die Adresse nehmen und den Speicherbereich auf 0 prüfen. Stichwort memcmp().

    Gruß

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

    Lazarus™ (16.10.2012)

  6. #4
    Avatar von Lazarus™
    Lazarus™ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2004
    Beiträge
    414
    Danke
    44
    Erhielt 34 Danke für 20 Beiträge

    Standard

    Ich danke Euch für die Antworten. Nun habe ich mich doch entschlossen das mit einer einfachen Schleife durchzueiern
    Trotzdem vielen Dank

    Gruß
    Lazarus™
    Für richtiges Chaos,braucht man sehr schnelle Computer.
    Und wieso einfach... .... wenn es auch Siemens gibt




  7. #5
    Registriert seit
    22.10.2012
    Beiträge
    40
    Danke
    8
    Erhielt 7 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus zusammen,

    ich bin etwas spät, aber trotzdem.

    Im Initblock z.B.
    memset(ADR(FeldLow),0,SIZEOF(FeldLow))


    Im cyclic:
    Sammelalarm=BOOL(memcmp(ADR(Gruppe_1),ADR(FeldLow),SIZEOF(Gruppe_1)))

    FeldLow sollte vom gleichen Typ sein wie etwa Gruppe_1

    Grüße

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 04.04.2012, 15:12
  2. IBH Link S7++ & CPU314 & TP177B mit Profibus
    Von CrazyMC im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 25.03.2012, 22:12
  3. Step 7 V11 & AWL & PLC-SIM
    Von derdas im Forum PC- und Netzwerktechnik
    Antworten: 1
    Letzter Beitrag: 06.03.2012, 11:22
  4. Biete B&R 2003 & 2005 Hardware
    Von cooper500 im Forum Suche - Biete
    Antworten: 0
    Letzter Beitrag: 20.04.2009, 12:25
  5. PPI && TD200 stört die Verbindung zum PC
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 10.11.2004, 14:39

Lesezeichen

Berechtigungen

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