Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Enviar Datos Usando SerialPort
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Enviar Datos Usando SerialPort 
 
Comento lo siguiente:
En el trabajo usamos controles de acceso que corren bajo Windows y no es mucho negocio. Entonces pensé en crear una aplicación sencilla para administrarlos. Se conectan mediante puerto serie, pero tenemos un adaptador a USB.

He intentado enviar comandos de acuerdo a ésta documentación.

Lo que no comprendo es qué y cómo enviar correctamente. Dice:

Data Format: Binary Hex Data
Después dice: Head, length, etc. todos 8 bits

La verdad que si pudiera superar ésta brecha podría desarrollar algo sencillo para cargar usuarios y ése tipo de cosas. Sería algo más que útil para mi trabajo. Desde ya, agradezco la ayuda.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Enviar Datos Usando SerialPort 
 
Pues con el ejemplo del documento lo puedes comprender.
Para enviar una instrucción es una trama de datos con la siguiente estructura:

Head (encabezado) - 1 byte de longitud
Creo siempre es 0x7E

Length (longitud) - 1 byte de longitud
Es la cantidad de bytes desde el campo 'Destination ID' (es el siguiente) hasta el final de la trama. Incluyendo los campos XOR y SUM.

Destination ID (ID de destino) - 1 byte de longitud
El ID lo obtienes desde el dispositivo, ve el manual para saber cómo.

Command (comando, orden) - 1 byte de longitud
Es la instrucción en si misma, en el documento vienen los diferentes comandos.

Data (datos) - longitud variable desde 0x00 hasta 0xD0
Los datos a ocupar para el comando dado. Data puede no existir.

XOR (OR exclusiva) - 1 byte de longitud
Realiza la operación lógica XOR (OR exclusiva) de cada byte desde 'Destination ID' hasta el bloque 'Data' con el valor 0xFF.

SUM (suma) - 1 byte de longitud
Suma todos los bytes desde 'Destination ID' hasta 'XOR'. Si la suma es mayor a 0xFF quedarse con el byte más bajo.

El ejemplo del documento es la siguiente trama:

0x7E    0x04    0x01    0x18    0xE6    0xFF
head    length  ID        CMD    XOR     SUM

length es 0x04 porque son 4 bytes que le siguen.
El ID para este ejemplo es 0x01, pero ese depende del de tu dispositivo.
El comando para este ejemplo es 0x18.
Data en este ejemplo no existe.
XOR es 0xE6 dado que 0xFF XOR 0x01 XOR 0x18 = 0xE6.
SUM = 0x01 + 0x18 + 0xE6.

Nota01: Espero estés familiarizado con operaciones binarias y con el sistema hexadecimal.
Nota02: La información que te he dado es la que saqué del documento que pasaste.

Saludos!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Enviar Datos Usando SerialPort 
 
Como verás, entiendo muy poco sobre lo que estoy tratando de dilucidar. He leído tus explicaciones y lo único que se me ha ocurrido es lo siguiente:

DIM A AS Byte
DIM B AS Byte
DIM C AS Byte
DIM D AS Byte
DIM E AS Byte
DIM F AS Byte

A = &7E&
B = &04&
C = &01&
D = &18&
E = &E6&
F = &FF&

  WRITE #Sport, A, Lof(Sport)
  WRITE #Sport, B, Lof(Sport)
  WRITE #Sport, C, Lof(Sport)
  WRITE #Sport, D, Lof(Sport)
  WRITE #Sport, E, Lof(Sport)
  WRITE #Sport, F, Lof(Sport)


El adaptador tiene dos luces, una verde "-RX" y una roja "-TX". Cuando envío datos con el código de arriba la luz roja se enciende... la verde nada. Gracias por tu ayuda raza.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Enviar Datos Usando SerialPort 
 
razaAztk escribió: [Ver mensaje]
Pues con el ejemplo del documento lo puedes comprender.
Para enviar una instrucción es una trama de datos con la siguiente estructura:

Head (encabezado) - 1 byte de longitud
Creo siempre es 0x7E

Length (longitud) - 1 byte de longitud
Es la cantidad de bytes desde el campo 'Destination ID' (es el siguiente) hasta el final de la trama. Incluyendo los campos XOR y SUM.

Destination ID (ID de destino) - 1 byte de longitud
El ID lo obtienes desde el dispositivo, ve el manual para saber cómo.

Command (comando, orden) - 1 byte de longitud
Es la instrucción en si misma, en el documento vienen los diferentes comandos.

Data (datos) - longitud variable desde 0x00 hasta 0xD0
Los datos a ocupar para el comando dado. Data puede no existir.

XOR (OR exclusiva) - 1 byte de longitud
Realiza la operación lógica XOR (OR exclusiva) de cada byte desde 'Destination ID' hasta el bloque 'Data' con el valor 0xFF.

