mit libnodave auf symbolische Adressen in einer S7-1200 zugreifen

yogi

Level-1
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
eine Frage an die Experten in diesem Forum :lol:

Gibt es eine Möglichlichkeit mit libnodave auf symbolisch adressierte Bereich in einer S7-1200er- Steuerung zuzugreifen?
Ich habe gerade das Problem Daten aus der o.g. Steuerung in einer dotnet- Anwendung anzeigen zu müssen.
Ich habe es schon mit libnodave probiert, allerdings ist mir nicht klar welche Argumente ich übergeben müsste?
Falls es mit libnodave nicht funktioniert, kennt jemand eine Library die für eine symbolische Adressierung eingesetzt werden kann? Sie darf für diese Funktionaliät ruhig ein paar Euro kosten!

Dank Euch für die Antworten :cool:

yogi
 
Libnodave kann es nicht. Das kann meines Wissens bis jetzt nur AG-Link von Deltalogic.
Alternativ kannst du in der SPS einen Datenbaustein anlegen, bei dem du den "optimierten Datenzugriff" abwählst und diesen zum Datenaustausch nutzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
zum jetzigen Zeitpunkt funktioniert es mit libnodave nicht, du kannst nur auf nicht-optimierte DBs zugreifen.

Prinzipiell lässt sich das aber relativ einfach um die Funktionen erweitern. Ich hab bei mir zu Hause eine libnodave Version mit der ich auch symbolische Variablen aus einer S7-1200 lesen kann. Das meiste bringt libnodave dafür sogar schon mit, das sind vlt. 50 Zeilen extra Programmcode.

Der Hauptnachteil ist aber dass du für diese Adressierungsart Informationen aus dem TIA-Portal Projekt benötigst, die das Programm dir nicht freiwillig zur Verfügung stellt.
Jochen Kühners connection library kann aber teilweise TIA-Projekte einlesen, sodass man an die Informationen herankommt.
Man weiß aber noch nicht zu 100% wann sich diese Zahlenwerte die für den Zugriff notwendig sind nach einer Programmänderung in der 1200er ändern. Bei der Absolutadressierung kann man das sofort sehen wenn sich etwas verschiebt, bzw. der Programmierer hat die volle Kontrolle. Dei der symbolischen Adressierung musst du theoretisch die generierten Zahlen vergleichen und mit deiner eigenen Visu jedes mal abgleichen.

Das Problem hat man aber auch bei der integrierten TIA Visu, der sagt dir auch nicht ob sich da etwas geändert hat. Du merkst es nur wenn du über die bisherigen Zahlen keinen Zugriff mehr bekommst.
 
Erst mal Danke für Eure Antworten. So habe ich es auch vermutet.
Leider habe ich keinen Einfluss auf die Programmierung der SPS, in meinem Fall sind die Daten symbolisch addressiert.

@Thomas_v2.1 wäre es möglich, dass Du die Programmerweiterung zur Verfügung stellst, sodass ich es einmal ausprobieren könnte? Das wäre echt toll.:grin::grin::grin:

Warum wir aber TIA bräuchten habe ich nicht ganz verstanden:?:
Ich hätte es mir so vorgestellt, dass ich mit Libnodave o.ä. beim abfragen oder schreiben anstatt z.B. Merker1DBB1 den symbolischen Namen wie "Eingang_Notaus5" übergeben könnte. Oder ist da schon meine Theorie falsch.

Ich weiss: Fragen über Fragen......

Gruß yogi
 
Ich hab in meinen fork der libnodave auch das lesen der symbolischen variablen eingebaut, aber mangels 1200er Cpu noch nie getestet!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab in meinen fork der libnodave auch das lesen der symbolischen variablen eingebaut, aber mangels 1200er Cpu noch nie getestet!!
Hi Jochen,
die Anfrage könnte passen, aber libnodave könnte mit der Antwort nichts anfangen weil nicht alle möglichen Size-Type Angaben ausgewertet werden.
Wenn du eine Integer-Variable symbolisch aus einer 1200 liest, kommt als Size-Type 5 zurück womit libnodave momentan nichts anfangen kann. Um die Länge auf die Anzahl in Bytes zu normieren, müssen die fehlenden Werte noch ergänzt werden. Die Normierung ist auch noch mehrfach im Code von libnodave vorhanden, man muss ein paar mehr Stellen anfassen.
 
