# Snap7 - S7-Kommunikationsbibliothek



## Thomas_v2.1 (11 Oktober 2013)

Hi,
ich habe doch heute durch Zufall im Internet ein wirkliches Goldstück entdeckt:

Snap7, eine Kommunikationsbibliothek für S7-Steuerungen

http://snap7.sourceforge.net/

Sehr ausführlich dokumentiert, in C++ programmiert und somit in so gut wie allen erdenklichen Betriebssysteme zu verwenden, und:
Open Source

Zumindest ein erster Blick in die Dateien sieht schon mal sehr professionell aus. Respekt!


----------



## Blockmove (12 Oktober 2013)

Sieht wirklich interessant aus!
Danke für den Tipp 

Gruß
Dieter


----------



## PeterHollanda (12 Oktober 2013)

wow vortrefflich!


----------



## kpf (18 Oktober 2013)

Echt klasse.

Hat jemand eine Idee, wie man das auf das .NET Micro Framework portieren kann?
Dann könnte man es auf dem Gadgeteer laufen lassen - ich hätte da ein paar Ideen .....


----------



## funkey (19 Oktober 2013)

Super, danke für den Link!
So wie ich das verstehe kann ich mit dem Server eine SPS simulieren oder auch ein Programm schreiben, dass verschiedene Geräte mit verschiedenen Protokollen ausliest (Modbus, MBus, ...), und diese Daten dann wie eine SPS zur Verfügung stellen und mit meinen SCADA-Systemen dann anzeigen und protokollieren. Das ist cool!


----------



## pvbrowser (20 Oktober 2013)

Thomas_v2.1 schrieb:


> Snap7, eine Kommunikationsbibliothek für S7-Steuerungen
> http://snap7.sourceforge.net/



Sehr schön, dann gibt es neben libnodave noch mehr Auswahl.
Für unseren pvbrowser haben wir auch eine eigene Klasse
http://pvbrowser.org/pvbrowser/sf/manual/rllib/html/classrlSiemensTCP.html

Ich werde unsere Lösung und snap7 genauer miteinander vergleichen.
libnodave hat bei unserer Klasse übrigens auch Pate gestanden.
Also Ehre wem Ehre gebührt.


----------



## Jochen Kühner (21 Oktober 2013)

pvbrowser schrieb:


> Sehr schön, dann gibt es neben libnodave noch mehr Auswahl.
> Für unseren pvbrowser haben wir auch eine eigene Klasse
> http://pvbrowser.org/pvbrowser/sf/manual/rllib/html/classrlSiemensTCP.html
> 
> ...




Aus eurer Klasse:

s7_400  = {3,0,0,16,0x11,0xE0,0x00,0x00,0x00,0x01,0x00,0xC1,2,1  ,0  ,0xC2,2,1  ,3  ,0xC0,1,9} on S7_400 slot of cpu is always 3

der Slot ist doch nicht immer 3 bei einer 400er, oder?


----------



## JesperMP (21 Oktober 2013)

Jochen Kühner schrieb:


> der Slot ist doch nicht immer 3 bei einer 400er, oder?


Nein. Nicht immer.


----------



## pvbrowser (21 Oktober 2013)

Jochen Kühner schrieb:


> Aus eurer Klasse:
> s7_400  = {3,0,0,16,0x11,0xE0,0x00,0x00,0x00,0x01,0x00,0xC1,2,1  ,0  ,0xC2,2,1  ,3  ,0xC0,1,9} on S7_400 slot of cpu is always 3
> der Slot ist doch nicht immer 3 bei einer 400er, oder?



Nach meinem Wissen ja.
Aber ich bin kein Experte für Siemens SPS Hardware.

Nach dem RFC
http://www.ietf.org/rfc/rfc0905.txt
liegt dieser "connection_block" (connection request) für iso_on_tcp aber fest.
Lediglich die 2x2Byte für die beiden TSAP werden von Siemens nach Ihrer Konvention vergeben.

Das ist jetzt auch im unserem Quelltext vermerkt.
Siehe
https://github.com/pvbrowser/pvb/blob/master/rllib/lib/rlsiemenstcp.cpp
ab Zeile 87

