|
Página 1 de 1
|
Autor |
Mensaje |
Yoelcara
Usuario
Registrado: Noviembre 2012
Mensajes: 4
Edad: 57
|
Programador De ITEMS
Saludos a todos.
El hecho de no poder usar hilos en gambas me esta volviendo loco.
Quiero controlar el estado de 300 items. El estado de cada item es simple (ON, OFF).
Necesito poder programar la activacion y la desactivacion de cada uno.
El problema es que solo se me ocurre un control timer que pregunte cada 0.5 segundos al sistema:
.-¿que día es hoy y qué hora es?
Este timer ralentiza el curso del programa.
Sobre todo si uso otro timer para actualizar los datos leidos desde una webcam.
Cada timer adicional que uso me ralentiza el funcionamiento.
Necesito hilos.
Alguna idea? ¿ ?
|
#1 Sabado, 03 May 2014, 11:39 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Programador De ITEMS
Hola Yoelcara:
Citar: El problema es que solo se me ocurre un control timer que pregunte cada 0.5 segundos al sistema:....Este timer ralentiza el curso del programa.....Cada timer adicional que uso me ralentiza el funcionamiento.
¿que delay le estas poniendo al timer?
Ese "consumo" de tiempo no es normal...
Ayer estube probando este programa xt7-player-3 ( http://jsbsan.blogspot.com.es/2014/...r-de-video.html).
Tiene 11 timer (por lo menos que se vean), y funciona perfectamente.
Saludos
última edición por jsbsan el Sabado, 03 May 2014, 12:54; editado 3 veces
|
#2 Sabado, 03 May 2014, 12:52 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Programador De ITEMS
Hola Yoelcara!. ( Mmmm.. "Yo el cara" ).
Bromas aparte.¿ Qué es exactamente lo que quieres hacer ?. ¿ Esos items son leds que forman una palabra o algo ?.
Si es así, hay un tema parecido en la comunidad que ahora no encuentro, 300 items son muchos items.
En el caso de leds hay varios tipos de letras que son parecidas a leds.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#3 Sabado, 03 May 2014, 13:14 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Programador De ITEMS
El problema puede no ser del timer, sino de las operaciones que se realicen dentro su evento.
Aunque intuyo que lo que pretende nuestro amigo es la detección de movimiento en tiempo real a partir de imágenes de webcam, sería bueno disponer de información concreta de cómo se están usando loa timers y algo de código para poder evaluar si es correcto.
No obstante, para ciertos usos donde se requiere mucha eficiencia, es conveniente recurrir a librerías externas escritas en C, ya que gambas es capaz de usarlas muy fácilmente.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#4 Sabado, 03 May 2014, 13:14 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Programador De ITEMS
......el nuestro amigo podría utilizar un pequeño programa (escrito en gambas o en C) de apoyo que envía aquellos datos necesarios.
|
#5 Sabado, 03 May 2014, 15:42 |
|
|
Yoelcara
Usuario
Registrado: Noviembre 2012
Mensajes: 4
Edad: 57
|
Re: Programador De ITEMS
Hola de nuevo.
Ahora mismo solo estoy controlando entradas y salidas de placas Arduino. Cambiando sus estados (HI/LO) y leyendo el estado de las entradas.
El Delay de lectura de entradas lo tengo en 300.
Al mismo tiempo tengo conectada una cámara USB. Actualizo el DrawingArea que muestra la captura con Delay 10.
Cuando pulso el botón que desactiva la lectura desde la cámara no percibo el efecto inmediato de haber pulsado el botón. Sino que noto un lapso de tiempo desde que pulso y la orden es ejecutada, yo lo achaco a los timers.
Preveo un problema:
* Que si quiero programar el estado de gran número de salidas de las placas conectadas al programa y a cada una le aplico un Timer. El programa va a ir a saltos y poca fluidez.
Me interesa vuestra experiencia con los timers, qué habéis notado y qué solución habéis usado.
|
#6 Sabado, 03 May 2014, 16:45 |
|
|
Yoelcara
Usuario
Registrado: Noviembre 2012
Mensajes: 4
Edad: 57
|
Re: Programador De ITEMS
Tengo que introducir un wait para que la imagen se refleje en el DrawingArea, si no lo hago se ve todo negro.
Pero bueno, la duda que tengo en realidad y por la que he abierto este hilo es la programación de la activación y desactivación de los items.
Necesito poder programar cada uno por separado. La programación de cada uno viene condicionada por la hora y fecha de inicio y duración del periodo que el item estará activado. (por supuesto todo esto es criticable, espero vuestra opinión)
A partir de elegir el momento de inicio de la activación del item tenemos dos modos de actuar y controlar el tiempo que el item está activo.
1º Si solo va a funcionar una vez.
2º Si el programa es cíclico.
Podemos tomar como ejemplo la agenda de "Google calendar".
Tengo una tabla donde guardo el estado de cada uno de los items con los campos:
* ID
* PLACA A LA QUE PERTENECE EL PUERTO
* PATILLA/PUERTO DE LA PLACA
* DENOMINACION
* ESTADO (ON,OFF)
* PROGRAMADO (TRUE,FALSE)
* TIPO PROGRAMA (UNICO, CICLICO)
* FECHA INICIO PROGRAMA
* HORA INICIO DE PROGRAMA
* FECHA FIN DE PROGRAMA
* HORA FIN DE PROGRAMA
* DURACION
* REPETIR CADA
* HORAS, DIAS, MESES, AÑOS
Supongo que habría que usar un Timer para comprobar cada 0.5 segundos si en la tabla donde guardo todos los datos del estado de los items hay alguna coincidencia con la hora de inicio de programación y la fecha.
Si la hora de inicio y la fecha coinciden, el programa leerá el ID del item y procederá a activar un timer propio de dicho ID con el delay correspondiente a la casilla de la tabla "duración".
|
#7 Sabado, 03 May 2014, 17:24 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Programador De ITEMS
Yoelcara:
Citar: Que si quiero programar el estado de gran número de salidas de las placas conectadas al programa y a cada una le aplico un Timer. El programa va a ir a saltos y poca fluidez.
Me he perdido... si estas leyendo el puerto serie (el conectado con arduino), lo que tienes que hacer es que el programa de arduino mande una "trama de datos", y que el programa en gambas, lea el puerto serie, lea los datos, lo analice y añade el registro a la base de datos.. o haga lo que tenga que hacer..
por ejemplo:
Si arduino escribe en el puerto serie los datos:
0,1,1,0
(representando cada numero, si esta encendido o no un determinado led)
gambas lee la linea, y la interpreta, escribiendo la horas de encendido/apagado del determinado led, por ejemplo.
Tambien gambas puede escribir en el puerto serie una "trama de datos", que lea el programa de Arduino y lo "interprete", para hacer algo con los led.
última edición por jsbsan el Sabado, 03 May 2014, 17:56; editado 1 vez
|
#8 Sabado, 03 May 2014, 17:53 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Programador De ITEMS
Bueno, parece que voy entendiendo algo más...
Para empezar, no me gusta la forma en la que dibujas dentro del evento del timer. Yo particularmente, usaría el evento Draw del drawingarea para dibujar y en el evento Timer haría un refresh del drawing area. Así no tendría que parar y arrancar el timer dentro de su propio evento, cosa bastante inusual. Además el wait 0.001 está ralentizando todo un montón.
Este código puede que mejore un poco el rendimiento a nivel de dibujo:
' gambas class file
Private hPict As Picture
Public Sub Form_Open()
Timer1.Delay = 10
Timer1.Enabled = True
DrawingArea1.Cached = False 'Importante para que funcione el evento Draw
End
Public Sub DrawingArea1_Draw()
Draw.Picture(hPict, (DrawingArea1.W - hPict.W) \ 2, (DrawingArea1.H - hPict.H) \ 2)
' También se puede usar la clase Paint (hay que comprobar si mejora el rendimiento)
End
Public Sub Timer1_Timer()
' aquí solo asignamos la imagen de la webcam a la variable de clase
' y refrescamos después el drawingarea, ya que será éste último método
' el que disparará el evento Draw (donde realmente dibujaremos)
hPict = hWebCam.Image.Picture
DrawingArea1.Refresh
End
En cuanto a la forma de guardar datos, me pareció entender que usas una base de datos. Sin saber cuánto tiempo han de permanecer los datos almacenados, es difícil darte un consejo, pero se me ocurre que si hablamos sólo de minutos, o de unos cientos (o miles) de registros, podríamos recurrir al almacenamiento en memoria, lo cual aceleraría enormemente el acceso. Para ello, puedes definir un array dinámico de estructuras (o de tipos, como se hacía antiguamente en VB) que iría creciendo por la derecha y decreciendo por la izquierda, es decir, eliminando los elementos antiguos innecesarios.
Esquemáticamente podría ser así:
Las rutinas o algoritmos de búsqueda y comparación los desconozco, pero supongo que de alguna forma se podrían aplicar al array que hemos definido.
Dependiendo de las necesidades de tu programa, puedes crear tantos elementos 'Item' como necesites... supongo que hasta unos cuantos miles, no ocuparán demasiada memoria, pero eso es algo que tendrás que evaluar, sobre todo si estás usando algún dispositivo como Raspberry Pi, con RAM algo limitada.
Bien, espero haberte dado algunas pistas para refinar tu programa y que sea más fluido. Si tienes más dudas, por aquí estaremos.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#9 Domingo, 04 May 2014, 00:45 |
|
|
Yoelcara
Usuario
Registrado: Noviembre 2012
Mensajes: 4
Edad: 57
|
Re: Programador De ITEMS
Con estas modificaciones el programa adquiere bastante mas velocidad. Muchas gracias por el apunte.
Ahora uso varios Timer simultáneos y el funcionamiento del programa es fluido.
Muchas gracias.
|
#10 Martes, 06 May 2014, 13:23 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|