# SPS-Neuling und Kommunikation zwischen PC und S7 1200 per Ethernet



## Deep Thought (4 September 2012)

Hallo zusammen, ich bin hier der neue.
Als (leider) ziemlicher SPS-Anfänger stehe ich momentan vor dem Problem, per Ethernet eine Zeichenkette vom PC an meine S7-1212-CPU schicken und dort verarbeiten zu müssen. Leider bin ich mit Rumprobieren und eigenständiger Suche im Internet und in diesem Forum nicht wirklich weit gekommen, weshalb ich nun hier um Denkanstöße oder Litareturhinweise bitten möchte. Dass ich keine fertige Lösung erwarte ist klar, aber ich weiß momentan nichtmal, in welche Richtung ich suchen muss.

Ich habe bereits den Baustein TRCV_C im TIA V11 gefunden, der ja scheinbar für die offene Kommunikation über Ethernet verwendbar sein sollte, aber alle Hinweise die ich dazu im Netz finden konnte, bezogen sich auf die Kommunikation von SPSen untereinander, nicht mit einem PC und ich habe es auch nicht geschafft, dies entsprechend abzuändern.

Vielen Dank schonmal fürs Durchlesen bis hierhin und vielleicht möchte (und kann!) mir ja jemand helfen.

Viele Grüße, Christian


----------



## Thomas_v2.1 (4 September 2012)

Den TRCV_C hatte ich noch nicht im Einsatz.

Die andere Vorgehensweise ist mit den Bausteinen TCON und TRCV. TCON ist für den Aufbau der Verbindung (aktiv oder passiv) zuständig, TRCV für den Datenaustausch.

Als erstes ziehst du den TCON in den Programm und lässt dir automatisch einen Instanz DB erzeugen.
Wenn du den Baustein markierst gibt es im Feld Eigenschaften (wo sich das bei TIA öffnet weiß man nicht, musst einfach mal suchen), zumindest gibt es eine Eingabe für die Verbindungsparameter und die Bausteinparameter.
Unter den Verbindungsparametern stellst du die Verbindungsdaten ein. Dazu gehört die Partner IP-Adresse (als Partner kannst du unspezifiziert lassen) und die Portnummer über den du mit der SPS kommunizieren willst. Wenn du vom PC aus die Verbindung aufbauen möchtest, musst du auf der rechten Seite die Option für "aktiver Verbindungsaufbau" setzen. Dann wartet die SPS auf eine eingehende Verbindungsanfrage.

Den Eingang REQ kannst du direkt mit true beschalten.

Dann brauchst du den TRCV-Baustein. An den Parameter ID gibst du die gleiche Nummer wie am TCON Baustein an, am Parameter DATA gibst du deinen Datenbereich an in dem die Daten landen sollen.
Soll dein Telegramm meinetwegen 10 Zeichen lang sein, legst du in der SPS eine Variable vom Type array[0..9] of char an und parametrierst dieses an den Baustein.

Eigentlich sollte das schon reichen. Wenn du das in der SPS geladen hast kannst du dich über den eingestellten Port mit der SPS verbinden. Wenn du 10 Zeichen gesendet hast (und nur nach diesen 10 Zeichen) landen diese in dem Datenbaustein. Die Verbindung wird dann so lange offengehalten bis du sie vom PC aus trennst.
Auf die weiteren Probleme die sich bei der TCP Verbindung ergeben wirst du später noch stoßen ;-)


----------



## Deep Thought (6 September 2012)

Hallo Thomas,
vielen Dank schonmal für deine hilfreiche Antwort. Sie hat mich ein Stück weitergebracht, nach ein bisschen weiterem Gebastel scheint das Senden der Daten vom PC aus auch zu funktionieren. Nur ankommen tun sie leider nicht richtig. Ich musste allerdings den Verbindungsaufbau von der SPS initiieren lassen.
Im angefügten Screenshot sieht man, wie das Ganze momentan aussieht und dazu hab ich gleich mal ein paar konkrete Fragen:

