Verfügbare serielle Schnittstellen ermitteln

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Verfügbare serielle Schnittstellen ermitteln

Beitrag von Daffy0815 »

Gehört zwar nicht mehr hierher aber trotzdem mal die Frage:

Gibt es auch so einen "netten Einzeiler" mit dem man feststellen kann welche seriellen Schnittstellen verfügbar sind
oder ist die For-Next-Schleife mit "IsSerialPort" Pflicht?

Gruß

Daffy

__________________________________________________
Thread geteilt
Maximale Fenstergröße berechnen (OpenWindow)>Verfügbare serielle Schnittstellen ermitteln
20.07.2013
RSBasic
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Maximale Fenstergröße berechnen (OpenWindow)

Beitrag von RSBasic »

@Daffy0815
Bitte zukünftig immer einen neuen Thread erstellen, sonst kann man mit Hilfe der Board-Suche den geposteten Lösungscode nicht direkt finden bzw. der User sieht den Titel "Maximale Fenstergröße berechnen (OpenWindow)" und er würde den Thread nicht öffnen, weil er denkt, es hat damit nichts zu tun. Deshalb das nächste Mal einfach einen neuen Thread erstellen.

Da ich mit der Bibliothek "SerialPort" noch nie gearbeitet habe, weiß ich nicht, ob der folgende Code für dich richtig ist: http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Ist es das, was du brauchst?

\\Edit:
Ich habe deinen Thread jetzt geteilt.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Maximale Fenstergröße berechnen (OpenWindow)

Beitrag von Daffy0815 »

Hast ja recht!

War übrigens das was ich gesucht habe ist aber noch aufwändiger!

Gruß

Daffy

__________________________________________________
Beitrag verschoben
Maximale Fenstergröße berechnen (OpenWindow)>Verfügbare serielle Schnittstellen ermitteln
20.07.2013
RSBasic
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Verfügbare serielle Schnittstellen ermitteln

Beitrag von RSBasic »

Da du noch im alten Thread warst, habe ich deinen Beitrag hierher verschoben. Bitte hier antworten und nicht mehr im anderen, sonst muss ich wieder verschieben.
Daffy0815 hat geschrieben:War übrigens das was ich gesucht habe ist aber noch aufwändiger!
So lange es funktioniert, spielt es doch keine Rolle, wie viel Code das ist. Es gibt eben nicht alles als einzige Funktion. Das ist ja auch die Aufgabe des Entwicklers, der auch Sachen programmieren muss, um was bestimmtes zu ermitteln o.ä.
Und so aufwändig finde ich den von mir geposteten Code nicht. Da gibts schlimmeres.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Verfügbare serielle Schnittstellen ermitteln

Beitrag von Daffy0815 »

@RSBASIC

NaJa, ich finde das Folgende von mir bedeutend einfacher und übersichtlicher!
Auch werden nur die tatsächlich verfügbaren Schnittstellen zurückgegeben während die andere Routine keinerlei Rücksicht darauf nimmt
ob die Schnittstelle bereits von einem anderen Programm verwendet wird.
Darüber hinaus würde es mit geänderten Namen auch unter Linux funktionieren.

Code: Alles auswählen

EnableExplicit

Global Dim ComPorts.i(256) 
Define ComPortNumber.i, ComPortCounter.i 

Procedure.i GetAvailableComPorts(Array ComPort.i(1))
  Define ComPortCounter.i
  Define ComPortNumber.i = 0
  
  For ComPortCounter.i = 1 To 256
    If OpenSerialPort(0, "COM"+Str(ComPortCounter.i), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 256, 256)
      ComPortNumber.i = ComPortNumber.i + 1
      ComPorts.i(ComPortNumber.i) = ComPortCounter.i
      CloseSerialPort(0)
    EndIf
  Next ComPortCounter.i
  ReDim ComPorts.i(ComPortNumber.i)
  
  ProcedureReturn(ComPortNumber.i)
EndProcedure
  

ComPortNumber.i = GetAvailableComPorts(ComPorts.i())

If ComPortNumber.i
  For ComPortCounter.i = 1 To ComPortNumber.i
    Debug "COM"+Str(ComPorts.i(ComPortCounter.i))
  Next ComPortCounter.i
Else
  Debug "No ComPorts available"
EndIf
Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Verfügbare serielle Schnittstellen ermitteln

Beitrag von RSBasic »

