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

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

Thema: Phänomen bei bitweisem UND

  1. #1
    Registriert seit
    25.07.2008
    Beiträge
    48
    Danke
    4
    Erhielt 4 Danke für 2 Beiträge

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Siemens-Gemeinde,

    gerade habe Untersuchung eines seltsamen Fehlverhaltens meines Programmes folgendes entdeckt:

    Code:
    FUNCTION test : VOID

    VAR
    abc:WORD;
    END_VAR


    abc:=16#0001; ->abc ist nun 0x0001
    abc:=NOT 16#0001; ->abc ist nun 0x0000
    abc:=16#0002; ->abc ist nun 0x0002
    abc:=NOT 16#0002; ->abc ist nun 0x00FD
    abc:=16#0004; ->abc ist nun 0x0004
    abc:=NOT 16#0004; ->abc ist nun 0x00FB
    abc:=16#0008; ->abc ist nun 0x0008
    abc:=NOT 16#0008; ->abc ist nun 0x00F7
    abc:=16#0010; ->abc ist nun 0x0010
    abc:=NOT 16#0010; ->abc ist nun 0x00EF

    END_FUNCTION
    2 Fragen dazu:

    1. Wieso tanzt der NOT-Operator beim Wert 1 aus der Reihe? Wieso wird abc in der 2. Zeile nicht 0x00FE?
    2. Und überhaupt: Wieso wird das HighByte des Words komplett ignoriert?

    Mit welchen Überraschungen muss ich bei Siemens noch alles rechnen?

    Habe gestern schon feststellen müssen dass die WORD_TO_BOOL-Konvertierung nur das LSB übernimmt und somit alle geraden WORD-Werte FALSE werden und die ungeradzahligen TRUE. Wo gibts den sowas ausser bei Siemens?

    Viele Grüße

    Herdi
    Zitieren Zitieren Phänomen bei bitweisem UND  

  2. #2
    Registriert seit
    06.03.2008
    Ort
    Neustadt/Wstr.
    Beiträge
    276
    Danke
    35
    Erhielt 42 Danke für 39 Beiträge

    Standard

    Zitat Zitat von herdi Beitrag anzeigen
    Mit welchen Überraschungen muss ich bei Siemens noch alles rechnen?
    Da kommt noch einiges das kannst mir glauben
    Lebe so als sei jeder Tag dein letzter -
    eines Tages wirst Du recht haben

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    das ist mal ein schöner SCL-bug ... schaut man sich deinen baustein mal als generiertes AWL an, sieht er so aus:

    Code:
    *
          SET   
          SAVE  
          =     L      2.1
          L     W#16#1
          T     #abc
          L     W#16#0
          T     #abc
          L     W#16#2
          T     #abc
          L     W#16#FD
          T     #abc
          L     W#16#4
          T     #abc
          L     W#16#FB
          T     #abc
          L     W#16#8
          T     #abc
          L     W#16#F7
          T     #abc
          L     W#16#10
          T     #abc
          L     W#16#EF
          T     #abc
          SAVE  
          BE
    ich würde sagen, einfach mal falsch übersetzt
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Zitat Zitat von herdi Beitrag anzeigen
    1. Und überhaupt: Wieso wird das HighByte des Words komplett ignoriert?



    Herdi
    Das wird deshalb ignoriert weil es bei AWL kein 16#00FF gibt. Die Nullen werden immer abgekürzt.

    Den Rest siehe vierlagig.

    godi

  5. #5
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    dich würde sagen, einfach mal falsch übersetzt
    Ich würde sagen das ganze Problem kommt daher das bei einer Hexzahl die Nullen abgeschnitten werden.
    also zb 16#0001 wird zu 16#1 -> 2#1 dadurch ist es negiert 0
    bei 16#0002 wird zu 16#2 -> 2#10 dadurch negiert 2#1111 1101 -> 16#FD

    godi

  6. #6
    herdi ist offline Benutzer
    Themenstarter
    Registriert seit
    25.07.2008
    Beiträge
    48
    Danke
    4
    Erhielt 4 Danke für 2 Beiträge

    Lächeln

    Zitat Zitat von Full Flavor Beitrag anzeigen
    Da kommt noch einiges das kannst mir glauben

    Soll das ne Drohung sein?

    Wenn man andere Systeme kennt fragt man sich echt wieso die S7-Steuerungen so weit verbreitet sind...

  7. #7
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    es sollte funktionieren, wenn du statt NOT mit -1 also 16#FFFE multiplizierst
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. #8
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.733
    Danke
    317
    Erhielt 1.522 Danke für 1.283 Beiträge

    Standard

    Das Problem ist einzig und allein der SCL Compiler.

    Wenn deine div. Konstanten durch eine Variable ersetzt werden,
    wird das NOT zum AWL Befehl INVI kompiliert.

    Bei den Konstanten, wird das ganze zu einer scheinbar fehlerhaften Konstante Kompiliert,
    das NOT kommt im AWL-Code so gesehen gar nicht mehr vor.

    Also wenn man schreibt:

    abc:= NOT def;

    entspricht das den AWL Code (und den eigentlich gewünschten Ergebnis)
    L def
    INVI
    T abc

    Wenn man aber schreibt:
    abc:= NOT 16#0008;

    AWL:
    L 16#00F7
    T abc


    Tja, Siemens ist halt Siemens ...

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  9. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Zitat Zitat von herdi Beitrag anzeigen
    Soll das ne Drohung sein?

    Wenn man andere Systeme kennt fragt man sich echt wieso die S7-Steuerungen so weit verbreitet sind...
    Ich habe bisher noch kein System gesehen, dass nicht so seine Tücken hatte ...

  10. #10
    Registriert seit
    05.06.2006
    Ort
    PLZ 97xxx
    Beiträge
    274
    Danke
    31
    Erhielt 44 Danke für 36 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    der compiler interpretiert 16#0001 als Bit
    bis 16#00FF als Byte
    ab 16#0100 als Word

    dies tritt nur bei Konstanten auf

    mit Variablen siehts anders aus:

    FUNCTION FC100 : VOID
    VAR
    abc:WORD;
    def:WORD;
    END_VAR

    abc:=NOT def;
    END_FUNCTION


    ergibt:

    SET
    SAVE
    = L 4.1
    L #def
    INVI
    T #abc
    SAVE
    BE

Ähnliche Themen

  1. Ethernetkommunikation, Phänomen!
    Von AndreK im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 01.09.2010, 13:28
  2. Step5 V6.63 - Komisches Phänomen
    Von diabolo150973 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.06.2008, 23:38
  3. Rätselhaftes Phänomen
    Von rnovak im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 22.04.2008, 14:23
  4. Phänomen bei Speed7
    Von Ralle im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 23.08.2007, 16:17
  5. merkwürdiges phänomen ?
    Von volker im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 27.09.2006, 08:40

Lesezeichen

Berechtigungen

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