2011-12-19 103 views
0

我正在使用串口通讯。 我在程序中插入了这段代码。 我能够向设备发送数据并且无法从设备读取数据。 在调试模式下,我只能得到serialport.BytesToRead = 0. 我可以知道为什么会发生?无法从串口获取数据

while (serialport.BytesToRead > 0) 
{ 
     int byte_count = serialport.BytesToRead; 
     byte[] buffer = new byte[byte_count]; 
     int read_count = serialport.Read(buffer, 0, byte_count); 
     string echo = ASCIIEncoding.ASCII.GetString(buffer, 0, read_count); 
     echo = System.Text.Encoding.UTF8.GetString(buffer); 
     Console.WriteLine(echo); 
} 

回答

2

首先使用另一个程序,如Putty或超级终端来验证设备和连接是否正常工作,并仔细检查您是否使用了正确的端口,波特率,奇偶校验,停止位和数据位。如果使用这样的程序无法从设备中获取任何内容,那么它将无法使用您自己的代码。

接下来关注握手。一个常见的错误是将它保持在零,然后不打开DtrEnable和RtsEnable信号。设备在认为你离线时不会发送任何内容。 SysInternals' PortMon utility可以很方便,它会告诉你在设备驱动程序级别发生了什么。

1

什么时候从串口读取?你在发送之后是否尝试阅读?在这种情况下,您可能会尝试阅读,然后才能从端口读取任何内容。

您应该使用DataReceived事件来读取数据。

请注意,在收到所有数据之前,此事件可能会触发,因此您可能必须通过多次调用DataReceived来检索数据,直到获得所有应有的数据为止。