S7-200 CPu über CP243-1 auslesen

Daimonion

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

gerade angemeldet, möcht ich schon meine erste Frage zu einer S7-200 Steuerung und dem Microwin 4.0 SP2 los werden.

Ich versuche über das Ethernet modul die Daten der Steuerung auszulesen. Also damit meine ich das komplette Programm.
Als Ansatz dachte ich mir zuerst einen OPC-Server, was ich aber mittlerweile nicht mehr so richtig verfolgen möchte (viel zu viel Angebote, zu verwirrend auf dem ersten Augenblick).

Dann hab ich mir das Microwin nochmals angeschaut und gesehen das der per TCP/IP auf die Steuerung zugreifen kann.

Als erste Frage dazu würd ich gern wissen ob von euch jemand weiß wie Microwin die Daten aus der Steuerung holt und (vorrausgesetzt Microwin geht über die TCP-Schnittstelle, welche Siemenseigene da eingesetzt wird.

Mein Idee dazu ist, wenn ich meine Applikation, anstatt Microwin dazwischen hänge, könnte ich mittels meinem Programm die Steuerung komplett auslesen.

Vielen Dank schon mal für die Antworten.
 
Daimonion schrieb:
Hallo,

Mein Idee dazu ist, wenn ich meine Applikation, anstatt Microwin dazwischen hänge, könnte ich mittels meinem Programm die Steuerung komplett auslesen.
Libnodave von:

http://libnodave.sf.net

herunterladen.

Von den Testprogrammen:
testISO_TCP -2 --readout <IP-Adresse>

ausführen. Danach solltest du drei Dateien mehr auf der Festplatte haben:
OB1.mc7 // dein Programm mit allen Unterprogrammen
DB1.mc7 // der Datenbaustein, mit dem der V-Bereich initialisiert wird
SDB1.mc7 // deine Systemeinstellungen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für den Super Tip. Solch ein Programm und auch solche Sourcen hab ich schon seid Ewigkeiten gesucht.

Auslesen funktioniert auch, allerdings kenn ich die Dateien nicht. Also OB1 und so schon, aber mc7...
Mit welchem Programm kann man die denn bearbeiten?

Besten Dank schon mal
 
Daimonion schrieb:
Danke für den Super Tip. Solch ein Programm und auch solche Sourcen hab ich schon seid Ewigkeiten gesucht.

Auslesen funktioniert auch, allerdings kenn ich die Dateien nicht.
Kansst du auch nicht. Step7 speichert die Bausteine ja in eine Datenbank, Microwin irgendwie in seiner Projekt-Datei.
Also OB1 und so schon, aber mc7...
Sollte einfach eine Abkürzung für "MaschinenCode S7" sein.
Mit welchem Programm kann man die denn bearbeiten?
Du könntest sie mit testISO_TCPload wieder in die CPU packen, aber:
1. Funktioniert das ausgerechnet mit dem CP243 nicht, glaube ich.
2. Ist es überhaupt noch ein wenig experimentell.

Für die S7-300/400 gibt es Software von Drittanbietern, die auch einzelne Bausteine als Dateien abspeichert. Ob das Format kompatibel ist, weiß ich nicht.
 
ja, microwin speichert das alles zusammen in eine Projektdatei.

Kann Step7 diesen Maschinencode evtl. öffnen? Wenn ja, dann müßt ich mal in den Abgründen der Frima nach ner Step7 version absuchen ;)

Wenn nicht, gibts vielleicht so was ähnliches wie einen Disassembler mit dem man das wieder in einigermaßen lesbare daten verwandeln könnte?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Daimonion schrieb:
Kann Step7 diesen Maschinencode evtl. öffnen?
Nein, erstens gibt's keine Möglichkeit, ihm die Datein "anzubieten", zweitens "versteht" es den Maschinencode der 200 eh nicht.
Daimonion schrieb:
Wenn nicht, gibts vielleicht so was ähnliches wie einen Disassembler mit dem man das wieder in einigermaßen lesbare daten verwandeln könnte?
Ich habe mir mal einen geschrieben, ist allerdings nicht vollständig und in JAVA.
 
Hui, nicht schlecht..

