Codesys Hexadezimal

cro_shooter

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle Experten,

bin mit meinem Problem etwas am verzweifeln. Ich programmiere für mein Abschlussprojekt eine Sabo-SPS. Auf dem Touchdisplay gebe ich aktuell einen Zahlenwert(dezimal) ein.
Diesen muss ich dann per RS-485 Schnittstelle an einen Motorcontroller versenden. Um diesen versenden zu können muss ich den Wert als HEX versenden werden.
Wie kann ich den dezimalen Zahlenwert nun in Hexadezimal umwandeln?
Vielleicht könnte mir da mal jemand helfen.

LG
 
Auf dem Touchdisplay gebe ich aktuell einen Zahlenwert(dezimal) ein.
...
Um diesen versenden zu können muss ich den Wert als HEX versenden werden.
Wie kann ich den dezimalen Zahlenwert nun in Hexadezimal umwandeln?
Überhaupt nicht!
Dezimal und hexadezimal sind nur unterschiedliche Darstellungen für uns Menschen auf dem Bildschirm von ein und demselben Binärwert, womit die Elektronik arbeitet.
Für die Elektronik gibt es keinen Unterschied zwischen beiden.


Was Du vielleicht wirklich suchst, ist die Abbildung jeder Dezimalstelle des Wertes in je einem Halbbyte des zu versendenden Wertes. Dafür wird der (Integer?-) Wert in das BCD-Format umgewandelt.
 
Um ganz sicher zu verstehen was Du meinst: hast Du mal ein Beispiel, was Du senden müsstest, wenn der eingegebene Zahlenwert z.B. 123 dezimal ist?
- 16#7B
- oder 16#0123
- oder 16#31 + 16#32 + 16#33 (= '123')
- oder ?
- eventuell auch noch Bytes vertauscht?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich sende dir mal die Links für die Doku.
http://www.mctechnology.nl/pdf/TMCL_reference_2015.pdf

Ich habe das Model TMCM-1311.
https://www.trinamic.com/fileadmin/assets/Products/Modules_Documents/TMCM-1311_hardware_manual.pdf

Hier auch was ich alles an den Motorcontroller senden möchte.
Links drehen
Rechts drehen
Motor Stop
Strom
Schrittwinkel des Motors
Tatsächliche Stromaufnahme als Info zurückbekommen.

Vielen Dank
 
Wenn Du mit dem Controller im binary Mode kommunizierst dann brauchst Du keine Konvertierung des dezimalen Zahlenwertes. So wie hucki schon schrieb, sind dezimal und hexadezimal nur verschiedene Darstellungen eines Zahlenwertes:
123 dezimal = 16#7B = $7B

Ich kenne Deine Sabo-SPS nicht, doch wenn sie mit Codesys programmiert wird, dann musst Du vermutlich die Reihenfolge der Bytes von 16/32-Bit-Werten zwischen SPS-Variablen und Motorcontroller-Schnittstelle drehen - der Motorcontroller will das MSB zuerst (Big Endian). Dafür gibt es vielleicht eine SWAP-Funktion oder READ_BIG/WRITE_BIG-Funktionen oder andere Funktionen zum Konvertieren zwischen Host Byte Order und Network Byte Order, oder Du schreibst Dir so eine SWAP-Funktion selber (gibt es hier im Forum ..zig Beispiele).

Harald
 
Wie holgermaik schon schrieb,
wenn Du Online bist einen Rechtsklick auf den Onlinewert einer Variable machen, dann erscheint ein Kontextmenü in dem Du dann die Darstellung auswählen kannst.
Hier mal ein Screenshot aus TwinCAT, sollte bei anderen Codesys Derivaten aber ähnlich aussehen.
VarDisplay.jpg
 
Mich nervt's zwar, dass man Leute programmieren lässt ohne irgendwelche Ahnung Zahlenformaten und deren Darstellung.
Aber hier mal ein ganz simpler Tipp:
Nimm den Rechner von Windows.
Dort stellt du auf "Programmierer" und dann auf "Word". Damit kannst du dann "spielen"

Gruß
Blockmove
 
Zuletzt bearbeitet:
Mich nervt's zwar, dass Leute programmieren ohne irgendwelche Ahnung von Zahlenformaten und deren Darstellung. ...


Kleine Tipps, wie Dein Hinweis auf den Windows Rechner, können durchaus eine grosse Hilfe sein. Danke dafür! Lass Dich nicht durch Anfragen frustrieren, die scheinbar oder tatsächlich ein gewisses Niveau nicht erreichen. Dieses Forum will und soll schliesslich - nicht nur, aber auch - bei "simplen" Fragen weiterhelfen.


Habe auch schon fertige DiplomIngenieure mit BerufsErfahrung erlebt, die offensichtlich nicht dumm waren und logisch denken konnten, die aber an dieser oder ähnlichen Stellen eine "VerständnisBlockade" hatten.
Wer macht sich schon Gedanken darüber, was für ein Aufwand dahinter steckt, den Inhalt einer SpeicherZelle in einer aus diversen DarstellungsFormen auswählbar auf dem Bildschirm anzuzeigen?
In der Zeit von MonoSpaceSchriften und HardwareZeichenGeneratoren hat man schon vieles als selbstverständlich hingenommen, ohne es wirklich zu verstehen. Wieviel grösser ist heute die Diskrepanz zwischen den einfachen, internen Grundlagen und dem, was man an der Oberfläche wahrnimmt und als selbstverständlich hinnimmt? ProportionalSchriften, Farbverläufe, 3D-Darstellung, ...
Gut, vieles davon mag SchnickSchnack sein, der nur einem gefälligeren oder sogar übersichtlicheren Aussehen dient. Aber es führt dazu, dass selbst Leute, die in der heutigen Zeit bestens einen PC bedienen können und als ComputerSpezialisten durchgehen, selten Kontakt z.B. mit der internen oder sonstigen ZahlenDarstellungen haben.
Fertige Befehle für die FlankenErkennung z.B. fördern nicht gerade das Verständnis, sie verhindern oder behindern es! Wohl dem, der die FlankenErkennung noch "zu Fuss" programmieren musste! Der kann kaum nachvollziehen, warum dieses Thema immer wieder zu Verunsicherung und Missverständnissen führt. Der Einzug von "Hochsprachen" in den "Niederungen" der SPS-Programmierung wirkt sich ganz ähnlich aus. Die Bereitstellung von speziellen Bausteinen (Funktionen) für jeden erdenklichen Zweck ebenfalls. Der "Kontakt zur Basis" geht einfach verloren. Leider.
Es wird viel Wissen vermittelt und der Bezug zur praktischen Anwendung bleibt auf der Strecke. Ein Thema jagt das andere und es bleibt zu wenig Gelegenheit, das (auswendig) Gelernte so zu verdauen, dass man es richtig einordnen oder sogar in der Praxis anwenden könnte.
Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Heini

Ich lass mich nicht frustrieren. Ich mache hier aber ganz klar einen Vorwurf an Ausbilder, Lehrer und Dozenten.
Die Darstellung von Zahlenformaten und Datentypen gehört zu den Basics. Ende Aus Punkt!
Realvergleiche auf Gleich, Zahlenüberlauf bei Int, Längenprobleme bei Strings ... All dies sind Standardprobleme.
Wenn man schaut was so manche mit Analogwerte treiben, könnte man weinen.
Da werden sündteure 15Bit Karten genommen und dann durch unüberlegte Realrechnungen Genauigkeit verschenkt.
Aber dann gegen den Hersteller wettern.

Also hier meine Aufforderung an ALLE Lehrenden:
Eignet euch selber wieder die Grundlagen an und bringt sie dann vernünftig euren Azubis, Schülern oder Studenten bei!
Auch euch hilft das Forum :D

Gruß
Blockmove
 
Als gegen Ende meines Studiums die Umstellung auf Bachelor/Master aufkam, haben die Dozenten sich darüber aufgeregt, daß im neuen "Lehrplan" gar nicht mehr vorgesehen war, Zahlendarstellungen wie Binär/Hexadezimal zu vermitteln.
 
Als gegen Ende meines Studiums die Umstellung auf Bachelor/Master aufkam, haben die Dozenten sich darüber aufgeregt, daß im neuen "Lehrplan" gar nicht mehr vorgesehen war, Zahlendarstellungen wie Binär/Hexadezimal zu vermitteln.
Die Dozenten haben sich aufgeregt ... na, immerhin haben sie es anscheinend bemerkt und nicht etwa verschlafen!!! Grosses Lob!
Was ich trotzdem nicht verstehe: wenn man versucht, Stoff zu vermitteln und merkt, dass die notwendigen Grundlagen/Voraussetzungen nicht vorhanden sind (warum auch immer), drängt sich dann niemandem der Gedanke auf, dem Lehrplan zum Trotz, auf die Grundlagen einzugehen? Hauptsache, das Dach wird fertig und schützt das fehlende Fundament vor der Feuchtigkeit der Tränen?
PlanWirtschaft haben wir nicht mehr, also muss der Lehrplan (Leerplan?) an ihre Stelle treten? Oder sind "Zahlendarstellungen wie Binär/Hexadezimal" damals in den Lehrplan für Kindergärten gerutscht, so dass nur einige Jahrgänge betroffen sind und wir hoffen dürfen, alles wird wieder besser?
Ich habe ja Verständnis für das Argument, dass die Zeit nicht ausreicht, wenn noch mehr Stoff bewältigt werden muss, als im Lehrplan steht.
Aber Zeit, an den richtigen Stellen investiert, könnte hilfreich sein, Zeit an anderen Stellen einzusparen.

Gruss, Heinileini
 
Zurück
Oben