PDA

View Full Version : Konvertierungsproblem LREAL <--> double



chefsalat
04.06.2007, 08:50
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:


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:


sWert.Format("%f", *(float *)pNotification->data);

Das klappt dann auch wunderbar.

Nur für double (LREAL) gibt es mir immer 0.0000... aus.


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-

chefsalat
11.06.2007, 14:13
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-