Micha: RS232 Schnittstelle schließen aber wie?

Hallo,

ich lese über eine JAVA Anwendung (auf einem WinXP-Rechner) einen Sensor aus, der an der an einem COM-Port hängt - hierfür habe ich eine DLL vom Hersteller. Ab und zu - für mich im Moment nicht reproduzierbar zumindest - hängt der Sensor und der Port wird nicht richtig geschlossen. Wenn das passiert, kann ich den Prozess nicht noch einmal starten, da der Port noch belegt ist.

Gibt es eine Möglichkeit, diesen COM-Port zB über die Konsole in WinXP "von Hand" zu schließen? Ich habe per Remotedesktop Zugriff auf den entsprechenden PC.

Mit freundlichem Gruß
Micha

--
simple JavaScript Spiele: Snake, MineSweeper, Sudoku oder Tetris
  1. Hi there,

    Gibt es eine Möglichkeit, diesen COM-Port zB über die Konsole in WinXP "von Hand" zu schließen? Ich habe per Remotedesktop Zugriff auf den entsprechenden PC.

    Mit der Konsole eher schwer; auf der Ebene wird die serielle Schnittstelle prinzipiell wie eine Datei angesprochen, das läßt aber Windows nicht zu; Du kannst beispielsweise mit echo xxx > com2 kein xxx nach com2 schicken; weil ja irgendein anderes Programm irgendetwas wichtiges gerade über die com2 transportieren könnte;) was Du aber machen könntest, irgendein Programm wie telix for windows oder ähnliches verwenden; das hatte wenn ich mich richtig erinnere die Option, eine beliebige serielle Schnittstelle zu initialisieren (vielleicht gehts auch mit hyperterm?)

    Auf der anderen Seite hilfts manchmal, zB die DTR-Leitung abwechselnd ein paarmal auf low und high zu setzen, das bringt die Schnittstelle gelegentlich wieder auf Vordermann;) - Geht halt nur, wenn Dein Zugriff mit der Hersteller-DLL wirklich low-level ist...

    1. Hallo Klawischnigg,

      Danke für Deine Hilfe.

      Auf der anderen Seite hilfts manchmal, zB die DTR-Leitung abwechselnd ein paarmal auf low und high zu setzen, das bringt die Schnittstelle gelegentlich wieder auf Vordermann;)

      Wo bzw. wie mach ich das; in den Anschlußeinstellungen im Gerätemanager? Das Öffnen, Abfragen und Schließen übernimmt bei dem Sensor diese DLL. Ich muss lediglich den Port, an dem das Teil häng, übergeben. Weitere Einstellungen kann ich da nicht mehr machen.

      Wenn ich über die JAVA commapi im Moment versucht, die Schnittstelle zu öffnen, bekomme ich die Fehlermeldung, dass diese von einer unbekannten Windowsanwendung gerade benutzt wird. Ich vermute mal, dass die DLL diese Anwendung ist. ;-)

      Mit freundlichem Gruß
      Micha

      --
      simple JavaScript Spiele: Snake, MineSweeper, Sudoku oder Tetris
      1. Hi there,

        »» Auf der anderen Seite hilfts manchmal, zB die DTR-Leitung abwechselnd ein paarmal auf low und high zu setzen, das bringt die Schnittstelle gelegentlich wieder auf Vordermann;)

        Wo bzw. wie mach ich das; in den Anschlußeinstellungen im Gerätemanager?

        Nein. Das müsstest Du etwas weiter 'runtergehen. Ohne spezielles Programm wird das nicht gehen. Ich dachte nur, daß Dein Programm auf dieser Ebene arbeiten kann. Auf der anderen Seite, wenn die Schnittstelle von Deinem Programm nicht mehr angesprochen werden kann, dann kannst Du auch keine Leitungen auf irgendeinen Wert setzen ;(

        Das Öffnen, Abfragen und Schließen übernimmt bei dem Sensor diese DLL. Ich muss lediglich den Port, an dem das Teil häng, übergeben. Weitere Einstellungen kann ich da nicht mehr machen.

        Eben. Dann geht damit gar nix mehr. Dann würd' ich es wirklich mit einem Schnittstellenprogramm wie telix versuchen; das ist zwar schon angestaubt, aber es funktioniert.

        Was natürlich passiert, wenn Dein Javaprogramm die Schnittstelle komplett sperrt und auch nicht wieder freigibt, wenn Du es beendest kann ich Dir nicht sagen. Vielleicht hilft es ja auch, wenn Du die Hersteller-DLL mit irgendeinem dafür geeigneten Programm aus dem Speicher schiesst; kann nämlich sein, daß die nach wie vor die Schnittstelle blockiert, auch wenn Dein Javaprogramm schon beendet ist.

        Leider kann's natürlich wirklich passieren, daß sich der COM-Port so aufhängt, daß erst ein Rechner-Reset oder Neustart das Problem behebt; in dem Fall müsstest Du einen Rechnerneustart per Fernwartung veranlassen können. (Nur drauf schauen, daß die Fernwartungssoftware beim Hochfahren wieder geladen wird...;)

        1. Hallo Klawischnigg,

          Du liegst schon richtig. Die JAVA Anwendung kann bereits geschlossen sein und trotzdem ist der Port noch belegt, weil er nicht richtig geschlossen wurde von der DLL. Wenn ich nun erneut die Anwendug starte, kann ich diesen natürlich nicht mehr öffnen (oder nachträglich schließen).

          Ich werde, da ich dann heute von hier aus wohl nicht mehr viel machen kann, Deine Vorschläge morgen mal ein wenig genauer ausprobieren am betrefflichen PC.

          Nochmals Danke!

          Mit freundlichem Gruß
          Micha

          --
          simple JavaScript Spiele: Snake, MineSweeper, Sudoku oder Tetris
    2. Hallo,

      Mit der Konsole eher schwer; auf der Ebene wird die serielle Schnittstelle prinzipiell wie eine Datei angesprochen,

      richtig.

      das läßt aber Windows nicht zu; Du kannst beispielsweise mit echo xxx > com2 kein xxx nach com2 schicken

      Ach was? Doch, normalerweise geht das genau so - es sei denn, ein anderer Prozess hat die Schnittstelle bereits geöffnet. Hier liegt ein kleiner Unterschied in der Behandlung von Character Devices gegenüber echten Dateien: Während Dateien auch im Shared Mode geöffnet werden können, teilt Windows ein Device immer exklusiv der Anwendung zu, die es öffnet.

      was Du aber machen könntest, irgendein Programm wie telix for windows oder ähnliches verwenden; das hatte wenn ich mich richtig erinnere die Option, eine beliebige serielle Schnittstelle zu initialisieren (vielleicht gehts auch mit hyperterm?)

      Das geht aber nicht, wenn ein anderes Programm die Schnittstelle noch belegt. Dann wird der Zugriff durch ein zweites Programm verweigert.

      Auf der anderen Seite hilfts manchmal, zB die DTR-Leitung abwechselnd ein paarmal auf low und high zu setzen, das bringt die Schnittstelle gelegentlich wieder auf Vordermann;)

      Und auch das geht nur, wenn das OS einer zweiten Anwendung schreibenden Zugriff auf die COM-Schnittstelle gewährt. Pech gehabt.

      So long,
       Martin

      --
      "So schnell waren wir noch nie am Unfallort", sagte der Polizist zu seinem Kollegen, als er einen Laternenmast gerammt hatte.
      1. Hi there,

        Ach was? Doch, normalerweise geht das genau so - es sei denn, ein anderer Prozess hat die Schnittstelle bereits geöffnet. Hier liegt ein kleiner Unterschied in der Behandlung von Character Devices gegenüber echten Dateien: Während Dateien auch im Shared Mode geöffnet werden können, teilt Windows ein Device immer exklusiv der Anwendung zu, die es öffnet.

        Du hast natürlich recht - ich weiss nur, daß das früher funktioniert hat, haben wir auch oft genug gebraucht und auch gemacht, mir ist nur aufgefallen, daß es unter XP nicht mehr funktioniert - was aber, bei näherer und genauerer Betrachtung einfach daran liegt, (wie eine interne Recherche auf meinen Windows-Rechnern ergeben hat), daß da gar keine serielle Schnittstelle mehr eingebaut ist;))

        Und auch das geht nur, wenn das OS einer zweiten Anwendung schreibenden Zugriff auf die COM-Schnittstelle gewährt. Pech gehabt.

        Ja eh, das dürfte sein Hauptproblem sein...