ich erstelle eine Visualiserung einer CoE-Parameterverwaltung.
Aha, CAN over ETHERNET. Also irgendeine wohldefinierte "Liste" von Daten, wobei insbesondere wohldefiniert ist, welche der Daten als welcher DatenTyp zu interpretieren sind.
Das heißt ich gebe ein, welchen Index und Subindex [ich sehen will und] bekomme den entsprechenden Wert.
Wo gibst Du ein, welchen Index und Sub-Index Du sehen willst und - insbesondere - welche Software benutzt Du, um mit dem Index und SubIndex das gewünschte Datum zu isolieren? Hier ist schon die Stelle, wo der DatenTyp bekannt sein muss. Ein Erraten des DatenTyps aufgrund des Inhalts der gelesenen Bytes ist denkbar, viel zu abenteuerlich und viel zu ungewiss, um ernsthaft in Erwägung gezogen zu werden.
Dieser Wert kann entweder Real sein oder Integer.
Wirklich nur diese beiden DatenTypen stehen zur Auswahl? Die haben immerhin unterschiedliche Längen: INT 2 Byte und REAL 4 Byte.
Aber, ich gehe mal davon aus, dass Du nicht weisst, ob Du nur die nächsten 2 Byte (bei INT) oder die nächsten 4 Byte (bei REAL) zusammenfassen und auswerten sollst. Sonst wäre dieser Thread gegenstandslos.
Der Wert wird in ein Byte Array gespeichert.
Wer tut das und hinterlässt er Dir auch die Information, ob die nächsten beiden oder die nächsten vier Elemente des Array das nächste Datum beinhalten? Wenn Du diese Information nicht übermittelt bekommst und Du diese Information auch nicht irgendwie selbst aus Index und SubIndex ermitteln (z.B. aus einer Tabelle entnehmen) kannst, dann bist Du "aufgeschmissen".
Gibt es ein verfahren wie ich rausfinden kann ob die Rohdaten im Array ein integer oder Realwert ist ?
Nein, ein zuverlässiges Verfahren gibt es nicht. Ein Ratespiel aufgrund von PlausibilitätsBetrachtungen wäre denkbar, aber Schwachsinn.
Und, wenn die PlausibilitätsBetrachtungen von Index zu Index und von SubIndex zu SubIndex variieren würden und jeweils individuell angepasst werden müssten, dann steht der sehr hohe Aufwand dafür in keinem Verhältnis zum Nutzen, nämlich ein leider sehr fragliches/ungewisses Ergebnis zu erhalten.
Ich möchte mal behaupten, wenn Du es überhaupt schaffst, diese individuellen PlausibilitätsBetrachtungen für den jeweiligen Index und SubIndex zu ermitteln, dann solte es für Dich ein Leichtes sein, stattdessen gleich den DatenTyp in Erfahrung zu bringen.
Und ich vermute/befürchte ferner, dass es in Wirklichkeit nicht nur um zwei verschiedene DatenTypen geht. Aber ich kenne CoE nicht.
Und wie genau kann ich die 4 Bytes in ein Real umwandeln ?
Gar nicht! Da gibt es nichts umzuwandeln.
Der Inhalt der Bytes wird nicht verändert bzw. darf nicht verändert werden!
Du schaufelst die 4 Bytes in einen "Behälter" der mit "DWORD" beschriftet ist.
Dann wechselst Du nur die "Beschriftung" des Behälters aus gegen "REAL" und der nächste, der den Inhalt des Behälters lesen will, weiss dann, dass er ihn als REAL zu deuten hat.
Die Beschriftung des Behälters ist in keiner Weise im Inhalt des Behälters hinterlegt.
Dies im Programm umzusetzen, gibt es je nach CPU, Sprache, ... verschiedene Möglichkeiten.
Man kann dafür die "Konvertierung" DWORD_TO_REAL verwenden, wenn diese in Wirklichkeit nicht konvertiert, sondern "nur" einen "TypeCast" ausführt, also im Endeffekt nur die Beschriftung des Behälter ändert, ohne den Inhalt zu ändern.
Man kann (bei der Deklaration mit AT) dafür sorgen, dass dieselben 4 aufeinanderfolgen Bytes wahlweise als "DWORD" oder als "REAL" (oder als ARRAY OF BYTE) angesprochen werden können, sofern der Compiler dieses unterstützt.