1) Beim TCON-Status steht 7000, was übersetzt bedeutet: "Keine Auftragsbearbeitung aktiv". Nach meinem Verständnis müsste da nach erfolgtem Verbindungsaufbau "0000" stehen, oder?
2) Wie genau muss ich das Array of Char an den TRCV parametrieren? Das TIA schlägt immer "#Empfang[]" vor, das gibt aber einen Syntaxfehler. Alternativ kann ich bsp. "#Empfang[1]" schreiben, aber damit addressiere ich ja nur ein Element aus dem Array (??) - in dem spannender Weise sogar immer irgendwas drinzustehen scheint, was aber mit der gesendeten Nachricht nicht soooo sehr viel zu tun hat. Die einzige andere mir eingefallene Möglichkeit ist die im Screenshot gezeigte "#Empfang" - aber geht das so?
3) Der TRCV-Status behauptet, es würden Daten in den Empfangsbereich geschrieben - aber wie kann das gehen, wenn meine Vermutung stimmt und noch gar keine funktionierende Verbindung aufgebaut wurde (siehe 1.)? Auch bleibt der Wert an RCVD_LEN beharrlich auf 0...

Wohlgemerkt: ein Netwerkanalyse-tool zeigt mir, dass die Daten korrekt gesendet werden. Es scheint also irgendwas auf der Empfangsseite in der SPS noch nicht zu stimmen.
Für Hinweise die zur Ergreifung des Fehlers führen wäre ich sehr dankbar 

Viele Grüße,
Christian


----------



## Sinix (6 September 2012)

1) Deine Verbindung steht nicht, am TCON müsste DONE==1 sein!
2) Zieh doch mal das erste array-Element per Drag and Drop
3) Als status hast du einmal MW1(TCON) und MW2(TRCV), MB2 gehört hier zu beiden und wird 2x geschrieben!

MfG MK


----------



## Deep Thought (6 September 2012)

Danke Mäuseklavier!
Okay, aber warum steht die Verbindung nicht?
Hab alles so gemacht wie Thomas_v2.1 das beschrieben hat - und ich kann die SPS anpingen, sie antwortet ganz brav. Unser Netzwerkadmin meinte daraufhin, dass also aus Netzwerksicht alles stimmen sollte.

Drag & Drop werd ich morgen mal testen wenn ich wieder da bin, meine aber, das schon probiert zu haben.

Und was du zu 3) schreibst versteh ich leider nicht  
Die Variablen hab ich da nur, um überhaupt lesen zu können was da steht, ich verwende die ja gar nicht weiter. Von daher müsste es doch eigentlich egal sein, ob ich da zwei getrennte Variablen hab oder die dann vom TRCV wieder überschreiben lasse? Oder bin ich völlig auf dem Holzweg? Und was ist MB2? Sorry, bin echt noch sehr neu in der Materie...

Gibts vielleicht irgendwo sowas wie "S7 für Dummies" für mich zum Einstieg, dass ihr mir hier nicht die ganzen Grundlagen erklären müsst? Hab zwar schon ganz viel gegoogelt und hier im Forum gelesen, habe aber das Gefühl, dass mir da noch vieles fehlt...

Viele Grüße,
Christian


----------



## Thomas_v2.1 (6 September 2012)

Wenn du am Parameter LEN von TRCV den Wert 10 angegeben hast, werden die Daten erst in den Empfangsbereich eingetragen wenn 10 Zeichen empfangen wurden. Man sieht nicht welchen Datentyp deine Variable #Empfang besitzt, kann sein dass diese zu klein ist.

An den Parameter DATA von TRCV brauchst du einen entsprechend großen Empfangspuffer. Du kannst z.B. der Einfachheit halber einen Global-DB anlegen (Beispiel "DB_TRCV") in dem du eine Variable "data" vom Datentyp Array[0..99] of char anlegst.
Dann gibst du am Parameter DATA von TRCV die Variable "DB_TRCV".data an. Wenn nun 10 Zeichen vom Partner empfangen wurden, werden in data[0] bis data[9] die empfangenen Zeichen eingetragen. Sind die nächsten 10 Zeichen eingetroffen so werden diese Variablen wieder überschrieben.

