Seite 1 von 2
Verfügbare serielle Schnittstellen ermitteln
Verfasst: 20.07.2013 15:55
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
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 20.07.2013 16:08
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.
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 20.07.2013 16:14
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
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 20.07.2013 16:18
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.
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 20.07.2013 21:04
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
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 20.07.2013 21:17
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.

Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 20.07.2013 21:21
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
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 20.07.2013 21:36
von ts-soft
Daffy0815 hat geschrieben:
Auf den Code bezogen noch ne Frage:
Ist es möglich die Anzahl der Elemente von Arrays abzufragen?
http://www.purebasic.com/german/documen ... ysize.html
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 20.07.2013 21:47
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
Re: Verfügbare serielle Schnittstellen ermitteln
Verfasst: 20.07.2013 22:24
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.
