Konvertierungsproblem LREAL <--> double

chefsalat

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
fogende Ausganssituation:
Ich muss ein Programm in C++ schreiben, mit dem ich Werte aus einer Beckhoff-SPS (mitTwincat programmiert) ereignisgesteuert auslesen soll.

Das Beckhoff-Programm steht schon. In meinem C++ Programm kann ich DINT und REAL-Werte schon auslesen.
Nur mit LREAL-Werten habe ich noch massive Probleme.

Die Test-Callback-Funktion soll erst mal nix anderes machen, als den Wert, den sie über pNotification übergeben bekommt, umzuwandeln und in einem CString abzuspeichern.

Meine Callback-Funktion für int (DINT) sieht folgendermaßen aus:
PHP:
void fn_Callback(AmsAddr* pAddr, AdsNotificationHeader* pNotification, ULONG hUser) {
    CString sWert = "";
    sWert.Format("%d", *(ULONG *)pNotification->data);
}

Für Float (REAL) nehme ich diese Umwandlung:
PHP:
    sWert.Format("%f", *(float *)pNotification->data);
Das klappt dann auch wunderbar.

Nur für double (LREAL) gibt es mir immer 0.0000... aus.
PHP:
     sWert.Format("%f", *(double *)pNotification->data);
Und eigentlich passt das mit double ja schon, weil ich beim Schreiben von LREAL-Werten in die SPS ja auch double verwende.

Hat jemand einen Vorschlag, wie ich das Problem beheben kann?

Gruß chefsalat-
 
So, jetzt hab ich herausgefunden, an was es lag...
Beim Registrieren der Callback-Funktion an die SPS gibt man eine Struktur mit. In dieser Struktur gibt es einen Parameter, der die Größe der Variable angibt. Dieser Parameter war auf 4 gestellt. Passte also für int (DINT) und float (REAL).
Ich hab ihn mal auf 8 gestellt und jetzt funktioniert es auch mit double (LREAL)!

In meiner jetzigen Version lese ich die Größe für jeden Parameter dynamisch aus der SPS. Spart jede Menge Aufwand.

Gruß chefsalat-
 
Zurück
Oben