Código de Access - Modulo para E/S puertos RS232

Requerimientos

Access 2000 o superior

0.1
estrellaestrellaestrellaestrellaestrella(14)

Publicado el 11 de Julio del 2019gráfica de visualizaciones de la versión: 0.1
5.444 visualizaciones desde el 11 de Julio del 2019
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Si alguno de los archivos de descarga no funciona, comentanos aquí el error.




Comentarios sobre la versión: 0.1 (14)

Imágen de perfil
12 de Julio del 2019
estrellaestrellaestrellaestrellaestrella
Estoy haciendo una aplicación de comunicacion por puerto serial com1 por RS-232, esta libreria puede servir para mi proyecto porque lo estoy haciendo en C++. Tu crees que se pueda usar para VBA bajo Excel?
Responder
Imágen de perfil
14 de Julio del 2019
estrellaestrellaestrellaestrellaestrella
Buenas noches. Soy programador en VBA para Excel. Lo analicé y no hay una función para enviar dados por el puerto serial. Tienes alguna que me pueda servir?, Tienes algún manual o documentación? Gracias
Responder
Imágen de perfil
15 de Julio del 2019
estrellaestrellaestrellaestrellaestrella
Buenas tardes, estoy usando las funciones de puerto Serial desde Access y me da un error de Sintaxsis cuando llamo la funcion de OpenPort() o InitPort() en el la instruccion:

1
RaiseEvent ErrorComm(GetLastError, "InitPort", "clsComm")

Estoy haciendo un programa que reciba datos por el puerto Serial RS232 y los guarde en una Base de datos y si lo hago en access seria perfecto... Gracias y Saludos
Responder
Imágen de perfil
8 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
Buenos dias amigo. Escribí una pequeña rutina basada en tu codigo de comunicacion por puerto serial. Quisiera daber tu opinion porque no tengo muy claro la parte de ReadPort(). Esta función lee directamente del puerto la informacion y la guarda en el string? o hay que pasar por la información por ArrayByteToString() antes de guardar en la tabla de datos?

Este es el codigo fuente:

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
Sub Recibir()
    Dim AbrirP, ConfigP, CerrarP As Boolean
    Dim ContarP As Long
    Dim Rafaga, Cadena, CadenaReg As String
    Dim OK As Boolean
    Dim Fun As New clsComm
    Dim Mensaje, Mensaje1, Mensaje2, Estilo, Titulo1, Cuadro1, Cuadro2, Cuadro3, Cuadro4, Cuadro5
    Dim Mensaje3, Mensaje4, Mensaje5
 
    Estilo = vbOKOnly + vbDefaultButton2
    Titulo1 = "Mensaje Importante"
 
    ContarP = Fun.CountPort()
    Mensaje1 = "Cantidad de Puertos: " & ContarP
    Cuadro1 = MsgBox(Mensaje1, Estilo, Titulo1)
 
    AbrirP = Fun.OpenPort(eCom1, 256, 256)
    Mensaje2 = "Apertura exitosa de Puerto Com1: " & AbrirP
    Cuadro2 = MsgBox(Mensaje2, Estilo, Titulo1)
 
    ConfigP = Fun.InitPort(eBr9600, eByte7, eOdd, eOne5StopBit)
    Mensaje3 = "Configuración de Puerto a 9600, 7, Odd, 1: " & ConfigP
    Cuadro3 = MsgBox(Mensaje3, Estilo, Titulo1)
 
    Rafaga = Fun.ReadPort(1)
    Rafaga = "Prueba de Recepcion de Datos"
    Mensaje4 = "Datos Recibidos por el Puerto: " & Rafaga
    Cuadro4 = MsgBox(Mensaje4, Estilo, Titulo1)
 
    CerrarP = Fun.ClosePort()
    Mensaje5 = "Cierre Exitoso de Puerto: " & CerrarP
    Cuadro5 = MsgBox(Mensaje5, Estilo, Titulo1)
 
    DoCmd.SetWarnings False
    CadenaReg = "insert into Recibido (Rafaga_Coulter) Values ( '" & Rafaga & "' )"
    DoCmd.RunSQL CadenaReg
    DoCmd.SetWarnings True
End Sub

Saludos.
Responder
Imágen de perfil
9 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
Hola

CountPort() lo que da es la cantidad de bytes que hay en el buffer del puerto serial, o cuantos bytes han llegado al puerto

ArrayByteToString() es usado por ReadPort() para convertir un array en cadena, si miras en ReadPort() hay una variable array de tipo byte llamada lpBuffer ese array lo llena ReadFile() por lo tanto se debe convertir lpBuffer a String para devolverlo en la funcion

