leer y escribir datos en puertos seriales

3
Leer y escribir datos en puertos seriales Una pregunta recurrente que me suelen preguntar es la relacionada a cómo hacer X o Y a través de los puertos seriales. Es decir, cómo lograr interactuar con algún hardware conectado al puerto serial. La respuesta a esto es sencilla. Un puerto serial no "controla" a un dispositivo. Simplemente sirve de comunicación entre la PC y el hardware. En otras palabras, tienes que enviarle bytes de información a través del puerto serial, o bien, leer esos bytes del propio puerto e interpretarlos. Pero siempre debes saber, de antemano, qué bytes está esperando, cómo se contruye el búfer y cómo interpretar los bytes que te sean enviados. Bueno, aclarado lo anterior, prosigamos. En escencia, entonces, lo que tenemos que hacer es leer y escribir bytes al puerto, ¿correcto? Pues bien, Windows trata a los puertos de la misma forma que a los archivos, aunque con un nombre establecido. El puerto "COM1" se llama "COM1:", el puerto "LPT2" se llama "LPT2:", etc. Nota que todos terminan con dos puntos (:). Así, lo único que hay que hacer para escribir información en el puerto serial es hacer una llamada a las funciones del API Win32 CreateFile, ReadFile y WriteFile. Un ejemplo: vamos a enviar al puerto serial los caracteres "Hola Mundo!". Y después vamos a leer el puerto serial para sacar a la consola lo que sea que nos haya contestado nuestro hardware. #include <windows.h> #include <iostream> #define STRING_SIZE 100 using std::cout; using std::cin; int main() { HANDLE hComPort; DWORD dwBytesWritten;

Upload: alejo-consultor

Post on 21-Oct-2015

14 views

Category:

Documents


0 download

DESCRIPTION

datos por puerto

TRANSCRIPT

Page 1: Leer y Escribir Datos en Puertos Seriales

Leer y escribir datos en puertos seriales

Una pregunta recurrente que me suelen preguntar es la relacionada a cómo hacer X o Y a

través de los puertos seriales. Es decir, cómo lograr interactuar con algún hardware conectado

al puerto serial.

La respuesta a esto es sencilla. Un puerto serial no "controla" a un dispositivo. Simplemente

sirve de comunicación entre la PC y el hardware. En otras palabras, tienes que enviarle bytes

de información a través del puerto serial, o bien, leer esos bytes del propio puerto e

interpretarlos. Pero siempre debes saber, de antemano, qué bytes está esperando, cómo se

contruye el búfer y cómo interpretar los bytes que te sean enviados.

Bueno, aclarado lo anterior, prosigamos. En escencia, entonces, lo que tenemos que hacer es

leer y escribir bytes al puerto, ¿correcto? Pues bien, Windows trata a los puertos de la misma

forma que a los archivos, aunque con un nombre establecido. El puerto "COM1" se llama

"COM1:", el puerto "LPT2" se llama "LPT2:", etc. Nota que todos terminan con dos puntos (:).

Así, lo único que hay que hacer para escribir información en el puerto serial es hacer una

llamada a las funciones del API Win32 CreateFile, ReadFile y WriteFile. Un ejemplo: vamos a

enviar al puerto serial los caracteres "Hola Mundo!". Y después vamos a leer el puerto serial

para sacar a la consola lo que sea que nos haya contestado nuestro hardware.

#include <windows.h>

#include <iostream>

#define STRING_SIZE 100

using std::cout;

using std::cin;

int main()

{

HANDLE hComPort;

DWORD dwBytesWritten;

Page 2: Leer y Escribir Datos en Puertos Seriales

DWORD dwBytesRead;

DWORD dwBufferSize;

TCHAR szBuffer[STRING_SIZE];

dwBufferSize = sizeof(TCHAR) * STRING_SIZE;

hComPort = CreateFile(_T("COM1:"),

GENERIC_READ | GENERIC_WRITE, // solo pueden ser estos valores

0,

0,

OPEN_EXISTING, // solo puede ser OPEN_EXISTING

FILE_FLAG_OVERLAPPED,

0);

if (hComPort == INVALID_HANDLE_VALUE)

{ // no se pudo abrir el puerto COM1:

cout << "No se pudo abrir el puerto COM1." << endl;

}

else

{

// leer datos desde el puerto serial

ReadFile(hComPort, szBuffer, dwBufferSize, &dwBufferRead, NULL);

cout << "Se leyeron " << dwBufferRead << " bytes. " <<

"Buffer: " << szBuffer << endl;

// etcétera: podemos emplear WriteFile para escribir bytes.

}

Page 3: Leer y Escribir Datos en Puertos Seriales

// finalmente, cerramos el manejador

CloseHandle(hComPort);

return EXIT_SUCCESS;

}

Y listo. En esencia, lo importante aquí es que el puerto se abre directamente con CreateFile,

como si se tratara de otro archivo normal, con el nombre de archivo igual al del puerto que

queremos abrir, seguido de dos puntos.

Espero lo anterior sea de utilidad. Como ves, no es muy complicado. Lo complicado es que el

hardware te responda a lo que quieres y que sepas interpretar lo que éste te está diciendo.