问题描述
电脑有几个串口,现在想直接与设备通信而不用选择串口,有什么办法吗?用C#语言实现
解决方案
解决方案二:
遍历所有的串口号,然后逐个Open过去。没异常的说明就是那个在用的端口了。
解决方案三:
枚举出所有串口,自己便利一下,你和硬件方做好通讯协议,每遍历一个串口,发一个数据过去,如果能收到应答,就自动选择这个串口
解决方案四:
SerialPort.GetPortNames()
解决方案五:
引用2楼bdmh的回复:
枚举出所有串口,自己便利一下,你和硬件方做好通讯协议,每遍历一个串口,发一个数据过去,如果能收到应答,就自动选择这个串口
+1另外可以在open的时候做判断,如果打不开,就不要发请求了可以减少检测时间另外,更进一步的优化方案,如果某一次检测到了可用串口,就先把它存文件,下次启动读出来直接通信,而不要每次都检测如果启动了,文件里有串口名,但是通信不成功,再重新检测.
解决方案六:
同意3楼SerialPort.GetPortNames()
解决方案七:
除非设备有专用的检测命令来判断设备是否存在,否则就没有意义.电脑上的串口不一定只包含物理存在的串口,而且还可能有虚拟串口.
解决方案八:
#4+1
解决方案九:
能告诉我如何获得串口服务器上的com口吗谢谢
解决方案十:
引用2楼bdmh的回复:
枚举出所有串口,自己便利一下,你和硬件方做好通讯协议,每遍历一个串口,发一个数据过去,如果能收到应答,就自动选择这个串口
正解
解决方案十一:
string[]ports=SerialPort.GetPortNames();Array.Sort(ports);comboPortName.Items.AddRange(ports);
解决方案十二:
枚举出所有串口,自己便利一下,你和硬件方做好通讯协议,每遍历一个串口,发一个数据过去,如果能收到应答,就自动选择这个串口
解决方案十三:
string[]PortName=System.IO.Ports.SerialPort.getPortNames();System.IO.Ports.SerialPortcurr_Port;foreach(stringtempinPortName){curr_Port=newSystem.IO.Ports.SerialPort(temp);curr_Port.Open();if(curr_Port.IsOpen){//Coding。。。。}curr_Port.Close();
手工敲得,不保障拼写
解决方案十四:
补充:foreach少了}
解决方案十五:
string[]serialports=SerialPort.GetPortNames();seriports_avaliabe=newArrayList();//-------------------添加可用串口---------------for(inti=0;i<serialports.Length;i++){try{sp.PortName=serialports[i];sp.Open();//如果端口已经被占用,就不添加sp.Close();seriports_avaliabe.Add(serialports[i]);}catch(System.UnauthorizedAccessExceptionex){}}