2012-02-16 5 views
0

Я пишу программу, которая должна получать данные от устройства NMEA GPS. Стандарт NMEA требует связи с использованием одного из COM-портов.Получение IOException при открытии виртуального COM-порта

Вот отрывок кода, который дает мне неприятности:

public int BaudRate { get; set; } 

private SerialPort comm; 

public string CommPort { get; set; } 

protected override void Initialize() { 
     comm = new SerialPort(); 

     comm.BaudRate = BaudRate; 
     comm.DataBits = 8; 
     comm.NewLine = "\r\n"; 
     comm.Parity = Parity.None; 
     comm.PortName = ComPort; 
     comm.StopBits = StopBits.One; 

     comm.Open(); 
} 

В моем методе тестирования единицы, у меня есть следующий код:

NMEAGPS gps = new NMEAGPS(); 
gps.ComPort = "COM3"; 
gps.BaudRate = 4800; 
gps.Start(); 

Метод Intiialize в моем первом фрагменте кода вызванный методом Start.

Ошибка при вызове comm.Open(). Вот сведения об исключениях:

System.IO.IOException was caught 
    Message=The I/O operation has been aborted because of either a thread exit or an application request. 

    Source=System 
    StackTrace: 
     at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) 
     at System.IO.Ports.InternalResources.WinIOError() 
     at System.IO.Ports.SerialStream.InitializeDCB(Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Boolean discardNull) 
     at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) 
     at System.IO.Ports.SerialPort.Open() 
     at LPRCore.Devices.NMEAGPS.Initialize() in D:\ElsagTFS\EOC4\Client\LPRCore Plugin GPS\NMEAGPS.cs:line 385 
     at LPRCore.Module.InternalPrestart() in D:\ElsagTFS\EOC4\Client\LPRCore\Module.cs:line 413 

Это первый раз, когда я проделал какое-либо программирование на COM в .NET. Я не понимаю, что я могу сделать неправильно. У кого-нибудь есть идеи?

Tony

+1

Наверное, не получится изменить, но попробуйте инициализировать его как SerialPort p = new SerialPort («COM1», 4800, Parity.None, 8, StopBits.One); \t \t \t p.Open(); – Axis

+0

Не отличное сообщение, но не необычное. Драйвер GPS действительно недовольны настройками связи. Господь знает, почему. Ну, производитель должен знать. –

+0

У меня есть виртуальный драйвер, в который входит устройство GPS. Я уверен, что параметры связи правильные, но я проверю их утром. –

ответ

0

Я нашел решение своей проблемы. Оказывается, причиной послужило программное обеспечение драйвера, которое я установил для GPS. Это был более старый драйвер для Vista. Я загрузил обновленный драйвер для Windows 7 (который я запускаю на своем ПК) и установил его. Это устранило проблему

Спасибо всем.

Смежные вопросы