Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: S7-300 über Ethernet mit Linux-Webserver mittels AG_SEND / AG_RECV verbinden

  1. #1
    Registriert seit
    30.08.2007
    Beiträge
    207
    Danke
    16
    Erhielt 22 Danke für 17 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich möchte auch mal die Kommunikation zwischen mehreren Stationen bei einer S7 mit anderen Geräten ausprobieren und lernen, wie das alles funktioniert und worauf man achten sollte.

    Ziel des privaten Projekts soll sein, dass ein kompletter DB in der S7-300 auf dem Computer "gespiegelt" wird.

    Da habe ich mir gedacht, dass ich meinen Linux-Webserver (mit PHP und mySQL) dafür verwenden kann.
    Auf der SPS-Seite kommt ein CP343-1 und eine CPU315 2-DP zum Einsatz.

    Da ich mich absolut nicht auskenne (Stand: siehe Post-Datum ), habe ich bereits einen Teil des Internets durchsucht und wurde teilweise fündig.
    Mein jetziges Ergebnis mit STEP7 v5.3 und NetPro sieht folgendermaßen aus:
    • in NetPro eine "Andere Station" erstellt
    • diese Station mit Industrial Ethernet vernetzt
    • MAC- sowie IP-Adresse und Subnetzmaske eingetragen
    • bei der CPU315 eine "Neue Verbindung" mit Verbindungstyp TCP/IP eingetragen
    • Bausteinparameter aufgeschrieben, Port auf 2000 bei beiden Partnern so gelassen
    • Konfiguration übersetzt, gespeichert und in die CPU geladen

    Als nächsts habe ich einen DB5 mit 10 Chars erstellt. Den benötigten FC5 (AG_SEND) habe ich aus der CP-Bibliothek kopiert.
    Im FC1, der zyklisch vom OB1 aufgerufen wird, rufe ich auch den FC5 auf. Die Bausteinparameter sowie den Datenbereich habe ich an den FC5 geschrieben, der an den Webserver mittels AG_SEND geschickt werden soll. Der Sendeauftrag wird jede Sekunde gestartet.

    Soweit, so gut. Jede Sekunde werden auch die 10 Chars vom CP343-1 gesendet (sehe es am Sendestatus), aber wie geht es jetzt weiter?
    Der Webserver muss doch dieses Paket weiterverarbeiten?! Nur wie?
    Muss ich eine Art AG_RECEIVE auf dem Webserver realisieren?

    Gruß,
    poppycock
    Mit einem Computer löst man die Probleme, die man ohne einen Computer nicht hätte.
    Zitieren Zitieren S7-300 über Ethernet mit Linux-Webserver mittels AG_SEND / AG_RECV verbinden  

  2. #2
    Avatar von poppycock
    poppycock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.08.2007
    Beiträge
    207
    Danke
    16
    Erhielt 22 Danke für 17 Beiträge

    Ausrufezeichen

    Im Thread "VIPA CPU 313SC Datenaustausch mit PC" wurde ich fündig:
    http://www.sps-forum.de/showthread.p...813#post234813
    http://www.sps-forum.de/showthread.p...967#post234967
    Mal sehen, was ich damit anstellen kann!

    Ansonsten: Bei Anregungen bitte weiterhin melden!
    Mit einem Computer löst man die Probleme, die man ohne einen Computer nicht hätte.
    Zitieren Zitieren Warum findet man immer erst eine Lösung, nachdem man bereits die Frage gestellt hat?  

  3. #3
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Schau dir am besten mal diesen Thread an: http://www.sps-forum.de/showthread.p...HP-Siemens-PLC
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Das...  

  4. #4
    Avatar von poppycock
    poppycock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.08.2007
    Beiträge
    207
    Danke
    16
    Erhielt 22 Danke für 17 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke, Jochen,

    das PHP-Script habe ich vor ein paar Tagen mit meinem Windows-Rechner und xampp getestet.
    Im Prinzip läuft die Sache ordentlich.
    Zum Auslesen von 1000 Byte habe ich eine Art ReadManyBytes programmiert (habe die aktuellste PHP-Version aus dem Thread) und erreichte eine Lesezeit von unter 200ms (mit Anzeige der Daten im Browser).
    So, natürlich sollen die 1000 Byte auch in einer Datenbank gespeichert werden.
    Also wurde kurzerhand eine mySQL-Datenbank samt Tabelle angelegt, als Engine wurde myISAM gewählt.
    InnoDB kann wohl nicht mit so vielen Daten umgehen. Konnte jedenfalls keine Tabelle mit dieser Engine erstellen.
    Mit Entsetzen musste ich aber feststellen, dass das Auslesen und Eintragen der Daten in die Tabelle mehr als 1,5 Sekunden dauerte.
    Als Notlösung probierte ich den Umweg über eine Textdatei, die ich dann in einem Rutsch in die Tabelle übertrug.
    Diesmal dauerte es über den Umweg kaum mehr als 400ms.
    Weil ich nicht weiß, warum das direkte Schreiben in die mySQL-Tabelle so lange dauerte und es nur über den Umweg mit der Textdatei schneller ging, wollte ich einen anderen Weg probieren und bin bei AG_SEND bzw. AG_RECV gelandet.
    Das funktioniert mittlerweise sehr gut! Leider ist aber dort die Datenmenge beschränkt, soweit ich weiß, oder?

    Das PHP-Script mit meinem ersten Datenbankversuch (direktes Schreiben des Wertes in die Tabelle) ist total rampuniert, aber es lief so ab:
    * $i = 0
    * Byte0 abfragen
    * bytes[$i] = $byte_aus_db
    * Byte0 in die Spalte Byte[$i] der SQL-Tabelle schreiben
    * $i += 1
    * Byte1 abfragen
    * bytes[$i] = $byte_aus_db
    * Byte1 in die Spalte Byte[$i] der SQL-Tabelle schreiben
    * Byte2 abfragen
    * u.s.w.

    Selbst wenn ich die 1000 Byte erstmal komplett in ein Array gespeichert habe und danach mit einer Schleife die Werte in die Tabelle schrieb, kam ich NIE unter 1,2 Sekunden.

    Tja, ansonsten habe ich nur noch das Schreiben der gesamten Textdatei in die Tabelle im aktuellen PHP-Script drin:
    $sql = "LOAD DATA LOCAL INFILE 'temp.txt' REPLACE INTO TABLE db300 FIELDS TERMINATED BY ';'";
    Damit dauert das Füllen der 1000 Spalten in einer Reihe kaum mehr als 400ms!
    Warum, weiß nur der Geier...

    Bitte nicht fragen, warum gerade 1000 Byte, es ist einfach so!

    Gruß,
    poppycock
    Mit einem Computer löst man die Probleme, die man ohne einen Computer nicht hätte.

Ähnliche Themen

  1. S7-LAN Adapter CP-MODE AG_SEND AG_RECV
    Von Anaconda55 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.03.2012, 21:53
  2. Probleme mit AG_SEND und AG_RECV
    Von -Melanie- im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 26.05.2011, 14:10
  3. Antworten: 14
    Letzter Beitrag: 16.03.2011, 07:01
  4. Antworten: 3
    Letzter Beitrag: 28.02.2011, 20:47
  5. Auswertung Statuswort von AG_SEND/AG_RECV
    Von Hardy81 im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 25.06.2008, 09:47

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •