La Web del Programador: Comunidad de Programadores
https://www.lawebdelprogramador.com/foros/LabView/664111-String-Indicator.html

String Indicator

String Indicator

Publicado por Leopoldo (20 intervenciones) el 17/07/2006 15:41:56
Estoy utilizando un string indicator para presentar los datos de entrada por el puerto serie pero necesito que la presentación se refresque y no pase como ahora que lo que llega se va quedando y llenando como si se tratase de una hoja, en realidad lo que presenta es un menú del aparato con que comunico y lo que quiero es que el menu este estatico y se vaya refrescando para ver los datos que cambian, son 4 lineas con 3 textos de 7 caracteres y uno de separacion, algo asi:

opcion1 opcion2 opcion3
opcion4 opcion5 opcion6
opcion7 opcion8 opcion9

dependiendo de la orden que envíe presentara otra pantalla con diferenres opciones también

No se si he sabido explicarme de lo que necesito hacer
sin imagen de perfil

RE:String Indicator

Publicado por Edgar Muñoz (108 intervenciones) el 17/07/2006 21:28:12
La verdad no comprendo muy bien tu problema, porque el indicador String se 'refresca' cada vez que se ejecuta la función VISA Read.

Es posible que tengas la función VISA Read dentro de un For Loop o un While Loop (con el indexado habilitado) y el indicador por fuera. En este caso el indicador es de tipo Array (de String) y te muestra las últimas adquisiciones realizadas.

Para evitar este efecto debes ubicar el indicador dentro del For o del While Loop inmediatamente después del VISA Read.

Espero que esta explicación te ayude o sino sería bueno que me explique mejor tu problema y lo que pretendes realizar.

RE:String Indicator

Publicado por Leopoldo (20 intervenciones) el 17/07/2006 21:59:43
El visa read está dentro de un case para habilitar la lectura del puerto, y no estoy usando un bucle.
Lo que me sucede es que lo que va recibiendo se va quedando dentro del indicador y si pongo una barra de desplazamiento vertical se ve como se va llenando y eso es lo que no quiero que suceda.
Si hago la comunicacion usando el hyperterminal de windows lo que sale es un menu de tres lineas que se queda estatico y se va refrescando,siempre son tres lineas mientras que si lo hago en labwiev además de presentarlo descolocado el indicador va refrescando añadiendo lineas y mas lineas.
Lo que necesito es emular un terminal VT100
Espero haber sido mas claro esta vez.
Saludos
sin imagen de perfil

RE:String Indicator

Publicado por Edgar Muñoz (108 intervenciones) el 17/07/2006 22:19:53
Puede ser que estés enviando el comando al instrumento varias veces antes de leer el puerto (de hecho creo que ese es el problema), asegúrate que las funciones VISA Write y VISA Read se encuentren dentro del Case Structure para que la lectura se realice cada vez que envíes un comando.

También es posible que:

El timeout no sea suficiente para leer todos los datos, asegúrate que el valor sea el adecuado (esto se hace experimentalmente en el VISA Configure Serial Port.vi).

En la comunicación se estén enviando caracteres linefeed (valor haxadecimal 0xA o 10 decimal) desde el instrumento como si fueran datos, en este caso debes conectar una constante Boolean False al terminal Enable Termination Char para deshabilitar el carácter de terminación (que es precisamente 0xA por defecto).

Espero que soluciones tu problema.

RE:String Indicator

Publicado por Leopoldo (20 intervenciones) el 18/07/2006 18:43:16
Hola, ya no salta de linea y tambien se que es lo que me esta volviendo loco y es lo que me falta para terminar el proyecto.
Lo que sucede es lo siguiente, el aparato a controlar presenta 4 lineas con 24 caracteres cada una, las tres primeras son una especie de menu de opciones muy básico y la cuarta es una presentacion de estado, pues lo que sucede es que el aparato en cuestión manda las cuatro lineas y despues solo manda la ultima que es la que se va refrescando.
Lo que yo necesito conseguir es que se presenten las 4 lineas, siempre y ademas la cuarta se refresque y que en el caso de que mande yo alguna orden y se produzca un cambio en el menu que recibo se refresque la presentacion entera.
Intentare explicartelo de un modo mas gráfico.

