tflueckiger
Level-1
- Beiträge
- 28
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo allerseits
Ich versuche gerade bit Werte (boolean) mit libnodave aus einer Samatic S7 zu lesen. Hier ein Ausschnitt aus der Deklarationssicht:
Wenn ich nun einen Wert, wie Notöffnung_Wehrklappe (10.0) lesen will, dann scheint das zu klappen. Sobald das aber z.B. Licht_Ein (9.7) sein soll, so klappt dies nicht mehr. In der Methode ReadBits wird folgendes erwartet:
- int area: hier setze ich den Wert libnodave.daveDB, da ich aus den Datenbausteinen lesen will
- int DBNummer: hier gebe ich 50 mit, da es sich offenbar um die DB50 handelt (sihe Screenshot)
- int start: hier gebe ich den Wert vor dem Komma (Punkt) aus der ersten Tabellenspalte an.
- int len: hier gebe ich immer 1 mit. Könnte mir vorstellen, dass hier der Hund begraben liegt.
- byte[] buffer: hier gebe ich folgenden byte Array mit: byte[] buffer = new byte[1] bzw. new byte[4] bei REAL.
Wenn nach dem Komma nun eine 0 ist, wie in den Fällen mit REAL, dann kann ich den Wert auslesen. Was muss ich jedoch machen, wenn ich hiter dem Komma noch Werte habe? Wo muss ich diese angeben, bzw. wie muss ich readyBits aufrufen, damit ich auch Addressen mit Kommawerten auslesen kann.
Ich entwickle übrigens mit C#. Hier meine Methode:
Ich versuche gerade bit Werte (boolean) mit libnodave aus einer Samatic S7 zu lesen. Hier ein Ausschnitt aus der Deklarationssicht:
Wenn ich nun einen Wert, wie Notöffnung_Wehrklappe (10.0) lesen will, dann scheint das zu klappen. Sobald das aber z.B. Licht_Ein (9.7) sein soll, so klappt dies nicht mehr. In der Methode ReadBits wird folgendes erwartet:
- int area: hier setze ich den Wert libnodave.daveDB, da ich aus den Datenbausteinen lesen will
- int DBNummer: hier gebe ich 50 mit, da es sich offenbar um die DB50 handelt (sihe Screenshot)
- int start: hier gebe ich den Wert vor dem Komma (Punkt) aus der ersten Tabellenspalte an.
- int len: hier gebe ich immer 1 mit. Könnte mir vorstellen, dass hier der Hund begraben liegt.
- byte[] buffer: hier gebe ich folgenden byte Array mit: byte[] buffer = new byte[1] bzw. new byte[4] bei REAL.
Wenn nach dem Komma nun eine 0 ist, wie in den Fällen mit REAL, dann kann ich den Wert auslesen. Was muss ich jedoch machen, wenn ich hiter dem Komma noch Werte habe? Wo muss ich diese angeben, bzw. wie muss ich readyBits aufrufen, damit ich auch Addressen mit Kommawerten auslesen kann.
Ich entwickle übrigens mit C#. Hier meine Methode:
Code:
[FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
[SIZE=2][FONT=Consolas][COLOR=#0000ff]public[/COLOR][/FONT][/SIZE][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]bool[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] ReadDbBool([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] dbNumber, [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] address, [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] speicherbereich = 0)[/SIZE][/FONT]
[SIZE=2][FONT=Consolas]{[/FONT][/SIZE]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] (speicherbereich == 0) speicherbereich = [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]libnodave[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2].daveDB;[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]byte[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][] buffer = [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]byte[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][1];[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] errorCode = dc.readBits(speicherbereich, dbNumber, address, 1, buffer);[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] (errorCode != 0)[/SIZE][/FONT]
[SIZE=2][FONT=Consolas]{[/FONT][/SIZE]
[SIZE=2][FONT=Consolas]ThrowSpsException([/FONT][/SIZE][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"ReadDbBool"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2], errorCode: errorCode);[/SIZE][/FONT]
[SIZE=2][FONT=Consolas]}[/FONT][/SIZE]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]BitConverter[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2].ToBoolean(buffer, 0);[/SIZE][/FONT]
[SIZE=2][FONT=Consolas]}[/FONT][/SIZE]
[/SIZE][/FONT]