Snap7 - S7-Kommunikationsbibliothek

Beiträge
9.189
Reaktionspunkte
2.934
Zuviel Werbung?
-> Hier kostenlos registrieren
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!
 
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 .....
 
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!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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.


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?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
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.
 
Danke,
bei dem getOrg Zähler stand auch noch "not tested".

Code:
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.


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
 
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
 
Zurück
Oben