# libnodave und softSPS



## renid55 (5 Oktober 2005)

hallo gemeinde,
ich bastel gerade an ein VBTool zur visualisierung/archivierung
da ich viel unterwegs bin und meistens keine S7 hardware mitschleppe suche ich eine (lowbudget )möglichkeit auf eine virtuelle Anlage meine software zu testen.

daher meine frage:
gibt es eine möglichkeit mit libnodave auf die s7 plcsim zuzugreifen?
alternativ - könnte man die libnodave eingabe auf ne virtuelle quelle (zbsp in form einer textdatei "umbiegen"?

oder kennt jemand einen  anderen OPC server welcher sowas kann?

liebe grüße

reinhard


----------



## Zottel (5 Oktober 2005)

renid55 schrieb:
			
		

> gibt es eine möglichkeit mit libnodave auf die s7 plcsim zuzugreifen?


Sorry, PLCsim kenne ich nicht.


> alternativ - könnte man die libnodave eingabe auf ne virtuelle quelle (zbsp in form einer textdatei "umbiegen"?


Ja:
1. bei daveNewInterface als Protokoll daveProtoUserTransport angeben
2. eine eigene Funktion daveExchange schreiben, die zu dem verwendeten Prototyp paßt. In VB könnte das schwer werden:
3. Diese Funktion müßte dann, von mir auch aus einer Textdatei, Pakete an Libnodave liefern, die aussehen, wie die PDU die eine S7 schickt.

Bevor ich DAS machen würde, kannst du doch besser gleich ein "Back End" für deine Visualiserung schreiben, daß die Daten aus der Textdatei liefert...



reinhard[/quote]


----------



## renid55 (5 Oktober 2005)

hallo zottel,

danke für deine antwort



> Sorry, PLCsim kenne ich nicht.




Das ist die Siemens SoftSPS welche optional im STEP 7 Packet enthalten/freigeschaltet ist.




> Ja:
> 1. bei daveNewInterface als Protokoll daveProtoUserTransport angeben
> 2. eine eigene Funktion daveExchange schreiben, die zu dem verwendeten Prototyp paßt. In VB könnte das schwer werden:
> 3. Diese Funktion müßte dann, von mir auch aus einer Textdatei, Pakete an Libnodave liefern, die aussehen, wie die PDU die eine S7 schickt.



Hört sich gut an, sprengt aber leider momentan meinen KnowHow- bzw Zeit-Rahmen ;-(.
Wo kann man eigentlich das S7 PDU Protokoll/Spezifikation einsehen?



> Bevor ich DAS machen würde, kannst du doch besser gleich ein "Back End" für deine Visualiserung schreiben, daß die Daten aus der Textdatei liefert...



Sehe ich auch so bzw. habe ich auch schon so gemacht.
Nur wollte ich, in hinblick auf eine schnelle Anpassung, nicht nur meine Anwendung testen sondern in erster Linie auch den Datenaustausch mit der Schnittstelle bzw OPCServer. 
Ich hatte gehofft daß du bei der Entwicklung  ähnliche Probleme hattest und so ein Art "Offline Mode".Flag  implementiert hast, welcher zwischen Anlagen-"DatenStream" und Simulation/Datei wechseln kann.

Trotzdem danke für deine Antwort und auch für das libnodaveTool.

reinhard


----------



## Zottel (5 Oktober 2005)

renid55 schrieb:
			
		

> Das ist die Siemens SoftSPS welche optional im STEP 7 Packet enthalten/freigeschaltet ist.


Kenne ich vom Hörensagen. Ist aber doch eigentlich ein Simulator, keine SoftPLC, da es nicht wirklich etwas steuern kann, oder? Die SoftPLC WinLC funktioniert mit Libnodave nach einer kleinen Modifikation, die in die nächste Version einfließt. Habe ich aber nie ausprobiert und weiß schon garnicht, ob und welche Schnittstellen es hat. Wie greift man mit Step7 darauf zu? Ist es eine neue Art der Verbindung in "PC/PG-Schnittstelle wählen"?


> Hört sich gut an, sprengt aber leider momentan meinen KnowHow- bzw Zeit-Rahmen ;-(.


Das ist auch mehr so eine "im Prinzip ja"-Sache. Ich sag' ja, ich ürde es selbst auch nicht machen.


> Wo kann man eigentlich das S7 PDU Protokoll/Spezifikation einsehen?


Im Internet oder in frei zugänglicher Dokumentation gar nicht,soweit ich weiß. Ich habe mir die Pakete solange angeschaut und Werte verändert bis ich zu wissen glaubte, was was ist.


> ...sondern in erster Linie auch den Datenaustausch mit der Schnittstelle bzw OPCServer.


OPC ist wieder ganz was anderes. 


> Ich hatte gehofft daß du bei der Entwicklung  ähnliche Probleme hattest und so ein Art "Offline Mode".Flag  implementiert hast, welcher zwischen Anlagen-"DatenStream" und Simulation/Datei wechseln kann.


Nein, aber es gibt die Datei ibhsim5.c. Die simuliert Teile einer S7 + IBH-NetLink (eigentlich nur die Kommunikation). Sie gibt aber immer dieselben Werte raus, egal ob du Eingänge, Ausgänge, DBS liest. Das ließe sich leicht ändern, aber so wie sie ist läßt sie sich nur unter Linux übersetzen.


----------



## renid55 (5 Oktober 2005)

> Kenne ich vom Hörensagen. Ist aber doch eigentlich ein Simulator, keine SoftPLC, da es nicht wirklich etwas steuern kann, oder?



stimmt! softsps war der falsche ausdruck.



> Die SoftPLC WinLC funktioniert mit Libnodave nach einer kleinen Modifikation, die in die nächste Version einfließt. Habe ich aber nie ausprobiert und weiß schon garnicht, ob und welche Schnittstellen es hat. Wie greift man mit Step7 darauf zu? Ist es eine neue Art der Verbindung in "PC/PG-Schnittstelle wählen"?



Die winLC habe ich nicht.   
Der PLCsim von Siemens kann in der Konfiguration  eine MPI Nummer zugeordnet werden(Default=2). Danach wird sie wie eine reale PLC behandelt. Wahrscheinlich befindet sich die "Weiche" innerhalb von Step7 auf einem mpi_Objekt.

deine TestMPI.exe meldete jedenfalls nur timeout.
aber vermutlich greift sie auch direkt auf die COMx: zu?




> Nein, aber es gibt die Datei ibhsim5.c. Die simuliert Teile einer S7 + IBH-NetLink (eigentlich nur die Kommunikation). Sie gibt aber immer dieselben Werte raus, egal ob du Eingänge, Ausgänge, DBS liest. Das ließe sich leicht ändern.....



findest du - ich habe sie mir gerade angeschaut *kopfschmerz*  ;-)


gruß
reinhard


----------



## Zottel (5 Oktober 2005)

> findest du - ich habe sie mir gerade angeschaut *kopfschmerz*  ;-)


ja, der Code ist chaotisher Schrott. Er dient mir auch nur dazu, Step7 ein paar Schritte lang vorzumachen, daß es mit einer S7 spricht, damit ich sehen kann, wie es das macht oder was es aus einer bestimmten Antwort macht.
Aber das mit den wechselnden Werten ist wirklich nicht schwer. Zwei Wege: 

1.Wenn du einfach nur jedesmal etwas anderes lesen willst, änderst du die Funktion dummyRead, daß sie zum Beispiel etwas hochzählt.
Willst du eingänge u.s.w. unterscheiden muß sie halt nicht immer was aus dem Konstanten-array dummyRes zurückgeben, sondern z.B. aus einem neuen dummyDB1 oder dummyInputs oder was du möchtest.
2. Wenn du einen simulierten "Prozess" oder in Kombination mit einem simulierten Programm nebenher laufen haben willst, packst du alles nötige in eine function SPSmain() oder ProzessMain() und startest threads, am besten  vor pthread_create(....accepter, );
Aus diesen Threads könntest du einfach Werte aus den dummyXXX arrays lesen und schreiben...


----------



## HeizDuese (5 Oktober 2005)

Schade, das es nicht geht !

Ich hätte in der Vergangenheit auch des öffteren Verwendung dafür gehabt- leider kann Siemems Prodave auch nur über physikalische Schnittstellen auf SPSen zugreifen, während die meisten S7-Progamme (wie WinCC, Protool, S7-Manager) ganz transparent die Verbindung auf PLC-SIM aufbauen, wenn dieses gestartet wurde.

Ich nutzte die Simulation sehr intensiv - wir simulieren alle Projekte auf der Simulation - mit Panel, WinCC und sogar in PCS7- Umgebungen. Nur bei unseren Delphi- Applikationen muss ich da passen :-(

Aber ich gebe die Hoffnung nicht auf, dass man mit einfacheren Mitteln wie OPC an die S7-Simulation "rankommt".


----------



## Zottel (6 Oktober 2005)

HeizDuese schrieb:
			
		

> Ich nutzte die Simulation sehr intensiv - wir simulieren alle Projekte auf der Simulation - mit Panel, WinCC und sogar in PCS7- Umgebungen. Nur bei unseren Delphi- Applikationen muss ich da passen :-(


Ich arbeite daran, daß Libnodave die von Step7 mitgebrachten Bibliotheken und Treiber für den Transport nutzen kann. Es gefällt mir zwar nicht, weil es eine "windows only" Lösung ist, aber es wird eine Menge Leute freuen. Vielleicht geht es dann.



> Aber ich gebe die Hoffnung nicht auf, dass man mit einfacheren Mitteln wie OPC an die S7-Simulation "rankommt".


Ich würde OPC nicht ein "einfaches Mittel" nennen...


----------



## renid55 (6 Oktober 2005)

> ja, der Code ist chaotisher Schrott. Er dient mir auch nur dazu, Step7 ein paar Schritte lang vorzumachen, daß es mit einer S7 spricht, damit ich sehen kann, wie es das macht oder was es aus einer bestimmten Antwort macht.



Nee, so meinte ich das nicht. das war keinesfalls eine Kritik an deiner Arbeit. Muß mal meinen Experimentalcode sehen!.
Ich wollte viel mehr auf meine mangelnde Verständnis/Übersicht bezüglich der Funktionalität des S7_MPI Datenflusses/Format im allgemeinen sowie in libninodave im speziellen ansprechen. Mein Wissen über den MPI DatenAustausch ist wohl zu rudimentär um deine Funktionen zu verstehen. Wenn du mal ein Buch schreibst über "MPI intern" oder so .... ein Exemplar kannste für mich reservieren. ;-)



> Aber das mit den wechselnden Werten ist wirklich nicht schwer. Zwei Wege:
> 
> 1.Wenn du einfach nur jedesmal etwas anderes lesen willst, änderst du die Funktion dummyRead, daß sie zum Beispiel etwas hochzählt.
> Willst du eingänge u.s.w. unterscheiden muß sie halt nicht immer was aus dem Konstanten-array dummyRes zurückgeben, sondern z.B. aus einem neuen dummyDB1 oder dummyInputs oder was du möchtest.
> ...



Eigentlich wollte ich nur ne Visualisierung/Archivierung schreiben....
Aber was ist das Leben ohne Herausforderung - allerdings wird das aus oben benannten Gründen wohl noch etwas dauern. 
Da gibt es aber noch ein Problem - du schriebst das die Funktion zZt nur unter Linux läuft?
Trotz meiner gestörter Meinung zu Microsoft möchte ich aus diversen Gründen ("Esst mehr Scheiße, Milliarden von Fliegen können sich nicht Irren!") noch bei Windows bleiben. Mich jetzt auch noch in Linux und seine Anwendungen einzuarbeiten ließen meine Energiereserven nicht mehr zu:-()
Lässt sich das Lösen?(oder besser kannst du das?)

gruß
reinhard


----------



## Zottel (6 Oktober 2005)

renid55 schrieb:
			
		

> Eigentlich wollte ich nur ne Visualisierung/Archivierung schreiben....
> Aber was ist das Leben ohne Herausforderung - allerdings wird das aus oben benannten Gründen wohl noch etwas dauern.
> Da gibt es aber noch ein Problem - du schriebst das die Funktion zZt nur unter Linux läuft?
> Trotz meiner gestörter Meinung zu Microsoft möchte ich aus diversen Gründen ("Esst mehr Scheiße, Milliarden von Fliegen können sich nicht Irren!") noch bei Windows bleiben. Mich jetzt auch noch in Linux und seine Anwendungen einzuarbeiten ließen meine Energiereserven nicht mehr zu:-()
> Lässt sich das Lösen?(oder besser kannst du das?)


1. Kann ich das wirklich nicht. Dazu müßte ich lernen wie man a) Server und b) multithreading unter Windows programmiert.
2. Lohnt es sich absolut nicht. Wirklich nicht.

 Wenn du simulierte Daten in die Visualisierung bekommen willst, warum schreibst du dir nicht irgendetwas (Simulation, einlesen aus Textdatei, Zufallszahlengenerator, Funktionsgenerator, einlesen von der Soundkarte, was auch immer, komilierst es als .dll und gibst den Funktionen dieselben Namen wie in Libnodave? Dann tauscht du einfach die .dll aus, um zwischen "simuliert" und "real" umzuschalten...Oder linkst dein Programm nicht mit Libnodave.dll sondern öffnest deine .dll oder libnodave.dll über ihren Name, holst dir die Funktionen mit GetProcAddress. Dann sagst du deiner Anwendung nur, den Namen der .dll und hast "simuliert" oder"real".
Wenn du sowieso mit OPC arbeiten willst, da gibt es auch Simulator-OPC-Server, die dir künstliche Daten wie eine Sinuskurve oder so liefern. Meine ich jedenfalls mich zu erinnern.

Schick mir mal deine mail-Adresse dann geb ich dir die nächste Version von Libnodave zum Testen, sobald es einigermaßen geht, und du guckst, ob sie über die Siemens-.dlls mit PLCsim kommunizieren kann.


----------



## Tupo13 (12 Oktober 2005)

Hallo,
Sorry habe das ganze jetzt erst gelesen

Zottel schrieb:


> Die SoftPLC WinLC funktioniert mit Libnodave nach einer kleinen Modifikation, die in die nächste Version einfließt. Habe ich aber nie ausprobiert und weiß schon garnicht, ob und welche Schnittstellen es hat.



auf die WinLC kann mit Libnodave nur über Ethernet zugegriffen werden.

@Zottel
Du hast es damals Aufgrund meiner Anfrage eingebaut. Einige Sachen funktionieren bereits  einwandfrei mit der SoftSPS manche Sachen jedoch noch nicht. - Falls du irgendwelche Informationen, Ethereal-Aufzeichnungen... brauchst melde dich einfach

Gruß Tupo13


----------



## Zottel (12 Oktober 2005)

Tupo13 schrieb:
			
		

> Hallo,
> 
> Du hast es damals Aufgrund meiner Anfrage eingebaut. Einige Sachen funktionieren bereits  einwandfrei mit der SoftSPS manche Sachen jedoch noch nicht. -


Erstmal ist interessant zu wissen, welche Sachen nicht funktionieren.
Als nächstes ist interessant, was die debug-Ausgabe von libnodave dazu meint.


----------



## Gerhard Bäurle (16 November 2005)

Hallo,

falls die PLCSIM-Geschichte hier noch kein 
Happy End hat ... 

[Werbmodus AN]
... jetzt gibt es mit ACCONtrol 
eine schöne Alternative zu PLCSIM:

http://www.sps-forum.de/phpBB2/viewtopic.php?t=5590
[Werbemodus AUS]

Viele Grüße

Gerhard Bäurle


----------

