C# COM端口无法打开

C# COM端口无法打开,c#,serial-port,unity3d,C#,Serial Port,Unity3d,我使用arduino板将串行数据传输到Unity。我使用随板提供的读取模拟电压样本和调试日志中愉快显示的输出来完成这项工作 但是,现在运行Unity时出现以下错误: IOException:端口“COM11”不存在 我已将COM端口更改为各种数字,但它们返回时都有相同的错误 因此,我的串行端口读取代码为: SerialPort stream = null; string data = "Ready"; private float DataTimer = 2.0f; private float

我使用arduino板将串行数据传输到Unity。我使用随板提供的读取模拟电压样本和调试日志中愉快显示的输出来完成这项工作

但是,现在运行Unity时出现以下错误:

IOException:端口“COM11”不存在

我已将COM端口更改为各种数字,但它们返回时都有相同的错误

因此,我的串行端口读取代码为:

SerialPort stream = null;
string data = "Ready";


private float DataTimer = 2.0f;
private float TimeToCheckStream = 0.1f; // check data every second
public string COMPort = "";
public int baudRate = 9600;



void Awake ()
{       

    stream = new SerialPort(COMPort,baudRate); //originally 9600
    Debug.Log ("Initialized stream");

    LogWriter writer = LogWriter.Instance;
    writer.WriteToLog( COMPort);
}



void Start ()
{
//  LogWriter writer = LogWriter.Instance;
//  writer.WriteToLog("Testing test");

        if ( stream != null )
        {
            if ( stream.IsOpen ) // close if already open
            {
                stream.Close();
                Debug.Log ("Closed stream");
            }

            stream.Open();
            Debug.Log ("Opened stream");
        }

        else
        {
            Debug.Log ("ERROR: Uninitialized stream");
        }

}


void Update ()
{

    if(DataTimer < TimeToCheckStream) 
    {
        DataTimer += Time.deltaTime;
    } 
    else
    {
        DataTimer = 0.0f;

        if ( stream != null )
        {
            if ( stream.IsOpen )
            {
                // if stream is open do things in here
                stream.ReadLine();
                Debug.Log(stream.ReadLine().ToString());
            }
        }

        else
        {
            Debug.Log ("NULL stream");
        }
    }
}



void OnGUI ()
{
    GUI.Label ( new Rect(500,10,300,100), data );
}



void OnApplicationQuit ()
{       

    if ( stream != null )
    {
        stream.Close();
    }
}
SerialPort-stream=null;
string data=“就绪”;
专用浮点数据计时器=2.0f;
私有浮点时间检查流=0.1f;//每秒钟检查一次数据
公共字符串COMPort=“”;
公共整数波特率=9600;
无效唤醒()
{       
stream=新的串行端口(COMPort,波特率);//最初为9600
Log(“初始化流”);
LogWriter=LogWriter.Instance;
WriteToLog(COMPort);
}
无效开始()
{
//LogWriter=LogWriter.Instance;
//WriteToLog(“测试测试”);
if(流!=null)
{
if(stream.IsOpen)//如果已打开则关闭
{
stream.Close();
Log(“封闭流”);
}
stream.Open();
Log(“打开的流”);
}
其他的
{
Log(“错误:未初始化流”);
}
}
无效更新()
{
if(数据计时器

是否有任何原因导致我的COM端口突然决定自行关闭?

使用以下代码检查COM端口是否确实存在:

foreach(string str in SerialPort.GetPortNames())
{
    Debug.WriteLine(string.Format("Existing COM port: {0}", str));
}

您将在输出窗口中获得一个列表,告诉您确实存在哪些COM端口。

您可以访问
COM11
,并将其替换为
\\。\COM11
你必须写:

myPort= new SerialPort("\\\\.\\COM11",9600);

看一看

我确信N0xus现在已经向前发展了,但是为了帮助其他人解决这个错误,如果你在OSX上,就没有COM(任何数字)。相反,进入Arduino软件,然后进入工具>端口,找到该端口的名称(我的是/dev/cu.usbmodem1411),然后弹出您的端口名。

我建议使用
System.IO.Ports.SerialPort.GetPortNames()
来确保您使用的是有效的端口。(如“COM1”)您是否可以在设备管理器中看到它。我可以在设备管理器中看到它,并将其更改为列出的号码。还是一样的错误。刚才也尝试了以下操作:string[]ports=SerialPort.GetPortNames();调试日志(端口);但是我得到了System.String[]的输出。请尝试
Debug.Log(String.Join(“\n”,ports))。我遇到了相同的错误,我可以列出现有端口并查看列出的设备COM11。但是,使用名称“COM11”连接到它失败,并且找不到Unity3D报告的端口名。我发现如果COM端口小于10,打开它没有问题,但是如果COM端口大于10,就有问题,端口号>10有什么特别的地方吗?