Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: washburn - Luglio 01, 2015, 09:00:28 pm

Titolo: Connessione a /dev/ttyUSB0
Inserito da: washburn - Luglio 01, 2015, 09:00:28 pm
Salve a tutti,

il progetto a cui sto lavorando prevede l'utilizzo di un adattatore USB-seriale (OBD Scan) per comunicare con la centralina della mia automobile.
Sotto Windows (Lazarus 1.2.6+FPC 2.6.4) non ho alcun problema a collegarmi all'adattatore (viene visto come una COM5) ma sotto Raspbian (stessa versione di Lazarus+FPC) non riesco a connettermi.
L'adattatore viene rilevato dal sistema, infatti con il comando "lsusb" viene rilevato e anche con "ls /dev/tty*" viene rilevato cone "/dev/ttyUSB0".
Per cui tramite le librerie Synaser:

Codice: [Seleziona]
ser:= TBlockSerial.Create;
ser.Connect('/dev/ttyUSB0');
ser.config(38400, 8, 'N', SB1, False, False);
str:= 'Device: ' + ser.Device + '   Status: ' + ser.LastErrorDesc +'  '+Inttostr(ser.LastError));
ShowMessage(str);

ottengo a video il messaggio "/dev/ttyUSB0 Bad File Number 9"
e non riesco a comunicare con l'adattatore (equipaggiato con un PL2303).
La cosa strana (per me ovviamente) è che se prova a connettermi dalla linea di comando con "sudo screen /dev/ttyUSB0 38400" la connessione avviene e riesco a comunicare con il dispositivo.
Dove sto sbagliando?
Grazie, saluti.

Roberto
Titolo: Re:Connessione a /dev/ttyUSB0
Inserito da: Legolas - Luglio 01, 2015, 09:45:01 pm
Non conosco la materia, quindi potrei dire una stupidata,  ma a naso: hai provato a invertire le chiamate ser.config e ser.connect?
Titolo: Re:Connessione a /dev/ttyUSB0
Inserito da: washburn - Luglio 01, 2015, 11:58:47 pm
Ho provato ed alla prima mi ha dato "status OK" ma poi si è bloccato tutto.
In effetti, però, leggendo nei sorgenti della libreria Synaser è specificato che il "config" va invocato dopo il "connect"...però così facendo ottengo quel messaggio di errore.
Titolo: Re:Connessione a /dev/ttyUSB0
Inserito da: washburn - Luglio 02, 2015, 01:00:32 am
Ho fatto un'ulteriore prova con Python e funziona.
Che sia un problema di Lazarus-Synaser nell'accesso a ttyUSB0?
Titolo: Re:Connessione a /dev/ttyUSB0
Inserito da: washburn - Luglio 02, 2015, 01:23:28 am
Trovato la soluzione: prima del "connect" bisogna settare "LinuxLock" a "false" in modo che il sistema liberi la porta.
Ed infatti si è collegato.
Per cui il codice é:

Codice: [Seleziona]
ser:= TBlockSerial.Create;
ser.LinuxLock:= false;
ser.Connect('/dev/ttyUSB0');
ser.config(38400, 8, 'N', SB1, False, False);
str:= 'Device: ' + ser.Device + '   Status: ' + ser.LastErrorDesc +'  '+Inttostr(ser.LastError));

Spero sia utile ad altri, saluti.

Roberto