Differenze tra le versioni di "Accesso alle Porte Seriali"

Da Gambas-it.org - Wikipedia.
Riga 15: Riga 15:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
  <FONT color=#006400>' ''Se il file non possiede i più ampi permessi...''</font>
+
  <FONT color=gray>' ''Se il file non possiede i più ampi permessi...''</font>
 
     If Stat("/dev/ttyUSB1").Auth <> "rwsrwxrwx" Then
 
     If Stat("/dev/ttyUSB1").Auth <> "rwsrwxrwx" Then
  <FONT color=#006400>' ''...allora modificheremo in quel senso i permessi del file:''</font>
+
  <FONT color=gray>' ''...allora modificheremo in quel senso i permessi del file:''</font>
 
       Desktop.RunAsRoot("chmod 4777 /dev/ttyUSB1")
 
       Desktop.RunAsRoot("chmod 4777 /dev/ttyUSB1")
  <FONT color=#006400>' ''Restiamo in attesa fino a che i permessi non vengono modificati, come desiderato:''</font>
+
  <FONT color=gray>' ''Restiamo in attesa fino a che i permessi non vengono modificati, come desiderato:''</font>
 
       Do
 
       Do
 
         Wait 0.01
 
         Wait 0.01
Riga 25: Riga 25:
 
     Endif
 
     Endif
 
   
 
   
  <FONT color=#006400>' ''In alternativa all'algoritmo precedente,''
+
  <FONT color=gray>' ''In alternativa all'algoritmo precedente,''
 
  ' ''si potrà utilizzare il seguente codice per impostare il setUID''
 
  ' ''si potrà utilizzare il seguente codice per impostare il setUID''
 
  ' ''e consentire l'apertura del file protetto:''
 
  ' ''e consentire l'apertura del file protetto:''
 
     '''Exec ["gksu", "chmod 4777", "/dev/ttyUSB1"] Wait'''</font>
 
     '''Exec ["gksu", "chmod 4777", "/dev/ttyUSB1"] Wait'''</font>
 
   
 
   
  <FONT color=#006400>' ''Apriamo il file-device aggiungendo la parola chiave "Watch":''</font>
+
  <FONT color=gray>' ''...o ancor più facilmente:''
 +
    '''Shell "echo < ''mia_password'' > | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait'''</font>
 +
 +
<FONT color=gray>' ''Apriamo il file-device aggiungendo la parola chiave "Watch":''</font>
 
     fl = Open "/dev/ttyUSB1" For Read Watch
 
     fl = Open "/dev/ttyUSB1" For Read Watch
 
   
 
   
Riga 41: Riga 44:
 
   
 
   
 
     While Not Eof(fl)
 
     While Not Eof(fl)
  <FONT color=#006400>' ''Leggiamo i dati provenienti dal file-device...:''</font>
+
  <FONT color=gray>' ''Leggiamo i dati provenienti dal file-device...:''</font>
 
       Line Input #fl, s
 
       Line Input #fl, s
  <FONT color=#006400>' ''...e li mostriamo in console:''</font>
+
  <FONT color=gray>' ''...e li mostriamo in console:''</font>
 
       Print s
 
       Print s
 
     Wend
 
     Wend
Riga 61: Riga 64:
 
   
 
   
 
   
 
   
  <FONT color=#006400>' ''Facciamo in modo da poter inserire la password di root''
+
  <FONT color=gray>' ''Facciamo in modo da poter inserire la password di root''
 
  ' ''per impostare il setUID e consentire l'apertura del file protetto:''</font>
 
  ' ''per impostare il setUID e consentire l'apertura del file protetto:''</font>
     Exec ["gksu", "chmod 4777", "/dev/ttyUSB1"] Wait
+
     Shell "echo '<FONT color=gray>''mia_password''</font>' | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait
+
 
 
     With SerialPort1
 
     With SerialPort1
 
       .PortName = "/dev/ttyUSB1"
 
       .PortName = "/dev/ttyUSB1"
Riga 82: Riga 85:
 
   Dim s As String
 
   Dim s As String
 
   
 
   
  <FONT color=#006400>' ''Legge i dati dalla porta....''</font>
+
  <FONT color=gray>' ''Legge i dati dalla porta....''</font>
 
         Read #SerialPort1, s, Lof(SerialPort1)
 
         Read #SerialPort1, s, Lof(SerialPort1)
 
   
 
   
  <FONT color=#006400>' ''...e li mostra in console:''</font>
+
  <FONT color=gray>' ''...e li mostra in console:''</font>
 
         Print s
 
         Print s
 
   
 
   

Versione delle 10:34, 27 apr 2015

Possiamo accedere alle Porte Seriali aprendo e leggendo direttamentre i dati provenienti dai relativi file-device.


Poniamo l'esempio di avere una penna USB per la connessione ad Internet, e che alla sua connessione il sistema operativo abbia generato due relativi file-device: /dev/ttyUSB0 e /dev/ttyUSB1. Possiamo leggere i dati provenienti dalla porta mediante due modalità:

  • direttamente dal relativo file-device, ad esempio, /dev/ttyUSB1;
  • mediante l'apposita classe "SerialPort".


Mediante lettura diretta dal corrispondente file-device

Per il seguente esempio è necessario attivare anche il componente gb.desktop, ed aver installato il programma x-term:

Private fl As File


Public Sub Button1_Click()

' Se il file non possiede i più ampi permessi...
   If Stat("/dev/ttyUSB1").Auth <> "rwsrwxrwx" Then
' ...allora modificheremo in quel senso i permessi del file:
     Desktop.RunAsRoot("chmod 4777 /dev/ttyUSB1")
' Restiamo in attesa fino a che i permessi non vengono modificati, come desiderato:
     Do
       Wait 0.01
     Loop Until Stat("/dev/ttyUSB1").Auth = "rwsrwxrwx"
   Endif

' In alternativa all'algoritmo precedente,
' si potrà utilizzare il seguente codice per impostare il setUID
' e consentire l'apertura del file protetto:
   Exec ["gksu", "chmod 4777", "/dev/ttyUSB1"] Wait

' ...o ancor più facilmente:
   Shell "echo < mia_password > | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait

' Apriamo il file-device aggiungendo la parola chiave "Watch":
   fl = Open "/dev/ttyUSB1" For Read Watch

End


Public Sub File_Read()

 Dim s As String

   While Not Eof(fl)
' Leggiamo i dati provenienti dal file-device...:
     Line Input #fl, s
' ...e li mostriamo in console:
     Print s
   Wend

End


Lettura mediante la classe SerialPort

La lettura della Porta Seriale portà avvenire anche mediante l'uso della Classe SerialPort attivando il componente gb.net.

Private SerialPort1 As SerialPort


Public Sub Button1_Click()

  SerialPort1 = New SerialPort As "portaseriale"


' Facciamo in modo da poter inserire la password di root
' per impostare il setUID e consentire l'apertura del file protetto:
   Shell "echo 'mia_password' | sudo -S chmod 4777 '/dev/ttyUSB1'" Wait
 
   With SerialPort1
     .PortName = "/dev/ttyUSB1"
     .Speed = 19200
     .Parity = 0
     .DataBits = 8
     .StopBits = 1
     .FlowControl = 0
     .Open
   End With

 End


Public Sub portaseriale_Read()

 Dim s As String

' Legge i dati dalla porta....
       Read #SerialPort1, s, Lof(SerialPort1)

' ...e li mostra in console:
       Print s

End


Approfondimenti in internet