Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Programm stürzt ab und sperrt Comport (USB-RS232) (https://www.delphipraxis.net/189207-programm-stuerzt-ab-und-sperrt-comport-usb-rs232.html)

Maja Jessica 17. Mai 2016 20:36

Programm stürzt ab und sperrt Comport (USB-RS232)
 
Hallo zusammen,

habe ein kleines Programm geschrieben, welches über einen Prolific USB/RS232-Wandler
serielle Daten empfängt.
In der IDE alles ok, funktioniert. Kann öfter starten und beenden, alles gut.
Auch nach dem Beenden des selbst erstellten Programm, kann ich mit anderen Terminalprogrammen auf die Schnittstelle zugreifen.

Starte ich aber das erstellte exe-file, meldet sich Windows mit einem erzwungenen Neustart,
wobei er die Ser2pl64.sys anmeckert.
Danach ist, auch nach einem kompletten Aus-Ein des PC, die RS232 nicht mehr ansprechbar.
D.h. starte ich nach dem Neustart ein Teminalprogramm (HTerm, Putty oder anderes), meldet mir das Terminalprogramm
'COM6 ist blocked by another application'. Ob wohl im Taskmanager nichts zu finden ist, was
auf die Schnittstelle zugreift. Im Gerätemanager erscheint der Comport so wie immer, ohne Fehler.
Irgendwie sperrt mir irgendwo wer (das Programm? Lazarus? Windows?) den Comport.

Windows 10 Pro / 64bit / Version 1511
Lazarus V1.6
SdpoSerial v0.1.4

Hat jemand ähnliche Erfahrung gemacht und einen Tip?

Vielen Dank für's lesen :)

// Schreibe hier unter "Lazarus" obwohl es nichts mit der IDE direkt zu tun hat,
// denn so etwas hatte ich unter Turbo-Delphi oder XE3 noch nicht.
// Falls es hier nicht hingehört, sorry, bitte verschieben.

EWeiss 17. Mai 2016 22:00

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Versuch doch mal mit dem Tool ProcessExplorer von Systinternals den Process zu identifizieren.
Taskmanager ist nicht das richtige Tool für solche Sachen.

Arbeitet der Treiber Ser2pl64.sys überhaupt mit einem 32Bit Programm? Auf einem 64Bit System?
Auf der anderen Seite habe ich kein W10.

gruss

Maja Jessica 17. Mai 2016 22:10

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ich mal gemacht.
Mit dem Prozessexplorer bin ich ein wenig überfordert, bzw kann nichts in der Richtung Comport finden.
Hab ich mal als Anhang ...
Danke für's schauen. :)

creed steiger 17. Mai 2016 22:25

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Prolific?

Gabs da nicht mal was mit gefälschten/nachgemachten Chips/Produkten und nicht richtig funktionierenden Treibern?

Maja Jessica 17. Mai 2016 23:04

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Ja, stimmt. Da soll es wohl so "Chip-Kandidaten" geben. :P
64bit, 32bit, hab' ich mir auch schon gedacht.
Seltsam nur, das es ja mal funktioniert hat (IDE), so wie es ist.

Und nun nicht mehr. Hatte ja gehofft, dass jemand schreibt "lösch
mal Datei xxx" oder "in der registry, schlüssel dingens auf 0" oder
unter den Lazarus-Settings Haken bei xyz.
Absolut unbefriedigend das da nichts zu finden ist.
Vermute irgendein Rechtekram unter MS, nur wo. :(
Morgen kommt mein "Windows10 zertifizierter Stick" ...

jaenicke 18. Mai 2016 03:01

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Versuche einmal im Gerätemanager den seriellen Port zu ändern, z.B. auf COM7. Den sollte dann ja niemand kennen.

Wurde das Gerät automatisch erkannt oder musstest du manuell Treiber installieren? Wenn es ein Original ist, sollte es unter Windows 10 einfach so ohne Treiber funktionieren.

HolgerX 18. Mai 2016 04:25

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Hmm...

Mal Vorweg eine Frage:

Wie greifst Du auf den ComPort zu?

Über den Windows-Weg mit 'CreateFile(...)' oder direkt irgendwie auf den Treiber?

Welche Comport-Componente verwendest Du?

Maja Jessica 18. Mai 2016 08:54

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Treiber wurde nicht direkt installiert, habe aber ein Install für 64bit gefunden.
Diesen Installiert, klappte dann auch zwei Tage ohne Probleme. Bis zu diesem Absturz.
Im Gerätemanager auf andere Comport umgelegt -> kein Erfolg.
Komplett deinstalliert inkl. Treiber, Neustart, wieder installiert, Neustart -> Das gleiche: gesperrt.
Benutze dieses SdpoSerial1RxData aus 5dpo / SdpoSerial (sourceforge)

Jetzt geb ich es auf, warte auf den DHL-Mann der mir den Win10/64 empfohlenen Stick bringt.

Aber vielen Dank an alle für eure Hilfe :thumb:

bytecook 18. Mai 2016 12:37

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Zitat:

Zitat von Maja Jessica (Beitrag 1338335)
Treiber wurde nicht direkt installiert, habe aber ein Install für 64bit gefunden.
Diesen Installiert, klappte dann auch zwei Tage ohne Probleme. Bis zu diesem Absturz.
Im Gerätemanager auf andere Comport umgelegt -> kein Erfolg.
Komplett deinstalliert inkl. Treiber, Neustart, wieder installiert, Neustart -> Das gleiche: gesperrt.
Benutze dieses SdpoSerial1RxData aus 5dpo / SdpoSerial (sourceforge)

Jetzt geb ich es auf, warte auf den DHL-Mann der mir den Win10/64 empfohlenen Stick bringt.

Aber vielen Dank an alle für eure Hilfe :thumb:

Bist du sicher, dass das Programm beim Exit nicht irgendwo noch im Taskmanager sichtbar ist? Auch mal unter Prozesse nachsehen,
wenn die Mainform schon aufgelöst ist, das Proggy aber nicht vollständig zu ist, kommt das mal schon vor...

Bzw, beende die Connection mal vorher schon, in dem du den Port manuell schließt, danach erst das Programm...

Lg,

Peter

Klaus01 18. Mai 2016 12:40

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
.. was mir nicht in den Kopf will, ist dass nach einem reboot der Port immer noch blockiert ist.

Startet das Tool denn beim Neustart automatisch?

Grüße
Klaus

himitsu 18. Mai 2016 13:23

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Ich hätte jetzt gefragt, ob es sich um Windows 8.1 handelt.
Da gibt es auch so einen "Bug".

Mit einem anderen Treiber ging es besser und nach dem Upgrade aus Windows 10 ging es endlich richtig.

Maja Jessica 18. Mai 2016 14:26

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
An Task's, die noch irgendwo herumgeistern, habe ich nichts gefunden.
Das Schliessen des Comports erfolgt unter Form.OnClose.
Habe alles reduziert auf ein kleines Testprogramm. (Ich weiss, da sind Sachen drin "die man so nicht macht")
Und ja, der Comport ist selbst nach einem Neustart blockiert.

So langsam bin ich der Ansicht, das dieses alles nicht mit Lazarus zu tun hat.
War wohl nur zufällig passiert als ich das mit Lazarus erstellte Programm ausserhalb der IDE gestartet hatte. (Off-Topic verschieb?)

Also:
- Heute morgen backup von C neu eingespielt, Comport ok.
- Lazarus IDE -> Programm kompiliert und gestartet, ok.
- Programm ausserhalb IDE gestartet, auch gut.
- Mehrfach wiederholt, alles ok.
Dann aber (ja, mach man auch nicht):
wärend Programm (exe.file) läuft den USB/RS232 abgezogen.
Keine Fehlermeldung, aber natürlich auch keine Kommunikation.
USB/RS232 wieder gesteckt, seit dem kann ich mit nichts mehr auf den Comport zugreifen.
HTERM schreibt: "Com6 is blocked by another application"
Der Gerätemanager zeigt "alles gut" an, finde auch wieder nichts im Hintergrund.

Also gehe ich davon aus, das bei dem ersten gau auch zufällig ein Wackeliger in der Hardware war.
Nur das darauf Windows sich mit einem erzwungenen Neustart meldete.
Jetzt nicht.
Würde jetzt gerne einen Neustart tätigen, um zu sehen on Comport immer noch geblockt ist,
leider läuft gerade ein Backup (60%), welches noch etwa eine Stunde dauert.

Bin mal gespannt ...

Code:
unit unitspannung;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ComCtrls, SdpoSerial;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Memo1: TMemo;
    ProgressBar1: TProgressBar;
    SdpoSerial1: TSdpoSerial;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SdpoSerial1RxData(Sender: TObject);
    procedure anzeige(s: string);
  private
    { private declarations }
  public
    { public declarations }
    eingang : string;
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure Tform1.anzeige(s: string);
var i : integer;
    ftemp : real;
begin
  for i:=1 to length(s) do if s[i]='.' then s[i]:=',';
  Label1.Caption := Copy(s,3,6);
  ftemp := StrToFloat(label1.caption);
  ProgressBar1.Position := Round(ftemp);
  label1.Caption := Format('%2.2f',[(12/1023)* ftemp])+'V';
end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  SdpoSerial1.Active:=false;
  SdpoSerial1.Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SdpoSerial1.Active:=true;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  SdpoSerial1.Device := 'COM6';
end;

procedure TForm1.SdpoSerial1RxData(Sender: TObject);
begin
  eingang := eingang + SdpoSerial1.ReadData;
  if length(eingang) >= 52 then
  begin
    anzeige(eingang);
    Memo1.Lines.Add(eingang);
    eingang := '';
  end;
end;


end.
Auch wenn es vermutlich grausam ist, am Programm liegt es nicht. :oops:

EWeiss 18. Mai 2016 14:33

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Nur als Anreiz..

Eine Formatierung wäre nicht schlecht. ;)
Und leere proceduren sind unnötig.
Da hier in FormCreate nichts geschieht kannst du diese auch direkt löschen.

Oder aber du packst das
Delphi-Quellcode:
SdpoSerial1.Device := 'COM6';

nach FormCreate

und löschst FormShow

gruss

t.roller 18. Mai 2016 14:37

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
The trick is to open the Command Prompt as administrator and start the Device Manager from the same command prompt.

1. Right-click “Command Prompt” in Accessories and choose “Run as Administrator”

2. Enter set devmgr_show_nonpresent_devices=1

3. Enter start devmgmt.msc

4. In the box that opens, select Show hidden devices in the ‘view’ menu.

Now if you expand the section on COM ports, all the COM ports that have ever been created will be displayed, the non present ones being in grey. You can uninstall away anything that you don’t want
(right click, select uninstall).

Maja Jessica 18. Mai 2016 21:54

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Juhu .... klappt! :-D
Drei graue Einträge, alle auf den gleichen Prolific-Teil.
Nach Anleitung rausgenommen, jetzt Comport wieder verfügbar!

It works! Thank you so much!

:thumb:

Maja Jessica 6. Dez 2016 19:33

AW: Programm stürzt ab und sperrt Comport (USB-RS232)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe nochmal das alte Thema ausgebuddelt, weil es wieder passiert ist. Comport is blocked ...
Dann in einem Forum gelesen, daß Windows gerne Daten, die bereits beim Start über die serielle Schnittstelle kommen,
gerne als "vorhandenen Trackball" interpretiert und schon bein Starten einbindet.

Den (nicht vorhandenen) Trackball im Gerätemanager deaktiviert, und schwups
ist auch die Schnittstelle nicht mehr blockiert.

Falls es mal jemanden trifft ... :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz