Re: Chronopic 3.0 en distintos sistemas operativos y plataformas virtuales



Hola,

* He realizado pruebas en Debian/Lenny

-Kernel: 2.6.22

$ uname -a
Linux roma 2.6.22-3-686 #1 SMP Mon Nov 12 08:32:57 UTC 2007 i686
GNU/Linux

-Al conectar la chronopic sale esto:

usbcore: registered new interface driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial support registered for
generic
usbcore: registered new interface driver usbserial_generic
drivers/usb/serial/usb-serial.c: USB Serial Driver core
drivers/usb/serial/usb-serial.c: USB Serial support registered for FTDI
USB Serial Device

--------------- Resaltado por mi -------------------------------------
ftdi_sio 3-2:1.0: FTDI USB Serial Device converter detected
drivers/usb/serial/ftdi_sio.c: Detected FT232RL
------------------------------------------------------------------

usb 3-2: FTDI USB Serial Device converter now attached to ttyUSB0
usbcore: registered new interface driver ftdi_sio
drivers/usb/serial/ftdi_sio.c: v1.4.3:USB FTDI Serial Converters Driver

----------------------------------------------------------------------
-PRUEBAS EN C
--------------

  Como ha comentado Xavi, el programa test-saltos en C funciona sin
problemas.

  También fuenciona si se prueba "a lo bruto" con esto:

$ cat /dev/ttyUSB0

  Al apretar el botón de test se muestra en pantalla los bytes recibidos
(pero como es información no ASCII salen cosas raras), del tipo:

X
  X�XE�Xp�X9�X6�X

Esto es correcto. Si se quiere ver en formato "legible" se puede hacer
esto:

$ cat /dev/ttyUSB0 |  ./test-tramas

Y aparecerá algo así:

test-tramas. (c) Juan Gonzalez. Febrero 2005. Licencia GPL
Visualizacion de tramas de ChronoPic [Proyecto ChronoJump]
Ejecute test-tramas -h para OBTENER AYUDA

Recepcion de Datos: ENTRADA ESTANDAR

Pulse Control-C para terminar
------------------------------------
Nuevo estado: ON  ,Marca de tiempo:   4818.7 ms
Nuevo estado: OFF ,Marca de tiempo:    160.4 ms
Nuevo estado: ON  ,Marca de tiempo:    385.9 ms
Nuevo estado: OFF ,Marca de tiempo:     92.4 ms
Nuevo estado: ON  ,Marca de tiempo:    101.0 ms
Nuevo estado: OFF ,Marca de tiempo:     76.2 ms

----------------------------------------------------
PRUEBAS EN PYTHON
----------------------------------------------------
Para ir descartando cosas, también he probado el acceso a la Chronopic
usando PYTHON. 

He usado el programa miniterm.py de este enlace:

http://www.iearobotics.com/proyectos/cuadernos/ct11/ct11.html

Todo ha funcionado correctamente. 

--------------------------------------------------
PRUEBAS EN MONO
--------------------------------------------------

-Sin embargo, al probar con el chronojump-mini.cs se obtiene la
excepción

Unhandled Exception: System.IO.IOException: I/O Error

y todo lo que viene a continuación:

 at System.IO.Ports.SerialPortStream.SetSignal (SerialSignal signal,
Boolean value) [0x00000] 
  at (wrapper remoting-invoke-with-check)
System.IO.Ports.SerialPortStream:SetSignal
(System.IO.Ports.SerialSignal,bool)
  at System.IO.Ports.SerialPortStream..ctor (System.String portName,
Int32 baudRate, Int32 dataBits, Parity parity, StopBits stopBits,
Boolean dtrEnable, Boolean rtsEnable, Handshake handshake, Int32
readTimeout, Int32 writeTimeout, Int32 readBufferSize, Int32
writeBufferSize) [0x00000] 
  at (wrapper remoting-invoke-with-check)
System.IO.Ports.SerialPortStream:.ctor
(string,int,int,System.IO.Ports.Parity,System.IO.Ports.StopBits,bool,bool,System.IO.Ports.Handshake,int,int,int,int)
  at System.IO.Ports.SerialPort.Open () [0x00000] 
  at (wrapper remoting-invoke-with-check)
System.IO.Ports.SerialPort:Open ()
  at SerialPortTest.Main (System.String[] args) [0x00000]

Esta excepción es la misma que se produce si se abre un puerto que no
existe. Pero en realidad la causa no es esa. El puerto serie existe,
tiene los permisos correctos y desde otras aplicaciones funciona sin
problemas.

--> He aislado el error. El código mínimo que lo provoca es este:

using System;
using System.IO.Ports;
 
public class SerialPortTest
{
	public static void Main(string[] args)
	{
		SerialPort mySerial;
		
        mySerial = new SerialPort();
        mySerial.PortName = "/dev/ttyUSB0";
        mySerial.BaudRate = 9600;
	mySerial.Parity = Parity.None;
	mySerial.DataBits = 8;
	mySerial.StopBits = StopBits.One;
	mySerial.Handshake = Handshake.None;

        // Set the read/write timeouts
        mySerial.ReadTimeout = 500;
        mySerial.WriteTimeout = 500;

	//-- Aqui se provoca la excepcion...
	mySerial.Open();
		
    }
}	

Para compilarlo uso:

$ gmcs test-serial.cs

y para ejecutarlo:

$ ./test-serial.exe

La versión de Mono que está en Debian/Lenny es:

$ mono --version
Mono JIT compiler version 1.2.6 (tarball)
Copyright (C) 2002-2007 Novell, Inc and Contributors.
www.mono-project.com
	TLS:           __thread
	GC:            Included Boehm (with typed GC)
	SIGSEGV:       altstack
	Notifications: epoll
	Architecture:  x86
	Disabled:      none


CONCLUSIONES
-------------

  ¿Dónde está el problema? Todo apunta a mono en Linux, pero yo creo que
el driver que viene con el kernel 2.6.22 no se está comportando del todo
bien. Seguramente Mono invoca algún método "raro" del driver, o usa
algún parámetro que el driver no ha tenido en cuenta y devuelve un
error. Mono lo interpreta como que no se ha abierto el puerto serie.

  Eso explicaría por qué con otros conversores USB/serie sí funciona sin
problemas (con el mismo mono).

Voy a seguir haciendo más pruebas.

Saludos, Juan



El vie, 25-01-2008 a las 10:45 +0100, Xavi de Blas escribió:
> Hola Juan, bueno, te invito a seguir con las pruebas, te recuerdo
> (para tus conclusiones) que a mi no me funciona con chronojump_mini
> pero sí con los chronopic_tests
> 
> Me gustaría entender la diferencia entre ambas aproximaciones para
> poder escribir a l lista mono.
> 
> Evidentemente en la lista mono me pedirán un 'test case': el mínimo
> programa que ellos puedan entender/probar. Pero en ese test case no sé
> qué chronopic.cs usar pues las dos son muy distintas.
> 
> Saludos

-- 
Juan Gonzalez Gomez
juan iearobotics com
www.iearobotics.com



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]