ich möchte eine TCP Verbindung mit einer SPS zu dem Arduino aufbauen. Die SPS ist er Server und baut die Verbindung auf. Das Arduino ist der Client.
Das widerspricht sich. Wenn die SPS der Server sein soll, dann muss der Arduino die Verbindung zur SPS aufbauen. Wenn die SPS eine Verbindung zum Arduino aufbaut, ist gemäss Definition der Arduino der Server.
Ich möchte Eingänge, Ausgänge und Analogwerte vom Arduino zur SPS Senden. Weiterhin möchte ich Ausgänge auf dem Arduino mit der SPS steuern. So wie mit Bridge über Webserver.
Das ist ja grundsätzlich möglich. Erlaubt es Deine SPS denn, dafür jedes Mal eine neue TCP-Verbindung aufzubauen? Das wäre nämlich langfristig die stabilste Lösung, wenn auch nicht umwerfend ressourcenschonend im Netzwerk.
Hierzu hätte ich das Bridge Beispiel auf meine Bedürfnisse abgeändert. Mein Problem ist ein Verbindungsaufbau zur SPS und das das Arduino Yun die gesendeten Daten erhält.
Nein, er kriegt sie nicht einmal, sondern einmal pro Verbindung. Wenn Du das nicht willst, darfst Du nicht bei jedem Durchlauf von loop() eine neue Verbindung abwarten bzw. ein neues Client-Objekt kreieren.
Was müsste angepasst werden damit dies funktioniert ?
Die einfachste Möglichkeit ist, dass Du die Zeile
YunClient client = server.accept();
von loop() nach setup() verschiebst und die Deklaration global machst. Allerdings ist das nicht äusserst ausfalltolerant, denn ein kurzer Netwerk-Unterbruch würde einen manuellen Eingriff (Reset des Arduinos) erzwingen.
Da ich keine Ahnung habe, wie der Code auf SPS-Seite aussieht, bzw. welche Randbedingungen Du dort einhalten musst, kann ich Dir keine allgemeingültigen Ratschläge geben.
Wie gesagt: die stabilste Lösung erhälst Du, wenn Du für jeden Austausch von Daten von der SPS eine neue Verbindung auslöst. Dann musst Du auch nur wenig am Code (für den Yun) verändern. Allerdings wird Dir dann Dein UNO-Code nicht viel Freude bereiten, denn dort schliesst Du die Verbindungen nie und somit könnten sich Verbindungen ansammeln, das Ethernet-Shield kann aber nur 4 davon gleichzeitig bearbeiten.