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

Ergebnis 1 bis 10 von 10

Thema: DINT nach INT bei positiven und ganzzahligen Werten (Frequenzmessung)

  1. #1
    Registriert seit
    30.08.2007
    Beiträge
    207
    Danke
    16
    Erhielt 22 Danke für 17 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich lese mit meiner 314IFM eine Frequenz mit dem SFB30 ein.
    Diese Frequenz wird in dem dazugehörigen Instanz-DB als DINT gespeichert.
    Da ich keine negative Zahl erwarte, kann ich doch einfach den DINT-Wert aus dem Instanz-DB in mein Visu-DB als INT schieben, sofern der DINT in ein INT passt!?
    Außerdem wird der Wert im Instanz-DB in mHz angegeben, ich benötige diese Angabe in Hz.

    Ich habe jetzt folgende Idee:
    Code:
    L     DB30.DBD 10 // Instanz-DB
    L     1000
    /D    
    T     DB50.DBW 2 // Frequenz
    Würde das so funktionieren, um die Frequenz in Hz zu messen und als INT zu speichern?
    Die Frequenz kommt NIE über 100Hz, im Normalfall pendelt sich diese bei 80 bis 90Hz ein.
    Wenn ich ehrlich bin, gefällt mir die Division nicht, geht das anders?

    Sorry für die dummen Fragen, aber irgendwie macht es noch nicht klick, wie ich ein DINT in ein INT schiebe (vorausgesetzt das DINT passt in ein INT)...

    Gruß,
    poppycock
    Mit einem Computer löst man die Probleme, die man ohne einen Computer nicht hätte.
    Zitieren Zitieren DINT nach INT bei positiven und ganzzahligen Werten (Frequenzmessung)  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Wenn die Grenzen einer Int nicht überschritten werden, geht das.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Avatar von poppycock
    poppycock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.08.2007
    Beiträge
    207
    Danke
    16
    Erhielt 22 Danke für 17 Beiträge

    Standard

    Zum Verständnis:

    Ich stelle mir gerade eine 1 als DINT vor:
    00000000 00000000 00000000 00000001

    Nun stelle ich mir eine 1 als INT vor:
    xxxxxxxx xxxxxxxx 00000000 00000001

    Wenn ich nun dieses DINT als INT speichern will, werden die ersten 16 Bits von rechts nach links "verwendet"?!
    Richtig?

    Wenn ich folgenden DINT habe:
    00000000 00000001 11111111 11111111
    kann ich diesen NICHT als ein INT schreiben, weil ich damit den Wertebereich eines INT verlasse?!
    Richtig?
    Mit einem Computer löst man die Probleme, die man ohne einen Computer nicht hätte.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Hallo,
    es ist so wie Ralle gesagt hat ...
    Denk bitte daran, wie die Bytes und Worte (bei Siemens) in einem Doppelwort / DINT liegen ...

    Gruß
    LL

  5. #5
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von poppycock Beitrag anzeigen
    Wenn ich folgenden DINT habe:
    00000000 00000001 11111111 11111111
    kann ich diesen NICHT als ein INT schreiben, weil ich damit den Wertebereich eines INT verlasse?!
    Richtig?
    Stimmt. Und eine DINT von z.B.
    00000000 00000000 10111111 11111111
    kann auch nicht verwendet werden, da das jeweils oberste Bit das Vorzeichenbit ist und sich somit eine negative Zahl ergeben würde.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von poppycock Beitrag anzeigen
    Wenn ich folgenden DINT habe:
    00000000 00000001 11111111 11111111
    kann ich diesen NICHT als ein INT schreiben, weil ich damit den Wertebereich eines INT verlasse?!
    Richtig?
    Du könntest diesen Wert aber z.B. um 2 nach Rechts schieben (durch 4 teilen) - dann ginge es wieder. Ein INT hat (genau wie ein DINT) nun mal seine Bereichsgrenzen ...

  7. #7
    Avatar von poppycock
    poppycock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.08.2007
    Beiträge
    207
    Danke
    16
    Erhielt 22 Danke für 17 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Denk bitte daran, wie die Bytes und Worte (bei Siemens) in einem Doppelwort / DINT liegen ...
    Wenn ich ein DINT nach DB1.DBD0 speichere, dann kann ich mit DB1.DBW2 das INT herauslesen.
    So hast du das doch gemeint, oder?

    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Und eine DINT von z.B.
    00000000 00000000 10111111 11111111
    kann auch nicht verwendet werden, da das jeweils oberste Bit das Vorzeichenbit ist und sich somit eine negative Zahl ergeben würde.
    Das stimmt auch mal wieder! Irgendwie ist das alles ganz logisch, aber ich verstehe noch immer nicht so ganz, wie ich ein (von der Größe her passendes) DINT in ein INT speichern kann. Werden die führenden Nullen eines DINT einfach ignoriert?

    Beispiel:
    Code:
    L     DB30.DBD 10 // DINT laden, das in ein INT passt
    T     DB50.DBW 2  // als INT speichern
    Mit einem Computer löst man die Probleme, die man ohne einen Computer nicht hätte.

  8. #8
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von poppycock Beitrag anzeigen
    Code:
    L     DB30.DBD 10 // DINT laden, das in ein INT passt
    T     DB50.DBW 2  // als INT speichern
    Wenn sichergestellt werden kann, dass der Wertebereich ziwschen -32768 und +32767 liegt, kann dieser Code bedenkenlos verwendet werden. Natürlich kann der Wert auch erst durch 1000 geteilt werden, wenn für das Ergebnis diese Bedingung zutrifft. Im positiven Falle werden die Nullen in den oberen 16 Bits ignoriert und im negativen Falle sind die obersten 17 Bits sowieso 1 und somit bleibt danach das Vorzeichenbit (Bit 15) übrig.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  9. Folgender Benutzer sagt Danke zu Rainer Hönle für den nützlichen Beitrag:

    poppycock (23.07.2009)

  10. #9
    Avatar von poppycock
    poppycock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.08.2007
    Beiträge
    207
    Danke
    16
    Erhielt 22 Danke für 17 Beiträge

    Standard

    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Wenn sichergestellt werden kann, dass der Wertebereich ziwschen -32768 und +32767 liegt, kann dieser Code bedenkenlos verwendet werden. Natürlich kann der Wert auch erst durch 1000 geteilt werden, wenn für das Ergebnis diese Bedingung zutrifft.
    Ja, der Min-Wert ist 0 und der Max-Wert ist <= 100
    Von daher ist das sichergestellt!

    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Im positiven Falle werden die Nullen in den oberen 16 Bits ignoriert und im negativen Falle sind die obersten 17 Bits sowieso 1 und somit bleibt danach das Vorzeichenbit (Bit 15) übrig.
    Super, danke! Die Erklärung hat mir sehr zum Verständnis meiner Frage beigetragen!
    Mit einem Computer löst man die Probleme, die man ohne einen Computer nicht hätte.

  11. #10
    Avatar von poppycock
    poppycock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.08.2007
    Beiträge
    207
    Danke
    16
    Erhielt 22 Danke für 17 Beiträge

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mit meinem hundertsten Beitrag gibt es etwas erfreuliches zu berichten!

    Es klappt wunderbar!
    Ich kann ohne Probleme den mHz-Wert als DINT in ein INT-Datenbereich schieben, der vorher nach Hz umgerechnet wurde:

    Code:
    L     DB30.DBD 10 // DINT laden, das in ein INT passt (Frequenz in mHz)
    L     1000        // mHz nach Hz
    /D                // mHz nach Hz umrechnen
    T     DB50.DBW 2  // als INT speichern (Frequenz in Hz)
    Vielen Dank an alle, die mir geholfen haben mein Verständnisproblem zu beseitigen!

    Gruß,
    poppycock
    Mit einem Computer löst man die Probleme, die man ohne einen Computer nicht hätte.
    Zitieren Zitieren GELÖST! Vielen Dank!  

Ähnliche Themen

  1. DB nach Werten durchsuchen - SCL ?
    Von karsten.schmidt im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 26.03.2011, 13:15
  2. Byteweise auslesen von DINT-Werten
    Von schneijo im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 20.01.2011, 11:13
  3. Zählen von positiven Flanken
    Von GigaPitty im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 21.04.2010, 08:19
  4. Date nach DINT Format
    Von PhilippL im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 07.09.2007, 08:44
  5. Wandeln von DINT nach INT
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.01.2006, 11:20

Stichworte

Lesezeichen

Berechtigungen

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