none
Befehle an SerialPort so lange senden bis Button die Schleife abbricht RRS feed

  • Frage

  • Hallo zusammen,

    ich bin gerade dabei einen Abrufbetrieb für eine Steuerung zu schreiben, wie Port geöffnet und initilisiert wird ist bekannt, auch das port.WriteLine.

    Was ich nun vorhabe, über den Port den Befehl zur Abfrage der Inkremente solange zu senden bis ich abbreche, gewünscht ist das ich an der Motorwelle drehe und die Ink im Label sehe.

    Das ganze Programm ist in WPF.

    Ich habe jetzt schon mit timern experimentiert, nur muss ich auch wieder  den ButtonSenden aktivieren damit das Label den aktuellen wert anzeigt...

    Danke für eure Hilfe...


    Dienstag, 3. Juni 2014 14:20

Antworten

  • Hallo,
    und wo liegt jetzt das Problem?

    Vereinfacht könntest du es so machen:

    DispatcherTimer timer = new DispatcherTimer();
    
    public MainWindow(){
      InitialisizeComponent();
      timer.Tick += timer_Tick;
      timer.Interval = TimeSpan.FromSeconds(2);//Alle 2 Sekunden auslösen
    }
    
    void btnStart_Click(object sender, RoutedEventArgs e){
      timer.Start();//Timer starten
      btnStart.IsEnabled =false;//Startbutton deaktivieren
      btnStop.IsEnabled =true;//Stopbutton aktivieren
    }
    
    void btnStop_Click(object sender, RoutedEventArgs e){
      timer.Stop();//Timer anhalten
      btnStart.IsEnabled =true;//Startbutton wieder aktivieren
      btnStop.IsEnabled =false;//Stopbutton wieder deaktivieren
    }
    
    void timer_Tick(object sender, EventArgs e){
      //Hier deine Daten senden und empfangen
    }

    Eine Schleife in einem Backgroundworker wäre vielleicht besser, falls es ein Timeout gibt - sodass sich die Tick-Events nicht überschneiden.

    Wenn du keinen DispatcherTimer nutzt, musst du über einen Dispatcher auf die GUI zugreifen, siehe hier.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Dienstag, 3. Juni 2014 14:36

Alle Antworten

  • Hallo,
    und wo liegt jetzt das Problem?

    Vereinfacht könntest du es so machen:

    DispatcherTimer timer = new DispatcherTimer();
    
    public MainWindow(){
      InitialisizeComponent();
      timer.Tick += timer_Tick;
      timer.Interval = TimeSpan.FromSeconds(2);//Alle 2 Sekunden auslösen
    }
    
    void btnStart_Click(object sender, RoutedEventArgs e){
      timer.Start();//Timer starten
      btnStart.IsEnabled =false;//Startbutton deaktivieren
      btnStop.IsEnabled =true;//Stopbutton aktivieren
    }
    
    void btnStop_Click(object sender, RoutedEventArgs e){
      timer.Stop();//Timer anhalten
      btnStart.IsEnabled =true;//Startbutton wieder aktivieren
      btnStop.IsEnabled =false;//Stopbutton wieder deaktivieren
    }
    
    void timer_Tick(object sender, EventArgs e){
      //Hier deine Daten senden und empfangen
    }

    Eine Schleife in einem Backgroundworker wäre vielleicht besser, falls es ein Timeout gibt - sodass sich die Tick-Events nicht überschneiden.

    Wenn du keinen DispatcherTimer nutzt, musst du über einen Dispatcher auf die GUI zugreifen, siehe hier.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Dienstag, 3. Juni 2014 14:36
  • Danke, ich sage nur Wald vor lauter Bäumen nicht gesehen...

    Die Befehle dich ich abfragen will, sind so an die 10Stk.

    Wie würdest du die versenden, für jeden eine separate Zeit, oder eine Schleife?

    Grüße

    Mittwoch, 4. Juni 2014 12:55
  • Hallo,
    ich würde wahrscheinlich eine Schleife verwenden, um Problemen bei Timeouts aus dem Weg zu gehen. Ich glaube allerdings, dass es mit dem DispatcherTimer auch keine Probleme gibt. Das Tick-Event wird nur ausgelöst, solange kein Eventhandler des voherigen Tick-Events noch läuft. Somit würde es auch bei einem Timeout keine Probleme geben, solange du bei einem Fehler dofort den Timer anhälst.

    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Mittwoch, 4. Juni 2014 13:48