【发布时间】:2015-09-19 08:22:26
【问题描述】:
我正在编写一个 WinForm 应用程序来通过串行端口控制编码器引擎。协议很简单,我发送第一个命令询问引擎移动,第二个命令确认它是否在新位置,以此类推。这是我的代码:
string dataRead ="";
serialPort1.Write("P.1=2950\r\n"); //Location register (2950)
serialPort1.Write("^.1\r\n"); //Moving command
while (dataRead.Contains("Px.1=2950") == false)
{
serialPort1.Write("?96.1\r\n"); //Ask for current location
respond3 = serialPort1.ReadExisting();
dataRead = string.Concat(dataRead, respond3);
}
//Keep moving to 710 after stop at 2950
serialPort1.Write("P.1=710\r\n"); //Location register (710)
serialPort1.Write("^.1\r\n"); //Moving command
问题是,当我调试我的应用程序时,它卡在了 while 循环中。但如果我打破所有,然后再继续,它就会过去。 respond3 用于从引擎获取输出。每当它得到正确的响应时,while 循环就会结束。
【问题讨论】:
-
readExisting 方法是否每次都读取一个新元素?
-
是的,我放了一个断点并检查了respond3的值,它记录了所有的消息,包括我正在等待的东西。但它不会退出while循环,直到我在断点处暂停并继续再次运行。
-
在发送数据后尝试添加类似 thread.sleep 的内容,因为它需要一些时间来响应
-
您的代码看起来不错。我认为这归结为
serialPort1.ReadExisting()是否返回包含"?96.1\r\n"的字符串。我们应该如何测试它? -
你是对的。这是我在 serialPort1.ReadExisting() 之后放置断点时收到的内容: "?96.1\r\n?96.1\r\n?96.1\r\n?96.1\r\nPx.1=2950\r\n" .您可以看到它在返回正确位置之前多次回复(Px.1=2950)。但我不知道为什么 while-loop 没有完成。
标签: c# while-loop serial-port