Ist der bei dir noch in der Entwicklung, oder hast du damit aufgehört.

Java ist meiner Meinung nach gar nicht mal so schlecht, und so schwer dürfte das doch auch nicht gerade sein oder?

Wenn ich dürfte würd ich mir mal deine Sourcen dazu anschauen wollen.
 
Daimonion schrieb:
Hui, nicht schlecht..

Ist der bei dir noch in der Entwicklung, oder hast du damit aufgehört.
Das habe ich nicht so recht entschieden...Was will man schon damit, wenn man nicht gleich eine ganze Programmierumgebung erstellt?
Was willst du damit?
Java ist meiner Meinung nach gar nicht mal so schlecht, und so schwer dürfte das doch auch nicht gerade sein oder?
Wenn ich dürfte würd ich mir mal deine Sourcen dazu anschauen wollen.

Muß ich erst zuhause suchen. Morgen vielleicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau das hab ich erst mal im Ansatz vor.
Meine Idee ist es eine Programmierunmgebung in ASP.Net zu erstellen, damit man per Internet von jedem beliebigem Rechner aus, diverse, an das System angeschlossene S7-Steuerung programmieren (hauptsächlich soll das ne Remote-fehlerbeseitigung sein) kann.

Und da bin ich momentan erst mal am Möglichkeiten recherchieren.
 
Ok, das ist eine schöne Idee, abgesehen davon, daß ich ASP.NET nicht mag...
JAVA fände ich gut, weil es auf allem möglichen laufen kann, auch auf PDAs oder Handys.
Das nächste ist, daß mir die Siemens-Werkzeuge auf den Geist gehen:
- Lange Ladezeiten
- Hoher Speicherbedarf
- Der Editor ist so vorwitzig und fängt an den Code zu "syntax-checken", bevor ich mit der Eingabe fertig bin.
- Microwin kann keine zwei Projekte offen haben. Das ist Scheiße, wenn man was per Copy&Paste übernehmen möchte.
- Step7 kann nicht eine Verbindung über MPI und eine andere über CP5511 oder TCP oder IBH-Link offen haben. Da muß man erst PC/PG-Schnittstelle wechseln.

Ferner wünsche ich mir einen Satz einfacher Werkzeuge, wie man sie für Mikrocontroller hat:
Assembler, Disassembler, Debugger.
- Code kann man dann mit seinem Liebligseditor schreiben.
- Ferner kann man Quelltexte mit allerlei Tools wie diff, patch bearbeiten.
- Der Assembler kann einfach die Symbolik-Liste als defines verarbeiten. Keine Probleme mehr mit Verschieben von Variablen im Speicher oder "Umverdrahten" von Ein- Ausgängen.
- Der Assembler sollte Makros können. Eine Sammlung von Makros bringt ihm dann "komfortable" (ich meine normale, "komfortabel" für S7) Array-Indizierung und sowas bei.
- Weiter Makros könnten den Austausch von Programmen zwischen S5,S7-200,S7-300 erleichtern.
 
Hui, da kommen ja gleich Forderungen, oder weitere Ideen auf mich zu. ;)
Aber da seh ich auch schon einige Ansätze die ich verwirklichen könnte. Nun ja zuerst gilt es mal grundlegend die Ideen zu notieren und zu prüfen. :) Immer eins nach dem anderen.


Zu ASP.Net . Ich persönlich mag .Net sehr, da es viele Vorteile von Java (allgemein OO-Hochsprachen) und C++ bzw. C und sogar wie ich jetzt mal gesehen hab Delphi (Pascal) versucht größtenteils zu vereinen. Natürlich ist das eine Ansichtssache. Vielleicht stellt sich auch heraus, dass .Net gar nicht so richtig dazu geeignet ist und ich nehm lieber eine Script- oder Parser Sprache. Denke das liegt ebenfalls noch in weiter Ferne.

Aber wenn du morgen dran denkst und damit übereinstimmst, dass ich mir mal deine Sourcen zu dem Disassembler anschauen könnt, würd mich das schon wieder ein Stück weiter bringen.

