API Windows para Configuración RS-232
API Windows para Configuración RS-232
INTRODUCCIÓN
En la programación del puerto serie, hasta antes de la aparición de XP, se podía manejar directamente el dispositivo de
hardware a voluntad pudiéndose acceder, setear, leer y escribir directamente. Ahora, en cambio, en XP se obliga a
utilizar la Interfaz para Programas de Aplicación (API - Application Programming Interface), la cual consiste en hacer
uso del hardware a través de las funciones y estructuras que provee el sistema operativo. Esto, lamentablemente quita
libertad de uso en cuanto al hardware, debido a que la API solo provee lo necesario para hacer el uso que el sistema
operativo considere valido. Por ejemplo, para Windows XP, el puerto paralelo es solo para manejar una impresora,
Scanner o realizar una conexión directa por cable (conectar dos PC por puerto paralelo), no contempla ningún otro uso,
cuando en realidad este puerto en electrónica permite comandar diferentes dispositivo electrónicos, y que las funciones
y estructuras que provee son acotadas e insuficiente para este fin.
Debido a esto, para manejar el puerto serie es necesario conocer y usar las estructuras y funciones de la API de
Windows.
LA ESTRUCTURA DCB
DWORD fErrorChar: 1;
Especifica que si los bytes recibidos con errores de paridad se reemplaza con el
carácter especificado en ErrorChar. Si es True y fParity es True, se efectúa el
reemplazo.
char ErrorChar;
Especifica el valor del carácter usado como reemplazo al byte recibido con error de
paridad.
BYTE StopBits;
1 de 4
Escuela de Educación Técnica Nº 6 Profesor: Valencia, Carlos R.
Lenguajes Electrónicos 6º Tema: API Windows para RS232
CONSIDERACIONES:
Cuando una estructura de DCB se usa para configurar los 8250, se aplican las siguientes restricciones a los
valores de ByteSize y StopBits:
DWORD fOutxCtsFlow:1;
Especifica si la señal CTS debe ser supervisada para el control de flujo de salida. Si
es true y CTS se desactiva, la salida se suspende hasta que CTS se reenvía.
DWORD fRtsControl:2;
Especifica el control de flujo por RTS. Puede ser uno de los valores siguientes
DWORD fOutxDsrFlow:1;
Especifica si se debe monitorear la señal DSR para el control de flujo de salida. Si
este miembro es True y DSR se apaga, la salida se suspende hasta que DSR se
reenvie.
DWORD fDtrControl:2;
Especifica el control de flujo del DTR.
DWORD fDsrSensitivity:1;
Especifica si el controlador de dispositivo de comunicaciones es sensible al estado
de la señal de DSR. Si este miembro es True, el controlador de dispositivo ignora
cualquier byte recibido, a menos que la línea DSR sea alta.
DWORD fOutX: 1;
Activa el control de flujo por XON/XOFF durante la transmisión.
Si es True, la transmisión se detiene cuando se recibe el carácter XoffChar y
empieza de nuevo cuando se recibe el carácter XonChar.
2 de 4
Escuela de Educación Técnica Nº 6 Profesor: Valencia, Carlos R.
Lenguajes Electrónicos 6º Tema: API Windows para RS232
char XonChar;
Especifica el valor del carácter XON para la transmisión y recepción.
char XoffChar;
Especifica el valor del carácter XOFF para la transmisión y recepción.
DWORD fInX: 1;
Especifica si se usa el control de flujo por XON/XOFF durante la recepción. Si este
miembro es True, el carácter XoffChar se envía cuando el buffer de recepción esta
dentro del limite indicado por XoffLim (valor tope máximo), y el carácter XonChar
se envía cuando el buffer de recepción esta dentro del limite indicado por XonLim
(valor tope mínimo).
WORD XonLim;
Especifica que el número mínimo de bytes permitido en el buffer de recepción antes
de enviar el carácter XON.
WORD XoffLim;
Especifica que el número máximo de bytes permitido en el buffer de recepción antes
de enviar el carácter XOFF. El número del máximo de bytes permitido es calculado
substrayendo este valor del tamaño, en bytes, del buffer de recepción.
DWORD fTXContinueOnXoff:1;
Especifica si la transmisión se detiene cuando el buffer de entrada está lleno y el
controlador de dispositivo ha transmitido el carácter XoffChar. Si este miembro es
True, la transmisión continúa después de que el buffer de recepción llega al limite
indicado por XoffLim y el controlador de dispositivo ha transmitido el carácter
XoffChar para detener bytes receptores. Si este miembro es False, la transmisión no
continúa hasta que el buffer de recepción este dentro del limite indicado en XonLim
y el controlador de dispositivo ha transmitido el carácter XonChar para reasumir la
recepción.
DWORD fBinary: 1;
Permite activar el modo binario o modo carácter.
La API Win32 no soporta el modo de transferencia por carácter, así que debe ser
True. Si intenta usar False no trabaja el hardware.
Bajo Windows 3.1, si es False, el modo carácter se habilita, y se reconoce el carácter
especificado en EofChar como comienzo y fin de la trama.
char EofChar;
Especifica el valor del carácter usado para comienzo y final de trama.
OTROS SETEOS:
DWORD DCBlength;
Tamaño de la estructura DCB: sizeof(DCB)
DWORD fNull: 1;
Especifica si se desechan bytes nulos. Si es True se desechan los bytes nulos
recibidos.
DWORD fAbortOnError:1;
Especifica si las operaciones de lectura y escritura finalizan con errores. Si este
miembro es True, el controlador de dispositivo termina con todas las operaciones de
lectura y escritura con un error de estado (Status) si ocurre un error. El controlador
de dispositivo no aceptará ninguna otra operación de comunicación hasta que la
aplicación haya reconocido el error llamando a la función ClearCommError.
char EvtChar;
Especifica el valor del carácter señalado como un evento.
3 de 4
Escuela de Educación Técnica Nº 6 Profesor: Valencia, Carlos R.
Lenguajes Electrónicos 6º Tema: API Windows para RS232
DWORD fCtsHold : 1;
Especifica si la transmisión esta esperando la señal CTS.
Si es True, la transmisión lo esta esperando.
DWORD fDsrHold : 1;
Especifica si la transmisión esta esperando la señal DSR.
Si es True, la transmisión lo esta esperando.
DWORD fRlsdHold : 1;
Especifica si la transmisión esta esperando la señal RLSD (detección de la señal de línea
recibido). Si es True, la transmisión lo esta esperando.
DWORD fXoffHold : 1;
Especifica si la transmisión esta esperando recibir el carácter XOFF.
Si es True, la transmisión lo esta esperando.
DWORD fXoffSent : 1;
Especifica si la transmisión está esperando por el carácter XOFF que fue transmitido.
Si es True, la transmisión está esperando. La transmisión se detiene cuando se transmite el
carácter XOFF a un sistema que toma el próximo carácter como XON, sin tener en cuenta el
carácter actual.
DWORD fEof : 1;
Especifica si se recibe el carácter de final de archivo (EOF). Si es True, se ha recibido.
DWORD fTxim : 1;
Si es True, hay un carácter colado para transmitirlo y que llega al dispositivo de
comunicaciones a través de la función TransmitCommChar. El dispositivo de
comunicaciones transmite mencionado carácter delante de otros caracteres presente en el
buffer de salida del dispositivo.
DWORD cbInQue;
Especifica el número de bytes recibido (cargados en el buffer de entrada) y que aun no se han
leído a través de la función ReadFile.
DWORD cbOutQue;
Especifica el número de bytes restantes de datos del usuario ha ser transmitido por todas las
operaciones de escritura. Este valor sera cero para escrituras no solapadas.
4 de 4