Gambas-it

Gambas3 => Programmazione => Topic aperto da: akrobaticone - 19 Febbraio 2012, 23:29:30

Titolo: [RISOLTO]Scansione porte seriali
Inserito da: akrobaticone - 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
Titolo: Re: Scansione porte seriali
Inserito da: milio - 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
Titolo: Re: Scansione porte seriali
Inserito da: fsurfing - 20 Febbraio 2012, 11:22:36
per alcuni dispositivi tipo arduino dovresti mettere anche

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

Titolo: Re: Scansione porte seriali
Inserito da: akrobaticone - 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?






Titolo: Re: Scansione porte seriali
Inserito da: akrobaticone - 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?
Titolo: Re: Scansione porte seriali
Inserito da: fsurfing - 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?
Titolo: Re: Scansione porte seriali
Inserito da: akrobaticone - 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?
Titolo: Re: Scansione porte seriali
Inserito da: akrobaticone - 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

Titolo: Re: Scansione porte seriali
Inserito da: milio - 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
Titolo: Re: Scansione porte seriali
Inserito da: akrobaticone - 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
Titolo: Re: Scansione porte seriali
Inserito da: akrobaticone - 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..