我正在尝试从串口读取数据。数据来自一个规模。我先发一个命令开始阅读比例。
_serialPort.Write("P");
然后在等待一段时间后我尝试使用
阅读temp2 = _serialPort.ReadLine();
应用程序挂起在这行代码中。我也试过了Read函数,但得到了相同的结果。 ReadExisting()
函数返回一个空字符串。
由于ReadLine()
没有超时或抛出任何异常,我无法调试此问题,因为我没有进一步的信息。由于WriteLine()
和ReadExisting()
正在运作,因此端口不会有缺陷。
任何帮助都将不胜感激。
由于
答案 0 :(得分:4)
在接收按钮后面试试这个:
string msg = serialObj.ReadExisting();
MessageBox.Show(msg);
答案 1 :(得分:2)
使用通讯,从终端程序开始。这是一个程序,允许您键入从串行端口发送到设备的命令,并显示从设备返回的任何文本。这将允许您尝试您描述的协议,并查看设备发回的内容。一旦得到正确答案,您就会知道:
然后你可以运行你的代码,知道如果它不起作用,你的代码中的某些内容是错误的,而不是任何其他因素混淆了水域。
发送初始命令后,您可以立即读取串口以获得响应 - 您正在使用的呼叫将等待直到收到一些数据。如果没有收到数据,它将永远等待(因此您的程序挂起)。任何上述不正确的事情都会导致无法接收任何数据的相同症状。更改读取数据的方式(例如异步读取等)不会改变没有接收数据的事实。
另一件需要注意的是端口设置。通常,从大多数事情的默认设置开始(因为大多数设备都以非常标准的方式使用RS232) - 典型的初学者错误是明确设置握手方法等选项,但是如果你弄错了它会打破通讯科。通常你指定一个波特率和8N1(8位,没有奇偶校验,1个停止位)并保持其他设置,直到你发现它们需要被设置为获得任何工作,或者你知道(如在他们的手册中以黑白分明)您的设备需要不同的东西。
答案 2 :(得分:1)
将Write函数更改为WriteLine。这可能有所帮助。另外,请查看MSDN上this link的示例。这很有帮助。
答案 3 :(得分:0)
检查SerialPort.NewLine
属性是否设置正确。如果只收到CR字符,ReadLine期望例如。 CRLF,您的申请将被挂起。
答案 4 :(得分:0)
比例是否响应发送给它的每个“P”,或者“P”是一个命令,告诉它开始发送连续的数据流?要使用终端程序,请将其波特率和协议设置为与比例(和您的程序)相同,并使用它将“P”发送到比例,而不是使用您的程序。比例的任何响应都应出现在终端窗口中。我更喜欢termie或termite(都是可下载的)超级终端非常糟糕。
答案 5 :(得分:0)
您可以使用该部分从c#:
向串口发送数据int MyInt3 = Convert.ToInt32(textBox3.Text);
byte[] p = BitConverter.GetBytes(MyInt3);
serialPort1.Write(p, 0, 1);
然后你可以使用Read()方法。