TIA Ethernetkommunikation zwischen S7-1200 und Linux PC

kami

Level-1
Beiträge
103
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich möchte gerne eine UDP oder TCP Kommunikation zwischen meiner S7-1200 mit TIA v13 und einem Linux Rechner erstellen. Auf der Linux Rechnerseite habe ich keine Probleme die Daten zu empfangen.
Im ersten Step soll die S7 nämlich nur Meldung an den Rechner senden. Dafür würde ich gerne mal ein Beispielprojekt sehen. Hat einer was gutes dafür auf Lager?

Vielen Dank.

Gruß kami
 
Auf der Linux Rechnerseite habe ich keine Probleme die Daten zu empfangen.

Wie empfängst du die daten, wenn es kein Problem ist?
Ich denke du brauchst ein Programm, das dir hilft Daten überhaupt von der PLC zu empfangen.
Da gibt es von Zottel die libnodave Bibliothek, die auch unter Linux funktioniert.
Da gibt es hier verschiedene Threads in denen über Anbindung mit Java oder #C so etwas realisiert wurde.
Leider weiß ich nicht ob es mit 1200er funktioniert
Mit Lazarus/fpc und Linux und CPU 315 funktioniert das bei mir.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe letztens mal eine kleine Anleitung für jemanden geschrieben, mit kleinen Beispielen in python.
Alles ohne Fehlerbehandlung. Es zeigt nur wie so etwas grundsätzlich aufzusetzen ist.

Im Beispiel ist die SPS passiv, das lässt sich aber relativ einfach umstellen.

Anhang anzeigen S71200-TconPassive-Demo-TIA-V11-2.pdf
 
hi,

sorry habe mich etwas unklar ausgedruckt. Also auf der Linux Seite habe ich ein Perl Skript laufen und kann TCP oder UDP Meldungen anzeigen. Da brauche ich erstmal keine weitere Hilfe. Aber auf der SPS seite weiß ich halt nicht, wie ich Daten verschicken soll. Das Tutorial ist shcon echt gut aber ich weiß noch nciht wie ich zum Beispiel den Teilnehmer im TCON-DB einstellen soll. Muss ich noch was unter Geräte & Netzwerk konfigurieren. Will eigentlich nur die IP des Linux Rechners angeben und da erstmal Daten hinschicken im nächsten Step soll die SPS natürlich auch auf Commandos vom Rechner reagieren. Einer ne Idee oder ein Projekt wie ich das am besten umsetze?

Gruß kami
 
Ich habe die Screenshots mit der V11 gemacht. Dort hat es ausgereicht, nur im TCON-Instanz-DB die Verbindungsdaten einzutragen, ohne einen Partner zu spezifizieren oder eine Station in Geräte und Netze anzulegen.

In meinem Beispiel reagiert die SPS schon auf eingehende Daten. Sind die ersten beiden empfangenen Zeichen "h" und "e", wird der Inhalt von "SendData".data an den Partner geschickt.
Das lässt sich beliebig erweitern. Ich würde bei den Daten in Sende- und Empfangsrichtung eine feste Datenlänge vorsehen. Ansonsten ist es aufwändiger eine saubere Kommunikation hinzubekommen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich brauche auch eine TCP/IP kommunikation zwischen S7-1200 TIA V13 und Linux . Und ich bekomm das überhaupt nicht hin..Sorry, bin echt ein newbie .:roll:
Zum testen habe ich erstmal nur einen Laptop auf dem "Hercules" und TIA läuft.

PING geht
In dem Tia Projekt ist der TRCV_ baustein folgend konfiguriert
trcv_c_parameter.jpg

Wenn"cont" auf 1 gesetzt wird --> dann ist der status 7001 ( Wartet auf Auftrag) und trcv_c Ausgang "busy" ist 1
Mit HERCULES ( Vom Laptop) funktioniert connect. Die Verbindung wird aber sofort wieder geschlossen laut der Hercules SW?

trcv_c_7001.png
Wenn "CONT" auf 0 gesetzt wird bekomme ich status 7000 ( not active) und TRCV_C Ausgang Busy ist 0. Dann kann Hercules auch keine Verbindung aufbauen.

Mein erstes Problem ist also die Verbindung aufrecht zu erhalten. Hat da jemand eine Idee
Das nächste Problem wird dann bestimmt etwas an die 1200 zu senden...
 
