Seite 1 von 1

SerialPort - Verfügbare Ports & Hardware-ID anzeigen

Verfasst: 12.06.2018 13:19
von Thomas
Hallo,
jetzt habe ich leider doch nen Hänger beim SerialPort ...

Bis gerade vorhin hab ich mich noch gefreut, dass PB mittlerweile ne schöne SerialPort-Lib dabei hat :bounce:

Code: Alles auswählen

 Port$ = "COM15"

If OpenSerialPort(0, Port$, 115000, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
  
  *Puffer = AllocateMemory(1024)

PokeA(*Puffer + 0, $C9)
PokeA(*Puffer + 1, $DA)

WriteSerialPortData(0, *Puffer, 2)
  
	MessageRequester("Information", "SerialPort opened with success")

Else
	MessageRequester("Error", "Can't open the serial port: "+Port$)
EndIf
Zum "reinen" Abfragen der verfügbaren COM-Ports findet man hier und da mal nen Code-Schnipsel.

Aber was natürlich mega wäre:
Ich kenne die Hardware-ID von meinem Gerät, danach könnte ich mir ja den Port "automatisch" auswählen, gerade weil sich an nem anderem USB-Anschluss der Port ändert :praise:

Ich bin hier über die Win32_SerialPort class gestolpert ... aber wie komme ich da ran? Gibts "einfachere" Möglichkeiten?

Re: SerialPort - Verfügbare Ports & Hardware-ID anzeigen

Verfasst: 12.06.2018 13:30
von RSBasic
Thomas hat geschrieben:Ich bin hier über die Win32_SerialPort class gestolpert ... aber wie komme ich da ran? Gibts "einfachere" Möglichkeiten?
Das ist eine WMI-Klasse. PB kann leider kein WMI, aber mit meiner DLL-Datei ist es möglich und du kannst damit sehr einfach auf jede WMI-Klasse zugreifen und die jeweiligen Informationen auslesen: viewtopic.php?f=11&t=30687

Re: SerialPort - Verfügbare Ports & Hardware-ID anzeigen

Verfasst: 12.06.2018 13:56
von sibru
Zugriff auf die Hardware-ID habe ich auch nicht gefunden, aber hiermit kriegste schon mal raus, welche COM-Ports aktiv sind:

Code: Alles auswählen

;Modul      RS232_Liste Version 1.01 vom 05.05.2013 
#PB_Vers  = "4.20"            
;
;Funktion:  liefert einen WortQueue aller verfügbaren COM´s (COMx {COMy {COMz...}})
;
;Aufruf:    COM_Queue$ = RS232_Liste()
;
;#jaPBeExt exit
Procedure.s RS232_Liste()           ;- liefert String, in dem alle verfügbaren COM´s enthalten sind
  Protected Com$, ComNr, PortNr, Queue$, PortID
  For ComNr = 1 To 20
    Com$ = "COM" + Str(ComNr)
    PortNr = OpenSerialPort(#PB_Any, Com$, 300, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
    If PortNr
      PortID=SerialPortID(PortNr)
      EscapeCommFunction_(PortID,#CLRDTR) ;DTR wird immer hochgezogen: wenn ´n Relais dran hängt, kanns gefährlich werden...
      Queue$ + Com$ + " "
      CloseSerialPort(PortNr)
    EndIf
  Next
  ;Debug #DQUOTE$ + Trim(queeu$) + #DQUOTE$
  ProcedureReturn Trim(Queue$)
EndProcedure

Re: SerialPort - Verfügbare Ports & Hardware-ID anzeigen

Verfasst: 12.06.2018 14:23
von Thomas
@sibru

Ich hatte damals mal ein kleines COM-Projekt, da hab ich's ählich gemacht.
Sprich COM versuchen zu öffnen und dann entsprechend auflisten.

Dachte es gibt auch eine "hübschere" Lösung :mrgreen:

Re: SerialPort - Verfügbare Ports & Hardware-ID anzeigen

Verfasst: 13.06.2018 09:52
von Shardik
Thomas hat geschrieben:Ich hatte damals mal ein kleines COM-Projekt, da hab ich's ählich gemacht.
Sprich COM versuchen zu öffnen und dann entsprechend auflisten.

Dachte es gibt auch eine "hübschere" Lösung :mrgreen:
Andere Lösungen:
- ABBKlaus (über API-Funktion EnumPorts())
- HeXOR (Auslesen der Registry)
- Kiffi (Nutzung von WMI mit COMatePLUS)