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

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

Thema: Vorzeichen Word

  1. #1
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich habe mir einen Baustein erstellt der ein Eingangs Word und ein Speicher Word miteinander vergleicht. Ändert sich was am Eingangs Word
    möchte ich die Bits in ein MELDUNG_ALARM_FENSTER (WORD) schreiben.

    Hierfür verwende ich folgende Funktion

    Code:
    MELDUNG_ALARM_FENSTER:=INT_TO_WORD (WORD_TO_INT(SPEICHER_FENSTER) - WORD_TO_INT(EW_FENSTER));
    mein Problem ist das ich das forzeichen des MELDUNG_ALARM_FENSTER weg bekommen muss da ich machnal die falschen bits bekomme.

    Ich bekomme z.b -512 DEZ benötige aber 512 DEZ

    wie kann ich das Vorzeichen in einem Word entfernen ?
    Zitieren Zitieren Vorzeichen Word  

  2. #2
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    einfach durch eine Und-Verknüpfung mit Hex. 7FFF.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  3. #3
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo
    jetzt habe ich aber das Problem bei den Positiven Zahlen.

    Wie kann ich bei Word eine Bedienung abfragen?

    Wenn negativ dann AND W#16#7FFF

    Habs jetzt so gelöst

    Code:
    // Alammeldungen ausgeben
          IF ALARM = TRUE THEN
              IF WORD_TO_INT(SPEICHER_FENSTER) > WORD_TO_INT(EW_FENSTER)THEN
                 MELDUNG_ALARM_FENSTER:=INT_TO_WORD (WORD_TO_INT(SPEICHER_FENSTER) - WORD_TO_INT(EW_FENSTER));
              ELSE
                 MELDUNG_ALARM_FENSTER:=INT_TO_WORD (WORD_TO_INT(EW_FENSTER) - WORD_TO_INT(SPEICHER_FENSTER));
              END_IF;
    jetzt klappts.

    Aber was ich noch nicht wuste ich kann mit AND was ADDIEREN ? geht das mit jeder Var in SCL ?
    Geändert von emilio20 (03.02.2013 um 02:06 Uhr)

  4. #4
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Warum verwendest Du nicht einfach die ABS() Funktion um das Vorzeichen zu eliminieren?
    Code:
    MELDUNG_ALARM_FENSTER:=INT_TO_WORD (ABS(WORD_TO_INT(SPEICHER_FENSTER) - WORD_TO_INT(EW_FENSTER)));
    Dann kannst Du Dir die ganze IF Abfrage sparen.
    If you open your Mind too much, your Brain will fall out.

  5. #5
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    OK
    Versuche ich mal, die Funktion kannte ich noch nicht

    Danke

  6. #6
    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

    Hallo,
    da es dir hier ja wahrscheinlich ums ausmaskieren geht ... warum benutzt du dafür denn nicht AND und Konsorten (also die Logik-Funktionen) anstatt der Rechenfunktionen, die dir wegen dem Vorzeichenbit (u.a.) ja immer wieder Probleme bereiten werden ?

    Gruß
    Larry

  7. #7
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo,
    da es dir hier ja wahrscheinlich ums ausmaskieren geht ... warum benutzt du dafür denn nicht AND und Konsorten (also die Logik-Funktionen) anstatt der Rechenfunktionen, die dir wegen dem Vorzeichenbit (u.a.) ja immer wieder Probleme bereiten werden ?

    Gruß
    Larry
    Das sind aber grundverschiedene Sachen!

    Mir ist ja auch nicht kalr was der TE versucht umzusetzen. Aber man kann durch einfaches Ausmaskieren nicht den Absolutwert ermitteln. Da kommt dann eine ganz andere Zahl raus!

    Für den interessierten Leser:
    http://de.wikipedia.org/wiki/Einerkomplement


    [edit]Klar kann man da nun mit XOR usw es zwanghaft auch mittels Maskieren lösen... [/edit]
    Geändert von zotos (03.02.2013 um 14:34 Uhr)
    If you open your Mind too much, your Brain will fall out.

  8. #8
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Zitat Zitat von zotos Beitrag anzeigen
    ...
    [edit]Klar kann man da nun mit XOR usw es zwanghaft auch mittels Maskieren lösen... [/edit]
    Warum ist das:
    Code:
    MELDUNG_ALARM_FENSTER := SPEICHER_FENSTER XOR EW_FENSTER;
    gegen das:
    Code:
    MELDUNG_ALARM_FENSTER:=INT_TO_WORD (ABS(WORD_TO_INT(SPEICHER_FENSTER) - WORD_TO_INT(EW_FENSTER)));
    zwanghaft?
    Geändert von hucki (03.02.2013 um 17:32 Uhr)

  9. #9
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Nochmal:
    Zitat Zitat von zotos Beitrag anzeigen
    ...
    Mir ist ja auch nicht klar was der TE versucht umzusetzen.
    ...
    Der Einwand mit XOR kam übrigens von mir. Die maskiererei mit hex7FFF, dass wilde wandeln von INT_TO_WORD und umgekehrt war auch nicht meine Idee.

    Mein Einwand bezog sich lediglich darauf das man aus einer -512 am einfachsten und übersichtlichsten eine 512 erzeugen kann wenn man den Absolutwert davon nimmt.
    If you open your Mind too much, your Brain will fall out.

  10. #10
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von zotos Beitrag anzeigen
    ... Der Einwand mit XOR kam übrigens von mir. ...
    Deswegen hat mich ja interessiert, warum Du als anerkannte SCL-Koryphäe Deinen eigenen Vorschlag für zwanghaft hältst?

    Zumal der TE ja offensichtlich einige Funktionen nicht kennt.

Ähnliche Themen

  1. Datentyp INT ohne Vorzeichen??
    Von jtm im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 30.12.2010, 12:16
  2. Dint Vorzeichen immer minus einstellen
    Von bludie im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 18.06.2010, 06:02
  3. DI_STRNG ohne Vorzeichen!
    Von hoT im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 11.01.2010, 23:55
  4. Neg. Vorzeichen in E/A Feld eingeben
    Von knollmeister im Forum HMI
    Antworten: 2
    Letzter Beitrag: 07.11.2005, 13:26
  5. Vorzeichen ignorieren
    Von Lipperlandstern im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.02.2005, 23:41

Lesezeichen

Berechtigungen

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