[英]python serial readline() vs C# serial ReadLine()
我正在尝试从我的设备读取串行输入,并使用 pyserial 使其在 Python 中工作,例如
import serial
port = serial.Serial(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
while 1:
N = port.in_waiting
if N>4:
msg = port.readline(N)
print(list(msg))
我正在尝试在 C# 中实现相同的代码,但它似乎不太有效,例如
port = new SerialPort(COM1);
port.BaudRate = baudRate;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.ReadTimeout = SerialPort.InfiniteTimeout;
port.Handshake = Handshake.None;
port.RtsEnable = false;
port.DtrEnable = false;
port.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
和
void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int N = port.BytesToRead;
if (N > 4)
{
string line = port.ReadLine();
}
}
我能够在 C# 中使用 port.Read() 正确读取内容,但是 ReadLine 似乎不能正常工作——它似乎无法找到行尾字符 ("\ n")? 程序只是冻结。 但是我不确定为什么它与 pyserial.ReadLine() 一起工作,它也寻求相同的字符(并且没有超时工作)。 据我所知,端口设置的 rest 是相同的。
谢谢!
因为DataReceived事件指示数据已通过端口接收,数据已被读取,您应该调用SerialPort.ReadExisting来获取它。
void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var data = port.ReadExisting();
}
这个事件不保证它的数据是单行的,如果你想要类似pySerial的方式,你不应该使用这个事件,直接使用ReadLine:
port.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
while(true)
{
int N = port.BytesToRead;
if (N > 4)
{
string line = port.ReadLine();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.