Título: datarefs Publicado por: pablozgz en 03 Noviembre, 2009, 18:08:06 Hola necesito ayuda con las datarefs de los motores de un 737
¿Como se leen los datos de cada motor por separado? el dataref del ejemplo es el siguiente sim/cockpit2/engine/indicators/N1_percent float[8] n percent "N1, %." Este dataref es para 8 motores como se lee el del motor 2 Llevo 3 dias intentandolo y no lo consigo Un saludo Pablo Henar Título: Re: datarefs Publicado por: supergolfo en 03 Noviembre, 2009, 18:23:26 Leyendo el dato que hay en float[2]? Intenta poner la cabecera de la función
Título: Re: datarefs Publicado por: jvaldunciel en 03 Noviembre, 2009, 18:33:37 Si no recuerdo mal como funciona un array en C (hace muchos años que no escribo nada en C), los array se recorren empezando por cero para el primer elemento y tamaño -1 para el último. En este caso, con un array de tamaño 8, los elementos empiezan en 0 y acaban en 7.
Creo que como el avión tiene dos motores debes leer el elemento 0 para el motor 1 y el 1 para el motor 2. Si intentas leer el elemento 2 estás trayendo la información del motor 3, que no hay. Pero no he escrito ningún plugin y lo mismo me estoy equivocando. Título: Re: datarefs Publicado por: supergolfo en 03 Noviembre, 2009, 19:09:07 Fallo de novato XD. Dato 2 = posición 3 en el array. Gracias XD
Título: Re: datarefs Publicado por: pablozgz en 03 Noviembre, 2009, 20:11:38 El problema esta en que si pongo float[8] me lee el dato del motor 1 y aunque cambiel el numero siempre lee lo mismo
La pregunta es donde se le indica que quiero leer el dato 1 y 2 Un saludo Pablo Henar Título: Re: datarefs Publicado por: supergolfo en 03 Noviembre, 2009, 20:18:22 A ver, pon la linea de código para ver qué es lo que estás haciendo exactamente. De todas formas, para leer un array lo único que tienes que hacer es algo tal que float a = array[0]; //motor 1 float b = array[1]; //motor 2
Título: Re: datarefs Publicado por: pablozgz en 03 Noviembre, 2009, 20:22:10 Haber te explico
Esta hecho en SIOC y uipc, lo unico que hace es tomar los datos de la lista de datarefs de x-plane, pero siempre coje el dato del motor 1 Pablo Henar Título: Re: datarefs Publicado por: supergolfo en 03 Noviembre, 2009, 21:19:31 Sigo diciendo que pongas el código... Pon la función al completo para examinarla. Es que de lo contrario, no puedo decirte nada y menos de un lenguaje que me estoy enterando ahora que existe XD
Título: Re: datarefs Publicado por: pablozgz en 03 Noviembre, 2009, 21:37:45 Te pongo los datos que pongo en uipxdatos que hacen referencia a estas variables
4001 sim/flightmodel/engine/ENGN_N1_ float[1] 4002 sim/flightmodel/engine/ENGN_N1_ float[2] 4003 sim/flightmodel/engine/ENGN_N1_ float[3] 4004 sim/flightmodel/engine/ENGN_N1_ float[4] 4005 sim/flightmodel/engine/ENGN_N1_ float[5] 4006 sim/flightmodel/engine/ENGN_N1_ float[6] 4007 sim/flightmodel/engine/ENGN_N1_ float[7] Un saludo Título: Re: datarefs Publicado por: supergolfo en 03 Noviembre, 2009, 23:22:17 Y el sim/flightmodel/engine/ENGN_N1_ float[0]? Es lo que te decían antes. Un array, por norma general, empieza a contar desde cero. Tú también decías que era un array de tamaño 8 así que en cualquier caso, te faltaría una sentencia. Prueba a poner sim/flightmodel/engine/ENGN_N1_ float[0] porque me da que va a ser eso
Título: Re: datarefs Publicado por: jvaldunciel en 03 Noviembre, 2009, 23:25:33 No se que es uixpdatos, pero por lo que acabo de leer (me pudo la curiosidad), el SIOC funciona con offsets. En el manual del XPIUPC los tienes todos. Así que no se porque necesitas los datarefs.
Por otro lado... float es un tipo de dato de C (un tipo numérico decimal) . float[8] indica que el dataref es un array de "floats" de 8 elementos. No es un ejemplo de uso, es el tipo del dataref en C. El dataref realmente se llama sólo "sim/flightmodel/engine/ENGN_N1_" El guión final me da a entender que a lo mejor lo tienes que usar así: sim/flightmodel/engine/ENGN_N1_1 sim/flightmodel/engine/ENGN_N1_2 sim/flightmodel/engine/ENGN_N1_3 sim/flightmodel/engine/ENGN_N1_4 etc. Si no te funciona lo de supergolfo intenta esto. Si miras los datarefs en versión HTML, lo verás mejor: http://www.xsquawkbox.net/xpsdk/docs/DataRefs.html. Título: Re: datarefs Publicado por: supergolfo en 03 Noviembre, 2009, 23:37:34 De todas formas... la próxima vez intenta hacerlo en C porque creo que te vas a complicar menos la vida XD. En C pondrías algo tipo:
float motor1 = ENGN_N1_ float[0]; //... o cualquiera que sea la función que te devuelva el valor correcto float motor2 = ENGN_N1_ float[1]; Título: Re: datarefs Publicado por: pablozgz en 04 Noviembre, 2009, 16:01:01 Hola os respono a la vez a los dos:
Supergolfo: Lo de programar en C lo intentaria pero 0 patatero El poner la varable a 0 tambien lo he intentado y nada Jvalduncel: El xpuipc utiliza una serie de ofset que hace que cualquier scrip para FS hecho con variables FSUIPC te funcione, en cambio yo uso el servidor IOCP de X-plane Lo he dejado por imposible de momento no vaya a ser un Bug de x-plane Título: Re: datarefs Publicado por: supergolfo en 04 Noviembre, 2009, 16:12:04 Pues entonces ya no se me ocurre nada más que decirte. Si haciendo float[1] ya te lee el dato de uno de los motores, por qué no iba a leerlo haciendo float[0]. Resulta un tanto extraño. Una cosa que se me ocurre, es que te esté devolviendo otro array. Me explico. Por definición, al tú hacer float[] estás declarando un array. Al tú hacer float[1], estás accediendo a esa posición del array y te devolverá ese valor. Luego, tú dices que de todas esas sentencias (float[1] hasta float[7], aunque insisto en que debería ser float[0] hasta float[7]) sólo te devuelve el dato de uno de los motores. Lo que puede estar devolviendo, vuelvo a decir que lo dudo mucho, es otro array pero en este caso de tamaño 2 que se correspondería con el número de motores del avión. Al imprimir ese dato, sólo te muestra la primera posición de ese array de tamaño dos. Sería cuestión de ponerlo de forma que imprima las dos. No sé si me he explicado bien. Es algo poco probable pero nunca está de más probar cosas distintas.
Sobre lo de C hazme caso y métele mano según tengas tiempo. Ya verás como luego se te convierte en un vicio Título: Re: datarefs Publicado por: pablozgz en 04 Noviembre, 2009, 18:58:12 Me puedes hacer un pequeño resumen para tontos de que se necesita para ir trasteando en C, programas, lenguaje y demas
Un saludo y muchas gracias por las respuestas Pablo Henar Título: Re: datarefs Publicado por: supergolfo en 04 Noviembre, 2009, 19:05:33 Si no te quieres complicar la vida, Dev C++. Si te la quieres complicar un poco, linux y gcc, y si te la quieres complicar bastante, pilla el visual studio. Yo cuando programaba en C, lo hacía en linux pero una vez me dio por usar el visual c++ (del visual studio). Me tiré una tarde entera para configurar el jodido programa. Pero vaya que con el dev c++ te va a ser suficiente porque hace lo mismo que el visual studio pero de un modo menos "pro". Busca también por ahí un pdf "aprenda c++ como si estuviera en primero" de no sé qué universidad y échale un ojo con calma. En cuanto a programas, no necesitas más.
Título: Re: datarefs Publicado por: jvaldunciel en 04 Noviembre, 2009, 20:53:47 Siguiendo con el tema que la curiosidad me puede ;D
Si el plugin que estás usando es el UIPCX de Francisco Sedano (http://www.fransedano.net/), en el uipcx-doc.txt que acompaña al plugin, pone lo siguiente: Citar Some of the variables in xplane are arrays. For example, throttle value for the engines is accessed using following variable: sim/flightmodel/engine/ENGN_thro In order to tell UIPCX which engine you want to get data from, you have 2 choices: a) Put following line on config file: 1 sim/flightmodel/engine/ENGN_thro _2 This way, when IOCP clients request variable 1, they will be presented the data for engine #2 (first engine is number 0, second is number 1, and so on).. No íbamos desencaminados con lo del cero :D. Vamos que le añadas al nombre del dataref un guión bajo ("_") y el número de motor (empezando por cero), con un tabulador entre entre el nombre del dataref y el "_". Sería poner algo así: 4001 sim/flightmodel/engine/ENGN_N1_ _0 4002 sim/flightmodel/engine/ENGN_N1_ _1 Espero que ya te funcione. Por cierto, para que te sirva en otros casos: si en el tipo del dataref pone un número entre corchetes (float[10], int[2], etc.) es un array. La configuración de ejemplo que incluye es una castaña, porque es una copia exacta del fichero de datarefs.txt, salvo lo del número al inicio de cada línea. Eso no te sirve (y además te ha confundido), ya que incluye información extra (el tipo de dato, si es de lectura o escritura, la versión de x-plane que lo soporta, etc), que probablemente confunde al plugin. Título: Re: datarefs Publicado por: pablozgz en 04 Noviembre, 2009, 21:11:35 Muchas gracias
jvaldunciel has dado en el clavo, ya esta funcionando, te debo una El problema era como se llamaba a esa parte de la variable sim/flightmodel/engine/ENGN_N1_ _0 Mira que le he dado vueltas al dichoso archivo que citas y no lo habia visto Título: Re: datarefs Publicado por: supergolfo en 04 Noviembre, 2009, 21:34:06 Y ya que estamos, qué ventaja tiene este lenguaje frente al C? Este veo que es más automático a la hora de acceder a los datos del simulador. Pero a parte de eso ?
Título: Re: datarefs Publicado por: pablozgz en 04 Noviembre, 2009, 21:51:54 Este lenguaje es el mas rapido que existe para poder manejar las placas de opencokpits y todo lo relacionado con una cabina virtual
El lenguaje es SIOC y si quieres descubrir algo mas lo tienes aqui http://www.opencockpits.com/modules.php?name=Downloads&d_op=viewdownload&cid=34 Hay un curso de SIOC en power point dividido en 5 partes aqui http://www.opencockpits.com/modules.php?name=Downloads&d_op=viewdownload&cid=50 Tambien sirve para hacer tus propios gauges en una pantalla aparte con el programa Gauge composer de Juan Ramon Ascasio que lo puedes conseguir aqui http://www.iocpserver.es/index.php?title=Portada Un saludo Título: Re: datarefs Publicado por: supergolfo en 05 Noviembre, 2009, 18:34:06 Pues en ese caso no sé hasta qué punto puede resultarte óptimo el C ya que es un lenguaje, digamoslo de alguna forma, de uso general. Te va a servir para hacer tus propios plugings, pero quizás no para ese tipo de tareas
Título: Re: datarefs Publicado por: pablozgz en 05 Noviembre, 2009, 21:17:15 Nunca esta de mas saber mas cosas o lenguajes
Un saludo Título: Re: datarefs Publicado por: fsedano en 16 Febrero, 2010, 02:16:35 Hola, soy el autor del plugin que comentais.. ¿Cómo que el fichero de ejemplo es una castaña? :-D
Si teneis mas dudas sobre como usar el plugin o sobre SIOC, etc, no dudeis en preguntarlas. Esencialmente lo que hace el plugin es exportar las datarefs de Xplane a un protocolo basado en IP que se llama IOCP. El IOCP usa unos números de variable, con lo que en la configuración del plugin haces el mapeo: 1 /sim/blah/blah 2 /sim/blu/bluh Etc. Una vez que tienes cargado el plugin, puedes conectarte a el por TCP, puerto 8090 por defecto y, mediante el protocolo IOCP los "clientes" pueden "suscribirse" a los eventos. En el caso de mi cabina, cada instrumento es un cliente. Por lo que el indicador de N1, por ejemplo, se suscribe a la variable "1", que está mapeada al dataref que indica el N1. Cada vez que hay un cambio de N1, el plugin manda un paquetito por TCP/IP al instrumento con el nuevo valor. Menudo chorreo me ha quedado :-) Un saludo y buenos vuelos virtuales! Título: Re: datarefs Publicado por: pablozgz en 16 Febrero, 2010, 13:36:21 Donde has leído que el plugin es una patata?
A mi me funciona perfectamente y el fallo era leer demasiado entrelineas el archivo de ayuda Un saludo PD: Como llevas el plugin con ORION Título: Re: datarefs Publicado por: jvaldunciel en 16 Febrero, 2010, 14:57:48 La configuración de ejemplo que incluye es una castaña, porque es una copia exacta del fichero de datarefs.txt, salvo lo del número al inicio de cada línea. Eso no te sirve (y además te ha confundido), ya que incluye información extra (el tipo de dato, si es de lectura o escritura, la versión de x-plane que lo soporta, etc), que probablemente confunde al plugin. Hola, soy el autor del plugin que comentais.. ¿Cómo que el fichero de ejemplo es una castaña? :-D Para el ejemplo, copiaste directamente el fichero de datarefs, con los tipos, el tamaño, si es de lectura o escritura, etc. No sólo el nombre del dataref. Con lo que el ejemplo no funciona y confunde bastante. Sin embargo el txt si lo explica bien. Pero el plugin me parece la ostia, ya que que da acceso a todos los datarefs de una forma bastante sencilla. Título: Re: datarefs Publicado por: fsedano en 16 Febrero, 2010, 22:05:41 ¿Como que no funciona? Es el que yo uso.
Por otro lado, es la forma mas fácil de tener todos los datarefs. Te los descargas de la página de x-plane (o cojes el que está en el disco, en formato .txt), lo copias a una hoja de cálculo, añades una columna con los números y lo exportas a texto. El resto de cosas las dejé porque son útiles para saber que dataref es ese, y no confunden al plugin (y si lo confunden es un bug, díme donde ves que lo confundan). Un saludo! Título: Re: datarefs Publicado por: jvaldunciel en 17 Febrero, 2010, 00:28:09 Bueno... ejem ... he de decir que yo no uso ese plugin. Supuse que se tragaba la línea entera y evidentemente eso no es el nombre del dataref. Como pablogz tuvo problemas con el dataref sim/flightmodel/engine/ENGN_N1_ supuse que el problema era ese. Me he pasado de listo y me disculpo.
Así que... QUE QUEDE CLARO QUE SU PLUGIN FUNCIONA Y EL EJEMPLO TAMBIEN. Pero con vistas a mejorar ese ejemplo... En el ejemplo tienes líneas de este estilo: 1412 sim/flightmodel/engine/ENGN_N1_ float[8] y percent N1 speed as percent of max (per engine) Tendría que poner: 1412 sim/flightmodel/engine/ENGN_N1_ _0 1413 sim/flightmodel/engine/ENGN_N1_ _1 O algo así. Tienes todos los arrary tal cual viene en el dataref.txt y así tu plugin no funciona como la gente espera para esos dataref. Según pones en tu documentación busca el elemento 1. Si es así, siempre mira el motor número 2. Si sólo hay 1... El hecho de que funcionase así llevó a confusión a pablogz. Veía los datos del motor nº 2, pero no los del 1. Si pones al menos lo de dos motores, se verá claramente como es. Además la gente normalmente no sabe C y no tiene porque saber que es float[8], por ejemplo, no pudiendo deducir que el dataref es un array. Aunque explicas en el manual como configurar un dataref cuando es un array, si no sabe que el dataref es un array, no sabrá configurarlo. Pero si pones un ejemplo con los dos primeros elementos se deduce fácilmente como meter el tercero, el cuarto, etc. Y tras este rollazo que he escrito, espero no haberme pasado de listo otra vez. Título: Re: datarefs Publicado por: fsedano en 17 Febrero, 2010, 01:07:28 Ok, tienes razón en lo de la claridad. La razon por dejarlo como lo hice es para facilitar a la gente actualizar el fichero de datos, ¿te imaginas meterlos a mano? Tal y como lo pongo yo, actualizarlo son 10 segundos de excel o similar.
Por otro lado, los arrays se pueden acceder también sin usar lo del _1, etc. Imaginate esta linea 1412 sim/flightmodel/engine/ENGN_N1_ float[8] y percent N1 speed as percent of max (per engine) Cuando el cliente pregunte por el elemento 1412, obtendrá el N1 del primer motor. Peero, si pregunta por el 1412.1, obtiene el segundo, si pregunta por el 1412.2 el tercero, etc. etc. Un saludo, y a ver si saca Austin el X-Plane 10 ... ¿Habeis leido lo del "caballo de troya"? Grr |