我正在使用Visual Studio 2010并在C#(.NET 3.5)中编程。
我想从COM10写入/读取数据。
这是简单的代码:
static void Main(string[] args)
{
String Portname = String.Empty;
/* List out all COM ports present on the computer. */
foreach (string ports in SerialPort.GetPortNames())
{
Console.WriteLine(ports);
/* If COM10 exists, copy the name for further use. */
if (ports == "COM10")
{
Portname = ports; //I also tried this: "\\.\\COM10";
}
}
/* If COM10 not found, return */
if (Portname == String.Empty)
{
Console.WriteLine("Exiting");
return;
}
SerialPort Port = new SerialPort(Portname,
9600, // Baudrate
Parity.None, //Parity
8, //DataBits
StopBits.One); //Stop Bits
Port.Open();
for (int count = 0; count < 5; count++)
{
Port.WriteLine("\nHello");
}
Port.Close();
while (true);
}
Run Code Online (Sandbox Code Playgroud)
每当我在中使用Portname“ COM10”时SerialPort Port = new SerialPort(Portname,9600,.....);,都会显示错误消息
端口“ COM10”不存在
在上Port.Open(),Port.Open()如果COM10不存在,它甚至不应到达命令。
另一种方式,我尝试将端口名设置为“ \。\ COM10”。它给出了一个错误
给定的端口名不能以COM / com开头或不能解析为有效的串行端口。
任何大于COM9的端口号都会发生这种情况。
有出路吗?
C.B*_*.B. -1
我认为 GetPortNames() 或 Open() 不会导致您的问题:我敢打赌它与硬件相关。您是否在不同的机器上尝试过您的代码?
不幸的是,我对你的场景没有直接经验,因为两位数端口一直对我有用......但我想注意一件事:我及时了解到安全比安全更好抱歉,因此我增加了 try-catch 块的使用。对于你的情况,我会这样做:
static System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
private static int defaultBaudRate = 9600, defaultDataBits = 8;
static System.IO.Ports.SerialPort TryOpeningPort(string portName)
{
System.IO.Ports.SerialPort port = null;
timer.Start();
try
{
port = new System.IO.Ports.SerialPort(portName,
defaultBaudRate, System.IO.Ports.Parity.None, defaultDataBits, System.IO.Ports.StopBits.One);
port.Open();
port.Close();
/**/Console.WriteLine(portName + " : OK");
}
catch (Exception exceptionInfo) //most common is System.UnauthorizedAccessException
{
port = null;
/**/Console.WriteLine(portName + " -- " + exceptionInfo.GetType().ToString() + " : " + exceptionInfo.Message);
}
timer.Stop();
//Console.WriteLine("Elapsed time : " + timer.ElapsedMilliseconds + "ms" + System.Environment.NewLine);
timer.Reset();
return port;
}
Run Code Online (Sandbox Code Playgroud)
您可以直接调用它,如下所示:
TryOpeningPort("COM10");
Run Code Online (Sandbox Code Playgroud)
或使用您的初始检查方法:
foreach (string portName in System.IO.Ports.SerialPort.GetPortNames())
if (portName.Equals("Com10", StringComparison.InvariantCultureIgnoreCase))
TryOpeningPort(portName);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6143 次 |
| 最近记录: |