Es fehlen in libnodave nur zwei Size-type Angaben, 5 und 7. Zumindest in der Funktion daveExecReadRequest:
Code:
		if (q[1]==4) {
		    len>>=3;	/* len is in bits, adjust */
		} else if (q[1]==5) {			/* Fehlenden Size-Type INTEGER ergänzt */
		    len>>=3;	/* len is in bits, adjust */
		} else if (q[1]==7) {			/* Fehlenden Size-Type REAL ergänzt */
		    /* len is already in bytes, ok */
		} else if (q[1]==9) {
		    /* len is already in bytes, ok */
		} else if (q[1]==3) {
		    /* len is in bits, but there is a byte per result bit, ok */
		} else {
		    if (daveDebug & daveDebugPDU)
			LOG2("fixme: what to do with data type %d?\n",q[1]);
		}

Etwas unpraktisch bei der symbolischen Adressierung ist, dass es Symbole gibt deren Daten nicht in einer PDU übertragen werden können. Z.B. ein 254 Zeichen String bei einer PDU von 240 Bytes.
Dazu wird dann dem Symbol etwas hinzugefügt, nämlich die Startadresse und die Länge der Daten im Symbol. Um einen 254 Zeichen-String zu lesen, werden dann in PDU 1 ab Adresse 0 die ersten 222 Bytes gelesen, und in PDU 2 dann ab 222 die restlichen 34 Bytes.

Eigentlich kann man das nur sinnvoll in eine Kommunikationsbibliothek integrieren wenn folgende Informationen vorliegen:
- Datenbereich (E, A, M, ...) bzw. DB und DB-Nummer
- LID (bzw. Sub-LIDs bei verschachtelten Strukturen) aus dem TIA Projekt
- Symbol CRC aus dem TIA Projekt (um sich diese selber zu errechnen muss man das TIA-Portal disassemblieren, ist eigentlich nicht erlaubt)
- Datentyp
 
Shit, das sieht schlecht aus. Scheint ja ohne die TIA-Daten nicht zu funktionieren.
Aglink kann lt. Werbung nur die Symboliktabelle aus 300er/400er-Steuerungen auslesen.7

Ich habe nun im Forum so einige Einträge gelesen, dass es Ansatzpunkte gibt mit libnodave auf symbolische Daten in 1200er/1500er-SPS zuzugereifen, allerdings keine Test-SPS zur Verfügung steht.

Ich könnte bis Ende Januar eine 1200er und eine 1500er-SPS zur Verfügung stellen. Wenn jemand Interesse hätte, könnte ich diese ins Privatnetzwerk einbinden und einen Zugriff per VPN ermöglichen. So könnte zwar keine Performance getestet werden, aber zumindest der generelle Zugriff.
Hat jemand Interesse, oder ist das unnötig?:?:

Gruß yogi.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die technische Seite ist nicht das Problem. Ich habs mit einer 1200er am Laufen. Ob das bei der 1500er auch so funktioniert weiß ich nicht, hatte so eine noch nicht in Händen, bzw. konnte noch nicht sehen wie dort die Daten ausgetauscht werden. Hier im Forum gabs mal ein Logfile, da sah das wieder komplett anders aus, aber ich weiß nicht ob das eine Visu oder eine Variablentabelle war.

Es wäre interessanter wenn du uns einen Anwalt zur Verfügung stellen könntest um die rechtliche Seite definitiv abzuklären ;-)
 
Es wäre interessanter wenn du uns einen Anwalt zur Verfügung stellen könntest um die rechtliche Seite definitiv abzuklären ;-)

:p Ja, den habe ich leider auch nicht, ich bin mir auch nicht im Klaren, wie weit man da gehen darf. Wenn man für den Zugriff TIA auslesen muss, dann wird es wohl zu kompliziert.
Schade, aber wenn es so ist, dann ist es so. Vielleicht bringt da die Zukunft ja noch was Neues.


Auf jeden Fall Danke für die Antworten!

Gruß yogi
 
:p Ja, den habe ich leider auch nicht, ich bin mir auch nicht im Klaren, wie weit man da gehen darf. Wenn man für den Zugriff TIA auslesen muss, dann wird es wohl zu kompliziert.
Schade, aber wenn es so ist, dann ist es so. Vielleicht bringt da die Zukunft ja noch was Neues.


Auf jeden Fall Danke für die Antworten!

Gruß yogi

In meiner Bibliothek ist das ja integriert. Funzt aber nur wenn TIA auf dem Rechner installiert ist! Dann kannst du mit meinem Tool z.B. die Symboltabelle auslesen und auch den Symbolischen AccessKey dazu anzeigen. Viel ist da wie gesagt aber noch nicht getestet da Ich keine 1200er CPU habe!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jochen,
ich möchte das alte Thema noch einmal ausgraben, weil es mich eignetlich sehr interessiert.
Ich konnte nun mit Deiner Bibliothek die TIA-Keys aus dem Projekt auslesen. Aber wie könnte ich dann mit dieser Information aus der SPS Daten auslesen?


