繁体   English   中英

python 串行 readline() 与 C# 串行 ReadLine()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM