Autor Thema: Absulutwertgeber  (Gelesen 3819 mal)

Offline WPetrick

  • Full Member
  • ***
  • Beiträge: 138
Absulutwertgeber
« am: Juni 29, 2012, 15:55:20 Nachmittag »
Hallo
Ich habe hier ein kleines Problem mit einen Drehgeber der folgende Werte
ausgibt.
   1 Stelle           10 Stelle         100 Stelle            1000 Stelle
Wert 1                Wert 1             Wert 1                 Wert 1
Wert 2                Wert 2             Wert 2                 Wert 2
Wert 4                Wert 4             Wert 4                 Wert 4
Wert 8                Wert 8             Wert 8                 Wert 8

Also benötigt er 16 Eingänge in einer Sps.
Ich möchte in CoDeSys nun diesen Geber als Drehgeber verwenden.
Er sollte mit den Werten die auf die Eingänge gehen einen DINT Wert
ausgeben.

Ich hoffe ich konnte mich verständlich ausdrücken sonst Fragen.

Grüße Werner

 
 

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 712
  • Think easy!
    • mollgruppe
Re:Absulutwertgeber
« Antwort #1 am: Juni 29, 2012, 18:56:06 Nachmittag »
Hallo Werner
So einen Absolutwert Ausgang hab ich ja noch nie gesehen!!
Normalerweise direkt so 12-16Bit.
Naja egal, es lässt sich trotzdem leicht lösen, indem du einfach die 4Bit Werte alle berechnest und dann aufaddierst.

zB. dez 93 = 0000 0000 1001 0011 <-ist nicht INT!! aber kommt gleich ;-)

   #0011
+ #1001 mul 10 (mal zehn)
+ #0000 mul 100
+ #0000 mul 1000

Du musst erst die 4Bits mal Dezimalstelle rechnen und dann aufaddieren.
Achte aber auf die Zahlensysteme.
Hoffe ich hab mich einigermassen verständlich ausgedrückt.

Gruß Thomas
Weil Einfach einfach Einfach ist!

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 712
  • Think easy!
    • mollgruppe
Re:Absulutwertgeber
« Antwort #2 am: Juni 29, 2012, 22:32:06 Nachmittag »
Hallo Werner

hier noch der FB Geber in AWL
Allerdings gibt es in der util.lib einen BCD Converter mit Byteeingang, dadurch sind es zwei Rechnungen weniger.

FUNCTION_BLOCK Geber
VAR_INPUT
   IN0: BYTE;      (*Eingangsbyte Einer und Zehner*)
   IN1: BYTE;      (*Eingangsbyte Hunderter und Tausender*)
END_VAR
VAR_OUTPUT
   Istwert: DINT;
END_VAR
VAR
   EuZ: INT;      (*Einer und Zehner*)
   E_u_Z: DINT;      (*Einer und Zehner*)
   HuT: INT;      (*Hunderter und Tausender*)
   H_u_T:   DINT;      (*Hunderter und Tausender*)
   Zwischenerg: DINT;
END_VAR

---------------------------------------------------------------------------------

   LD      IN0
   BCD_TO_INT
   ST      EuZ

   LD      EuZ
   INT_TO_DINT
   ST      E_u_Z

   LD      IN1
   BCD_TO_INT
   ST      HuT

   LD      HuT
   INT_TO_DINT
   ST      H_u_T

   LD      H_u_T
   MUL      100
   ST      Zwischenerg

   LD      Zwischenerg
   ADD      E_u_Z
   ST      Istwert

probier es mal aus!
Weil Einfach einfach Einfach ist!

Offline WPetrick

  • Full Member
  • ***
  • Beiträge: 138
Re:Absulutwertgeber
« Antwort #3 am: Juli 02, 2012, 20:58:26 Nachmittag »
Hallo Thomas

Hab heute dein Programm mal umgesetzt, kann Dir aber erst in ein Paar Wochen rückmeldung
geben
Die Anlage wird dann erst frei zum Umbau.
Aber in einer Simulation klapt es schohnmal.
Nochmal Danke für deine schnelle Hilfe.

Gruß Werner