SerialPort.Open выдает исключение «Область данных, переданная системному вызову, слишком мала» - PullRequest
0 голосов
/ 07 ноября 2019

Я недавно сталкивался с этой проблемой. Программное обеспечение, разработанное в моей компании, интенсивно использует System.IO.Ports.SerialPort для соединений через COM-порт. Теперь у нас есть новый встроенный ПК, над которым мы работаем, и, когда я пытаюсь выполнить SerialPort.Open (), он выдает исключение, говорящее «Область данных, переданная системному вызову, слишком мала».

После различных тестов я обнаружил, что другие программы (например, Terminal2, Hercules) могут успешно открывать указанный COM-порт с такой же конфигурацией (скорость передачи, четность и т. Д.), Отправлять и получать данные, поэтому я думаю, что с .net что-то не такВнедрение платформы SerialPort (ничего нового под солнцем).

В диспетчере устройств эти порты перечислены как «Устройство UartSub (COMX)», а расположение - хост-контроллер Intel (R) Serial IO UART. На данный момент это единственное отличие от предыдущей системы (где SerialPort работает отлично), я могу сказать.

Любой совет?

РЕДАКТИРОВАТЬ - Добавление фрагмента кода для ясности.

SerialPort SP = new SerialPort(CmbPorts.Text.ToString().Trim(), 
                    115200, Parity.None, 8, StopBits.One);

SP.Handshake = Handshake.None;

SP.Open();

Это StackTrace:

   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   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 TestUartCOMPort.Form1.BtnConnect_Click(Object sender, EventArgs e) in C:\Workspace\Projects\TestUartCOMPort\TestUartCOMPort\Form1.cs:line 49
...