Ethernet- Kommunikation zur SPS CPU314C-2PN/DP

Nabla Symbol

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

In meinem Projekt möchte ich gerne aus einem C Programm welches auf meinem Laptop läuft, Daten (float oder integer) über Ethernet an die SPS CPU314C-2PN/DP schicken. Ich hab in dem Forum schon vieles gelesen, unteranderem bin ich in einen Thread zu diesem Dokument gelangt: -> http://support.automation.siemens.c...objaction=csview&extranet=standard&viewreg=WW
Das ganze lässt sich ja schön lesen! Dort wird sich z.B. mit dem Baustein FB103 AB_Recv_TCP_xVar beschäftigt.

Mein Problem ist es, das ich die SPS noch nicht habe und noch nie laufende Prozess Daten an eine SPS geschickt habe. Bis jetzt habe ich die Hardware-Konfiguration zu dieser SPS auf einem PG vorgenommen. Dann habe ich versucht in NetPro die TCP Verbindung schon einmal einzurichten. Doch hier komme ich nicht weiter. So detailliert wie auf Seite 13 des Dokuments kann ich die Hardware nicht einrichten.
Meine Frage: Kann ich überhaupt meine gewünschte SPS CPU314C-2PN/DP für so ein TCP-Einsatzgebiet verwenden? Hätte jemand vllt. einen kleinen Tipp für mich?

Danke im Voraus! ;)
Grüße
Nabla
 
Hallo,
das Siemens Dokument das du da gefunden hat gilt für CPUs in Verbindung mit einem externen Ethernet CP.
Du hast aber eine PN-CPU, dort läuft das etwas anders ab - vor allem ist es etwas aufwändiger.
Der passende FAQ von Siemens wäre für dich:
http://support.automation.siemens.com/WW/view/de/32048373

Du musst dich vorher entscheiden ob die SPS passiv sein soll (TCP-Server) oder aktiv (TCP-Client).

Vielleicht wirfst du auch mal einen Blick auf die libnodave Bibliothek, denn wenn du das verwendest musst du in der SPS gar nichts parametrieren/programmieren. Außerdem sind dort schon entsprechende Konvertierungsfunktionen für die Bytedrehungen von Siemens auf PC Reihenfolge drin. Auf die Problematik wärst du bei deinem eigenen Programm irgendwann mal gestoßen ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas_v2.1

Danke für Ihre schnelle Antwort! Wie genau kann ich das mit SPS "aktiv" und "passiv" verstehen? Vllt. ein paar Infos zu meinem Projekt:
Ich möchte laufend neue Daten (Winkelstellungen) aus einem Programm, welches auf dem Computer simuliert wird, zur SPS schicken. An die SPS werden noch Winkelsensoren angeschlossen. Am schlausten, vor allem von der Rechenzeit, wäre es ja dann das die SPS (die die Werte vom PC über Ethernet und von den Winkelsensoren erhält) entscheidet ob Ausgänge (Motoren an/aus) geschaltet werden sollen.
Die libnodave Bibliothek wird wohl meine Wochenendbaustelle und hoffentlich den zeitlichen Rahmen nicht sprengen. : )

Grüße
Nabla
 
Wie genau kann ich das mit SPS "aktiv" und "passiv" verstehen?
Mit den Namen "aktiv" und "passiv" meine ich wer die Verbindung zum Partner aktiv aufbaut. Aktiv/passiv ist die Siemens Bezeichnung dafür, auf PC-Seite sagt man dann dazu eher TCP-Server (passiv) oder TCP-Client (aktiv). Wenn dein PC-Programm TCP-Client ist muss die SPS als TCP-Server programmiert werden.

Ich möchte laufend neue Daten (Winkelstellungen) aus einem Programm, welches auf dem Computer simuliert wird, zur SPS schicken. An die SPS werden noch Winkelsensoren angeschlossen. Am schlausten, vor allem von der Rechenzeit, wäre es ja dann das die SPS (die die Werte vom PC über Ethernet und von den Winkelsensoren erhält) entscheidet ob Ausgänge (Motoren an/aus) geschaltet werden sollen.
Die libnodave Bibliothek wird wohl meine Wochenendbaustelle und hoffentlich den zeitlichen Rahmen nicht sprengen. : )

Also wenn du noch nichts fertig programmiert hast und es keine Vorgaben bezüglich der Programmierung gibt, würde ich sagen dass du mit libnodave wesentlich schneller zu Ziel kommst weil du dabei die SPS-Seite garnicht beachten musst.
 
Hallo Thomas,

was heisst schneller zum Ziel kommen und SPS Seite muss nicht beachtet werden? Schreibe ich mit Libnodave nicht in einen z.B. Datenbaustein? Oder steuer ich direkt die Ausgänge an? Libnodave mit den Beispielen hab ich mir mal runtergeladen. Ich suche noch die Funktionen zum Lesen und Schreiben und wie das ganze mit Libnodave genau funktioniert. Ich bitte um Gedult - so schnell und fit bin ich in c programmieren jetzt auch nicht. : )

Gruß
Nabla
 
Zuviel Werbung?
-> Hier kostenlos registrieren
was heisst schneller zum Ziel kommen und SPS Seite muss nicht beachtet werden? Schreibe ich mit Libnodave nicht in einen z.B. Datenbaustein? Oder steuer ich direkt die Ausgänge an? Libnodave mit den Beispielen hab ich mir mal runtergeladen. Ich suche noch die Funktionen zum Lesen und Schreiben und wie das ganze mit Libnodave genau funktioniert. Ich bitte um Gedult - so schnell und fit bin ich in c programmieren jetzt auch nicht. : )

Du kannst mit libnodave überall hin schreiben und lesen, also Datenbausteine, Merkerbereiche, Eingänge, Ausgänge etc. Ich würde dir aber trotzdem empfehlen einen Schnittstellen Datenbaustein festzulegen auf den dein PC-Programm schreibt.
Bei dem unterlagerten Protokoll das libnodave nutzt werden die Anfragen vom Betriebssystem der SPS bearbeitet. Darum musst du in der SPS auch nichts programmieren. Den Datenbaustein auf den der PC schreibend oder lesend zugreifen soll musst du natürlich trotzdem anlegen.
Bei libnodave gibt es ein wenn auch etwas umfangreiches Beispiel in der Datei testISO_TCP.c

Ich will dir die reine TCP-Verbindung aber nicht ausreden. Nur wenn du mit den T-Bausteinen (T-CONN, T-SEND, ...) der PN-CPUs noch keine Erfahrung gemacht hast ist das Anfangs etwas verwirrend.
Und deine Socket Programmierung auf PC Seite hast du bei der reinen TCP-Verbindung und der Verbindung mit libnodave, du musst dich damit also eh beschäftigen.
 
Also die testiso_tcp habe ich mir mal angesehen. Wichtig für mich wären dann ja bestimmt die Funktionen daveRead und daveWrite. Dort würde ich dann Integer der größe von 0 bis 1800 übergeben. Die "T-Bausteine" bräuchte ich ja nicht mehr und schreibe direkt in einen Datenbaustein in die SPS. Gibt es vllt. noch ein paar kleinere Beispiele mit Libnodave und einer TCP IP Kommunikation? Ich verstehe noch nicht ganz, wie die SPS weiß, bzw wie ich die Daten schicken muss - damit die SPS den Befehl daveWriteBytes(........) versteht?
Vielen Dank aber für deine Hilfe!
 
Zurück
Oben