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);
}
}