Только что открыл эту ветку и подумал, что должен добавить свои открытия: случайно, меня это тоже беспокоит на Mac. В Windows и Linux (как в VS, так и в Mono) SerialPort.GetPortNames () возвращает список со следующими правилами:
1) Windows возвращает список строк, таких как Com1, Com4, пропуская те, которые не существуют (USB-адаптеры последовательного порта, похоже, принимают номер COM на основе разъема, в который они последовательно подключены) Из моего сканера последовательного порта :
Scanning COM1
Scanning COM4
Scanning Complete
2) Linux возвращает все возможные tty последовательные порты, которые включен компилятором дистрибутива linux. Кажется, это примерно 8 портов, которые, если вы попытаетесь открыть, сгенерируют исключение (из моего сканера последовательных портов:
Scanning /dev/ttyS0
Scanning /dev/ttyS1 Port FailedSystem.IO.IOException: I/O Error
at System.IO.Ports.SerialPortStream..ctor (System.String portName, Int32 baudRate, Int32 dataBits, Parity parity, StopBits stopBits, Boolean dtrEnable, Boolean rtsEnable, Handshake handshake, Int32 readTimeout, Int32 writeTimeout, Int32 readBufferSize, Int32 writeBufferSize) [0x00000]
at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPortStream:.ctor (string,int,int,System.IO.Ports.Parity,System.IO.Ports.StopBits,bool,bool,System.IO.Ports.Handshake,int,int,int,int)
at System.IO.Ports.SerialPort.Open () [0x00000]
at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:Open ()
at HSMScanner.Program.Main (System.String[] args) [0x00000]
Scanning /dev/ttyS2 Port FailedSystem.IO.IOException: I/O Error
at System.IO.Ports.SerialPortStream..ctor (System.String portName, Int32 baudRate, Int32 dataBits, Parity parity, StopBits stopBits, Boolean dtrEnable, Boolean rtsEnable, Handshake handshake, Int32 readTimeout, Int32 writeTimeout, Int32 readBufferSize, Int32 writeBufferSize) [0x00000]
at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPortStream:.ctor (string,int,int,System.IO.Ports.Parity,System.IO.Ports.StopBits,bool,bool,System.IO.Ports.Handshake,int,int,int,int)
at System.IO.Ports.SerialPort.Open () [0x00000]
at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:Open ()
at HSMScanner.Program.Main (System.String[] args) [0x00000]
Scanning /dev/ttyS3 Port FailedSystem.IO.IOException: I/O Error
at System.IO.Ports.SerialPortStream..ctor (System.String portName, Int32 baudRate, Int32 dataBits, Parity parity, StopBits stopBits, Boolean dtrEnable, Boolean rtsEnable, Handshake handshake, Int32 readTimeout, Int32 writeTimeout, Int32 readBufferSize, Int32 writeBufferSize) [0x00000]
at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPortStream:.ctor (string,int,int,System.IO.Ports.Parity,System.IO.Ports.StopBits,bool,bool,System.IO.Ports.Handshake,int,int,int,int)
at System.IO.Ports.SerialPort.Open () [0x00000]
at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:Open ()
at HSMScanner.Program.Main (System.String[] args) [0x00000]
3) Маки ...
О, дорогой, дорогой. Mac (когда подключен последовательный USB-порт и драйверы и все в порядке) не возвращает что-либо в GetPortNames (). Нада. Глядя в / dev / tty, дополнительные устройства появляются только тогда, когда устройство подключено и, к сожалению, имеет имена, такие как /dev/tty.usbserial-A7006Ro7, используя это имя в качестве аргумента программы, за которым следует serial.open dosnt иметь какой-либо эффект.
Глядя больше на это.