mit libnodave komplette Bausteine sichern

Tupo13

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

weiß jemand ob es möglich ist - Bausteine die ausgelesen wurden wieder in die SPS zu schießen?

Also mein vorhaben ist:
Ich möchte eine komplette Sicherungen aller Bausteine auf einer SPS machen. Das funktioniert mit Libnodave einwandfrei.

Das Problem ist jetzt, wie bekomme ich die Bausteine wieder in die SPS?

Das Test-Programm funktioniert ja leider meistens nicht. SPS stoppt...

@Zottel
Ich habe mit dir ja vor eineigen Monaten schon einmal darüber geredet.
Damals meintest du, dass das alles noch etwas experimentiell ist - aber du daran Arbeitest.
Gibt es/oder wird Libnodave in nächster Zeit Funktionen zur Verfügung stellen, welche es ermöglichen Bausteine wieder in die SPS zu schießen?


Vilen Dank im voraus
Gruß Tupo13
 
Tupo13 schrieb:
Ich habe mit dir ja vor eineigen Monaten schon einmal darüber geredet.
Damals meintest du, dass das alles noch etwas experimentiell ist - aber du daran Arbeitest.
Gibt es/oder wird Libnodave in nächster Zeit Funktionen zur Verfügung stellen, welche es ermöglichen Bausteine wieder in die SPS zu schießen?
Gruß Tupo13
Wie ich damals sagte, sind ja Testprogramme dabei, die zurückschreiben. Das "experimentell" bezieht sich auf folgendei Dinge:
1. Sieht der Code zum Zurückschreiben momentan bei verschiedenen Protokollen verschieden aus und dazu sehe ich eigentlich keinen Grund :-(
2. Müssen SDBs in einer bestimmten Reihenfolge geschrieben werden. Das wird nie völlig zu klären sein, da neue Modelle vielleicht neue SDBs (z.B. für Profinet) einführen können.
3. Fehlt noch eine Funktion zur Speicherkomprimierung.
Punkt 3 werde ich mal angehen. Dann gehe davon aus: Wenn es für dich mit einer bestimmten HW-Konfiguration funktioniert, wird es mit dieser Konfiguration immer funktionieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Zottel

Danke für deine schnelle Antwort.

Leider funktioniert es mit deinem Testprogramm nicht. Ich zerschieße mir da jedesmal das ganze Projekt. Die SPS bekomme ich dann erst nach dem Urlöschen wieder zum laufen. (416 2DP).

Ich greife über Ethernet auf die SPS zu. Es muss aber absolut zuverlässig sein. Das Testprogramm ist also für diesen zweck nicht zu gebrauchen.

Wist du in nächster Zeit (in 2 Monat Diplomarbeitabgabe) daran noch etwas ändern?


Falls nicht, dann muss ich mir das irgendwie selber zusammenschustern. Damit habe ich auch bereits angefangen:
Ich verwende die pcap.h - der 3-way-Handshake ... funktioniert schon.

Nur habe ich leider keine Ahnung, wie der Rest aussehen muss.
Hast du da vielleicht irgendwelche Infos...
Wäre dir sehr sehr dankbar

Gruß Tupo13
 
Hallo Tupo13,
Tupo13 schrieb:
Ich verwende die pcap.h
Kann man mit pcap wirklich Pakete (egal ob TCP/IP, ISO, ISO on TCP) versenden. Ich hab immer gedacht, dass damit nur ein sniffen möglich ist ??
Übrigens, der OPC-Server von Siemens (Simatic.Net) und auch die S7-SAPI.DLL können problemlos Bausteine von der S7 lesen b.z.w. schreiben.

Gruß
Question_mark
 
Ja mit pcap.h kann man pakete verschicken.
Allerdings musst du dir die Pakete selber zusammenbauen - Checksummen, Längen.... Byte für Byte - du kannst so also jedes protokoll verwenden.

Wenn du unter Windows programmierst kann es allerdings sein, dass der Kernel dir manchmal dazwischen Funkt

Gruß Tupo13
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tupo13 schrieb:
Leider funktioniert es mit deinem Testprogramm nicht. Ich zerschieße mir da jedesmal das ganze Projekt.
Bei welcher Aktion? Welchen Baustein schreibst du?

Wist du in nächster Zeit (in 2 Monat Diplomarbeitabgabe) daran noch etwas ändern?
Eher nein. Ich habe auch keine 4xx zum Testen.

Ich verwende die pcap.h - der 3-way-Handshake ... funktioniert schon.
der 3-way-Handshake
Keine Ahnung, was der 3-way-Handshake ist...
Nur habe ich leider keine Ahnung, wie der Rest aussehen muss.
Hast du da vielleicht irgendwelche Infos...
Nein. Du kannst nur in den Quellcode schauen oder die debug-Ausgabe von Libnodave mit dem vergleichen, was PG und S7 miteinander "reden".
 
@ Zottel

Danke für deine Antwort

Angenommen ich nehme den OB1 in dem nichts drin steht oder den DB1 in dem zwei Integer sind. - Es hat noch nie funktioniert.

Einmal musste ich dann auch eine neue Firmware einspielen, weil es nach dem Ürlöschen die Bausteine auf der Steuerung (die ich natürlich wieder runtergeschossen habe) nicht mehr angezeigt hat obwohl sie da waren


Eher nein. Ich habe auch keine 4xx zum Testen.
Funktioniert es denn bei einer 300?


Keine Ahnung, was der 3-way-Handshake ist...
Der Drei-Wege-Handshake baut die Verbindung auf
Syn an die SPS
Syn und Ack von Sps
Ack an SPS
Das macht bei dir glaube ich initialize


Nein. Du kannst nur in den Quellcode schauen oder die debug-Ausgabe von Libnodave mit dem vergleichen, was PG und S7 miteinander "reden".
Na ja das mache ich ja auch, aber es sind ja um die 120 Pakete die pro Baustein hinundhergeschickt werden. Es fällt mir sehr schwer das nachzubilden wenn ich nichteinmal weiß was an welche Stelle... muss.

Dachte du hast da vielleicht schon was- egal werde mich mal hinsetzen und versuchen ob ich dahinter komme - Melde mich dann falls ich was rausbekomme


Gruß Tupo13
 
Das Schreiben von Bausteinen ist in der Tat etwas aufwändiger. Was ist denn genau Thema bzw. Aufgabe der Diplomarbeit?
Hintergrund der Frage: Ein kostenloses Backup-Tool gibt es für die 300er von mhj. Wir bieten im diesem Bereich unser Backup/Restore an. Dieses Tool sichert die SPS in ein originales S7-Projekt. Und kann S7-Projekte, inklusive aller SDBs, in der richtigen Reihenfolge der Bausteine, auch wieder zurückspielen. Das Ganze ist über Kommandozeile parametrierbar und kann somit in (fast) jede Windows-Applikation eingebunden werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Thema ist ein Backup Programm für S7 300/400 zu erstellen
(Allerdings ohne S7 Treiber)

Mit dem Simatic OPC Server funktioniert das ganze ja eigentlich recht gut.

Was steht denn eigentlich in den SDB's ? Wozu dienen die ?
Steht da die Hardware drinn?

Ich habe bis jetzt nur DB,FB,FC und OB abgezogen

Gruß Tupo13
 
Tupo13 schrieb:
Was steht denn eigentlich in den SDB's ? Wozu dienen die ? Steht da die Hardware drinn?
Richtig. Dort steht die Hardwarekonfiguration, Netzkonfiguration, Verbindungen etc. drin. Ohne diese ist eine nackte SPS nicht zum Leben zu erwecken.
 
Tupo13 schrieb:
Funktioniert es denn bei einer 300?
Ja. Außer wenn man SDBs in falscher Reihenfolge einspielt oder wenn der Speicher nicht reicht. Über TCP/IP habe ich allerdings nur mit einer VIPA Speed7 getestet und das ist schon eine Weile (ca. 1 Jahr?) her.
Du probierst es immer noch mit reinem ISO??
Der Drei-Wege-Handshake baut die Verbindung auf
Syn an die SPS
Syn und Ack von Sps
Ack an SPS
Das macht bei dir glaube ich initialize
SYN und ACK klingt aber nach TCP. Bei ISO over TCP macht das wohl das Betriebssystem, wenn ein socket geöffnet bzw. connect() aufgerufen wird.

Nein. Du kannst nur in den Quellcode schauen oder die debug-Ausgabe von Libnodave mit dem vergleichen, was PG und S7 miteinander "reden".
Na ja das mache ich ja auch, aber es sind ja um die 120 Pakete die pro Baustein hinundhergeschickt werden.
Also PDUs (Pakete der S7-Kommunikation sind es für einen kurzen Baustein nur einige wenige:
PG an SPS: Ich will dir den Baustein OB1 mit der Länge 123 schicken (Funktionscode 0x1A)
SPS an PG: ok
SPS an PG: gib mir den Anfang (Funktionscode 0x1B)
PG an SPS: Anfang vom Baustein + Kennung, ob noch mehr folgt
Falls noch was folgt SPS an PG: gib mir mehr (Funktionscode 0x1B)
PG an SPS: Fortsetzung Baustein + Kennung, ob noch mehr folgt
Falls nix mehr folgt SPS an PG: ok, laden beendet (Funktionscode 0x1C)
PG an SPS: Übernimm den Baustein ins Programm (Funktionscode 0x28 +Schlüsselwort _INSE)
Das müßtest du irgendwie auch in der Kommunikation PG<->SPS wiederfinden. Sonst lade mal einen kurzen OB1 und schick mir die mitgeschnittenen Pakete.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Zottel Danke

Also ich verwende TCP/IP - kein ISO over TCP

Wie verschickst du denn in libnodave deine Packete?

Ich habe dir dann noch die aufgezeichneten Pakete OB1
geschickt

Gruß Tupo13
 
Wie das? Welche Port-Nummer?

Wie libnodave auch benutze ich den Port 102 der SPS.
Mein Sourceport ist ein zufälliger der über 10000 liegt.

Momentan verschicke ich jedes Paket einzeln, ich berechne die Checksummen selber, zähle die Sequenznummern hoch...

aber so wie es aussieht werde ich dann wohl auch auf sockets umsteigen müssen

Hast du meine email bekommen?

Gruß Tupo13
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tupo13 schrieb:
Wie libnodave auch benutze ich den Port 102 der SPS.
Also ist es ISO over TCP.
Mein Sourceport ist ein zufälliger der über 10000 liegt.
Das ist normal.
Momentan verschicke ich jedes Paket einzeln, ich berechne die Checksummen selber, zähle die Sequenznummern hoch...
Eine Quälerei und möglicherweise kollidiert es mit anderen TCP/IP-Verbindungen, die andere Programme über das OS abwickeln.
aber so wie es aussieht werde ich dann wohl auch auf sockets umsteigen müssen
Solltest du auf jeden Fall tun. Könnte zur Abwertung deiner Diplomarbeit führen, wenn dur er IP und TCP nachbildest, weil du nicht erkannt hast, daß das im OS schon drin ist...
Hast du meine email bekommen?
Noch nicht. web.de scheint ein Problem mit dem login zu haben.
 
@ Zottel
Ok vielen Danke für die Hinweise - werde mich dann an das Socket-Lernen machen

Ich dachte immer ISO over TCP sei das Protocoll mit dem S5 (oder auch S7 SPSen ohne IP-Adresse) komunizieren.
Sobald ein IP Header im Protocol enthalten ist - dachte ich ist es TCP/IP
ist das etwa falsch?
 
Tupo13 schrieb:
@ Zottel
Ok vielen Danke für die Hinweise - werde mich dann an das Socket-Lernen machen
Da kannst du eigentlich allen nötigen Code in libnodave finden.
[/quote]
Ich dachte immer ISO over TCP sei das Protocoll mit dem S5 (oder auch S7 SPSen ohne IP-Adresse) komunizieren.
Nee das war ISO.
Sobald ein IP Header im Protocol enthalten ist - dachte ich ist es TCP/IP
ist das etwa falsch?
Bei ISO over TCP packen sie das ISO-Paket als "Nutzlast" in ein IP-Paket.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok kapiert danke

Code:
Da kannst du eigentlich allen nötigen Code in libnodave finden.
Ich habe MS VC++ kann ich damit den Sourcecode von libnodave.dll anschauen oder vielleicht sogar kompilieren? Das wäre ja super
 
Tupo13 schrieb:
Ok kapiert danke

Code:
Da kannst du eigentlich allen nötigen Code in libnodave finden.
Ich habe MS VC++ kann ich damit den Sourcecode von libnodave.dll anschauen oder vielleicht sogar kompilieren? Das wäre ja super
Ja sicher kannst du das. Aber bevor du die graphische Oberfläche "anwirfst:" Der Sourcecode braucht zwei conditional defines und ein weiteres, wenn er als .dll kompiliert wird. Es sind diverse Makefiles dabei, die alles von der Kommandozeile aus kompilieren, weil ich erstens kein Visual Studio habe und zweitens alles (Linux, Windows-Bibliothek, Testprogramme, .NET.dll) in einem Rutsch per Skript auf einer Linux-Kiste kompiliere.
MAKEFILE.VC sollte mit dem Make-Tool von VC++ laufen.
Es könnte aber seien, daß irgendwas nicht up to date ist. Dann mußt du schauen, was in MAKEFILE.VC.WINE steht; das ist das, womit ich die Windows-Teile übersetze.
 
Also ich habe das mit dem Makefile nicht hinbekommen
keine ahnung an was es liegt. Er bringt mir jedesmal Fatal Error

In der openSocket.c verbindest du dich zu einem Socket oder?
 
Zurück
Oben