Obs daran liegt weiß ich nicht, aber ich würde als erstes die Parameter LEN und DATA zueinander passend machen. An DATA hast du nur ein Merkerwort, d.h. passend dazu wären 2 Bytes an LEN anzugeben. Oder du legst dir gleich ein entsprechend großes Char-Array in einem Datenbaustein an, dann kannst du auch besser die empfangenen Zeichen beobachten.

Der Fehler mit LEN/DATA sollte aber an ERROR und STATUS angezeigt werden. Am Besten sicherst du dir den Wert von STATUS mit einer steigenden Flanke an ERROR in eine weitere Variable (DB oder Merker), deren Wert du dir dann später ansehen kannst.
 
Hey danke Thomas_v2.1 . Ein DB mit Char-array 0-6 am Data eingang vom TRCV_C hat geholfen.
Die daten die Hercules sendet werden im Char-array abgelegt und die Verbindung bleibt bestehen :s12:.
Ich hatte zuvor ein MW am Data und LEN auf 2 gestellt das ging aber nicht.:confused:

Für mein nächstes Problem werde ich jetzt erstmal im forum suchen.
In dem Projekt ist ein HMI kp300 das parallel zu dem UNIX rechner ( die gleichen) Daten mit der cpu1200 austauschen soll. Im Prinzip ist der Unix rechner ein klon vom HMI.
Vielleicht hat ja jemand einen link oder Schlagwort für mich...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie wäre es, wenn du den HMI-DB auf nicht optimiert stellst und dir die Daten einfach vom Linux selbst holen lässt?
(Libnodave oder andere derivate)

Vorteil: Du brauchst an dem TIA-Projekt sonst nichts mehr ändern...

MfG Fabsi
 
Libnodave etc. geht leider nicht weil der Kunde nichts "fremdes" auf seinem UNIX installieren will.
Frage:
Hercules sendet der CPU1200 6 char (abcdef) .
Im DB vom DATA eingang des TRCV_C habe ich bei datentyp String[8] eingetragen.
Im DB kommt dann abcd$00$00$00 ... an . Also irgendwie nur 4 char statt 6. Das passt überhaupt nicht zu dem was ich dazu in der doku zur cpu1200 gelesen habe.

data string.pngdata string TRCV_C.png
 
