Step 7 DINT Wert um letzten Digit abfiltern

ChopinJunkie

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
INT Wert um letzten Digit abfiltern

Hallo zusammen,

könnte mir jemand hier vllt einen Hinweis auf die Lösung meines Problems geben?

Das Problem ist also folgendes:
ich habe einen schwankenden Messwert (von 27648 bis 0), den ich erfasse und entsprechende weise bearbeite und abspeichere. Leider besteht's eine Schwankung beim letzten Digit, die die Messlogik (in meinem SPS-Programm) durch einander bringen kann. Wie könnte ich an der Stelle das letzte Digit abfiltern, ignorieren oder was auch immer, hauptsache dass ausschließlich die Änderung von höheren Digits wirksam wird.

MfG,
ChopinJunkie
 
Zuletzt bearbeitet:
Guten morgen,

du könntest eine Bit-Maske darüber legen und so das erste Bit ignorieren. Also den Eingangswert mit UW verarbeiten.

Gesendet von meinem GT-I9305 mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten morgen,

du könntest eine Bit-Maske darüber legen und so das erste Bit ignorieren. Also den Eingangswert mit UW verarbeiten.

Gesendet von meinem GT-I9305 mit Tapatalk

ja, das hat mir auch mal eingefallen. Geht das aber mit INT Werten auch? ich habe da irgendwie einen Datentyp Konflikt:confused: Oder muss ich mir vor dem WAND eine Integer to Word und danach auch so eine Word to Integer Umwandlung nehmen? Gibt's so eine überhaupt?:confused:
 
soweit ich weiß, ist doch der grundlegende unterschied von integer zu Word das lediglich das High-Bit das Vorzeichen angibt. deswegen sollte das schon funktionieren. mir ist nur nicht so ganz klar ob du jetzt ein Int oder Dint hast.

Gesendet von meinem GT-I9305 mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was soll das bringen wenn man mit einer Bitmaske? das letzte Bit wegfiltert? Dann ist der Integerwert nachher einfach nur noch gerade. Aber die Schwankungen am letzten Digit wird es nicht beheben (es seidenn es schwankt wirklich nur wegen dem einen Bit)
Wenn das letzte Digit wirklich weggefiltert werden soll, könnte man z.B. eine Division durch 10 und eine anschliessende Multiplikation mit 10 machen. Dann ist das letzte Digit immer 0

mfg René
 
Danke für den Hinweis :)

auf jeden Fall mit der Bitmaske geht das nicht einwandfrei
Code:
      L     #In
//somit sollte theoretisch das letzte Digit vom INT Wert ausgefiltert werden
      L     W#16#FFF0 //2#1111_1111_1111_0000 
      UW    
      T     #Out
      NOP   0

ist aber in der Tat nicht so. Bei der Eingabe von 3240 Wert, gibt er nur 3232 raus:shock:. Den 3248 lässt er völlig durch. Aber ignoriert er die Änderung von anderen Digits, also 3241, 3242,3243...3247 und 3249, gibt er ständig 3240:)
 
@chopin
Du hast nicht die Einerstelle weggefiltert, sondern das gesamte letzte Nibble, deshalb bekommst Du diese Ergebnisse.
Ich würde es genauso machen, wie vollmi. Einfach durch zehn teilen.
 
Ja, das passte mir nicht wirklich. Ich habe es nur später fest gestellt:rolleyes:
Die Lösung von vollmi nehme ich mal an;)

Vielen Dank an vollmi!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ziffernabspaltung

Das niederwertigste Digit einer Zahl ermitteln/entfernen macht man ganz allgemein so, daß man die Zahl per Ganzzahl-Division durch die Zahlenbasis dividiert. Der Divisionsrest enthält dann das Digit und der Quotient den vorderen Rest der Zahl. Wenn man den Quotient wieder mit der Zahlenbasis multipliziert dann erhält man die auf das letzte Digit = 0 abgerundete Ausgangszahl.

Harald
 
Zu erwähnen sei noch.

Wenn die Ursprungszahl im letzten Digit gerade um 0/9 schwankt, schwankt er nachher um 10. Die Störung deines Programmes dürfte dadurch also eher vergrössert werden.
Hier wäre ein zeitlicher Filter oder eine Totzone eher in Betracht zu ziehen denke ich mir.

mfG René
 
Hallo,
wenn der Messwert nicht all zu Zeitkritisch ist mach ne Mittelwertbildung über 5 bis 10 Zyklen.


Gruß
Joe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zu erwähnen sei noch.

Wenn die Ursprungszahl im letzten Digit gerade um 0/9 schwankt, schwankt er nachher um 10. Die Störung deines Programmes dürfte dadurch also eher vergrössert werden.
Hier wäre ein zeitlicher Filter oder eine Totzone eher in Betracht zu ziehen denke ich mir.

mfG René

das denke ich mir nicht. Das Messsignal wird von einem Ultraschall Sensor ermittelt. Genau wegen der physikalischen Eigenschaften der Oberfläche ist mir eine zufällige kleine Änderung des Messwertes ungünstig, da ich entsprechend meiner Logik einen Mittelwert auf Basis von Steigung/Senkung des Wertes bilde.

Aber dennoch Danke für den Hinweis;)

MfG
ChopinJunkie
 
Zurück
Oben