Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Programador De ITEMS
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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? ¿ ?
 



 
Yoelcara - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Sabado, 03 May 2014, 12:54; editado 3 veces 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
Yoelcara - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Programador De ITEMS 
 
Public Sub Timer1_Timer()
  Dim hPict As Picture

  Timer1.Enabled = False

  'Try PictureBox1.Picture = hWebCam.Picture
  hPict = hWebCam.Image.Picture
  Draw.Begin(DrawingArea1)
  
  Draw.Picture(hPict, (DrawingArea1.W - hPict.W) \ 2, (DrawingArea1.H - hPict.H) \ 2)
  Draw.End
  Wait 0.001
  
  Timer1.Enabled = True

End




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".
 



 
Yoelcara - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Sabado, 03 May 2014, 17:56; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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í:

Private Const UNICO As Integer = 1
Private Const CICLICO As Integer = 2

Public Struct Item
    Id As Integer
    Placa As Integer
    Nombre As String
    Estado As Boolean
    Programado As Boolean
    Tipo As Integer
    ' etc, etc

End Struct

Private Items As New Item[] ' array contenedor de todos los items

Public Sub Main()

    ' Definimos los datos del primer ítem
    Dim newItem As Item

    newItem.Id = 1
    newItem.Placa = 6
    newItem.Nombre = "servo derecho"
    newItem.Estado = True
    newItem.Programado = False
    newItem.Tipo = UNICO
    ' etc

    Items.Add(newItem) 'añadimos (guardamos) la estructura al array

    If Items.Count > 100 Then Items.Remove(0) ' elimina el primer y más antiguo elemento

    'Más info sobre arrays de objetos: http://gambaswiki.org/wiki/comp/gb/object[]

End
 


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"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
Yoelcara - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Seleccionar ITEMS De Dos Column Viewer Cubel General 1 Martes, 22 Junio 2010, 18:30 Ver último mensaje
Emmet
No hay nuevos mensajes Acerca De Arreglos Dinámicos De Clases De... santijav Controles/Librerías/Componentes 1 Lunes, 30 Diciembre 2013, 22:28 Ver último mensaje
jsbsan
No hay nuevos mensajes Busco Programador GAMBAS Para Adaptación ... kobukis General 0 Martes, 31 Octobre 2017, 02:44 Ver último mensaje
kobukis
No hay nuevos mensajes ¿Que Hago Para Trabajar De Programador En... Shell Off-topic 1 Domingo, 12 Abril 2020, 15:10 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron