S7 MPI/DP - C++ Schnittstelle

mkRE

Level-1
Beiträge
199
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo leute ich habe eine Frage an euch und zwar suche ich nach einer Lösung bzw. vorschlägen was ich brauche um um eine Kummunikation für den Datenaustausch zwischen einem selbst erstellten C++ Programm (Borland C++ Builder 5.0) und einer S7 300er CPU via MPI oder DP Schnittstelle?

Ich habe gelesen das es diverse Anbieter gibt die Treiber für solch eine Kommunikation anbieten wie z.B. ComDrvS7 von MHJ.Alles schön und gut kosten alles aber auch schön.

Jetzt zu meinem vorhaben.Ich möchte mir solch einen Treiber selber erstellen bzw. eine .dll.
Oder eine Kostengünstige Variante finden mit guten Kommunikations Beispielen um das ganze kennen zulernen.

Hat einer gute Links oder Beispiele gute Tipps?

Danke an alle
 
...
Ich habe gelesen das es diverse Anbieter gibt die Treiber für solch eine Kommunikation anbieten wie z.B. ComDrvS7 von MHJ.Alles schön und gut kosten alles aber auch schön.

Hallo,

die Treiber diverser Hersteller kosten 300 bis 400 EUR. M.E. ein
überschaubarer Betrag, für den Du selbst nicht weit kommst
(wenn Du nicht gerade 200 Lizenzen benötigst).

Libnodave (Open Source) kennst Du dann ja sicher auch.

Was sind denn Deine Beweggründe, hier selbst einen Treiber
schreiben zu wollen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Libnodave ja davon habe ich gelesen ist das eine Kostengünstige Variante wenn nicht sogar freeware?

Wie wird das den im allgemeinen gehandhabt wenn das in der Praxis angewendet wird mit der erstellung eigener Software die mit einer S7 Kommunizieren soll??Was wird da so benutzt von diesen Schnittstellen Treibern?

Mein Ziel ist es Software zu basteln die mir Bits (aber auch ganze 32Bit Werte ausliest aus einer CPU oder auch umgekehrt erstmal für übungszwecke das ich in das ganze reinkomme und erfahrungen sammel).

Danach möchte ich mein Projekt welches ich vor kurzem abgeschlossen habe für das ganze nutzen und zwar eine Grafische Oberfläche die nur für das anzeigen von Störtexten (oder auch Ixbeliebigen Texten zuständig ist)
Diese Software Zeigt dem Anwender Texte an die er sich beliebig definiert Anstehende Meldungen kann er sich direkt auf der Festplatte Speichern bzw. beim Beenden werden diese Anstehenden Texte automatisch gespeichert.Momentan läuft das ganze über eine Ausgangskarte einer S7 CPU die mit einer Druckerschnittstelle angeschlossen ist.

Problem dabei ist ich hab nur höhstens 31 meldungen die ich definieren kann und ausserdem ist die LPT Schnittstelle veraltet.

Somit wollte ich die Variante kennenlernen die über diesen besagten Schnittstellen Treiber einiger Anbieter geht.

Das oben beschriebene ist halt ein Hobby Projekt welches ich als Alternative und Freeware erstellt habe.Wer halt nur Informationen als Laye aus der SPS erfahren will :)

Ich nehme gerne jeden Tipp und Kritik an :)
 
Daten SPS<->PC

Hi,
ja, die freie Bibliothek LibNoDave ist genau das, was du brauchst.
Das ist eine dll, die kann man in deinem Code anbinden, somit stehen in deinem Programm die LibNoDave.dll Funktionen zur Verfügung, z.B.:
- SPS Kommunikation initialisieren
- SPS Kommunikation aufbauen
- Daten lesen (ReadBytes oder ähnlich)
- Daten schreiben (WriteBytes..)
- SPS stoppen
- SPS trennen usw.

Die Verbindung PC-SPS kann sein: MPI Adapter, oder TCP/IP...

Gruss: V.
 
Hi,

wenn Du über TCP gehen kannst, dafür brauchst Du die Schnittstelle, kannst Du beliebige Daten in S7 sammeln und an einen beliebigen Netzwerkteilnehmer (PC) per TCP/IP oder UDP schicken und empfangen.
Beim Empfangen musst Du dings aufpassen: Entweder Du weist im vorhinein wie lange der Empfangsstring sein wird, oder Du machst halt immer eine feste Länge.
Weiterhin empfiehlt sich die Daten in String umzuwandeln, damit keine Sonderzeichen im Übertragungsstring sind.
PC-seitig ist eine Winscock-Verbindung aufzubauen, was mit Deinen Tools möglich sein sollte.

