elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Problema al abrir puerto serie virtual con .NET
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al abrir puerto serie virtual con .NET  (Leído 4,673 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Problema al abrir puerto serie virtual con .NET
« en: 17 Julio 2014, 18:25 pm »

Hola a todos.

Estoy trabajando con una cámara que se conecta al PC mediante una tarjeta y un puerto FrameLink. Dicho puerto trae un software que permite emular un puerto serie para comunicarse con la cámara.

El caso es que abrir este puerto con .NET (clase SerialPort, método Open())  causa una IOException, más abajo adjunto el StackTrace.
Se qué el puerto "virtual" funciona porque lo he probado con HyperTerminal, además he probado "SerialPort::GetPortNames()" y aparece mi puerto serie "virtual".
Sé que el programa detecta que existe el puerto serie virtual porque, si no, la excepción sería distinta (comprobado).

Con HyperTerminal me conecto con los siguientes parámetros:
Bits/segundo = 2400; Bits de datos = 8; Paridad = Ninguno; Bits de parada = 1; Control de flujo: Hardware.

¿Alguien puede ayudarme por favor?

Gracias y saludos.

Adjunto la excepción (quitando el try..catch del código):
Código:

Excepción no controlada: System.IO.IOException: El parámetro no es correcto.

   en System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   en System.IO.Ports.InternalResources.WinIOError()
   en System.IO.Ports.SerialStream.set_DtrEnable(Boolean value)
   en System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity
 parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeou
t, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNul
l, Byte parityReplace)
   en System.IO.Ports.SerialPort.Open()
   en main(String[] args) en c:\documents and settings\administrador\escritorio\
dan\src\appcamarasmotor_v2\appcamarasmotor_v2\appcamarasmotor_v2.cpp:línea 20
   en mainCRTStartupStrArray(String[] arguments) en f:\dd\vctools\crt_bld\self_x
86\crt\src\mcrtexe.cpp:línea 309

Adjunto el StackTrace (caputrando la excepción y imprimiendo el StackTrace):
Código:
TargetSite: Void WinIOError(Int32, System.String)

StackTrace:
   en System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   en System.IO.Ports.InternalResources.WinIOError()
   en System.IO.Ports.SerialStream.set_DtrEnable(Boolean value)
   en System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity
 parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeou
t, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNul
l, Byte parityReplace)
   en System.IO.Ports.SerialPort.Open()
   en main(String[] args) en c:\documents and settings\administrador\escritorio\
dan\src\appcamarasmotor_v2\appcamarasmotor_v2\appcamarasmotor_v2.cpp:línea 27

y el código:
Código:
int main(array<System::String ^> ^args)
{
try{

SerialPort ^sp=gcnew SerialPort("COM2",9600,Parity::None,8,StopBits::One);
if(sp->IsOpen){
Console::WriteLine("Ya está abierto");
sp->Close();
}
sp->Open();
if(sp->IsOpen){
Console::WriteLine("OK");
sp->Close();
}else{
Console::WriteLine("PUERTO CERRADO");
}
}catch(System::IO::IOException ^ioe){
Console::WriteLine(ioe->TargetSite+"\n\n");
Console::WriteLine(ioe->StackTrace);
}
}


« Última modificación: 17 Julio 2014, 18:52 pm por SARGE553413 » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Problema al abrir puerto serie virtual con .NET
« Respuesta #1 en: 17 Julio 2014, 19:44 pm »

Pues solo hay 2 posibles causas:
IOException   
The port is in an invalid state.
- or -
An attempt to set the state of the underlying port failed. For example, the parameters passed from this SerialPort object were invalid.

Según MSDN, la propiedad "StopBits" y/o "Parity" pueden lanzar una excepción de tipo IOException.

En lugar de asignar los valores de los parámetros (y por ende de esas propiedades) mediante el Constructor, usa el constructor por defecto (sin parámetros): http://msdn.microsoft.com/en-us/library/system.io.ports.serialport%28v=vs.110%29.aspx

Y asigna el valor a las propiedades manualmente, quizás no sirva de nada, pero por probar, ya que en los ejemplos que veo en el MSDN siempre asignan la propiedad Handshake y los Timeouts también, y no he verificado cuales serán sus valores por defecto con el ctor que usaste.

Algo así (VB.NET):
Código
  1.     Dim _serialPort As New SerialPort()
  2.  
  3.     With _serialPort
  4.  
  5.    .PortName = "COM2"
  6.    .BaudRate = 9600I
  7.    .Parity = Parity.None
  8.    .DataBits = 8I
  9.    .StopBits = StopBits.One
  10.    .Handshake = Handshake.None
  11.  
  12.    .ReadTimeout = 500I
  13.    .WriteTimeout = 500I
  14.  
  15.     End With
  16.  
  17.    _serialPort.Open()

PD: ¿Te sirvió?

Saludos


« Última modificación: 18 Julio 2014, 01:14 am por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda sobre puerto serie virtual
Hacking Mobile
toxete@hotmail.com 1 6,466 Último mensaje 16 Enero 2006, 21:12 pm
por SirGraham
Problema puerto serie RS-232
Redes
Ingeniera 1 2,489 Último mensaje 5 Diciembre 2012, 14:43 pm
por CloudswX
Sacar info hacia puerto serie físico, no virtual de Arduino.
Electrónica
Meta 0 4,004 Último mensaje 27 Noviembre 2013, 03:16 am
por Meta
Problema con puerto serie 'MSComm' en VB6.0
Programación Visual Basic
Trolko 4 4,490 Último mensaje 20 Junio 2014, 00:05 am
por Trolko
Problema comunicación Puerto Serie
Programación Visual Basic
malith 2 1,831 Último mensaje 30 Agosto 2015, 14:45 pm
por malith
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines