SerialPort.Open () --IOException - «Неверный параметр». - PullRequest
7 голосов
/ 06 апреля 2011

Я написал следующий код для настройки последовательного порта при загрузке MainForm. При первом запуске он выдает IOException при открытии порта, указывая, что параметр неверен. Но когда я перезапускаю приложение, оно работает нормально. Исключение возникает только тогда, когда приложение запускается первый раз после запуска компьютера, и затем оно работает нормально до следующей перезагрузки компьютера.

private void Main_Load(object sender, EventArgs e)
{
    this.serialPort1.PortName = "COM3";
    this.serialPort1.BaudRate = 9600;
    this.serialPort1.DataBits = 8;
    this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);

    this.serialPort1.Open(); //Exception comes here
    this.serialPort1.WriteLine("AT#cid=1" + System.Environment.NewLine);

}

Детали исключения:

System.IO.IOException не было обработано кодом пользователя

Сообщение = "Параметр неверен. \ R \ n" Source = "System"

StackTrace: в System.IO.Ports.InternalResources.WinIOError (Int32 errorCode, String str) в System.IO.Ports.InternalResources.WinIOError () в System.IO.Ports.SerialStream.set_RtsEnable (логическое значение) at System.IO.Ports.SerialStream..ctor (String portName, Int32 baudRate, четность четности, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, рукопожатие, квитирование, логическое значение dtrEnable, логическое значение rtsEnable, логическое значение parardNeplaceRull в System.IO.Ports.SerialPort.Open () в JKamdar.Main.Main_Load (Отправитель объекта, EventArgs e) в D: \ Project \ JKamdar \ JKamdar \ Main.cs: строка 264 в System.Windows.Forms.Form.OnLoad (EventArgs e) в System.Windows.Forms.Form.OnCreateControl () в System.Windows.Forms.Control.CreateControl (Boolean fIgnoreVisible) в System.Windows.Forms.Control.CreateControl () в System.Windows.Forms.Control.WmShowWindow (Message & m) в System.Windows.Forms.Control.WndProc (сообщение & m) в System.Windows.Forms.ScrollableControl.WndProc (Message & m) в System.Windows.Forms.ContainerControl.WndProc (Message & m) в System.Windows.Forms.Form.WmShowWindow (Message & m) в System.Windows.Forms.Form.WndProc (сообщение & m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) в System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) InnerException:

Ответы [ 3 ]

3 голосов
/ 06 апреля 2011

Пожалуйста, попробуйте использовать this.serialPort1.RtsEnable = true

Рекомендуется на основе трассировки стека вашего исключения

at System.IO.Ports.SerialStream.set_RtsEnable(Boolean value)
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()
0 голосов
/ 06 апреля 2011

Проверьте, дает ли следующий код ошибку

SerialPort port = new SerialPort(    "COM3", 9600, Parity.None, 8, StopBits.One);

  // Open the port for communications
  port.Open();

  // Write a string
  port.Write("Hello World");

  // Write a set of bytes
  port.Write(new byte[] {0x0A, 0xE2, 0xFF}, 0, 3);

  // Close the port
  port.Close();
0 голосов
/ 06 апреля 2011

Проверка, что com-порт "COM3" открыт, может решить проблему, я думаю.Если он открыт, вы должны сначала закрыть его, а затем снова открыть.Открытие открытого порта может привести к ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...