Bitte um Hilfe: Libnodave C# Real-Wert in Datenbaustein von S7 schreiben

SPS_Michael

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

Erst einmal der Hintergrund:
Ich besitze eine Homematic CCU (Hausautomatisierung über Funk).
Die Zustände diverser Sensoren/Aktoren kann ich mittels eines C# Programms über TCPIP auslesen (Das Originalprogramm stammt von A.Krypthul aus dem FHZ-Board -- Vielen Dank dafür) - Dieses Progamm habe ich für meine Zwecke angepasst und funktioniert - Wobei ich erwähnen sollte das ich vorher nie etwas wit C# zu tun hatte, und das Programm mit "learning by doing" angepasst habe.

Nun möchte ich die ausgelesenen Homematic-Daten mittels Libnodave
in einen Datenbaustein meiner S7 übertragen.

Ich habe bereits die libnodave.net.cs in mein Programm importiert und erfolgreich eine Verbindung zu meiner S7 aufgebaut.
(Verbindung über TCPIP mit CP343-1)
Das auslesen von Merker-Bytes und Real-Werten (Floating) habe ich anhand der Libnodave C#-Beispiele nachvollzogen und Funktioniert.

Mein Problem ist nun Folgendes:
1. Blutiger Anfänger mit C# (und allen anderen Hochsprachen)-wie gesagt
2. Ich möchte den Inhalt einer Text-Box (z.B textBox2.Text="19,70")
in den Datenbaustein DB100.DBD0 schreiben (Wobei dieser als Real definiert ist (4Bytes).

Ich habe es bereits mit dem dc.writeBytes befehl probiert:

res = dc.writeBytes(libnodave.daveDB, 100, 0, 4, XXXX);

-erhalte jedoch in meinem Datenbaustein nur unsinnige Werte.

Ich vermute (nach durchlesen der Libnodave-Hilfe) das ich den Realwert, den ich schreiben möchte (hier mit XXXX dargestellt)in 4 Bytes zerlegen muß, und diese dann anschließend noch vertauschen muß (Low-Highbyte), bevor man diese dann an die S7 senden kann.
- und schätzungsweise vorher noch den String von textBox2.Text
in einen Zahlenwert wandeln muss.

-Wobei genau das mein Problem ist, das ich ja von C# keine wirkliche Ahnung habe, ich es aber benutzen muß, da es für meine Homematic CCU nur ein Programm-Modul in c# gibt.

Könnte jemand der C# kann mir ein Codebeispiel posten ???

Gruß
Michael
 
Es gibt folgende Funktionen in libnodave:

float toPLCfloat(float ff);
short daveSwapIed_16(short ff);
int daveSwapIed_32(int ff);

Die sollten das machen.

Hier noch ein Beitrag zum Thema: http://www.sps-forum.de/showthread.php?t=5485&highlight=float


Hallo

Habe folgendes probiert:
C#:

float z= 0;
z = libnodave.toPLCfloat(19.7f);
dc.writeBytes(libnodave.daveDB, 1, 0, 4, BitConverter.GetBytes(z));

Problem: im DB1 DBD0(Real) steht dann -6.353337e-023 und nicht 19.7 !

Hat jemand eine Idee was ich falsch mache ?

-------Nachtrag------

jetzt funktionierts - hatte noch ein Probem in der S7 ! (Falls jemand mal das selbe Problem hat)



Vielen Dank nochmal an Ralle fürs "auf die Sprünge helfen".


Michael
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS_Michael,
ich habe exakt das gleiche Problem mit einer SIMATIC S7-1200.
Wenn ich mittels LibNoDave einen 'normalen' Float-Wert (z.B. 30.1) in DB1.DBD46 (als Datentyp 'Real' im DB1 angelegt) schreibe, sehe ich in der Beobachtungsliste des "TIA-Portals 10.5" (vergleichbar mit Step 7) einen sehr kleinen Wert -?.???????e-023.

Du schreibst als Nachtrag:
"jetzt funktionierts - hatte noch ein Probem in der S7 ! (Falls jemand mal das selbe Problem hat)"

WELCHES PROBLEM HATTEST DU IN DER SPS ???

Kannst Du mir da mal "auf die Sprünge helfen" ?

Roland
 
woher libnodave

Hey leute, wo bekomme ich das Libnodave bzw. die datei, die ich in c# einbinden kann? und wo die beispiele?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey leute, wo bekomme ich das Libnodave bzw. die datei, die ich in c# einbinden kann? und wo die beispiele?

Libnodave bekommst du hier:
http://libnodave.sourceforge.net/

Beispiele sind dabei!

Kannst aber auch

S7Net Probieren:
http://s7net.codeplex.com/ (auch Beispiele dabei)

oder

SiemensPLCToolBoxLib:
http://siemensplctoolboxlib.codeplex.com/ (Auch viele Beispiele dabei)
(nutzt libnodave)
 
Hallo,
Bin neu hier im Forum und möchte gerne diese spannende Thema wieder aufgreifen.

Haben eine Homematic CCU1 und eine S7-300 mir CP Baugruppe.
S7 programmieren kann ich gut aber an der Kopplung beider Systeme mit C# hapert es.

Zudem würde mich mal interessieren welches Programm SPS_Michael meint zum Auslesen der CCU.

Oder gibt es da heute schon ein All-In-One programm?

Gruß Thomas
 
Zurück
Oben