Ausserdem siehe
https://github.com/pvbrowser/pvb/blob/master/rllib/lib/rlsiemenstcp.h
ab Zeile 27


----------



## JesperMP (21 Oktober 2013)

Jochen Kühner schrieb:
			
		

> der Slot ist doch nicht immer 3 bei einer 400er, oder?





			
				pvbrowser schrieb:
			
		

> Nach meinem Wissen ja.



Bestimmt nein.
Es gibt einzel-breite, doppel-breite, und trippel-breite PSUs. Davon wird den CPU in slot 2, 3 oder 4 plaziert. Ich glaube auch das mit "multi-computing" gibt es noch mehrere Möglichkeiten.

edit: Mehr korrekt: Die meisten plazieren PSU und CPU neben einander. Aber bei S7-400 muss das nicht so sein. Man kann der CPU beliebig in irgendeinder slot plazieren.


----------



## Rainer Hönle (21 Oktober 2013)

Da hat Jesper recht. Und die richtigen Slotnummer kann man der Hardwarekonfig entnehmen.


----------



## Jochen Kühner (21 Oktober 2013)

Da fällt mir noch was auf:

Die funktion getOrg liefert 29 für timer und 0x84 für zähler.

Bei libnodave sind es 29 und 28, wobei man für s200 dort 31 und 30 zurückgibt! Ich kann das für die 200er zwar nicht testen, denke es wird schon stimmen, das sollte in pvbrowser dann auch noch rein , oder?


----------



## Rainer Hönle (21 Oktober 2013)

Da hat Jochen recht. 0x84 für Zähler ist definitiv verkehrt, hier muss es 28 und 29 sein. Bei der 200er stimmen 30 und 31, allerdings ist der andere Aufbau der Zeiten und Zähler bei der 200er zu beachten.


----------



## pvbrowser (22 Oktober 2013)

Danke,
bei dem getOrg Zähler stand auch noch "not tested".


```
Also das hatten wir in dem Switch in getOrg() drin.
 case ORG_DB:   ret = 0x84;  break;    //[10] Datenbaustein
 case ORG_M:    ret = 0x83;  break;    //[10] Merker
 case ORG_E:    ret = 0x81;  break;    //[10] Eingang
 case ORG_A:    ret = 0x82;  break;    //[10] Ausgang
 case ORG_PEPA: ret = 0x80;  break;    //[10] Peripheral Area R/W [tested by VSA]
 case ORG_Z:    ret = 0x84;  break;    //[10] not tested
 case ORG_T:    ret = 29;    break;    //[10] Timer

Wenn ich euch richtig verstehe, muss das jetzt so aussehen,
damit das vollständig und richtig ist.
Könnt Ihr bitte kontrollieren?
 case ORG_DB:   ret = 0x84;  break;    //[10] Datenbaustein
 case ORG_M:    ret = 0x83;  break;    //[10] Merker
 case ORG_E:    ret = 0x81;  break;    //[10] Eingang
 case ORG_A:    ret = 0x82;  break;    //[10] Ausgang
 case ORG_PEPA: ret = 0x80;  break;    //[10] Peripheral Area R/W [tested by VSA]
 case ORG_Z:    ret = 28;
                if(plc_type==S7_200) ret = 30;    
                break;                 //[10] Zaehler
 case ORG_T:    ret = 29;
                if(plc_type==S7_200) ret = 31;
                break;                 //[10] Timer
```
 
Bei der S7_200 sollte dann eine Anmerkung in die Doku,
dass dort Zähler und Zeiten anders codiert sind.


----------



## sad1002 (3 März 2014)

Hello.
Exuse me. I don't speak/write german.
I tried to make C# project for download and upload blocks. 
I copied snap7.dll and use don.net wrapper.
Can anyone write an example of using download and upload methods or describe arguments?


----------



## sad1002 (4 März 2014)

and one more trouble: I'd got an exception about "dllnotFound", I tried to make registration for snap7.dll via regsvr32, but it hasn't work.


----------



## pvbrowser (12 Oktober 2014)

sad1002 schrieb:


> I'd got an exception about "dllnotFound"



copy the.dll c:\your\directory\