Saludos
Responder
Imágen de perfil
9 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
ok ya entendí el punto. Me preocupa es el argumento de ReadPort() si pudiera leer todo lo que llega por el puerto mejor pero voy a hacer una rutina con un bucle para leer todo... Gracias y Saludos
Responder
Imágen de perfil
12 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
Par leer todo lo que esta en el puerto puede hacerlo de la siguiente manera

1
2
3
IF Fun.CountPort() > 0 THEN
    sCad = Fun.ReadPort(Fun.CountPort())
END IF

Saludos
Responder
Imágen de perfil
9 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
Si quieres me mandas tu correo y por ahi intercambiamos información. El mio es: [email protected]
Responder
Imágen de perfil
12 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
Responder
Imágen de perfil
13 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
Intenté hacer una prueba con un archivo en VBA desde Excel y se me quedó colgado. Eliminé estas instrucciones del codigo:

1
2
3
4
' If ReadFile(hCom, lpBuffer(0), nBytesToRead, nBytesRead, ByVal 0&) = 0 Then
'     RaiseEvent ErrorComm(GetLastError, "ReadPort", "clsComm")
'     Exit Function
' End If

Cuando le puse comentario la macro funcionó pero el problema es que cuando envié datos desde la otra PC la función CountPort me reporto que encontró 1058 bytes en el puerto, pero la función
ReadPort = ArrayByteToString(lpBuffer()) no leyó nada...

Me falta hacer la prueba con access... voy a intentarlo esta semana... y voy a probar con la que acabas de enviar...

Saludos
Responder
Imágen de perfil
19 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
Buenos días Francisco. Pude probar el programa de comunicación utilizando tu librería de funciones y con el protocolo de: 9600 Bps, Tamaño de Bytes: 8, Parity: Odd, StopBit: 1. y funcionó. El problema es que al parecer lo manda por lotes o no sé si el buffer es muy pequeño. En la función OpenPort le puse 256 de Buffer y el mensaje llega incompleto y le puse 1024 de buffer y termino colgado... Lo volví a colocar en 256 y fue la forma como funcionó pero el mensaje llega incompleto. También descargué de esta página un programa en Visual Basic que se llama Indicador que es genérico para probar comunicaciones y noté que el mensaje se corta 4 veces y lo que lee el mío desde el puerto es el último bloque... los tres anteriores no los ve. No sé qué pueda estar pasando. Si tienes alguna idea...

Gracias.
Saludos
Responder
Imágen de perfil
20 de Agosto del 2019
estrellaestrellaestrellaestrellaestrella
Buen día


Lo primero que tienes que hacer establecer un protocolo al menos de lectura

1) Cuales son los caracteres de inicio (STX) o final (ETX) de la cadena

2) Debe saber si el mensaje se recibe como binario HEX o ASCII (Texto Claro)

2) Cual es la longitud del mensaje, si es fijo o dinámico


La lógica a seguir en estos casos es

a) Abrir puerto

b) Esperar por el carácter STX en un ciclo o por un tiempo X en segundos si no llega el carácter entonces se devuelve un error por TIMEOUT , se cierra el puerto y termina el procedimiento

c) Ya tenemos nuestro STX entonces leemos el resto de la cadena

c.1) Si es fijo se lee ReadPort(LEN_CANDENA) y se guarda en una variable , se cierra el puerto y se termina el procedimiento

c.2) Si la cadena es longitud variable entonces en un ciclo se arma la cadena usando var:= var & ReadPort(1) hasta que consiga el ETX, se cierra el puerto y termina el proceso

d) Normalmente o por lo general pero no siempre, se envía un CheckSum() al final de la cadena antes de ETX, sea fijo o dinamico en la medida que recibas debes calcular el checksum() para comprobar si es valido el mensaje

e) A veces, según el propósito de tu programa un mensaje puede contener varias cosas y es necesario tokenizar el mensaje usando cualquier técnica de parsing, esto se hace luego de haber recibido toda la cadena, imagínate pues un GPS que envía latitud, logitud y altura en metros, los tres valores en una cadena y estos valores separados por coma, se vería mas o menos así: STX30.9987847,12.0934583,1200ETX


Esperando haber aclarado tus dudas
Responder
Alba
10 de Noviembre del 2021
estrellaestrellaestrellaestrellaestrella
Todavía no lo he probado, pero tiene muy buena pinta.

Lo voy a probar en Access 2019, y ya te diré qué tal ha ido.
Responder
nacho
27 de Noviembre del 2021
estrellaestrellaestrellaestrellaestrella
prodrias enviar un ejemplo par enviar datos?
Responder

Comentar la versión: 0.1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5415