Pregunta: | 54087 - CONFIGURAR PUERTO SERIE EN C# PARA MODEN |
Autor: | rodrigo rodriguez |
Hola
Estoy relaizando mi tesis en ingenieria electronica, y conozco muy poco de C#....Necesito comunicar una aplicacion interfaz de usuario en C# con un MODEM de comunicaciones industriales HART. Este modem exige que los terminales del puerto serial funcionen asi: TRASMITIENDO DATOS: RTS=CTS=TRUE; DSR= DTR= TRUE RECIBIENDO DATOS: RTS=CTS=FALSE ; DSR=DTR= TRUE Por favor si alguien tiene informacion o sabe donde puedo adquirirla,le agradecere infinitamente, pues como ya mencione no he podido comunicarme con el moden y soy principiante en esto de la programacion, y lo peor, ya estoyquedandome colgado en el cronograma de la tesis. Gracias RODRIGO |
Respuesta: | Rommel Meza |
Que tal Rodrigo lo que necesitas es bastante sencillo ya que .Net 2.0 nos proporciona una clase para este tipo de control.
Primero necesitamos tener un compilador de .Net 2.0 ya sea Mono, C# Developer o Visual Studio 2005 ok. Despues es muy sencillo el uso del objeto System.IO.Ports.SerialPort que esta diseƱado para hacer este tipo de trabajo, segun lo que escribes esto quedaria algo asi: //Transmision de datos System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort(); serialPort.PortName = ""; serialPort.RtsEnable = true; //Cambias para reception serialPort.CtsHolding = true; //Cambias para recepcion serialPort.DtrEnable = true; serialPort.DsrHolding = true; Como veo que cuando trasmites y cuando recibes cambias lo primero me imagino es enviar informacion al modem y cambias de estado para reception. Para recibir datos es necesario asignar un delegado al evento DataReceived y podria quedar algo asi: //Manejador del puerto private System.IO.Ports.SerialPort serialPort; //Delegado que nos ayudara a realizar el cambio de configuracion private System.IO.Ports.SerialDataReceivedEventHandler manejador; //Configuramos el puerto inicial private void configuraPuert() { serialPort.PortName = "COM1"; this.manejador = new System.IO.Ports.SerialDataReceivedEventHandler(serialPort_DataReceived); } //Envia datos private void enviaDatos(String _datos) { //Configura para envio this.serialPort.RtsEnable = true; this.serialPort.CtsHolding = true; this.serialPort.DtrEnable = true; this.serialPort.DsrHolding = true; this.serialPort.Write(_datos); //Escribe datos this.configuraRecepcion(); //Configuramos para recepcion //Activamos el evento para recibir datos this.serialPort.DataReceived += this.manejador; } //Configuramos modem para recepcion private void configuraRecepcion() { this.serialPort.RtsEnable = false; this.serialPort.CtsHolding = false; } //Evento que se ejecutara cuando se reciben los datos void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { String result = this.serialPort.ReadExisting(); //Desactivamos el evento this.serialPort.DataReceived -= this.manejador; } Espero te sirva de algo yo lo utilizo en algo parecido y me ha dado resultados si no mandame un Mail Suerte :) |