wave;647974 Im DB kommt dann abcd$00$00$00 ... an . Also irgendwie nur 4 char statt 6. Das passt überhaupt nicht zu dem was ich dazu in der doku zur cpu1200 gelesen habe. [/QUOTE schrieb:
Tja das leidige Thema mit den S7-Strings.
Bei einem S7-String sind die ersten 2 Byte Stringgröße und aktuelle Stringlänge.
Probiers mal mit einem Array of Char. Das ist bei der Kopplung zu den meisten Fremdsystemen meist schmerzfreier.

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und vor allem darauf achten, dass du immer genau die Anzahl an Bytes an die SPS versendest, die auch am Empfangsbaustein an LEN angegeben ist. Andernfalls kommt es zu einem Versatz der Daten in deinem Empfangs-Puffer. Es reicht schon einmal 5 oder 7 Zeichen zu schicken, und du bist nicht mehr synchron. 2 oder 4 Kopfbytes mit festen Werten die sonst wahrscheinlich nicht im Datenstrom vorkommen (z.B. 0xaa55) sind da wenigstens etwas hilfreich um das zu erkennen. Dann kannst du die Verbindung trennen und neu aufsetzen.

Alternativ musst du deinen TCP-Strom nochmal einpacken, z.B. in TPKT/COTP (Iso-On-TCP), und dann beim Senden und Empfangen vom PC aus ein- und auspacken.
 
Hallo Thomas, Danke . Mit Deiner Erkärung sollte ich das hinbekommen mit der Fehlerroutine.
Ich werde aber erstmal die Kommandos vom PC mit einem Char ( "A" "B" usw.) ausführen. Dann steht im fehlerfall auch was falsches im Data Baustein vom TRCV_C . Aber beim nächsten Kommando ist dann wieder alles OK.Das sollte fuer mein Projekt ausreichend sicher sein.
 
Bei der kommunikation zwischen Hercules und der Simatic 1200 mit tsend_C funktioniert Folgendes:


Ich kann mit Hercules einzelne Character ( A, B,C , ...) an die Simatics senden und entsprechend verarbeiten.




Das Beispiel

S71200-TconPassive-Demo-TIA-V11-2.pdf


https://www.sps-forum.de/attachment.php?attachmentid=26114&d=1415653468



von Thomas_v2.1 hat sehr geholfen. Danke.



Mit TSEND_C möchte ich das MW50 auf Anfrage vom Kommunikationspartner ( Hercules mit dem Befehl 'M') senden .

Aber da habe ich probleme..



Der Status vom TSEND_C ist immer 7001 was vermutlich heisst er wartet auf den kommunikationspartner... ( Hercules)





TSEND_C und TRCV_C sind gleich von den Konfigurationsparametern ausser:

- Beim TSEND_C ist port 2001 gesetzt. TRCV_C hat 2000. 2000 geht aber auch nicht beim TSEND_C



- Beim TSEND_C ist VerbindungsID 2 gesetzt. TRCV_C hat VerbindungsID 1




Hat jemand eine Idee was das Problem ist?
TSEND_C problem1.jpg
TSEND_C problem2.png

TSEND_C problem.jpg
 

Anhänge

  • TSEND_C problem.jpg
    TSEND_C problem.jpg
    43,5 KB · Aufrufe: 30
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt habe ich noch wireshark installiert. Aber ich sehe nichts von dem traffic zwischen Hercules( Laptop) und der simatic1200. ...
Wenn ich den Laptop ohne switch an die simatic anschliesse sehe ich auch nichts :confused::-(
Der WLAN traffic ist sichtbar..
 
So wie es in deinem Screenshot aussieht, hast du die SPS als passiven Partner konfiguriert.
Dann musst du Hercules als "TCP Client" zur SPS auf Port 2001 verbinden. Und der PC auf dem Hercules läuft, muss die IP Adresse besitzen die du bei der 1200 konfiguriert hast.
 
OK und Danke,
Hercules als "TCP Client" zur SPS auf Port 2001 verbinden hat geholfen :)
Jetzt ist der Tsend_C auf status 7004 = Verbindung aufgebaut.

Im Hercules "TCP Client" soll ja "Received und Send data" sichtbar sein.
Das funktioniert nicht.
Ich sehe nur die Char die ich mit Hercules an die Simatic sende. In der Simatic sehe ich auch das die Daten ankommen.

Ich würde gerne thomas_V2.1 Tipp
"Am Besten sicherst du dir den Wert von Tsend_C STATUS mit einer steigenden Flanke an ERROR in eine weitere Variable (DB oder Merker), deren Wert du dir dann später ansehen kannst."

Kann mir da jemand einen tip geben wie das am einfachsten funktioniert?

Ich habe erfolglos Move_BLK ausprobiert....
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie das mit dem Sichern des Status-Worts gehen könnte, siehst du in meinem pdf aus diesem Thread direkt auf Seite 1, Netzwerk 2.
Das kannst du prinzipiell so auch für die anderen T-Funktionen programmieren.

Du verwendest bei dir TSEND_C, das ist wenn ich mich recht entsinne eine kombinierte Funktion aus TCON und TSEND. Du rufst vorher aber auch TCON auf, wahrscheinlich haut das nicht hin. Ich würde entweder die Kombination TCON/TSEND/TRECV oder eben nur die kombinierten Funktionen ohne TCON verwenden. Wobei du dann mal nachlesen musst, ob du dann senden und empfangen kannst. Ich habe das bisher immer mit der 3er Kombination erledigt.
 
Hallo.
Frage:
Gibt es einen Unterschied zwischen Hercules/WIN7 (oder Hyperterminal) und einem entsprechenden TCP/IP programm auf einem UNIX-system?
Das Projekt soll final mit einem UNIX rechner als TCP client funktionieren und das geht nicht.

Dank eurer Unterstützung funktioniert folgendes :
Hercules sendet einen character " a" , "b" usw. an die simatic CPU1200 . Die werden im DB angezeigt. Alles gut.

Hercules und TIA sind auf dem selben WIN7 Laptop installiert.

Das TCP UNIX script zum Senden der character " a" , "b" usw. an die simatic ist laut Aussage des Kunden vielfach in Verwendung....
Keine Ahnung warum das nicht funktioniert?
 
Das TCP UNIX script zum Senden der character " a" , "b" usw. an die simatic ist laut Aussage des Kunden vielfach in Verwendung....
Keine Ahnung warum das nicht funktioniert?

Das soll dir der Kunde doch einfach mal ein anderes Projekt zukommen lassen.
Bei euch wird es sich ja nicht gerade um Uran-Zentrifugen handeln ;)

Gruß
Blockmove
 
Zurück
Oben