Twincat 2 Umwandlung Hexadezimal zu Dezimal

Mikeee

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

seit mehreren Tag befassen wir uns im Rahmen eines Kleinprojektes mit einem Problem.

Wir empfangen über eine analoge Eingangsklemme (KL3064) ein 0-10V Signal von einem US-Sensor.
In der PLC kommt dieser Wert nur als HEX an. Im System Manager wird die Volt Zahl jedoch im Dezimalformat präsentiert.
Es wäre für uns von Vorteil, wenn mir mit einer dezimalen Voltzahl rechnen könnten.

Liegt dies an der Variablendefinition (AT%I*:Word;)?


Vielen Dank für eure Antworten


Gruss
Mike
 
Dezimal und Hexadezimal sind lediglich andere Darstellungsformen des gleichen Grundwerts ...

Liegt dies an der Variablendefinition (AT%I*:Word;)?
Von daher : ich könnte es mir schon gut vorstellen ... (da bei Beckhoff z.B. auch eine Variable, die auf eine Enumeration zurückgeht, den Enum-Text anzeigt ...)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dezimal und Hexadezimal sind lediglich andere Darstellungsformen des gleichen Grundwerts ...


Von daher : ich könnte es mir schon gut vorstellen ... (da bei Beckhoff z.B. auch eine Variable, die auf eine Enumeration zurückgeht, den Enum-Text anzeigt ...)

Gruß
Larry

Ja, von dem bin ich auch ausgegangen, jedoch denke ich, dass ich mich nicht genau genug ausgedrückt habe. Weisst du wie die Umwandlung funktioniert?

Trotzdem schon mal vielen Dank für deine Bemühungen :))

Gruss
 
Weisst du wie die Umwandlung funktioniert?
Nochmal: Dezimal und Hexadezimal sind lediglich andere Darstellungsformate des gleichen Wertes. Da braucht nichts umgewandelt werden. Da kann höchstens irgendwo die Anzeige-Darstellung umgeschaltet werden (Rechtsmausklick? oder Einstellungen).

Bei der Wertanzeige wählt Twincat automatisch eine zur Deklaration passende Darstellung, z.B. 10V ist 16#7FFF bei WORD oder 32767 bei INT oder UINT. Bei Berechnungen wird implizit WORD = UINT angenommen.

Für mehr Bequemlichkeit beim Beobachten des Wertes kannst Du deklarieren:
Code:
meinMesswert AT %I* : UINT;
Ob das Eingangsword als UINT oder als WORD deklariert ist hat keinen Einfluß darauf, welchen Wert die Klemme liefert. Es ist lediglich ein Hinweis an den Compiler, als welcher Datentyp das Bitmuster in der Variable zu interpretieren ist.

Wird Eure KL3064 mit Standard-Einstellungen betrieben oder ist "Siemens-Ausgabeformat" eingestellt?
- Standard: der 16-Bit-Wert von der Klemme ist ein UINT 0 bis 32767 (als "INT" deklarieren ist auch OK)
- Siemens: der 16-Bit-Wert von der Klemme ist ein WORD 16#0000 bis 16#7FFF, was den Messwert + 3 Stausbits enthält
- Anwender-Skalierung: der 16-Bit-Wert von der Klemme könnte negativ sein --> als INT deklarieren

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nicht schon wieder dieser HEX-Wahn, ich bekomme schon wieder leichtes Augenzucken.
@TE: Das Stichwort das Dir fehlt lautet Skalierung. Die Karte gibt die gemessene Spannung als Ganzzahl von 0 (0V) bis 32767 (10V), diese musst Du nun in eine Spannung umrechnen (skalieren). Zu diesem Thema gibt es reichlich Beiträge hier im Forum. Such mal nach Beiträgen von mir, da solltest Du fündig werden.
Da fällt mir ein ich muss mal zusehen, dass ich dieses Wochenende eine erste Version meiner FAQ zu dem Thema fertig kriege.
 
Hi,

Wenn es hier wirklich um das skalieren von dem Wert geht, würde ich das verwenden der Trafo Funktion aus der util.lib raten. Bei Beckhoff ist die glaube ich standartmäßig noch nicht dabei. Es handelt sich aber um eine Standard lib die bei Codesys dabei ist (evtl. Von 3S laden und heraus holen).

Hier kann durch die Eingabe der Werte für Analogeingang und Messwert direkt der Zielwert ausgegeben werden.

Gruß

Mavorkit

Gesendet von meinem SM-G389F mit Tapatalk
 
Hallo Mavorkit,
auch in Bezug auf Deine PN. Der Test mit der UTIL.LIB steht zwar noch aus, aber mir ist gerade die Idee gekommen, das dies vermutlich nicht funktionieren wird. Die Trafo Funktion ist von Beckhoff zwar nicht umgesetzt worden, anderes aber vielleicht schon und soweit diese FBs/FCs den selben Namen haben dürfte die Übersetzung des Programms zu einer Fehlermeldung führen.

Von irgendwas mit Internetzugang gesendet
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Oliver,

Dann müsste es aber eine Funktion lin_Trafo geben, was ich bezweifle. Auch Beckhoff wird es vermeiden Namen von Codesys Standard Bibliotheken zu verwenden, von wegen wegen diesem Problem. Wie gesagt bei TC2 hat es funktioniert.

Gruß

Mavorkit

Gesendet von meinem SM-G389F mit Tapatalk
 
Zurück
Oben