Gruß yogi
 
Hallo,

der letzte Beitrag ist zwar schon etwas älter, aber ich hänge meine Fragen trotzdem mal hier an:

Ich kann momentan mit Hilfe von Jochens Toolbox symbolische Adressen aus einem DB auslesen. Dies klappt allerdings nur mit einer 1200er CPU.
Wenn ich aus einer 1500er CPU lesen will, wird 5 (= Variable nicht vorhanden) als Result geliefert. Woran kann das liegen?

Wird das 32er-Protokoll von der 1500er unterstützt?
Wird zum Erstellen der CRC die gleiche Funktion wie bei der 1200er benutzt?
Ich habe in einem anderen Thread einen Wireshark-Screenshot gesehen, in dem Variablen von einer 1200er mit dem 32er-Protokoll gelesen wurden. Mit welchem Kommunikationspartner könnte dies gemacht worden sein? Wenn ich mit einer HMI (z.B. KP300) Variablen von einer 1200er oder 1500er lese, wird immer das 72er Protokoll genutzt.
Wenn ich einen Wireshark-Mitschnitt von einer 1500er mit 32er-Protokoll hätte, wäre mir schon sehr geholfen.
 
Bei der 1200 V4 bzw. der 1500 muss Put/Get aktiviert sein und die DBs dürfen nicht symbolisch vorliegen, dann klappt (wahrscheinlich) der Zugriff im 32er-Protokoll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei der 1200 funktioniert das symbolische Lesen von optimierten DBs mit dem 32er-Protokoll (LibNoDave) (s. Wireshark-Screenshot im Anhang).
Nur bei der geht's 1500er nicht. Hier funktioniert nur das Lesen absoluter Adressen.

Ich habe irgendwie die Vermutung, dass evtl. die CRCs nicht passen. Werden die evtl. anders berechnet als bei der 1200er?

Wireshark_1200.png
 
Das ist ja unpraktisch. D.h. wenn ich beispielsweise ein Siemens-Panel an einer alten 1200 laufen habe, kann ich wenn mir die SPS abraucht nicht die SPS durch eine mit neuerer Firmware ersetzen, weil dann mein Siemens-Panel nicht mehr mit der SPS sprechen kann.

Aber das Protokoll wäre ja auch für die Nachbauer zu schön einfach gewesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Thomas_v2.1

In dem von dir gestartetem Thema http://www.sps-forum.de/hochsprachen-opc/28292-wireshark-plugin-fuer-s7-protokoll-6.html#post423003 hast du einen Wireshark-Mitschnitt angehängt, in dem du symbolisch von einer 1200er symbolische Variablen liest.

Weißt du noch, mit welchem Programm du die Kommunikation durchgeführt hast? Ist zwar schon ein bisschen her, aber vielleicht erinnerst du dich ja noch. ;)
 
@Thomas_v2.1

In dem von dir gestartetem Thema http://www.sps-forum.de/hochsprachen-opc/28292-wireshark-plugin-fuer-s7-protokoll-6.html#post423003 hast du einen Wireshark-Mitschnitt angehängt, in dem du symbolisch von einer 1200er symbolische Variablen liest.

Weißt du noch, mit welchem Programm du die Kommunikation durchgeführt hast? Ist zwar schon ein bisschen her, aber vielleicht erinnerst du dich ja noch. ;)

Das war mit der HMI-Simulation der TIA-Portal V11 und einer S7-1200 mit Firmwarestand 2.2.
Ab TIA-Portal V12 spricht auch die HMI-Simulation mit der 1200 nur noch s7comm-plus, also die 72er Telegramme. Die 1200 mit FW 2.2 scheint zumindest beides zu beherrschen. Es wird ja auch nicht ausgehandelt, sondern gleich mit der entsprechenden Variante nach dem Aufbau der Verbindung auf Iso-On-Tcp-Ebene losgeredet.

Die Kommunikation zur 1200 lässt sich auch über s7comm-plus mit etwas Aufwand nachbilden. Nur bei der 1500 wirds wegen den kryptografischen Funktionen aufwändiger. Aber ich denke mal wenn man eine 1500er auf dem Schreibtisch stehen hat, kommt man da mit entsprechendem Aufwand dahinter. Außerdem werden mit jedem Servicepack kleine Nuancen im Protokoll angepasst, da muss man schon genau wissen welche FW-Version welche Details verträgt.
 
Zurück
Oben