Warum du nur von der SPS aus die Verbindung aufbaust kann man nur sagen wenn du mal die Verbindungsparametrierung am TCON zeigst.
Im von mir angehängten Screenshot ist eine passive Verbindung parametriert. Die SPS hat die IP 192.168.1.191, der PC der die Verbindung aktiv aufbaut hat die IP 192.168.1.10. Kommuniziert wird über Port 2000.


----------



## Deep Thought (6 September 2012)

Hi Thomas,
Die Variable #Empfang ist ein Array [0 .. 9] of Char - so wie Du es geschrieben hattest. Sollte also meinem Verständnis nach hinkommen mit LEN=10. Ich hatte es aber auch schon mit anderen Werten für LEN probiert, sowohl größer als auch kleiner als 10. Keine Änderung. Die Nachricht die ich sende sollte eigentlich 10 Zeichen haben.

Das mit dem globalen Datenbaustein werde ich morgen mal ausprobieren, danke für den Tip.

Wie ich der SPS sage, dass der PC die Verbindung aufbauen soll ist mir schon klar, dazu muss ich ja nur den Haken (bzw Punkt) auf der anderen Seite setzen. Das Problem ist eher, dass die Software, aus der die Zeichenkette abgeschickt werden soll (NeuroCheck 6.0) nur mit nichtssagenden Fehlermeldungen um sich wirft, sobald ich ihr sage, dass sie sich um den Verbindungsaufbau kümmern soll


----------



## Sinix (7 September 2012)

Thomas hat recht, mach doch mal ein größeres Empfangsarray und sende eine kürzere Nachricht.
Ich lege im übrigen den TCON.DONE auf den TRCV.EN_R -- > nur wenn Verbunden, dann auch Empfangsbereit.
NeuroCheck kenn ich nicht, ich nehme zum testen Hercules, hier TCP Server wählen,einfach Port eingeben und erstmal Listen drücken.

MfG MK


----------



## Deep Thought (7 September 2012)

Hallo ihr beiden,
ich hab jetzt mal versucht, alle eure Anregungen umzusetzen. Leider ohne Erfolg - es wird einfach keine Verbindung aufgebaut.
Verbindungsparameter sehen bei mir so aus wie im angefügten Screenshot gezeigt. sieht eigentlich genauso aus wie bei Thomas (andere IPs, aber das sollte ja kein Problem darstellen, solange sie zueinander passen?) - allerdings ist der nicht spezifizierte Partner bei mir gelb unterlegt und er zeigt den fehler bei den Verbindungsparametern an. Warum ist das bei Thomas anders?

Herkules tut übrigens auch nicht viel, nach Druck auf "Listen" sagt er zwar, dass er eine Verbindung aufgebaut hätte, aber die SPS behauptet halt was anderes. DONE ist nach wie vor auf False.
Und im Test-Mode sowie bei TCP-Client krieg ich immer "TCP connection timeout" - über die Windows-Eingabeaufforderung kann ich die SPS aber ohne Probleme anpingen...


----------



## Thomas_v2.1 (7 September 2012)

Deep Thought schrieb:


> Hallo ihr beiden,
> ich hab jetzt mal versucht, alle eure Anregungen umzusetzen. Leider ohne Erfolg - es wird einfach keine Verbindung aufgebaut.
> Verbindungsparameter sehen bei mir so aus wie im angefügten Screenshot gezeigt. sieht eigentlich genauso aus wie bei Thomas (andere IPs, aber das sollte ja kein Problem darstellen, solange sie zueinander passen?) - allerdings ist der nicht spezifizierte Partner bei mir gelb unterlegt und er zeigt den fehler bei den Verbindungsparametern an. Warum ist das bei Thomas anders?



Gelb ist nicht gut, und bei dir ist auch noch ein rotes Kreuz - irgendwas passt da also noch nicht.
Bei mir ist das TIA Portal auch einmal beim Anlegen der Verbindung abgeschmiert, aber bei dem Programm kommt das öfters mal vor.
Ansonsten kannst du evtl. eine PC-Station mit IE-Schnittstelle mit der entsprechenden IP-Adresse anlegen, und diese als Verbindungspartner auswählen.


----------



## Deep Thought (10 September 2012)

Ich hoffe ihr hattet ein schönes Wochenende!

