2016-06-02 9 views
-1

Ich arbeite mit Biomic V3 mit Kommunikation über die serielle Schnittstelle und alles läuft gut, bis ich das EOT-Zeichen (Ende der Übertragung) sende. Ich benutze einen Hintergrundarbeiter, um den Schreibjob zu machen. Das Timeout des seriellen Ports tritt nicht auf und die Anwendung hängt.Timeout des seriellen Ports

Fluss Kommunikation:

Senden: enqueue Charakter

Empfangen: Bestätigungszeichen

senden: header

Empfangen: Bestätigungszeichen

Senden: Patient

Receive : Ackn owledge Charakter

Senden: Instrument, um

Empfangen: Bestätigungszeichen

Senden: Fußzeile

Empfangen: Bestätigungszeichen

Senden: Übertragungsendezeichen (Anwendung hängt)

Kann mir jemand mit diesem Problem helfen, weil mir die Ideen ausgegangen sind! Ich danke Ihnen im Voraus!

#region Static Variables 

    private static AutoResetEvent _SendWaitHandle = new AutoResetEvent(false); 

    #endregion 

    #region Member Variables 

    private object _Lock = new object(); 

    private BackgroundWorker _BackgroundWorker; 

    #endregion 

    #region Public Methods 

    public void Write() 
    { 
     Monitor.Enter(_Lock); 
     try 
     { 
      // Reset Handle 
      _SendWaitHandle.Reset(); 

      // Send Data Logic 

      // Wait for ACK 
      if (_SendWaitHandle.WaitOne(1000)) 
      { 
       // Send EOT 
      } 
      else 
      { 
       // Timeout Occurred 
       // Your Logic To Handle Timeout 
      } 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
     finally 
     { 
      Monitor.Exit(_Lock); 
     } 
    } 

    #endregion 

    #region Private Methods 

    private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     // When ACK is received call SET 
     _SendWaitHandle.Set(); 

    } 


    private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     write(); 
    } 

    #endregion 
} 

Antwort

-1

Erledigt es mich. Fügen Sie dem Handler für die serielle Schnittstelle einen Zeitgeber hinzu, um die Zeitüberschreitung zu vermeiden.