Autore Topic: [RISOLTO]Scansione porte seriali  (Letto 1759 volte)

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
[RISOLTO]Scansione porte seriali
« il: 19 Febbraio 2012, 23:29:30 »
Vorrei trovare un sistema per effettuare una scansione delle porte seriali del PC, comprese quelle emulate da convertitori USB, così da creare una combo ove sono elencate per poterle scegliere
Come posso fare?
Grazie
« Ultima modifica: 29 Febbraio 2012, 14:03:02 da Akrobaticone »
"e il naufragar m'è dolce in questo mar"

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #1 il: 19 Febbraio 2012, 23:54:08 »
io avevo fatto così:

Codice: [Seleziona]
Public Function ScanSerial() As String[]
Dim SPortList As New String[]

  SPortList.Insert(Dir("/dev", "ttyS*").Sort())
  SPortList.Insert(Dir("/dev", "ttyUSB*").Sort())

  Return SPortList

End

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #2 il: 20 Febbraio 2012, 11:22:36 »
per alcuni dispositivi tipo arduino dovresti mettere anche

Codice: [Seleziona]
SPortList.Insert(Dir("/dev", "ttyACM*").Sort())


Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #3 il: 20 Febbraio 2012, 21:17:59 »
il sistema funziona
grazie per la info :ok:
mi fa vedere anche il convertitore 232 usb
la lista delle seriali disponibili è però di 30 elementi
è normale?






"e il naufragar m'è dolce in questo mar"

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #4 il: 24 Febbraio 2012, 08:43:08 »
come mai ci sono tutte le seriali da 1 a 30?
per verificare quelle realmente esistenti dovrei aprirle una a una e verificare se viene riportato un errore
esiste un sistema più semplice?
"e il naufragar m'è dolce in questo mar"

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #5 il: 24 Febbraio 2012, 12:16:56 »
forse puoi verificarlo con cat /dev/porta
ma non è che sia molto meglio ...

hai provato a guardar el' esempio serial port se fa menzione del sistema di elenco porte?

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #6 il: 25 Febbraio 2012, 19:39:54 »
Nell'esempio serial port è possibile selezionare solo la porta ttys0
in /dev sono presenti tutte le porte fino a 30
vengono previste tutte in anticipo?
"e il naufragar m'è dolce in questo mar"

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #7 il: 26 Febbraio 2012, 23:05:22 »
ho provato a scrivere una cosa così

Codice: [Seleziona]
' Gambas class file


Public Function ScanSerial() As String[]
   Dim SPortList As New String[]

  SPortList.Insert(Dir("/dev", "ttyS*").Sort())
  SPortList.Insert(Dir("/dev", "ttyUSB*").Sort())

  Return SPortList

End

Public Sub Form_Open()
  Dim lista As New String[]
  Dim lunghezza As Integer
  Dim i As Integer

  lista = ScanSerial()
  lunghezza = lista.count - 1

  For i = 0 To lunghezza
    If verifica_seriale(lista[i])
      ComboBox1.add(lista[i])
    Endif
  Next
  ComboBox1.index = 0
End


Public Sub verifica_seriale(lista As String) As Boolean
 
  Dim risultato As Boolean
  Serialport1.PortName = "/dev/" & lista
  Serialport1.Open
  risultato = True
  Serialport1.close()
  Finally
    Return risultato
  Catch
    risultato = False
End


 Prima carico tutta la lista delle seriali, poi le verifico una ad una provandole verificando che non diano errore
infine le inserisco in una combobox

"e il naufragar m'è dolce in questo mar"

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #8 il: 27 Febbraio 2012, 08:11:28 »
Ottimo... testata e funzionante... ti trova solo le seriali a cui e' collegato un 'qualcosa'...

Solo perche' ci devo mettere anche del mio,  :P, si puo' scrivere anche in questo modo:

Codice: [Seleziona]
PUBLIC SUB verifica_seriale(lista AS String) AS Boolean

  Serialport1.PortName = "/dev/" & lista
  TRY Serialport1.Open()
  IF ERROR THEN RETURN
  Serialport1.Close()
  RETURN TRUE

END

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #9 il: 27 Febbraio 2012, 14:07:07 »
Ottimo... testata e funzionante... ti trova solo le seriali a cui e' collegato un 'qualcosa'...

Solo perche' ci devo mettere anche del mio,  :P, si puo' scrivere anche in questo modo:

Codice: [Seleziona]
PUBLIC SUB verifica_seriale(lista AS String) AS Boolean

  Serialport1.PortName = "/dev/" & lista
  TRY Serialport1.Open()
  IF ERROR THEN RETURN
  Serialport1.Close()
  RETURN TRUE

END


così mi sembra più bello :ok:

un'altro tassello al mio progetto
"e il naufragar m'è dolce in questo mar"

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Scansione porte seriali
« Risposta #10 il: 27 Febbraio 2012, 17:05:18 »
per alcuni dispositivi tipo arduino dovresti mettere anche

Codice: [Seleziona]
SPortList.Insert(Dir("/dev", "ttyACM*").Sort())


dimenticavamo anche questo..
"e il naufragar m'è dolce in questo mar"