and it will be found.


----------



## Cliff (14 November 2014)

Moin, mal eine Frage:

Bei mir steht wieder einmal eine PC <-> S7 Kommunikation an (Programmiert in Delphi).
Bisher habe ich erfolgreich mit LibNoDave gearbeitet, würde aber auch gerne einmal Snap-7 probieren.
Hat schon jemand eine Anwendung damit im industriellen Umfeld programmiert und kann evtl. auch etwas über die Stabilität der Bibliothek sagen?
Im wesentlichen muss ich in unregelmässigen Abständen einen DB lesen und schreiben (Bedieneranforderung).

Gruss Cliff


----------



## Alute (27 Januar 2015)

*SPS Programmierung mit Snap7*

Hallo,

sieh dir doch mal folgende Seite an:

http://icon-software.de/Sps02.html

Dort findest du auch eine Demo zum downloaden wo die SPS-Überwachung eines Kühlhauses umgesetzt wurde.




Cliff schrieb:


> Moin, mal eine Frage:
> 
> Bei mir steht wieder einmal eine PC <-> S7 Kommunikation an (Programmiert in Delphi).
> Bisher habe ich erfolgreich mit LibNoDave gearbeitet, würde aber auch gerne einmal Snap-7 probieren.
> ...


----------



## Cliff (6 Februar 2015)

Hab meine Applikation mittlerweile hinbekommen. An einigen Stellen war die Doku doch etwas mau (Interface zu Delphi), aber in den Griff zu kriegen.
Mal schauen wie sich Snap7 in der Praxis bewährt. Nächste Woche ist Inbetriebnahme beim Kunden.

Zur Info:
Beim Erzeugen, bzw. Beenden einer Snap7 Instanz bleibt immer ein Handle 'kleben' (Zumindest unter Delphi).
Ich habe mittlerweile eine bereinigte Snap7.dll vom Entwickler bekommen. Die ist noch nicht im derzeitigen Release...

Gruss Cliff


----------



## sad1002 (6 Februar 2015)

Hello Cliff,
I tried to use snap7 to read some from PLC 300 and 400 to MS SQL DB. Seems works good. But I catch some troubles with this library that time using C# wrapper... So I continued to use DotNetSiemensPLCToolBox library. Developer contacts well and helped me a lot to solve some question. So All my projects use DotNetSiemensPLCToolBox. I build multitask services to read values and write to DB once 500ms-1s. About 100 threads use only 16Mb RAM. My friend used my project to read up to 2000 parameters with the same mode.


----------



## Zippel (31 Mai 2015)

Hallo,
Ich habe unter Win7 (64 Bit) ein C# (Forms) Projekt mit Snap7 erstellt. Das Programm läuft soweit gut aber nur im Debugger. Wenn ich das veröffentliche Programm starte stürzt es ab. Das gleiche Problem habe ich auch mit dem Beispielprogramm (CSClient). Kennt jemand das Problem und kann mir helfen?


----------



## Thomas_v2.1 (31 Mai 2015)

Vielleicht hast du für deine verschiedenen Buildkonfigurationen Debug und Release unterschiedliche Plattformen (x86, ...) eingestellt.
Das würde ich zumindest mal überprüfen. Die Einstellungen findest du im Konfigurationsmanager (Menü "Erstellen").


----------



## Zippel (31 Mai 2015)

Daran liegt es leider nicht stehen beide auf x86.


----------



## Cliff (1 Juni 2015)