SUM (suma) - 1 byte de longitud
Suma todos los bytes desde 'Destination ID' hasta 'XOR'. Si la suma es mayor a 0xFF quedarse con el byte más bajo.

El ejemplo del documento es la siguiente trama:

0x7E    0x04    0x01    0x18    0xE6    0xFF
head    length  ID        CMD    XOR     SUM

length es 0x04 porque son 4 bytes que le siguen.
El ID para este ejemplo es 0x01, pero ese depende del de tu dispositivo.
El comando para este ejemplo es 0x18.
Data en este ejemplo no existe.
XOR es 0xE6 dado que 0xFF XOR 0x01 XOR 0x18 = 0xE6.
SUM = 0x01 + 0x18 + 0xE6.

Nota01: Espero estés familiarizado con operaciones binarias y con el sistema hexadecimal.
Nota02: La información que te he dado es la que saqué del documento que pasaste.

Saludos!


Raza:

Logré enviar datos a través de gambas y obtener respuesta, pero tengo un gran problema:

La manera en que puedo enviar los datos es haciendo un PRINT el el puerto serial con la siguiente STRING:

"\x7E\x04\x01\x18\xE6\xFF"

Sucede que manipular eso me ha traído dolores de cabeza que persisten todavía porque si a mi se me ocurre enviar algo que sea distinto de "\x7E\x04\x01\x18\xE6\xFF", por ejemplo: "\x7E" & "\x04" etc. obtengo el mensaje de error "Bad character string" y no puedo iniciar el programa. Es fundamental que pueda construir esa string a partir de cálculos, por ejemplo, si quisiera que otra función le diga que tiene que manipular otro nodo diferente, por ejemplo el nodo 10 (en hexa 16) debería modificar "\x01" por "\x16" y no encuentro manera de manipular las strings con "\x". He visto que la manera de representar un numero hexadecimal como string es poniendo delante "\x". Estoy atasacado, no sé como manejar éste problema. Imagino que hay alguna manera formal de enviar datos al stream como hexadecimales, pero no la encuentro. Si yo envio directamente &7E, etc. el equipo no responde.

Gracias por tu ayuda.
 



 
drjuano - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Enviar Datos Usando SerialPort 
 
Para los datos hexadecimales es con &H, ejemplo &HAA.

A mi me funciona algo como:

PRINT #SerialPortX, "\xAA" & "\xBB";
 


El punto y coma ";" al final es importante para que no te imprima un salto de línea.


Experimentando he logrado hacer esto, espero te sirva:

  DIM IDX AS Byte
  DIM LENX AS Byte
  DIM CMDX AS Byte
  DIM DATX AS String
  DIM SUMX AS Byte
  DIM XORX AS Byte
  DIM i AS Integer

  IDX = &H01 'ID del dispositivo, puede cambiar
  CMDX = &H18 'Comando, puede cambiar
  DATX = "abc" 'Data a envíar, puede cambiar

  LENX = &H04 + Len(DATX)
  XORX = &HFF XOR IDX XOR CMDX
  SUMX = IDX + CMDX
  FOR i = 1 TO Len(DATX)
    XORX = XORX XOR Asc(DATX, i)
    SUMX = SUMX + Asc(DATX, i)
  NEXT
  SUMX = SUMX + XORX

  PRINT #SPort, "\x7E" & Chr$(LENX) & Chr$(IDX) & Chr$(CMDX) & DATX & Chr$(XORX) & Chr$(SUMX);
 


Saludos!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Enviar Datos Usando SerialPort 
 
Amigo Raza:

Gracias por tu código. Te comunico que encontré la forma de mandar los datos. Es bastante diferente a la que me mostrás:

PUBLIC SUB SPortEscritura()
  
  $Sal.Write(SPort)
  
END


dónde &Sal.Write es String[]

Primero almaceno todo y luego ejecuto ése comando. Ahora estoy haciendo al capa de comandos y luego terminaré con el manejo de datos. Mil gracias por tu ayuda, será valiosa.
 



 
drjuano - 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 Enviar Datos A Través De Internet Oleguer Controles/Librerías/Componentes 8 Jueves, 27 Diciembre 2012, 08:31 Ver último mensaje
codificador
No hay nuevos mensajes Como Enviar Un Valor De Un Formulario A Ot... metalgearxd General 4 Miercoles, 20 Febrero 2013, 09:51 Ver último mensaje
shordi
No hay nuevos mensajes Guardar Los Archivos De Datos De Un Progra... jsbsan General 7 Martes, 23 Diciembre 2014, 14:39 Ver último mensaje
jsbsan
No hay nuevos mensajes Enviar Datos A Mi Web inforpalma General 2 Martes, 11 Junio 2019, 22:00 Ver último mensaje
inforpalma
 

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

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
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