Na dann nutz es doch. Ich habe wie gesagt damit noch nie gearbeitet.
Wenn dein Code funktioniert, dann ist es doch i.O., dann brauchst du ja keinen anderen Code. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Verfügbare serielle Schnittstellen ermitteln

Beitrag von Daffy0815 »

Na klar werde ich tun!

Dachte dabei eigentlich mehr daran das der nächte Nutzer mit dem gleichen Problem hier eine andere Lösung finden kann.

Auf den Code bezogen noch ne Frage:
Ist es möglich die Anzahl der Elemente von Arrays abzufragen?

Das Programm könnte ja auch so aussehen:

Code: Alles auswählen

EnableExplicit

Global Dim ComPorts.i(0) 
Define ComPortNumber.i, ComPortCounter.i 

Procedure.i GetAvailableComPorts(Array ComPort.i(1))
  Define ComPortCounter.i
  Define ComPortNumber.i = 0
  
  For ComPortCounter.i = 1 To 256
    If OpenSerialPort(0, "COM"+Str(ComPortCounter.i), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 256, 256)
      ComPortNumber.i = ComPortNumber.i + 1
      ReDim ComPorts.i(ComPortNumber.i)
      ComPorts.i(ComPortNumber.i) = ComPortCounter.i
      CloseSerialPort(0)
    EndIf
  Next ComPortCounter.i
  
  
  ProcedureReturn(ComPortNumber.i)
EndProcedure
  

ComPortNumber.i = GetAvailableComPorts(ComPorts.i())

If ComPortNumber.i
  For ComPortCounter.i = 1 To ComPortNumber.i
    Debug "COM"+Str(ComPorts.i(ComPortCounter.i))
  Next ComPortCounter.i
Else
  Debug "No ComPorts available"
EndIf




Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Verfügbare serielle Schnittstellen ermitteln

Beitrag von ts-soft »

Daffy0815 hat geschrieben: Auf den Code bezogen noch ne Frage:
Ist es möglich die Anzahl der Elemente von Arrays abzufragen?

Code: Alles auswählen

Debug ArraySize(ComPorts())
http://www.purebasic.com/german/documen ... ysize.html
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Verfügbare serielle Schnittstellen ermitteln

Beitrag von Daffy0815 »

Danke!

Danach würde ich die Routine so schreiben:

Code: Alles auswählen

EnableExplicit

Global Dim ComPorts.i(0) 
Define ComPortNumber.i, ComPortCounter.i 

Procedure.i GetAvailableComPorts(Array ComPort.i(1))
  Define ComPortCounter.i
  Define ComPortNumber.i = 0
  
  For ComPortCounter.i = 1 To 256
    If OpenSerialPort(0, "COM"+Str(ComPortCounter.i), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 256, 256)
      ComPortNumber.i = ComPortNumber.i + 1
      ReDim ComPorts.i(ComPortNumber.i)
      ComPorts.i(ComPortNumber.i) = ComPortCounter.i
      CloseSerialPort(0)
    EndIf
  Next ComPortCounter.i
  ProcedureReturn ComPortNumber.i
EndProcedure
  



If GetAvailableComPorts(ComPorts.i())
  For ComPortCounter.i = 1 To ArraySize(ComPorts.i())
    Debug "COM"+Str(ComPorts.i(ComPortCounter.i))
  Next ComPortCounter.i
Else
  Debug "No ComPorts available"
EndIf

Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Verfügbare serielle Schnittstellen ermitteln

Beitrag von NicTheQuick »

Zwei Hinweise dazu. Es macht nicht viel Sinn, ComPorts global zu machen, wenn du es eh an die Procedure übergibst. Außerdem ist es eigentlich schneller, wenn man zuerst das Array auf die maximale Anzahl Element resized, also auf 256, und es am Schluss dann wiederum so klein macht wie es nötig ist. Dann spart man sich die möglichen 256 mal Redim und reduziert dessen Aufrufe somit auf 2.

Ansonsten bietet sich natürlich für Listen, deren Größe von vornherein noch nicht ersichtlich sind, eher LinkedLists an. Aber in diesem Fall wäre das wohl eher eine Frage des Geschmacks.

Dann noch ein paar Fragen: Wieso schreibst du hinter jede Variable nochmal ihren Typ, obwohl das beim ersten mal reicht anzugeben? Und für meinen Geschmack kommt hinter das Next kein Variablennamen mehr, aber naja. ;)
Antworten