Libnodave lernen

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wie kann ich ein Array aus der SPS auslesen? Bekomme das nicht hin. Ich muß dem Array doch noch irgendwie sagen können, ab wo es zu lesen ist und wie lange.

Code:
[FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] wrt5 = conn.ReadValue([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"DB0.DBW0"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2], [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]TagDataType[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2].ByteArray)

Würde gerne größere Blöcke auslesen und dann im VB-Code bearbeiten.

Danke schon mal für die Antwort![/SIZE][/FONT][/SIZE][/FONT]
 
ich mach das immer so
Code:
_result = dc.readBytes(libnodave.daveDB, DBNr,Startbyte,Menge_Bytes, null);
dann dröselste das ganze über eine Schleife in ein Array wie du es willst und gut.
Allerdings hab ich euch keine riesigen Arrays und mit der readmutiple Geschichte hab ich mich noch nicht befassen müssen.
 
Ist das Lesen aus Function Block (FB) moeglich?

Ich habe in meiner S7 Steuerung Signale in einem Function Block (FB302). Das Signal ist definiert im Interface unter STAT. Dort taucht es mit einer Addresse auf (Typ bool, Address 70.1). Im Quellcode selber hat es ein Hashtag #vor dem Namen.

Wie kann ich dieses Signal mit Libnodave auslesen? Gibt es dazu eine Information?

In Libnodave finde ich folgende Konstanten:

Public Const daveInputs = &H81
Public Const daveOutputs = &H82
Public Const daveFlags = &H83
Public Const daveDB = &H84 ' data blocks
Public Const daveDI = &H85 ' instance data blocks
Public Const daveV = &H87 ' don't know what it is
Public Const daveCounter = 28 ' S7 counters
Public Const daveTimer = 29 ' S7 timers

Welche ich im Befehl

Call daveAddBitVarToReadRequest(PDU, daveDB, 302, 70 * 8 + 1, 1)

verwenden kann.

Fuer daveDB geht das auch. Nun habe ich aber wie gesagt, den Fall dass ich aus einem FB lesen will. Es gibt aber kein daveFB in Analogie zum DB?
 
1. Ein FB hat immer einen InstanzDB, der wird ihm beim Aufruf zugewiesen und da sind die Variablen drinne.
2. Mach dir einen globalen DB und kopier dir da alles rein was du auslesen willst und hol das dort in einem Rutsch raus.
3. erschließt sich mir nicht, warum man temp Variablen auslesen sollte
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1. Ein FB hat immer einen InstanzDB, der wird ihm beim Aufruf zugewiesen und da sind die Variablen drinne.2. Mach dir einen globalen DB und kopier dir da alles rein was du auslesen willst und hol das dort in einem Rutsch raus.3. erschließt sich mir nicht, warum man temp Variablen auslesen sollte

Nicht TEMP Variablen, es handelt sich um STAT Variablen. Und ob sich dir was erschliesst oder steht hier nicht zur Diskussion! Produktive Antworten sind erwuenscht! :)
Die Frage ist, ob es moeglich ist, ja oder nein!

Ich kann an dem Programm keine Aenderung vornehmen, da es eine Standardsoftware ist, die auf vielen Maschinen weltweit laeuft. Es muesste dann ueberall ein Update durchgefuehrt werden.

Die Aufgabe ist, hier in unserem Werk, aus dem Baustein die Daten der STAT-Variablen auszulesen. Der korresponiderende Datenbaustein ist mit KnowHow-Schutz versehen, ich sehe nicht was darin ist.

Wenn ein Signal eine Adresse hat, sollte es moeglich sein es zu lesen. Ob es nun in einem DB oder in einem FB drin ist, sollte doch keine Rolle spielen? Die Frage ist, wie kann ich das STAT signal auslesen?

Die Frage geht auch an die Anbieter von anderen Bibliotheken, wie zB von DELTALOGIG. Ich bitte um eine produktive Antwort!

Wenn es nicht geht, dann geht es eben nicht. Dann muss ich an dem Programm eben doch eine Aenderung vornehmen. Dafuer muss ich erst die Erlaubnis der Programmaenderung einholen und weiterhin das Distributed Safety Package kaufen, denn im Moment ist der FB read-only.
 
Zuletzt bearbeitet:
OK, du willst keine Diskussion, nur eine Antwort:
Nein, temporäre Daten können nicht ausgelesen werden. Programm muss geändert werden.
 
