Visual Basic - Detectar velocidad con puerto serial

Life is soft - evento anual de software empresarial
   
Vista:

Detectar velocidad con puerto serial

Publicado por guid (1 intervención) el 23/06/2014 03:37:26
HOla gente, soy nuevo en el foro. Tenía unas dudas con un soft que estoy armando en visual basic.

Arme un circuito que tiene 2 sensores de luz compuestos por fototransistores que activan los puertos CD y RSD.

Cuando se activa el primer sensor utilizo el API QueryPerformanceCounterAny para registrar ese valor. Cuando el segundo sensor es activado se usa de nuevo el API QueryPerformanceCounterAny, luego se resta TiempoFinal - TiempoInicial y se cuanto transcurrio en pasar el objeto entre sensor y sensor. Como la distancia entre sensores es conocida se puede despejar la velocidad en mts/s o la unidad que sea.

Esto lo hice para medir la velocidad de un balín de aire comprimido.
Arme uno igual con el puerto LPT y funciona EXCELENTE.
Dije, uso un conversor USB-Serial y lo hago mas compatible.

Pero si los comparo, en velocidades de un dedo moviendose rapido, miden lo mismo.

Pero en velocidades altas como 200mts/s el que utiliza el puerto serial mide mucho menos velocidad que el LPT que funciona bien.

El objeto pasaría entre ambos sensores en aprox. 0.5miliSegundos

Sera un tema del boudrate?


Alguna idea??'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Private Sub Form_Load()
On Error Resume Next
 
If comm1.PortOpen Then
comm1.PortOpen = False
End If
 
comm1.CommPort = 5
comm1.Settings = "9600,N,8,1"
comm1.RTSEnable = False
comm1.DTREnable = False
comm1.Handshaking = 0
comm1.InBufferSize = 1
comm1.InputLen = 0
comm1.RThreshold = 0
comm1.NullDiscard = False
comm1.CTSTimeout = 0
comm1.CDTimeout = 0
comm1.DSRTimeout = 0
 
Primero=0
' por si el puerto ya está abierto por otra aplicación
comm1.PortOpen = True
end sub
 
Private Sub comm1_OnComm()
 
    Select Case comm1.CommEvent
 
    Case comEvReceive
        Case comEvDSR
            If comm1.DSRHolding = True Then
                QueryPerformanceCounterAny startTime
                Primero = 1
            End If
 
        Case comEvCD
            If comm1.CDHolding Then
                If Primero = 1 Then
                    QueryPerformanceFrequencyAny frequency
                    QueryPerformanceCounterAny endTime
                    result = ((endTime - startTime) / frequency) * 1000
                    result = (result / 0.085) / 1000
                    result = 1 / result
                    resultmts = result
                    result = result * 3.28083989501
                    Masa = Round((6.479891 * cmbGrains.Text) / 100000, 6)
                    Energia = 0.5 * Masa * ((resultmts) * (resultmts))
 
                    lblJoules.Caption = Round(Energia, 2) & " Joules"
                    lblVelFps.Caption = Round(result, 2) & " fps"
                    Primero = 0
                    Sleep (1500)
                    lblVelFps.Caption = "...."
                    lblJoules.Caption = "...."
                End If
            End If
    End Select
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Detectar velocidad con puerto serial

Publicado por Pico (114 intervenciones) el 23/06/2014 14:00:26
Es perfectamente posible que sea por el baudrate. Ten en cuenta que le mandas una señal de que hay datos, así que el driver del puerto se pondrá a leer esos datos cada vez, a 9600 tarda un rato largo, y no hará otra cosa hasta que acabe. Si cuentas con un comm moderno puedes ponerlo a 256000. Prueba a ver.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar