Prüfen ob eie serielle Verbindung besteht

Ich hab da mal eine ganz doofe Frage: Gibt es eine Möglichkeit den Arduino prüfen zu lassen ob (k)eine serielle Verbindung besteht. Ich hab’s mit if(!Serial.available()) probiert, aber irgendwie scheint das nicht zu funktionieren. Zumindest macht der Arduino noch Sachen, die er eigentlich nicht machen soll, wenn eine serielle Verbindung besteht und so kommen sich die Arduino-Software und die PC-Software ins Gehege.
Der Arduino kommuniziert mit einer PC-Software. Normalerweise übernimmt die PC-Software fast alle Aufgaben. Wenn der Arduino aber an den PC angeschlossen ist soll eine Schutzfunktion aktiv werden. Hier mal der Ausschnitt aus dem Sketch:

void loop()
{
    /// NUR FÜR DEBUG-ZWECKE
    //Debug();
    /// Schutz: Shunt soll angehen, auch ohne PC
    if(!Serial.available())
    {
      Read_Save();
      /// Shunt einschalten
      if( ( MAX_V * (float)Data.ID_V / pow(2.0, (float)AUFLOESUNG) ) > SHUNT_HIGH_V )
      {
        SHUNT_Set(true);
      }
      /// Shunt ausschalten
      else if( ( MAX_V * (float)Data.ID_V / pow(2.0, (float)AUFLOESUNG) ) < SHUNT_LOW_V )
      {
        SHUNT_Set(false);
      }
      else{}
    }
}

serial.available liefert die Anzahl der Zeichen im Empfangspuffer, nicht die Existenz einer seriellen Verbindung.
Damit Dein Ansatz eine Chance hatte evtl. zu funktionieren, müßte der PC pausenlos die serielle Schnittstelle zumüllen.
Das ist bestimmt nicht das, was Du willst.

Wenn, dann kann man sowas nach meiner Meinung nur realisieren, indem der Arduino eine Zahl an den PC sendet, der PC diese in bestimmter Weise bearbeitet (z.B. verdoppelt) und diese zurück sendet.
Kommt eine bestimmte Zeit keine Antwort oder eine falsche, ist keine Verbindung da.

Gruß Tommy

Gibt es eine Möglichkeit den Arduino prüfen zu lassen ob (k)eine serielle Verbindung besteht

Das ist überhaupt keine doofe Frage. Als Serielle Verbindungen das beste war, was man hatte, hat man sich viele Gedanken über Steuersignale gemacht, und war der Meinung, die 9 poligen Stecker für RS232 waren ziemlich knapp. (25 polige Stecker waren vorher Standard, aber etwas übertrieben, zugegeben)

Bei Arduinos ist von all den Steuersignalen, mit denen Sende- und Empfangsbereitschaft beider Seiten signalisiert werden können, nur DTR übriggeblieben, und wird verwendet, um den Arduino zu resetten.

Auf USB-Seriell - Chips sind oft noch andere Signale theoretisch vorhanden, aber selten auf Pins rausgeführt und es bleibt dir überlassen, dafür etwas zu erfinden.

Das Beste ist, wie schon erwähnt, regelmäßig ein Heartbeat-Zeichen zu übertragen. Alles andere ist kompliziert oder unsicher. Z.B. könnte es sein, dass die Tx Leitung zwar HIGH (IDLE) ist, aber trotzdem nichts Sendebereites angeschlossen ist.

Hallo,

in den Anfangszeiten der SPS Steuerungen wurden diese zuerst mittels TTY miteinander verbunden. Für diejenige die da nichts mit anfangen können , das ist eine 4 Draht 20mA Stromlinien Schnittstelle die in der Industrie eingestezt wurde. CTS DTR ging also nicht, die überwachen ja aber auch nur auf Hardware und nicht ob auch noch Daten kommen. Standard Protokkolle gabs auch noch nicht, die verwendeten Protokolle dazu lagen im Erfndungsreichtum der Softis. In der Regel wurden dann von einer SPS mit den Nutzdaten zusätzlich ein Bit im gesendet. Die zweite SPS hat das ausgewertet und dann wieder an eine andere Stelle zurück gesendet. Wenn das betreffende Bit nicht innerhalb einer bestimmten Zeit kam wurde in einem Not-Programdie Anlage weitergefahren oder eben auch geplant runter gefahren. (Watch-Dog)

Später gabs dann z.B von Siemens fertige Protokolle z.B 3964R , 3964R-BC die eine halbwegs gesichertes Protokoll hatten und bit´s in dem Kopfdaten zur Verfügung stellten mit denen man eine Kommunikation überwachen konnte.

Heinz

Ich hab da mal eine ganz doofe Frage: Gibt es eine Möglichkeit den Arduino prüfen zu lassen ob (k)eine serielle Verbindung besteht.

if(Serial) tue("Ja, Serielle Schnittstelle ist aktiv!");

Das geht auf allen Arduinos mit ATMega32U4 als Triebwerk.

Bei den anderen, mit SerialKonverter geht es nicht!
Da ist Serial==true immer.

In Wirklichkeit kann man nur über ein Protokoll feststellen/erzwingen, ob/dass die Gegenseite richtig spricht.
Das ist alternativlos.

Vielen lieben Dank für die Tipps. Inzwischen haben wir’s hinbekommen. Der PC und der Arduino kommunizieren ja sowieso (Arduino quasi als Slave). Wir lassen den Arduino jetzt in der Loop einfach prüfen, ob in den letzten x mS Kommunikation stattgefunden hat. Ist das nicht der Fall beginnt er selbstständig zu arbeiten. Das scheint ganz gut zu funktionieren.