Gruß
S7_Programmer
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

wenn Du über TCP gehen kannst, dafür brauchst Du die Schnittstelle, kannst Du beliebige Daten in S7 sammeln und an einen beliebigen Netzwerkteilnehmer (PC) per TCP/IP oder UDP schicken und empfangen.
Beim Empfangen musst Du dings aufpassen: Entweder Du weist im vorhinein wie lange der Empfangsstring sein wird, oder Du machst halt immer eine feste Länge.
Weiterhin empfiehlt sich die Daten in String umzuwandeln, damit keine Sonderzeichen im Übertragungsstring sind.
PC-seitig ist eine Winscock-Verbindung aufzubauen, was mit Deinen Tools möglich sein sollte.

Gruß
S7_Programmer


Hi Programmer,

mich würde es interessieren, wie geht das genau, was ist SPS seitig zu programmieren, welche Bausteine? Was für Verbindung wird eingerichtet usw.? Danke im Voraus.

Gruss: V.
 
Hey Danke für die guten Tipps!!
Habt ihr evtl. einen guten Link wo ich alles finde??Ich hab zwar so eine Zip Datei heruntergeladen findet man haufenweise als Download diese LibNoDave nur in den Unterordnern finde ich nichts zu C++ wird es das richtige sein was ich so heruntergeladen habe??Ich arbeite mit dem Borland Builder 5.0.

Also so wie ich verstanden habe, kann ich MPI und TCP/IP verwenden als Kommunikation?!Das bedeutet filglich auch das ich auch über die DP Schnittstelle gehen kann??

Da meine S7 zu Hause nur MPI/DP versteht :) werde ich diesen weg versuchen.

Ich denke aber über TCP wirds man dann auch mal gebrauchen :)

Sind ihrgendwo gute Dokus zu diesem Thema zu finden?

Danach bekommt Ihr ein dickes Danke von mir :)
 
Hi,

ich versuch das mal mit einigen Stichpunkten das GettingStarted zu schildern:

Als erstes in S7Netpro eine neue TCP oder UDP Verbindung zu "unspezifizierten" Teilnehmer (PC) einrichten; Name vergeben, Wegwahl, Adressen, Port (ich nehm immer welche über 2000, auf PC und S7 den gleichen Port), aktiver Verbindungsaubau ankreuzen; Speichern, ins AG übertragen.

Als zweites im PC Winsock aufbauen, mit C# habe ich wenig am Hut, ich nahm PHP (Lizenzkostenfrei).

Wenn diese beiden Dinge erledigt sind, sollte schon die Verbindung stehen (Kommuniziert wird hier noch nichts!), die Verbindung kann man in Spezialdiagnose bei Netpro oder CP unter TCP-Verbindungen einsehen.
hier muss die Verbindung aufgebaut sein!

Dann kann man in der SPS mittels AG-Send einen beliebigen Speicherbereich senden (wie gesagt, ich nehme für Daten nur ASCII-Zeichen >=20H; dh. keine Steuerzeichen;: als Abschluß nehme ich die Zeichen CR(=13H)/LF(=10H)). Zahlen wandle ich vor Senden in String um; man könnte auch Zahlen in Hex-String umwandeln (man nimmt nur Ascii-Zeichen 0, 1 , ..9, A, B, C, D, E, F).
Senden aktivieren, und am PC sollten die Zeichen eintrudeln...; Falss es sich um Zahlen handelt wieder zurückwandeln:cool:. Zur Trennung verschiedener Variablen nehme ich das Gartenzaun-Zeichen (#). man kann dann im PC-Programm den Eingangsstring "exploden" (PHP).

Das ganze geht auch rückwärts; in der SPS steht hierfür der AG-Recv zur Verfügung (achtung Empfangslänge, die kann man jedoch PC-Seitig immer mit Space-Zeichen oder ählichem auffüllen, sodaß immer eine konstante Übertragungslänge zur Verfügung steht.
Ich hab' mir in der SPS jeweils einen "Implode"/"Explode" FC gemacht.

Ich hoffe, Euch hiermit weitergeholfen zu haben...


S7_Programmer
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke S7-Programmierer ich werde es so versuchen sobald ich ein Stündchen zeit habe.

Aber hast du eine Antwort zu meinen Fragen unten?

Evtl. hab ich auch was falsch verstanden aber ich wollt eher mit einer Rs232 -> MPI/DP oder USB -> MPI/DP arbeiten ist das unter LibNoDave
möglich?

Ich hoffe sobald ich was zu lesen habe erklärt sich alles von selbt :)

Habt ihr evtl. einen guten Link wo ich alles finde??Ich hab zwar so eine Zip Datei heruntergeladen findet man haufenweise als Download diese LibNoDave nur in den Unterordnern finde ich nichts zu C++ wird es das richtige sein was ich so heruntergeladen habe??Ich arbeite mit dem Borland Builder 5.0.

Da meine S7 zu Hause nur MPI/DP versteht :smile: werde ich diesen weg versuchen.

Sind ihrgendwo gute Dokus zu diesem Thema zu finden?
 
LibNoDave

Hi,

die Bibliothek, da sind paar Beispiele im Download-zip. Wie du jetzt eine
dll anbindest in deinem Borland C++, das steht bestimmt woanders..

Ja, mit der Bibliothek ist es möglich, mittels ser.MPI Adapter mit der SPS
zu kommunizieren.

Gruss: V.
 
Ok mit der einbindung beim Borland Builder werd ich schon klarkommen.
Ich guck mal das ich solch eine Kommunikation hinbekomme.

Falls Ihr noch weitere Tipps, Links, Beispiele oder Anmerkungen habt schreibt mir bitte ich freu mich über jede Hilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

Ich wollte dir nur den einfachen Weg der Verbindung über TCP (Netzwerk) aufzeigen. Wenn Deine SPS allerdings "nur" MPI kann, brauchst Du auch am PC die entsprechende Hardware, das kann eine CP56.., oder ein telesevice-Adapter, oder oder sein.
Wenn Du Variablen über MPI lesen/schreiben willst, brauchst Du wahrscheinlich eine entsprechend Treiber/Biliothenken wie Libnodave oder so. Ich habe schon mal den IBH-Link benutzt, das Teil stecktst Du auf die MPI-Schnittstelle und die "Mpi-Signale" laufen über TCP. Hier gibt es auch (Demo-)Bibliotheken, um S7-Variablen zu bearbeiten.

Auch diese Sachen kosten Geld... Überlege es Dir nochmal, ob Du das Geld nicht in eine CP343Lean investierst, und dann Verbindungen zu einem beliebigen PC über Netzwerk aufbauen kannst.

Einen Tod wirst Du sterben müssen, Kommunikation von S7-300/400 zu PC wird's wohl nicht ganz umsonst geben:rolleyes: (ausser die Ethernet-Schnittstelle ist on Board).


Schönen Tag noch.

S7_Programmer
 
Sz-Programmierer ichhoffe du hast mich nicht falsch verstanden ich habe deine Antwort Positiv und mit freude angenommen das hat mir auch schon informationstechnisch sehr weitergeholfen!!!Ich habs mit der MPI/DP Anfrage halt erneut eingefügt weils bei mir Technisch noch nicht geht aber mit dem CP343Lean ist auch eine gute idee werd mal nebenbei schauen obs sowas günstig bei Ebay gibt :)

Was meinst du mit der CP56.. Karte genau??Ist das so eine MPI/DP Schnittstelle für den Standart PC?Ist doch so eine Karte die in den Power PGs integriert ist?!

Gibts sowas auch als Adapter für nen einfachen LapTop?Bestimmt?

Bei dem Treiber ComDrv von MHJ(Kostenabhängig) habe ich gelesen das dort ein einfacher RS232->MPI/DP Adapter funktioniert.Theoretisch müsste es doch auch mit LibNoDave gehen oder?
 
Hi,

ich hab mich verschrieben:eek:; es sollte heißen "CP 55..."
Also hier ganz genau:
Simatic Net Profibus CP5512 6GK1551-2AA00.
Ich benutze diese Karte/Adapter, wenn keine Möglichkeit besteht, eine S7-CPU über Netzwerk zu erreichen.

Mit Libnodave kann ich Dir nicht weiterhelfen, da ich noch nicht das Vergnügen damit hatte.


Servus (bayerischer Gruß),

S7_Programmer
 