Nicht TEMP Variablen, es handelt sich um STAT Variablen. Und ob sich dir was erschliesst oder steht hier nicht zur Diskussion!
[...]
Die Aufgabe ist, hier in unserem Werk, aus dem Baustein die Daten der temp-Variablen auszulesen. Der korresponiderende Datenbaustein ist mit KnowHow-Schutz versehen, ich sehe nicht was darin ist.

Wenn ein Signal eine Adresse hat, sollte es moeglich sein es zu lesen. Ob es nun in einem DB oder in einem FB drin ist, sollte doch keine Rolle spielen? Die Frage ist, wie kann ich das STAT signal auslesen?
Ja was willst Du denn nun lesen? TEMP oder STAT? :confused:

Zunächst: Statt die Helfer zu beschimpfen solltest Du Dir mal mehr Mühe bei der Formulierung Deiner Fragen geben und nicht die Fachbegriffe durcheinanderwürfeln. (Bist Du überhaupt ein SPS-Programmierer?)

Zweitens: TEMP-Variablen kann man nicht von außen lesen, weil TEMP-Variablen keine absolute Adresse haben. Sie haben nur einen relativen Offset zu einer nicht bekannten (möglicherweise dynamisch vergebenen) Anfangsadresse im Lokaldatenstack. Auch der Simatic Manager kann nicht von außen auf TEMP-Variablen zugreifen.
Ausnahme: ein Baustein B, der direkt vom Baustein A aufgerufen wird, kann auf die TEMP-Variablen des Bausteins A zugreifen (Stichwort: Vorgänger-Lokaldaten) - das ist allerdings höchst unsauber, weil der Baustein B nicht wirklich die Struktur der Lokaldaten des aufrufenden Bausteins A kennt; er weiß ja noch nichtmal, von welchem Baustein A,X,Y... er aufgerufen wurde.

Drittens: STAT-Variablen kann man von außerhalb lesen, indem man auf deren absolute Adresse im IDB zugreift: DB12.DBX34.5. Im SPS-Programm geht das sogar symbolisch: "IDB_Regler1".internes_Fehlerbit
Die absolute Adresse einer STAT-Variable kann man aus der Schnittstelle des FB oder aus dem IDB erfahren.
Sollte der FB als Multiinstanz aufgerufen werden, dann muß man etwas mehr rechnen, was die absolute Adresse der STAT-Variable der betreffenden Instanz ist; oder in den IDB desjenigen FB schauen, der den betreffenden FB als Multiinstanz enthält.
Wenn man die absolute Adresse aus irgendwelchen Gründen nicht rauskriegt, dann könnte man den original-Programmierer danach fragen...

Viertens: Dein FB302, an dem Du rumfummeln willst - ist das womöglich ein F-Baustein?

Deine sonstigen Äußerungen von vor und nach dem Ändern Deines Beitrags bezüglich KnowHow-Schutz und read-only ignoriere ich zunächst mal. Die empfinde ich als so verworren - wenn Du dazu Auskünfte willst, dann formuliere die Frage nochmal neu.

Harald
 
Nein, temporäre Daten können nicht ausgelesen werden. Programm muss geändert werden.

Ja was willst Du denn nun lesen? TEMP oder STAT? :confused:

Zunächst: Statt die Helfer zu beschimpfen solltest Du Dir mal mehr Mühe bei der Formulierung Deiner Fragen geben und nicht die Fachbegriffe durcheinanderwürfeln. (Bist Du überhaupt ein SPS-Programmierer?)

Nach TEMP Variablen war von meiner Seite aus niemals gefragt worden. Ich habe klar formuliert, dass die Variablen unter STAT definiert sind. Wer hier TEMP und STAT durcheinander wuerfelt, war Bapho.

Von Beschimpfungen kann auch gar nicht die Rede sein. Ich habe schlicht und ergreifend gesagt, dass es nicht darum geht ob der Helfer etwas als sinnvoll erachtet, sondern nur ob es geht.

Bapho aber hat STAT und TEMP Signale verwechselt! Das ist ein Fakt.

Dennoch kam ein interessanter und hilfreicher Beitrag, naemlich die Antwort, dass STAT Variablen aus einem FB in dem korrespondierenden DB zu finden sind. Ich bin ein Beckhoff-TwinCat Programmierer mit 12 Jahre Erfahrung mit Beckhoff und TwinCat. Mit Siemens S7 befasse ich mich zwangslaeufig und finde, das System kommt eben aus dem vorigen Jahrhundert. Was macht es fuer einen Sinn einen FB und einen DB zu haben? Damit blaeht man die Struktur nur unnoetig auf. Es reicht wenn man einem Signal einmal im FB adressiert. Ein weiterer DB ist unnoetig.