El string indicator debe de presentar algo asi:

opcion1 opcion2 opcion3
opcion4 opcion5 opcion6
opcion7 opcion8 opcion9

estado1 estado2 estado3

La parte de estado es la que se refresca de continuo, la parte de opcion solo la manda una vez y hasta que no cambie algo no vuelve a mandarlo por lo que a mi solo se me queda la linea de estado y la de opción desaparece y eso es lo que no quiero pues el usuario debe de verlo todo para poder saber que opciones tiene.
Espero haberme hecho entender.

He buscado la manera de que se coloque el texto como yo quiera en el string indicator pero no veo como

Saludos
sin imagen de perfil

RE:String Indicator

Publicado por Edgar Muñoz (108 intervenciones) el 18/07/2006 18:53:35
Debes buscar en la documentación de tu instrumento si hay algún comando que te envíe el menú de opciones. Con esto haces dos lecturas del puerto (la de opciones y la de estados, con los comandos correspondientes) y las unes en un solo String con la función Concatenate String.

Creo que el problema del texto se produce porque no utilizas una fuente monótona (los caracteres tienen igual ancho). Utiliza la fuente Courier New y mira que sucede, para esto seleccionas String y haces click en el listbox de la barra de herramientas.

RE:String Indicator

Publicado por Leopoldo (20 intervenciones) el 19/07/2006 16:09:24
Ya he logrado descifrar lo que se recibe por el puerto y es algo asi:
[0;0H "esto parece que sea una indicacion de donde debe de colocar el txto"

despues vienen uno, dos o tres saltos de linea con el caracter "A"en hexadecimal dependiendo de donde deba ser colocada mas o menos sería asi:

[0;0HAtexto1 texto2 texto3[0;0HAAtexto4 texto5 texto6[0;0HAAAtexto7 texto8 texto9 y vuelta a empezar, con la letra A he querido expresar el salto de linea

Pues lo que deseo conseguir es que lo presente en un string indicator de manera coherente porque lo que ocurre es que me lo presenta todo en la misma linea y va alternandose con lo que no hay manera de leer nada, quiero que una vez que lo presenta lo mantenga y solo lo refresque deberia quedar presentado asi todo el tiempo

texto1 texto2 texto3
texto4 texto5 texto6
texto7 texto8 texto9

a ver si puedes ayudarme porque esto me esta costando de lo lindo.
sin imagen de perfil

RE:String Indicator

Publicado por Edgar Muñoz (108 intervenciones) el 19/07/2006 22:37:29
Debes utilizar la función Search and Replace String (en realidad 3 de estas funciones).

Conecta una constante Boolean True a todas las entradas 'replace all?' de las funciones.

En la primera, conecta en el terminal de entrada 'string' el texto original, en el terminal 'search string' conecta una constante string que contenga el texto "0;0H", conectas la salida 'result string' a la entrada 'string' de la segunda función.

En la segunda, en el terminal 'search string' conecta una constante String con el texto "A", conectas la salida 'result string' a la entrada 'string' de la tercera función.

En la tercera, en el terminal 'search string' conecta una constante String con el texto "[", en la entrada 'replace string' conectas una constante Carriage Return(esta constante está en la subpaleta String ). El resultado final lo obtienes en la salida 'result string' .

Espero que te sea de ayuda

RE:String Indicator

Publicado por Leopoldo (20 intervenciones) el 20/07/2006 18:08:31
Hola Edgar ante todo muchas gracias por las molestias que te estas tomando, la solución que propones es justamente la que yo habia implementado y efectivamente lo coloca como debe pero se produce un desagradable parpadeo en la presentacion, debe de ser debido al refresco de datos o no se, es lo que me falta por pulir, eliminar el molesto parpadeo, es decir que solo actualice la presentacion cuando se produzca alguna variacion en lo que esta presentando como puede ser un cambio de opción del menú.
A ver si conoces alguna funcion que lo haga

Muchas gracias de nuevo