Beispiel: Protokollkonfiguration im Ereignismodus

Ein Beispiel für eine im seriellen
Port
-Objekt enthaltene NetLogic, die den Ereignismodus für das Lesen von asynchron von einem Gerät gesendeten Daten verwendet. Mithilfe der mit dem Ereignis „Schaltfläche wird gedrückt“ verknüpften Methode
OnClick
können Sie den aktuellen Lesevorgang abbrechen und einen neuen starten.
Für die Verwendung des Ereignismodus müssen Sie die Eigenschaft
Timeout
auf
0
setzen. Auf diese Weise wird
ReadBytes
solange blockiert, solange die angeforderten Daten nicht an der seriellen Schnittstelle ankommen.
Den Lesevorgang können Sie mit der Methode
CancelRead
oder
Close
beenden. In beiden Fällen wird die Ausnahme
ReadCanceledException
generiert. Für ein sauberes Schließen der NetLogic müssen Sie alle ausstehenden Lesevorgänge durch Aufruf der Methode
Close
in der NetLogic
Stop
abbrechen.
Ein Beispielprojekt zum Herunterladen finden Sie unter SerialPortDemoEventMode.zip.
public class RuntimeNetlogic1 : BaseNetLogic { private SerialPort serialPort; private LongRunningTask task; public override void Start() { serialPort = (SerialPort)Owner; serialPort.Timeout = TimeSpan.FromMilliseconds(0.0); task = new LongRunningTask(Run, Owner); task.Start(); } [ExportMethod] public void OnClick() { // Cancel current read serialPort.CancelRead(); task.Cancel(); // Start new read task = new LongRunningTask(Run, Owner); task.Start(); } private void Run() { while(!task.IsCancellationRequested) { try { // Block until 3 bytes arrive on serial var result = serialPort.ReadBytes(3); foreach (var b in result) Log.Info(String.Format("0x{0:x2}", b)); } catch (ReadCanceledException ex) { // In case of read canceled, exit from the loop Log.Info(ex.Message); return; } catch (Exception e) { Log.Error(e.Message); } } } public override void Stop() { // Explicit call to Close to cancel pending read (if any) serialPort.Close(); task.Cancel(); } }
Rückmeldung geben
Haben Sie Fragen oder Feedback zu dieser Dokumentation? Bitte geben Sie hier Ihr Feedback ab.