ni.com checkout is currently experiencing issues.
Support teams are actively working on the resolution.
ni.com checkout is currently experiencing issues.
Support teams are actively working on the resolution.
el 06-11-2013 04:10 AM
Mi aplicación recibe 12 bytes por el visa read correspondientes a 6 sensores. Cada sensor son 2 bytes. Lo que me ocurre es que a veces, Labview altera el orden de llegada. Cada 2 bytes es la lectura de un sensor. El primer byte es el LSB y el segundo el MSB. luego se reconstruyen los bytes para formar un numero de 16 bits. La llegada de bytes seria asi:
BYTE 1 ------> 64
BYTE 2 ------> 0
BYTE 3 ------> 32
BYTE 4 ------> 0
BYTE 5 ------> 45
BYTE 6 ------> 0
BYTE 7 ------> 23
BYTE 8 ------> 0
BYTE 9 ------> 12
BYTE 10 ------> 0
BYTE 11 ------> 35
BYTE 12 ------> 0
lo que hace Labview a veces es esto:
BYTE 1 ------> 0
BYTE 2 ------> 64
BYTE 3 ------> 0
BYTE 4 ------> 32
BYTE 5 ------> 0
BYTE 6 ------> 45
BYTE 7 ------> 0
BYTE 8 ------> 23
BYTE 9 ------> 0
BYTE 10 ------> 12
BYTE 11 ------> 0
BYTE 12 ------> 35
Lógicamente si llegan así los bytes, el número que reconstruyo de 16 bits para los 6 sensores es incorrecto.
el 06-11-2013 04:57 AM
Hola.
Sería conveniente que pusieses la parte de código que se ocupa de leer y ordenar y que expliques que sistema usas para sincronizar las lecturas.
Saludos.
Alipio.
el 06-11-2013 05:13 AM
adjunto parte del codigo:
recibo los 12 bytes en un array y cada dos corresponde a un sensor. Luego reconstruyo cada dos bytes para formar un numero de 16 bits. Labview a veces altera el orden de llegada de los bytes y el numero que forma no es el correcto.
el 06-11-2013 05:37 AM
Hola.
Cualquier desplazamiento de un byte te produce ese error.
Cuando se envian tramas de bytes por el puesto serie, hay que asegurar que llevan un inicio de trama segun se describe en otros posts o bien usar un handshake hardware para asegurar que todo esta en su sitio.
Te recomiendo poner 2 bytes iniciales a FFFF para sincronizar todo.
Saludos.
Alipio.
el 06-11-2013 05:45 AM
Te refieres desde el microcontrolador enviar primero FFFF?
Estoy utilizando arduino para enviar los bytes de este modo
Serial.write(byte1MSB);
Serial.write(byte1LSB);
Serial.write(byte2MSB);
Serial.write(byte2LSB);
Serial.write(byte3MLSB);
Serial.write(byte3LSB);
Serial.write(byte4MSB);
Serial.write(byte4LSB);
Serial.write(byte5MSB);
Serial.write(byte5LSB);
Serial.write(byte6LSB);
Serial.write(byte6LSB);
La función Serial.write en arduino envia el byte que le pongas
el 06-11-2013 05:53 AM
Exacto.
Deberia enviar:
FFFF y a continuacion los 12 bytes de informacion. De es modo, lees 14 bytes y verificas que la cabecera esta en su sitio y sabes que los bytes que siguen son los correctos. Si los 2 bytes iniciales no son la cabecera, es necesario reordenar el array hasta que lo sea o bien descartar los datos hasta una nueva cabecera correcta.
Si puedes hacer que arduino envie la secuencia de esa manera, veremos de decodificarla adecuadamente.
El método que usas para decodificar los bytes es poco elegante.
Saludos.
Alipio.
el 06-11-2013 06:01 AM
qué metodo podría utilizar para decodificar mejor los bytes ?
el 06-11-2013 06:04 AM
Por partes.
Primero estudia este enlace :
Una vez que tengas una recepcion de datos robusta, vemos como decodificarlos.
¿Qué versión de Lv tienes?
Saludos.
Alipio.
el 06-11-2013 07:59 AM
Se me olvidaba......
La transmision de Arduino ¿ es continua o hay un tiempo discreto entre tramas?
Saludos cordiales.
Alipio.
el 06-11-2013 08:12 AM
No, es totálmente continua. Se envian los 14 bytes de manera seguida con Serial.write(value).
luego le pongo un delay(10) que son 10 milisegundos, por tanto cada 10 milisegundos se envian los 14 bytes + retardo. El retardo se suma porque procesa las 6 entradas analógicas, obtiene los LSB y MSB y envia los datos.
serian algo mas de 10 milisegundos por cada loop.