Ja, es handelt sich um einen F-DB. Es ist ein Safety Datablock!
 
Zuletzt bearbeitet:
Wurden da Beiträge nachträglich geändert? War mir sicher in der ursprünglichen Frage was von temp gelesen zu haben. Naja, vielleicht habe ich mich getäuscht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Im Beitrag #44 habe ich nichts nachtraeglich geaendert. Es war von Anfang an von STAT Variablen die Rede. Schwamm drueber.

Ja PN/DP die Datenbausteine DB aus denen ich etwas lesen will, sind F-DB Bausteine. Mit Libnodave kann ich nicht daraus lesen. Wenn ich die Adresse angebe und lese, bekomme ich Fehler 10.

Public Const daveResItemNotAvailable = 10 ' means a a piece of data is not available in the CPU, e.g.
' when trying to read a non existing DB
 
Hmm, offensichtlich hab ich das ja nicht als einziger verwechselt, egal.

Ich denke mal Siemens nimmt gerne Beschwerden über das ganze S7 System entgegen, mir gefällt das auch nicht, aber wenn es der Kunde fordert bzw. solche Steuerungen vorhanden sind, haben wir ja nicht wirklich eine Wahl.

Sag uns doch mal die absolute Adresse der Daten die du abrufen willst und dann den Aufruf zum Auslesen von Libnodave, ich denke mal da liegt der Hase im Pfeffer, aber ohne bissle Code ist das nur was für die Kristallkugel.
 
Ja PN/DP die Datenbausteine DB aus denen ich etwas lesen will, sind F-DB Bausteine. Mit Libnodave kann ich nicht daraus lesen. Wenn ich die Adresse angebe und lese, bekomme ich Fehler 10.

Denkst du es macht Sinn von außerhalb auf F-Bausteine zu zugreifen?
Also da musst du zuerst lernen was "F" bedeutet.
Grundlagen kennen hilft enorm, auch hier.

Ich würde auch nicht jeden auf meine sicheren Einstellung zugreifen lassen.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe die falsche IP verwendet und von der falschen Steuerung gelesen, darum hab ich Fehler 10 bekommen.

Mit der richtigen IP kann ich auch fehlerfrei aus einem F-DB lesen. Muss nur mal schauen ob auch der richtige Wert ausgelesen wird. Das werde ich gleich heute ausprobieren.
 
Ich habe mir verschiedene F-DBs herausgesucht und innerhalb dieser verschiedene Signale identifiziert, die mich interessieren. Diese habe ich ausgelesen und jeweils den richtigen Wert erhalten. Damit ist klar dass es funktioniert. Mein Fehler war einfach nur die falsche IP-Addresse, wie dumm von mir :ROFLMAO:

Damit ist klar, dass "bike" sich geirrt hat, man kann sehr wohl auch aus F-DBs herauslesen. Warum auch nicht. Solange mit nicht hineinschreibt, ist doch alles IO.

PN/DP weisst du mehr uber das Lesen und Schreiben aus und in F-DBs?
 
F-DBs sind Failsafe DBs die Sicherheitsgerichteten Code enthalten. Dieser muss einige besondere Anforderungen erfuellen. Welche das sind weiss ich nicht.

Man kann damit auf eine Sicherheits SPS wie zB die PNOZ von PILZ verzichten und normalen SPS code und Safety-SPS code in einer SPS laufen lassen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Irre ich mich wirklich?
Also wir haben versucht über OPC und DDE F. Bausteine zu lesen.
Das lesen geht bedingt, schreiben nicht, da das zweite Programm nicht aktualisiert werden und daher ein KDV auftritt.
Wer übernimmt die Verantwortung wenn durch solche Basteleien es zu einem Unfall kommt?


bike
 
Da sollte er aber Siemens die Hosen runterziehen, denn wenn man von einer Visu in Instanz DBs von F-Bausteinen schreiben kann ohne dass die Steuerung in den sicheren Zustand versetzt wird, ist an dem System was faul.
Lesender Zugriff auf F-DBs aus nicht F-Bausteinen ist zumindest auch im SPS-Programm möglich (explizit so in den Siemens Dokus erwähnt), warum also nicht von einer Visualisierung?
 
Zurück
Oben