Aber erst mal danke das du mir so viele gute Tipps gibst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Daimonion schrieb:
...Aber wenn du morgen dran denkst und damit übereinstimmst, dass ich mir mal deine Sourcen zu dem Disassembler anschauen könnt, würd mich das schon wieder ein Stück weiter bringen.
Hier die Sourcen. Allerdings würde ich schon gerne wssen, was du vorhast:
Wird dein Programm veröffentlicht?
Open source?
Kommerziell?
Hast du an weiterer Zusammenarbeit Interesse?
 

Anhänge

  • s7-200-dis.tar.gz
    22,9 KB · Aufrufe: 15
Nun ja, was das Programm können soll hab ich ja schon beschrieben. Das Programm soll in Zusammenhang mit meinem Praxissemester entstehen da ich es auch im Namen meiner Firma schreiben soll, wird es höchstwahrscheinlich kommerziell werden. Dabei überlege ich schon was ich mache wenn ich freie Sourcen verwenden sollte (so wie deine).

Am Ende wird es so werden, das ich vielleicht nur den von mir programmierten Teil unter eine Lizenz stelle.

Das ist dann alles erst mal noch in weiter Ferne.

Dabei wären wir schon bei deiner Frage ob ich an Zusammenarbeit interessiert bin. Aufgrund dessen das ich das im Prax mache und im Namen meiner Firma, werd ich wahrscheinlich das Ding allein durchstehen müssen, jedoch wäre freiwillige Hilfe erwünscht wenn ich mal nicht weiter weiß.

Schauen wir mal wie es weiter geht. Werde das Forum hier auf jeden Fall informieren.

Besten Dank erst mal für deine Sourcen. Ich schau mir mal deine Ideen an. Wenn ich Teile davon verwenden söllte, dann frag ich dich noch mal konkret (würde dir dann auch erklären inwieweit und was ich davon einbinden wöllte und ob du dann damit einverstanden wärst).
 
Hallo nochmal. Ich hab mir dein Programm mal angeschaut und auch probiert.. Hst mir bisher auch schon einiges hinsichtlich des Verstehens gebracht.

Wo hast du denn die OPCodeListe her? Kann ich mir die ebenfalls irgendwo her holen?

So wie ich das gesehen hab ist der Maschinencode doch realtiv einfach aufgebaut und es sollte, so ich richtig drangehen werd, nicht das größte Problem sein den Code wieder zu dissasemblen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Daimonion schrieb:
Wo hast du denn die OPCodeListe her? Kann ich mir die ebenfalls irgendwo her holen?
Die OP-Codes der S5 standen im Anhang des Systemhandbuchs. Sie sind größtenteils gleich geblieben. Den Rest habe ich herausgefunden, indem ich Code in Step7 geschrieben und in die CPU geladen habe und habe mir dann den Binärcode angesehen.
 
ah, hab grad geschaut und hab die opcodeliste jetzt auch... allerdings bin ich im Lesen des MCs noch ein wenig plump ;)

weiß auch noch nicht ganz genau was die einzelnen Methoden im Nodave.java machen, aber das bekomm ich schon irgendwie raus. :)
 
Welche Opcode-Liste? die von der S5? Oder gibt's auch eine komplette von der S7?
Daimonion schrieb:
weiß auch noch nicht ganz genau was die einzelnen Methoden im Nodave.java machen, aber das bekomm ich schon irgendwie raus. :)
Nicht nötig. Die meisten Methoden sind für den Disassembler gar nicht nötig. Wahrscheinlich werden nur ein oder zwei der Umwandlungen von Big- nach Little endian gebraucht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
da hast du recht.. leider sind die namen, wie bei den meißten methoden der programmier so das sie nur der programmierer versteht ;) (ich machs auch immer so)


Also so wie ich es bis jetzt rauslesen konnte, gibt es einen Header der 34 Bytes lang ist der mit 7070h anfängt und mit der größe in Bytes des Codes endet. Nur mal so für die die es interessiert :)
 
USBEWORD zum Beispiel.. wobei ich die Funktion dieser Funktion fast rausbekommen habe.

Die Liste schau ich mir gerade an, versuchs zu begreifen und anzuwenden. Kann dir also noch nicht ganz so viel dazu sagen...Aber auf dem ersten Blick hilft sie mir schon mal ein ganzes Stück weiter.
 
Zurück
Oben