Jetzt hab ich mir die Karte mal angeguckt kenn ich auch wusste bloss nicht wie die heißt da ich so einen RS232->MPI/DP Adapter benutze der ist auch ganz ok hab Ihn billig bei Ebay ersteigert :)
 
Kursangebot .NET und Libnodave

Hallo an alle im SPS Forum.

ich sehe im Forum immer wieder die Frage: wie kommt man von einem PC Programm an die Daten einer S7 heran und kann diese Daten darstellen, speichern, weiterverarbeiten.

Da ich mich seit Jahren mit diesen Fragen beschäftige, biete ich hier testweise an, das Wissen in einem Kurs auf dem modernsten Windows Stand: .NET 3.5, C# und WPF weiterzugeben. (Auf Basic und C++ gehe ich weiter unten ein)

Kursinhalt:

Tag 1.
Das Erstellen eines .NET / WPF Windows Programms mit der Entwicklungsumgebung Microsoft Visual Studio 2008 (90 Tage Testversion DVD im Preis der Kursunterlagen enthalten). Einführung in die Sprache XAML zur Beschreibung der Oberfläche und die Sprache C# für die Programmlogik.

Tag 2. Ausbau des Programms und die Trennung der Datenrepräsentation (Oberfläche) von der Programmlogik (SPS Ankopplung, Daten Verwaltung). Hierzu wird der Umgang mit Timern, Threads und Delegates erlernt. Als Oberflächen Elemente wird insbesondere mit den WPF Elementen Listview und Datagrid (a la Excel) gearbeitet.

Tag 3. Ankopplung an die S7 mit der Libnodave Library, Verwaltung und Speicherung der gelesenen Daten mit einer Open Source Excel Library (NPOI). Wenn Zeit und Interesse vorhanden, Umwandlung der Sourcen in Basic und C++ mit dem .NET Reflector möglich.

Tag 4. Option Vertiefung, Ankopplung an z.B. AGLink oder Lösung weiterer Fragen (Reflector, Obfuscator ...).

Am Ende des 3.Tages hat jeder Teilnehmer ein lauffähiges ausbaufähiges Programmgerüst, mit dem er den Profibus nach S7 Teilnehmern scannen und aus den S7 Datenbausteine lesen und schreiben kann. Die Daten werden angezeigt und periodisch in ein Excel File geschrieben. Dieses Programm dient dann als Basis für weitere Arbeit in der Firma daheim.

Kosten pro Teilnehmer 900 Euro + MWST für 3 Tage, weitere Tage nach Vereinbarung.

Lehrmaterial im Preis enthalten: Visual C# 2008. Buch von Frank Eller (Autor) m. CD-ROM (hunderte von weiteren Beispielen) u. DVD-ROM (Visual Studio 2008 als 90 Tage Testversion).

Der Teilnehmer bringt mit:

* S7 Programmier Wissen + Hardware sollte vorhanden sein und (möglichst) mitgebracht werden können. (2 SPS S7 habe ich in Reserve)

* Grundkenntnisse in einer aktuellen Computer Sprache (C++, C#, Java).
(Alternativ 1 Woche Grundkurs bei mir buchen)

Der Teilnehmer hat einen aktuellen Windows Laptop oder PC (XP SP2 + DVD)
(+ eine S7 mit MPI Adapter, wenn möglich)

Den Kurs würde ich ab 2 Teilnehmern (maximal 5!) durchführen.

Ort: Rhein Main / Raum Darmstadt oder bei Euch in der Firma.
Kontakt per PN oder an profisoftgmbh@t-online.de

Vom Beispielprogramm füge ich mal einen Screenshot an.
 

Anhänge

  • S7Ankopplung.JPG
    S7Ankopplung.JPG
    69,6 KB · Aufrufe: 39
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Falsche Rubrik, oder wie ??

Hallo RobiHerb,

ich denke mal, Deine Mitteilung in der Rubrik "Werbung und Produktneuheiten" ist ausreichend und sollte in den anderen Freds nicht unbedingt wiederholt werden. Danke ..

Gruß

Question_mark
 
Termin

Aktuell ist ein Kurs in der KW13/14 angedacht. Das ist die Woche vor oder nach Ostern. Ich versuche gerade meine Termine/Projekte mit denen der Interessenten unter einen Hut zu bekommen.

Als Ort ist das Rhein Main Gebiet Nähe Darmstadt geplant.
 
Zurück
Oben