Leider hat das mit der PC-Station auch nichts gebracht.
Aber mir ist aufgefallen, dass der Fehler in den Einstellungen vom TCON nur angezeigt wird, wenn ich mit dem TIA-Portal das Programm in der SPS beobachte. Sobald ich die Beobachtung wieder beende gibts auch keinen Fehler mehr. Vielleicht kann man da was draus ableiten?
Wenn ich die Verbindung mit Hercules beobachte (unter TCP-Server, "Listen"), sagt er mir ganz brav, dass die SPS connected hätte - TCON-Done ist aber nach wie vor auf false, Busy auf True und es wird der Status 7002 angezeigt - "Verbindung wird aufgebaut (REQ  irrelevant).". Da tut sich auch nix. Wenn ich im Hercules dagegen unter TCP-Client über IP und Port zu der SPS connecte, geht auch Busy auf false und der Status auf 7000 - "Keine Auftragsbearbeitung aktiv" - gibt also auch keine Verbindung.

Kann es sein, dass ich erst noch irgendeinen Treiber oder sonstiges installieren muss? Habe hier Windows 7 64Bit mit einer "normalen" Ethernet-Karte, TIA-Portal V11 SP2 Update2 ist installiert.
Ich glaube halt irgendwie nicht, dass der fehler wirklich in der SPS liegt - auf der PC-Seite kenne ich mich aber in Bezug auf Ethernet-Kommunikation auch nicht so wirklich gut aus 

Danke aber schonmal für die Hilfe bisher!


----------



## Thomas_v2.1 (10 September 2012)

Deep Thought schrieb:


> Aber mir ist aufgefallen, dass der Fehler in den Einstellungen vom TCON nur angezeigt wird, wenn ich mit dem TIA-Portal das Programm in der SPS beobachte. Sobald ich die Beobachtung wieder beende gibts auch keinen Fehler mehr. Vielleicht kann man da was draus ableiten?


Das ist ein TIA Phänomen. Wenn ich bei meiner 1200 online gehe ist erst bei beiden Stellen ein grüner Haken zu sehen. Klicke ich einmal in das Feld so habe ich ein rotes X, und das obwohl keine Änderungen gemacht wurden. Ich würde es erstmal nicht näher beachten.



Deep Thought schrieb:


> Wenn ich die Verbindung mit Hercules beobachte (unter TCP-Server, "Listen"), sagt er mir ganz brav, dass die SPS connected hätte - TCON-Done ist aber nach wie vor auf false, Busy auf True und es wird der Status 7002 angezeigt - "Verbindung wird aufgebaut (REQ  irrelevant).". Da tut sich auch nix. Wenn ich im Hercules dagegen unter TCP-Client über IP und Port zu der SPS connecte, geht auch Busy auf false und der Status auf 7000 - "Keine Auftragsbearbeitung aktiv" - gibt also auch keine Verbindung.
> 
> Kann es sein, dass ich erst noch irgendeinen Treiber oder sonstiges installieren muss? Habe hier Windows 7 64Bit mit einer "normalen" Ethernet-Karte, TIA-Portal V11 SP2 Update2 ist installiert.
> Ich glaube halt irgendwie nicht, dass der fehler wirklich in der SPS liegt - auf der PC-Seite kenne ich mich aber in Bezug auf Ethernet-Kommunikation auch nicht so wirklich gut aus



Wenn dein PC eine Verbindung annehmen soll, musst du dieses normalerweise in der Windows Firewall explizit freigeben.
Um hier einen Fehler auszuschließen würde ich erstmal die SPS die Verbindung annehmen lassen. Wie auf meinen Screenshots gezeigt funktioniert es so bei mir.
Folgender Bausteinstatus ist dann zu beobachten:
- Noch nie eine Verbindung aufgebaut: TCON Status 16#7002 und BUSY, TRCV Status 16#80C4 und ERROR
- Verbindung aufgebaut: TCON Status 16#7000, TRCV Status 16#7002 und BUSY
- Daten empfangen: TRCV Status kurzzeitig auf 16#7001
- Verbindung vom Client getrennt: TCON Status auf 16#7000, TRCV Status 15#80C4 und ERROR


----------



