Step 7 Libnodave mit C# in DB schreiben

Maddin*

Level-2
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

habe mal wieder ein kleines Problem, hab bereits die suche genutzt aber keine direkte antwort gefunden die mir hilft.

Eigentlich ganz simple:

Ich hab einen DB2 in dem will ich DB2.DBX0.0 und DB2.DBX1.0 mal auf True mal auf False im C# Programm setzen.
Benutze eine Simatic s7 300 station.

habe
bool vke0 = false;
bool vke1 = true;

dann gibt es ja
public int writeBits(int area, int DBnumber, int start, int len, byte[] buffer);
bzw.
public int writeBytes(int area, int DBnumber, int start, int len, byte[] buffer);
bzw.
public int writeManyBytes(int area, int DBnumber, int start, int len, byte[] buffer);

bei den read methoden ist mir alles einleuchtend, da gibts dann meine standard get funktionen.
aber bei den write bin ich grad verwirrt, such hier irgendwie set funktionen find aber nix

Die doku zu libnodave hab ich bereits angeschaut .
Muss ich mir wirklich ein buffer generieren wenn ich ein einzelnes bit auf true oder fals setzen will???
Oder gibts da noch ne ganz andere möglichkeit
Kann mir da jemand mal ein beispiel posten, wie ich das mach?

danke!
 
ach und testMPI hab ich mir auch schon angeschaut,

da machen die ja

a=libnodave.daveSwapIed_32(a+1);
dc.writeBytes(libnodave.daveFlags,0,0,4,BitConverter.GetBytes(a));
b=libnodave.daveSwapIed_32(b+2);
dc.writeBytes(libnodave.daveFlags,0,4,4,BitConverter.GetBytes(b));
c=libnodave.daveSwapIed_32(c+3);
dc.writeBytes(libnodave.daveFlags,0,8,4,BitConverter.GetBytes(c));
d=libnodave.toPLCfloat(d+1.1f);
dc.writeBytes(libnodave.daveFlags,0,12,4,BitConverter.GetBytes(d));

ich will das ja in einen DB schreiben, da abrauch ich ja statt
dc.writeBytes(libnodave.daveFlags,0,12,4,BitConverter.GetBytes(d));
das hier
dc.writeBytes(libnodave.daveDB,0,12,4,BitConverter.GetBytes(d));

komm da grad noch net ganz klar

das hab ich grade auch versucht


hs_1 = libnodave.daveSwapIed_32(hs_value);
dc.writeBytes(libnodave.daveDB, 2, 0, 4, BitConverter.GetBytes(hs_1));

beobacht die variablen der sps und nix ändert sich..
 
Zuletzt bearbeitet:
kann geschlossen werden, ich hab Stunden mit verbracht und hab ein syntax fehler übersehen...
Syntaxfehler sollte eigentlich der Compiler anmeckern.
Ich habe deinen Beitrag wohl gelesen, aber ich wußte auch nicht was, da wohl passiert sein könnte.
Zwar würde
dc.writeBytes(libnodave.daveDB,0,12,4,BitConverter.GetBytes(d));
einen DB 0 adressieren, den es nicht gibt,
aber
hs_1 = libnodave.daveSwapIed_32(hs_value);
dc.writeBytes(libnodave.daveDB, 2, 0, 4, BitConverter.GetBytes(hs_1));
das hattest du schon geändert.

Ich kann nur noch einen Tip geben, der nicht nur für Libnodave, sondern für jeden Neueinstieg in die Arbeit mit einer Bibliothek, Programmiersprache, Betriebssystem etc. nützlich ist:
- Funktion der Testprogramme oder Beispiele ausprobieren. Das gibt einen ersten Einblick und zeigt, daß es mit der eigenen Hardware läuft.
- Zunächst die Beispiele ohne jede Änderung übersetzen. Das garantiert, daß der Werkzeugkasten komplett ist und funktioniert (Compiler, Linker, vorausgesetzte Bibliotheken, header files, etc.).
- Dann ein Beispiel kopieren und versuchen, mit möglichst wenigen Änderungen am Text die gewünschte Funktionalität zu erreichen (in diesem Fall: Schreiben in DB statt in Merker).
- Wenn dann ein Syntax error auftritt, mit dem Original vergleichen. Ein Programm wie diff (Windiff) findet die Unterschiede im Quelltext.
 
Zurück
Oben