Hola El tema del que les quiero hablar es para los que usamos el puerto lpt en vb6 y queremos leer datos desde el statusport con la libreria inpout32.dll
El problema con el que me tope es que lee super facil
statusport = Inp(&H379)
y esto lo leemos cada intervalo de tiempo con el timer puesto en cierto intervalo
timer1.interval= 50 o 80 o 100 o 20 diferentes valores
pero esto falla cuando leeemos valores enviados rapidisimo por ejemplo un pagador de monedas las revoluciones de un motor etc..
falla por que cuando vuelve a leer el statusport este ya cambio y volvio a la normalidad es decir yo quiero leer unos 1 y mi aparato a medir motor ya mando un 101 en lo que mi timer salto en ese intervalo y leyo un solo 1
o bien el segundo caso el motor trabajo mas lento y el timer ya leyo 3 intervalos y este motor solo esta en 1/16 del giro si en ese 16 de giro prende o acciona algo y mi pc debe leer cada que lo acciona otra vez falla por que el timer lee 3 lineas marcando que ya dio 3 tres unos "1" o dos o 4 etc.. y el motor no ha dado ni un 1 esta en 00000000
no se si me explique pero quien haya tenido este problema me entendera a la perfeccion
lo ideal para resolver esto seria que el statusport solo cambiara cuando cmabia su lectura sin hacer intervalos de tiempo para leerlo
Bueno pues para resolverlo se me ocurrio algo la verdad muy facil con el mismo timer este solo debe cambiar una vez que lea un cambio total de 360 grados es decir un 0 y un 1 y no solo un 1 o un 0 como es acostumbrado
ejemplo de mi programa usando un etado de lectura de 11101
f variable usada para crear contador
accion prender apagar algo despues de que de x giros en los que mi programa decide despues de cada que tanto intervalo de giro de 360 grados del motor acciono algo
formload()
Out &H378, 15 "mitad corriente mitad tierra ideal para un transistor y un rele"
timer1.interval=20 "emasiado pequeño como para que se le vaya algo"
timer1_timer()
statusport = Inp(&H379)
If (statusport = 143) And d = 0 Then
d = d + 1
End If
""ahi ley 0001
If (statusport = 111) And d > 0 Then "111 es decimal binario es 11101"
t = 1
f = (f - t)
If f > 0 Then
Label1.Caption = (f)
d = 0
Else
Out &H378, 255
WindowsMediaPlayer1.URL = "C:\e.mid"
Label1.Caption = "0"
Picture9.Visible = False
d = 0
End If
End If
solo se activo si dio el cambio completo
Se los dejo y si algun dia chocan con este problema les sea de ayuda ya que a mi me funciono
La idea principal es reducir el intervalo del timer muy pequeño y solo leer el dato despues de que haya sido totalmente cambiado
por ejemplo
10
110
001
01
0001
1110
leo el valor hasta que este cambia
Saludos