Práctica 3

Anuncio
Práctica 3ProgramacionRS232: Programación básica de la
RS232
1
Objetivos
El objetivo de esta práctica es la iniciación del alumno en la programación de las
comunicaciones en un entorno de desarrollo basado en C. El entorno es equivalente para otros
lenguajes como visualbasic, .net, java, etc. Al final de la práctica el alumno debería ser capaz
de:
• Utilizar un API sencilla para comunicaciones.
• Realizar programas sencillos en C para manejar la RS232.
• Entender y dar soluciones al carácter asíncrono de las comunicaciones en la recepción
de datos.
2
Tiempo de laboratorio
1 sesión.
3
Entorno de programación para las comunicaciones serie
En este apartado el alumno aprenderá a manejar el entorno de programación para programar
la vía serie utilizando C y una API basada en Win32.
El primer paso consiste en interconectar el puerto serie 1 (COM1) del ordenador con el puerto 4
(COM4) mediante el cable de RS232 utilizado en la primera práctica (Herramientas básicas para
usar la RS232). A continuación comprobar con Windmill la comunicación entre COM1 y
COM4. Una vez comprobado el correcto funcionamiento, cerrar las sesiones de Windmill
abiertas para liberar los puertos serie y poder realizar el siguiente paso.
El segundo paso consiste en arrancar el entorno de programación MinGW y descargar el código
colgado de la página web, para comprobar y programar la RS232. Para ello se deben seguir los
siguientes pasos:
1. Cree un directorio de nombre ‘PruRS232’.
2. Copie al directorio anterior, desde la página web del laboratorio de la asignatura de
Fundamentos de Comunicaciones Industriales (http://www.dea.icai.upcomillas.es/jarm),
el fichero ‘APIRS232.zip’. Descomprímalo a continuación y aparecerán los siguientes
ficheros:
• serie.cpp y serie.h: son la interfaz para poder programar la RS232
cómodamente. Define cuatro funciones:
o OpenSerialPort permite establecer la comunicación con un puerto serie
como si fuera un fichero. Los argumentos son: el puerto serie, la velocidad, el
tamaño del byte, el tipo de paridad, el número de bits de stop y el timeout para
las lecturas. Devuelve el identificador de la conexión abierta (Handle). Cada vez
que se quiera operar con ese puerto serie habrá que utilizar dicho identificador.
o SerialSendByte envía un byte por el puerto serie indicado por el
identificador (Handle). Si la operación es correcta devolverá TRUE.
o SerialReceiveByte recibe un byte por el puerto serie indicado por el
identificador (Handle). Si la operación es correcta devolverá TRUE con
Timeout=FALSE. Si se ha sobrepasado el tiempo de timeout especificado en la
apertura del puerto, devolverá TRUE con Timeout a TRUE. Si hay problemas
en la lectura devuelve FALSE.
Práctica 3.
1
o
CloseSerialPort cierra la comunicación con el puerto serie indicado por
el identificador (Handle). A toda operación correcta de apertura de puerto le
debe corresponder una operación de cierre (como en los ficheros).
3. Arranque MinGW: Botón de Inicio -> Programas -> Lenguajes de
Programación -> Mingo Developer Studio -> Mingo Developer Studio.
En el directorio también se encuentra el fichero de ayuda de la API de windows
(Windows API Reference). Aparecerá la siguiente pantalla:
MinGW es un entorno de programación en C que utiliza las herramientas de GNU.
4. Cree un proyecto tipo terminal de nombre enviar y directorio ‘PruRS232’:
• Seleccione Project -> New Project.
• Seleccione Win32 Console Application; Project name: enviar y
Location: ..\PruRS232. A continuación pulse OK.
•
Práctica 3.
Compruebe que aparece el fichero enviar.msp en el directorio de trabajo. Es
el fichero donde se guarda la configuración del proyecto en C.
2
5. Adjunte los ficheros enviar.cpp y serie.cpp como código fuente y serie.h
como cabecera (include). Para ello despliegue el proyecto en FileView (parte
central izquierda). Aparecen cuatro categorías de ficheros: source, header,
resource y other. Posicione el ratón sobre Source Files y pulse el botón
derecho para añadir ficheros. En la ventana que emerge seleccione enviar.cpp y
serie.cpp. Repita la operación sobre Header Files para añadir serie.h al
proyecto.
Inspeccione los ficheros enviar.cpp, serie.cpp y serie.h. Para ello, una vez
que forman parte del proyecto, haga doble clic directamente sobre ellos. El fichero
enviar.cpp es un fichero de prueba para comprobar el funcionamiento de la API de
comunicaciones descrita anteriormente. Realiza las siguientes operaciones:
• Abre el puerto de comunicaciones con configuración COM1, 9600, 8, N, 2.
• Lee continuamente del teclado carácter a carácter y lo envía por el puerto.
• Cierra el puerto cuando se pulsa ‘x’.
En la misma carpeta donde se encuentra MinGW existe un enlace a la ayuda de la API
de win32 (Windows API Reference), es decir, la API de Windows. Un API es
una biblioteca de funciones que permiten manejar recursos proporcionados por terceros
(en nuestro caso todas las posibilidades del sistema operativo Windows) de una manera
cómoda y transparente.
6. Compile y cree el ejecutable enviar.exe. Para ello ejecute Build -> Build.
Observe que se ha creado un directorio en el directorio ‘PruRS232’ de nombre ‘Debug’
que contiene enviar.exe. Con este programa podrá enviar las teclas pulsadas a
través del COM1 con la siguiente configuración: 9600, 8, N, 2 (velocidad, nº bits,
paridad, nº de bits de stop).
7. Cierre el proyecto mediante Project -> Close Project. Si se quisiera abrir,
utilice Project -> Open Project y elija el fichero enviar.msp.
8. Abra un nuevo proyecto en el mismo directorio, siguiendo los pasos del 1 a 6, y de
nombre ‘recibir’ (se creará recibir.msp). Adjunte como ficheros fuente
recibir.cpp y serie.cpp y como cabecera serie.h. Compile y cree el
ejecutable recibir.exe que aparecerá en el subdirectorio ‘Debug’. Este programa le
permite recibir caracteres a través del COM4 con la configuración 9600, 8, N, 2.
Práctica 3.
3
Conforme llegan se envían a pantalla. Si pasa un cierto tiempo sin recibir datos, el
programa envía un mensaje de timeout a la pantalla.
9. Ejecute ambos programas (directorio ‘Debug’). Escriba en la ventana de
enviar.exe (pulsar return al final). Lo enviado se recibe en recibir.exe. Si no
funcionase, como el cable ha sido comprobado con Windmill, el problema está en
enviar.exe o en recibir.exe o en ambos.
10. Finalice la ejecución de ambos programas.
11. Compruebe que los programas enviar y recibir operan perfectamente con
Windmill. Para ello:
• Arranque enviar y Windmill, con configuración COM4, 9600, 8, N, 2.
Compruebe que lo enviado desde enviar se recibe en Windmill.
• Arranque recibir y Windmill, con configuración COM1, 9600, 8, N, 2.
Compruebe que lo enviado desde Windmill se recibe en recibir.exe.
Compruebe también qué ocurre cuando se mandan caracteres de control ASCII
como 0x07 (ver primera práctica).
Resultados a entregar al final de la sesión:
Explicación del funcionamiento de la API utilizada. Máximo un folio por las 2 caras.
4
Configuración de las comunicaciones
En este apartado el alumno aprenderá a utilizar código ya preparado para mejorar sus
prestaciones.
Se trata de mejorar el código de los programas de prueba para que se puedan configurar las
comunicaciones cuando se ejecuta el programa, sin necesidad de compilar.
Siguiendo los pasos del apartado anterior, cree un nuevo directorio llamado ‘PruRS232Conf’.
Copie a dicho directorio los archivos serie.cpp, serie.h, enviar.cpp (como
enviarconf.cpp), y recibir.cpp (como recibirconf.cpp). Arranque la
herramienta MinGW y cree el proyecto enviarconf con los archivos enviarconf.cpp,
serie.cpp y serie.h. Modifique enviarconf para que pida en el arranque: el puerto de
comunicaciones, la velocidad de la comunicación, el número de bits por byte, la paridad y el
número de bits de stop.
A continuación se da un pequeño ejemplo para la lectura de parámetros en el caso de sólo pedir
la velocidad:
DWORD dwBaudRate;
int lVelocidad;
printf("Velocidad (9600,19200,...): ");
scanf("%d", &lVelocidad);
switch (lVelocidad){
case 9600:
dwBaudRate = CBR_9600;
break;
case 19200:
dwBaudRate = CBR_19200;
break;
default:
dwBaudRate = CBR_9600;
break;
}
hPort = OpenSerialPort("COM1", dwBaudRate, 8, NOPARITY, TWOSTOPBITS, 5000);
Práctica 3.
4
Compruebe que el programa funciona correctamente empleando Windmill como receptor.
Repita el mismo proceso para recibirconf y compruebe, junto con enviarconf, que se
puede trabajar con diferentes parámetros en las comunicaciones sin necesidad de recompilar los
programas.
El profesor deberá comprobar en el laboratorio el funcionamiento correcto de este
apartado.
5
Chat: Receptor y transmisor en el mismo programa
En este apartado el alumno profundizará en los problemas que plantean las comunicaciones
cuando se quiere recibir y transmitir simultáneamente.
Programe una consola que permita transmitir y recibir simultáneamente, en vez de lo
programado hasta ahora: una ventana y un puerto para recibir y otra ventana y otro puerto para
enviar. Este programa debe permitir la conversación bidireccional entre 2 puertos serie que
pueden estar en el mismo o en diferentes ordenadores. Es un ejemplo de un HyperTerminal muy
simple o de un simple “chat”.
El programa será la suma de la funcionalidad de enviar y recibir. Un ejemplo de
pseudocódigo para dicho programa es el siguiente:
Pedir Parámetros de configuración del puerto
Abrir Puerto según parámetros de configuración
While(1){
¿Se ha tecleado algo? {
Se envía lo tecleado al puerto y a la pantalla
}
¿Se ha recibido algo? {
Se envía lo recibido a la pantalla
}
}
Para confeccionar el programa puede resultar útil la función kbhit de la biblioteca conio.h
y la función getch (más información en www.msdn.com).
El profesor deberá comprobar en el laboratorio el funcionamiento correcto de este
apartado.
Tenga en cuenta el alumno que este programa se utilizará en las prácticas sucesivas.
Práctica 3.
5
Práctica 3.
6
Plantilla para resultados 3ProgramacionRS232
Alumno_____________________________________________________
Apartado 3
Explicar el funcionamiento de la API utilizada.
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
Práctica 3.
7
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
Apartado 4
Entregar copia del código al profesor.
Apartado 5
Entregar copia del código al profesor.
Práctica 3.
8
Descargar