## Deep Thought (11 September 2012)

So, ich glaub das Problem ist tatsächlich gelöst. Habe das Programm mal so abgeändert, dass die Sps die empfangenen Daten einfach zurücksendet. Und siehe da: alles kommt wie geplant zurück. Und wenn ich mir mithilfe einer Beobachtungstabelle das Array anschaue steht auch genau das drin, was ich gesendet habe. War also alles irgendwie falscher Alarm und einfach nur eine Fehlfunktion vom TIA (das übrigens weiterhin stur behauptet, dass keine Verbindung vorhanden wäre, wenn ich beobachte...)

Vielen Dank euch beiden jedenfalls für euren Einsatz und die zahlreichen Tips!
Ich melde mich wieder, wenn ich beim Rest des Programms Schwierigkeiten habe


----------



## Crissu (10 Oktober 2012)

Hey, ich habe mit begeisterung diesen thread gelesen ^^ ich habe ein ganz ähnliches problem und ich habe noch eine Frage dazu..
Ich habe auch einen PC mit dem die S7-1200 über Ethernet kommunizieren soll..
Die  S7 soll mit einem festgelegten Protokoll antworten wenn sie von dem PC  gefragt wird und es sollen auch die Baud einstellungen geändert  werden, danach soll dann wieder ein Protokoll von der S7 gesendet werden.  Kann ich das auf die gleicheweise realisieren wie oben beschrieben,  wenn ja auf was muss ich achten, oder muss das völlig anders realisiert  werden?

Vielen Dank schon mal 
MfG


----------



## Thomas_v2.1 (10 Oktober 2012)

Crissu schrieb:


> Hey, ich habe mit begeisterung diesen thread gelesen ^^ ich habe ein ganz ähnliches problem und ich habe noch eine Frage dazu..
> Ich habe auch einen PC mit dem die S7-1200 über Ethernet kommunizieren soll..
> Die  S7 soll mit einem festgelegten Protokoll antworten wenn sie von dem PC  gefragt wird und es sollen auch die Baud einstellungen geändert  werden, danach soll dann wieder ein Protokoll von der S7 gesendet werden.  Kann ich das auf die gleicheweise realisieren wie oben beschrieben,  wenn ja auf was muss ich achten, oder muss das völlig anders realisiert  werden?



Vom Prinzip her kannst du das so machen wie hier beschrieben. Wenn von der SPS aus auch gesendet werden soll musst du noch den entsprechenden Baustein dafür aufrufen, und natürlich passend beschalten. Aber ich habe keine Ahnung was du mit "Baud einstellungen ändern" meinst, sowas gibt es bei TCP/IP nicht.

Auf der Siemens Internetseite gibt es auch ein fertiges Beispiel zur TCP-Kommunikation mit der S7-1200, einfach mal danach suchen.


----------



## lirumdarum (20 Oktober 2014)

*Kommunikation zwischen zwei S7 und SMA Webbox*

Moin moin,

ich studiere im 5 Semester Elektro- und Informationstechnik. Derzeit mache ich mein Praxissemester und habe folgende Aufgabe erhalten:
Ich soll zwei S7 1200 miteinander über Ethernet verbinden und Daten austauschen. Außderdem brauche ich noch Daten von  einer SMA Webbox. Im Forum habe ich bereits gelesen, dass man über  Modbus eine Kommunikation zwischen einer S7 und der Webbox realisieren  kann. Da sich die Webbox aber im selben Netzwerk befindet und eine feste  IP hat, müsste es ja eigentlich auch über die TCON und TRCV Bausteine  funktionieren oder?

Dann komme ich auch gleich zur zweiten Frage, die mich bezüglich der  Kommunikation beschäftigt. Kann ich diese Bausteine auch für die  Kommunikation zwischen den S7en nutzen?

Wie ihr sicherlich merkt habe ich leider noch keinerlei Erfahrungen bei  der Kommunikation zwischen zwei S7 bzw. mit anderen Geräten. Wäre euch  sehr dankbar wenn ihr mir helfen könnt!

(Ich verwende derzeit TIA V13, haben in der Fh bis jetzt nur Simatic Manager benutzt.)

Gruß lirumdarum


----------