Mal blöd gefragt (Bin kein c# Profi/ eher Delphianer):
Die Snap7 dll hast Du in das Build-, bzw. Release- Verzeichnis kopiert?


----------



## Jochen Kühner (1 Juni 2015)

Zippel schrieb:


> Hallo,
> Ich habe unter Win7 (64 Bit) ein C# (Forms) Projekt mit Snap7 erstellt. Das Programm läuft soweit gut aber nur im Debugger. Wenn ich das veröffentliche Programm starte stürzt es ab. Das gleiche Problem habe ich auch mit dem Beispielprogramm (CSClient). Kennt jemand das Problem und kann mir helfen?



Die Frage ist ja auch mit welchem Fehler stürzt es ab? Wenn es keine Meldung gibt, kannst du auch in der Ereignisanzeige (Systemsteuerung/Verwaltung) nach Informationen schauen!


----------



## Zippel (4 Juni 2015)

Die .dll habe ich ins Ausgabeverzeichnis kopiert. Habe sie mittlerweile mal im Ordner System32 kopiert. Nachdem konnte ich das Projekt auf meinem Rechner Installiere, aber nur auf meinem. Ich denke ich muss auf meiner Maschine registriere. Da habe ich noch Probleme mit.


----------



## Zippel (29 September 2015)

So hab mein Problem gelöst. Nach Installation von Visual Studio 2015 ging alles. Das Programm was ich geschrieben habe ist zur Video Überwachung. Als Video Quelle kann eine USB / Wlan oder die Integrierte Cam vom Laptop genommen werden. Auch eine Bildschirmaufnahme ist möglich. Die Aufnahme wird über die SPS gestartet. Die Kommunikation läuft über Snap7. Als Trigger Quelle können Merker, Ein/Ausgänge oder ein Bit im DB verwendet werden. Interessant an der Sache ist, dass im Programm ein Vor- und Nachtrigger eingestellt werden kann. Wer es testen möchte kann mich anschreiben. Es läuft unter Win7 64 Bit.

Gruß


----------



## mkRE (27 Oktober 2015)

Hallo Zippel,
ich habe mal eine Frage zu deinem Projekt was du erstellt hast.
Hast du die funktion auch an einer SIMPLC ausprobiert, sprich im TIA Portal die Simulation laufen lassen oder an einer echten SPS?

Gruß


----------



## Zippel (2 November 2015)

Nur an einer S7-400


----------



## mkRE (2 November 2015)

Hallo Zippel danke für die Antwort.
Hab es vergangene Woche geschafft eine eigene Applikation mit Snap7 zu realisieren.Musste jedoch eine reale S7 ausprovieren da klappte es sofort.PLC sim geht wie schon paar mal von euch erwähnt nicht.schade.

Danke an alle.

Gesendet von meinem D5803 mit Tapatalk


----------



## Canopus231171 (13 Januar 2019)

*Variablen auf Monitor TFT darstellen*

Hallo,

ich muss irgendwie Daten auf einem Monitor darstellen mit Hilfe von Visual Studio. Der OPC UA Server ist in der CP1500 bereits eingerichtet und der OPC UA Client hat bereits eine Verbuindung zur PLC 1500 und kann auch die Werte entsprechend sehen.

Ich habe aber absolut kein Plan wie ich die Werte in Visual Studio einbinden muss um mir diese anzeigen zu lassen. 
Die Anzeige soll auf einem blauen Hintergrund dargestellt werden. Was benötige ich dazu noch alles?? 

Server ist in der PLC eingerichtet, der UA Client hat bereits Verbindung und Visualstudio 15 ist installiert.








Thomas_v2.1 schrieb:


> Hi,
> ich habe doch heute durch Zufall im Internet ein wirkliches Goldstück entdeckt:
> 
> Snap7, eine Kommunikationsbibliothek für S7-Steuerungen
> ...


----------



## andy_l (14 Januar 2019)

Hast Du vor, über OPC zu gehen oder die zitierte SNAP7 Komponente zu verwenden.
Mal abgesehen davon ist es wahrscheinlich für den Aufbau der Datenverbindung relativ unerheblich, ob die Werte dann auf blauem Hintergrund dargestellt werden sollen.

Hast Du Programmiererfahrung in Visual Studio? Das ist wichtig, damit man weiss, wie weit man ausholen muss, um Dir zu erklären wie Du die Werte von A nach B bekommst.


----------



## rhaeu (11 September 2019)

Hallo zusammen,
ich weiss nicht ob ich hier richtig bin. Ich möchte auf einem Raspberry PI 3B Snap7 mit c++ verwenden um auf eine S7-1200 zuzugreifen.
Gibt es ein Tutorial wie man Snap7 mit C++ auf einem Paspberry PI 3B installiert ? Finde ausschließlich Tutorials für Phyton.

Auf Tips würder ich mich freuen.


----------

