RS232 setzt ab und zu aus...

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von EugenIS.

    RS232 setzt ab und zu aus...

    Hallo Leute und danke fürs Reinschauen.

    Kann mir jemand ein Tipp geben, was ich machen kann bei meinem Problem:

    Ich habe ein Hardwarekomponente, der jede 2 Sekunden einen Lebensbit schickt. Ab und zu kommt dieser dennoch nicht an. Ich weiß nicht so richtig wo ich suchen soll... Es ist ganz normale RS232 Schnittstelle natürlich simuliert per USB...

    Danke im Voraus.

    C#-Quellcode

    1. csComPort _csComPort = null;
    2. public csComPort csComPort
    3. {
    4. get
    5. {
    6. return _csComPort;
    7. }
    8. set
    9. {
    10. _csComPort = value;
    11. if (_csComPort != null)
    12. {
    13. _csComPort.csDataReceived += _csComPort_csDataReceived;
    14. tTime = DateTime.Now;
    15. DispatcherTimer.Start();
    16. }
    17. }
    18. }
    19. private DateTime tTime;
    20. private DispatcherTimer _DispatcherTimer = null;
    21. private DispatcherTimer DispatcherTimer
    22. {
    23. get
    24. {
    25. if (_DispatcherTimer == null)
    26. {
    27. _DispatcherTimer = new DispatcherTimer();
    28. _DispatcherTimer.Interval = new TimeSpan(0, 0, 1);
    29. _DispatcherTimer.Tick += _DispatcherTimer_Tick;
    30. }
    31. return _DispatcherTimer;
    32. }
    33. }
    34. private void _DispatcherTimer_Tick(object sender, EventArgs e)
    35. {
    36. try
    37. {
    38. if ((DateTime.Now - tTime).TotalSeconds > 20)
    39. {
    40. csGlobalHelper.ShowError(new ArgumentException("mC gibt keine Rückmeldung!"));
    41. DispatcherTimer.Stop();
    42. }
    43. }
    44. catch (Exception ex)
    45. {
    46. csGlobalHelper.ShowError(ex);
    47. }
    48. }
    49. private void _csComPort_csDataReceived(csComPort sender, string Data)
    50. {
    51. if (System.Windows.Application.Current.Dispatcher.CheckAccess())
    52. Refresh();
    53. else
    54. System.Windows.Application.Current.Dispatcher.BeginInvoke(upDelegate);
    55. }
    56. private delegate void UpDelegate();
    57. private UpDelegate _udDelegate;
    58. private UpDelegate upDelegate
    59. {
    60. get
    61. {
    62. if (_udDelegate == null)
    63. _udDelegate = new UpDelegate(() =>
    64. {
    65. Refresh();
    66. });
    67. return _udDelegate;
    68. }
    69. }
    70. private void Refresh()
    71. {
    72. try
    73. {
    74. tTime = DateTime.Now;
    75. txt.Text = string.Format("{0:HH:mm:ss}", tTime);
    76. }
    77. catch (Exception ex)
    78. {
    79. csGlobalHelper.ShowError(ex);
    80. }
    81. }
    @EugenIS Ist das WPF?
    Mit dem System.Windows.Application.Current.Dispatcher hab ich keine Erfahrung. Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn du das nie einsetzt, darf ich mich erkundigen wie du es hinbekommst, dass wenn etwas von einem anderen Prozess beschäftigt wird?

    Ich kenne nichts anderes. Wenn ein Event von dem RS232 ausgelöst wird, dann ist es ja etwas unvorhersehbares. Daher weiche ich so aus. Er startet einen neuen Prozess, der wartet bis der andere es frei gibt...
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!