GUÍA DE LABORATORIO GL-PCS2201-L14O COMUNICACIÓN SERIAL CON VISUAL BASIC CARRERA: 441402 INGENIERÍA DE EJECUCIÓN EN ELECTRICIDAD Y ELECTRÓNICA 444803 TÉCNICO EN ELECTRICIDAD Y ELECTRÓNICA ASIGNATURA: PCS2201 “PROGRAMACIÓN DE COMPUTADORES” SEMESTRE: II PROFESOR: GUILLERMO BADILLO A. 1. Introducción La siguiente actividad tiene como finalidad familiarizar al alumno con la programación del puerto serial con visual Basic y la comunicación entre dos computadores a través de un cable serial RS232 Null MODEM por intermedio de los puertos seriales. 2. Objetivos Al completar esta guía el alumno será capaz de: Describir el proceso de la programación del puerto serial en Visual Basic. Controlar los eventos de recepción y transmisión de datos por el puerto serie. Realizar una comunicación entre dos computadores con puerto serie. 3. Duración 180 minutos 4. Prerrequisitos Antes de realizar esta guía el alumno debe haber realizado satisfactoriamente la guía GL-PCS2201 L12O PROGRAMACIÓN DEL PUERTO SERIE EN LENGUAJE C 5. Bibliografía previa Internet Programación del puerto serial en lenguaje Visual Basic Apuntes entregado por el profesor. 6. Marco teórico Cómo: Mostrar los puertos serie disponibles en Visual Basic Visual Basic utiliza My.Computer.Ports para mostrar los puertos serie disponibles del equipo. El siguiente bloque de código recorre todas las cadenas que devuelve la propiedad My.Computer.Ports.SerialPortNames. Estas cadenas son los nombres de los puertos serie disponibles en el equipo. Normalmente, un usuario selecciona el puerto serie que la aplicación debe utilizar en la lista de puertos disponibles. En este ejemplo, los nombres de puertos serie se almacenan en un control ListBox. Sub GetSerialPortNames() ' Muestra los puertos disponibles GUÍA DE LABORATORIO For Each sp As String In My.Computer.Ports.SerialPortNames ListBox1.Items.Add(sp) Next End Sub Nota Los nombres de puerto que devuelve My.Computer.Ports.SerialPortNames pueden ser incorrectos cuando se utiliza Windows 98. Para evitar errores de la aplicación, utilice el control de excepciones, por ejemplo las instrucciones Try...Catch...Finally o Using, cuando utilice nombres de puertos para abrirlos. Cómo: Enviar cadenas a puertos serie en Visual Basic En este párrafo se explica cómo utilizar My.Computer.Ports para enviar cadenas a los puertos serie del equipo en Visual Basic. Este ejemplo envía una cadena al puerto serie COM1. Utilice el método My.Computer.Ports.OpenSerialPort para obtener una referencia al puerto. El bloque Using permite a la aplicación cerrar el puerto serie aun cuando se genere una excepción. Todo el código que manipula el puerto serie debe aparecer dentro de este bloque o dentro de un bloque Try...Catch...Finally. El método WriteLine envía los datos al puerto serie. Sub SendSerialData(ByVal data As String) ' envía un Strin a un puerto serial. Using com1 As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort("COM1") com1.WriteLine(data) End Using End Sub Cómo: Recibir cadenas de puertos serie en Visual Basic Para recibir cadenas del puerto serie 1. Inicialice la cadena de devolución. Dim returnStr As String = "" 2. Determine qué puerto serie debe proporcionar las cadenas. Este ejemplo supone que es COM1. 3. Utilice el método My.Computer.Ports.OpenSerialPort para obtener una referencia al puerto. Para obtener más información, vea My.Computer.Ports.OpenSerialPort (Método). El bloque Using permite a la aplicación cerrar el puerto serie aun cuando se genere una excepción. Todo el código que manipula el puerto serie debe aparecer dentro de este bloque o dentro de un bloque Try...Catch...Finally. Using com1 As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort("COM1") End Using 4. Cree un bucle Do para leer las líneas de texto hasta que no queden líneas disponibles. Do Loop GUÍA DE LABORATORIO 5. Utilice el método ReadLine para leer en el puerto serie la siguiente línea de texto disponible. Dim Incoming As String = com1.ReadLine() 6. Utilice una instrucción If para determinar si el método ReadLine devuelve Nothing (lo que significa que no hay más texto disponible). Si devuelve Nothing, salga del bucle Do. If Incoming Is Nothing Then Exit Do End If 7. Agregue un bloque Else a la instrucción If para controlar el caso de que realmente se lea la cadena. El bloque anexa la cadena del puerto serie a la cadena de devolución. Else returnStr &= Incoming & vbCrLf 8. Devuelva la cadena. Return returnStr Ejemplo Function ReceiveSerialData() As String ' Recive strings desde un puerto serial Dim returnStr As String = "" Using com1 As IO.Ports.SerialPort = _ My.Computer.Ports.OpenSerialPort("COM1") Do Dim Incoming As String = com1.ReadLine() If Incoming Is Nothing Then Exit Do Else returnStr &= Incoming & vbCrLf End If Loop End Using Return returnStr End Function 7. Actividades a realizar 7.1. Actividad 1: COMUNICACIÓN SERIAL ENTRE DOS COMPUTADORES POR PUERTO SERIE CON VISUAL BASIC a. Equipos requeridos - 1 Computador PC con sistema operativo Windows XP. Software Microsoft Visual Studio.Net 2005 1 Cable RS232 Null Modem b. Número de alumnos sugerido por equipo Se recomienda realizar esta actividad en forma grupal, con un máximo dos alumnos. c. Instrumentos requeridos - No Hay d. Herramientas requeridas - No Hay e. Descripción y procedimiento En esta actividad desarrollaremos un chat pc a pc a través del puerto serial. Para lo cual necesitará un cable RS 232 null MODEM para intercomunicar los computadores. El mismo cable usado en la guía #12. GUÍA DE LABORATORIO 1.- Abra Visual Studio .NET 2005. Cree un nuevo proyecto de Visual Basic tipo aplicación para Windows, y siga los procesos estándar aprendidos para nombrar y guardar el proyecto. 2.- Agregue al formulario los siguientes controles : dos label Un combobox Tres Button Un RichTextBox Un Textbox 3.- Dispóngalos de acuerdo a la figura 1 Combox1 Button1 Button2 Label1 Label2 RichTextBox Textbox1 Button3 Figura 1: HMI Chat de PC a PC 4.- Modifique las propiedades de los controles de acuerdo a las siguiente tabla Control Propiedad Valor Control Form1 Name Text Combox1 Name Text cbbCOMPorts Label1 Name Text FrmMain Chat PC a PC RS232 Label1 Puertos COM Disponibles lblMessage Button1 Name Text btnconnect Conectar Button2 false FixedSingle txtDataReceived Button3 Name Text Name Text name btndisconnect desconectar btnsend Enviar txtDataToSend Label2 Name Text Autosize BorderStyle RichEditBox1 Name Textbox1 Propiedad Valor GUÍA DE LABORATORIO Multiline true 5.- Declare la siguiente variable Dim WithEvents serialport As New IO.Ports.SerialPort 6.- Declare el siguiente procedimiento Public Delegate Sub myDelegate() 7.- En el evento load de la Form1, escriba el siguiente bloque de código For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1 CbbCOMPorts.Items.Add(My.Computer.Ports.SerialPortNames(i)) Next 8.- En el evento Clic del botón conectar escriba el siguiente bloque de código. If serialPort.IsOpen Then serialPort.Close() End If Try With serialPort .PortName = CbbCOMPorts.Text .BaudRate = 9600 .Parity = IO.Ports.Parity.None .DataBits = 8 .StopBits = IO.Ports.StopBits.One End With serialPort.Open() lblMessage.Text = CbbCOMPorts.Text & " conectado." btnConnect.Enabled = False btnDisconnect.Enabled = True Catch ex As Exception MsgBox(ex.ToString) End Try 9.- En el evento clic del botón desconectar escriba el siguiente bloque de código: Try serialport.Close() lblMessage.Text = serialport.PortName & " disconnected." btnconnect.Enabled = True btndisconnect.Enabled = False Catch ex As Exception MsgBox(ex.ToString) End Try 10.- En el evento click del boton enviar Try serialport.Write(txtDataToSend.Text & vbCrLf) With txtDataReceived .SelectionColor = Color.Black .AppendText(txtDataToSend.Text & vbCrLf) .ScrollToCaret() End With txtDataToSend.Text = String.Empty GUÍA DE LABORATORIO Catch ex As Exception MsgBox(ex.ToString) End Try 11.- En el evento DataReceived del componente serialport escriba el siguiente bloque de código: txtDataReceived.Invoke(New myDelegate(AddressOf updateTextBox), _ New Object() {}) 12.- Vea la figura para más detalles 13.- Cree un procedimiento “updateTextBox” en la clase Form1 Public Sub updateTextBox() With txtDataReceived .Font = New Font("Garamond", 12.0!, FontStyle.Bold) .SelectionColor = Color.Red .AppendText(serialPort.ReadExisting) .ScrollToCaret() End With End Sub 14.- Salve el proyecto desde la opción Guardar Todo. 15.- ATENCIÓN: En este momento debe llamar al profesor para que corrobore su trabajo, NO DEBE CONTINUAR CON EL PRÓXIMO PASO HASTA QUE EL PROFESOR LO AUTORICE 16.- Inicie la depuración y ejecute el programa, verificando que se encuentre libre de errores. 17.- Verifique en el combobox “cbbCOMPorts” la detección de los puertos disponibles de su PC 18.- Baje su aplicación. 19.- NO DEBE CONECTAR EL CABLE SERIAL CON LA APLICACIÓN EJECUTANDOSE. PUEDE DAÑAR GRAVEMENTE EL PUERTO SERIAL DEL COMPUTADOR. GUÍA DE LABORATORIO 20.- Verifique que su compañero esté en la misma situación y dispóngase a conectar el cable serial entre los computadores. 21.- Arranque nuevamente su aplicación y seleccione el puerto de comunicación a usar. 22.- Conecte el puerto seleccionado en el combobox y verifique que en el label1 aparezca el texto “COM1 conectado”, además verifique el botón conectar pierda el focus. 23.- Escriba un texto en el TextBox y envíelo al PC de su compañero, presionando el botón enviar. 24.- Al recibir datos por el puerto serial, estos se mostrarán en el componente RichTextBox, mostrando el string recibido en color rojo, y el string enviado en negrita. GUÍA DE LABORATORIO 25.- Realizada la actividad pase a la actividad de evaluación. f. Guía de auto evaluación para el alumno 1.- ¿Cuál es el objetivo de declarar la variable serialport con eventos (withevents)? 2.- ¿Cuál es el bucle utilizado para detectar las puertas seriales del PC? 3.- ¿Cuáles son los eventos usados para enviar los datos? 4.- ¿Qué significa 9600,8,N,1 en la transmisión de datos? 5.- ¿Qué cambio debe realizar para programar la puerta serial con los siguientes parámetros: 2400,7,E,1? GUÍA DE LABORATORIO g. Pauta de evaluación de la actividad Actitudes Logrado No Logrado Descripción Orden Realiza un trabajo en forma ordena mientras realiza la actividad. Cuidado Realiza la experiencia cuidando no producir daños físicos y materiales a los componentes, compañeros y a él mismo, los cuales son intrínsicos a la actividad. Seguridad Observa las normas y ocupa los implementos de seguridad al trabajar Autocontrol Se mantiene controlado a pesar de los intentos fallidos y ante la presión del tiempo para realizar las actividades Habilidades Logrado No Logrado Descripción U/ Herramientas Usa correctamente el entorno de desarrollo de visual Basic U/ Instrumentos Usa correctamente las herramientas ayuda P/ Diagnóstico Realiza el diagnóstico ayudado por el depurador (Debugger) U/ Información Utiliza la información técnica para guiar su diagnóstico. Determinación de la falla y/o actividad Primer intento Falla y/o Actividad Segundo intento Tercer intento Descripción Determina una falla o realiza la actividad de forma satisfactoria GUÍA DE LABORATORIO 8. Pauta de evaluación de la guía GUÍA DE LABORATORIO Rut Nota Alumno Asignatura Programación de Computadores Sigla PCS2201 Sección Nº Guía 14 Nombre Descripción Uso de clases y eventos para la comunicación serial entre dos computadoras. COMUNICACIÓN SERIAL CON VISUAL BASIC 60% Habilidades 7 - Logrado 1 - No Logrado % Descripción P/ Programación 10% Programa correctamente usando las clases y eventos de Visual Basic asociados a la comunicación serial entre dos computadoras. P/ Compilación 20% Realiza correctamente la compilación del código fuente y logra interpretar los errores de compilación. P/ Ejecución 15% Realiza correctamente la ejecución del programa y logra interpretar los errores de ejecución. P/ Validación P/ Depuración U/ Ayuda 15% Valida correctamente la entrada de datos al programa. Usa las herramientas de Depuración y de Ayuda del IDE de Visual Basic 40% Configuración solicitada y/o actividad Primer intento: 7 Segundo 4 intento: Tercer 1 intento: Diseño 30% Funcionamiento 10% Descripción Realiza el código fuente para un problema matemático bajo la estructura del lenguaje C/C++, solicitado por el profesor de forma satisfactoria. Realiza la explicación del funcionamiento lógico del código fuente solicitado por el profesor de forma satisfactoria. N1: Actitudes : Descuento (si se aplica) en cada ítem - Máximo 3,5 puntos menos de la nota - Logrado - No Logrado Descripción Orden 0.5 Limpieza 0.5 Cuidado 1.0 Mantiene su espacio de trabajo ordenado mientras realiza la experiencia y se comporta en forma ordena mientras realiza las actividades Mantiene su espacio de trabajo limpio mientras realiza la experiencia y se preocupa de que quede limpio al finalizar la actividad Realiza la experiencia cuidando no producir daños físicos a los componentes, compañeros y a sí mismo. Seguridad 1.0 Observa las normas de seguridad al trabajar en un laboratorio de computación. Autocontrol 0.5 Se mantiene controlado a pesar de los intentos fallidos y ante la presión del tiempo para realizar las actividades. Descuento El alumno debe Firma Alumno Repetir la experiencia Pasar a la experiencia siguiente Nota: N1 – N2. GUÍA DE LABORATORIO