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
}