我试图在PC上的COM端口上读取设备的输出。
我写了一个C#程序来做到这一点。
使用PuTTY,我可以看到我希望从我的设备输出的输出。
问题是我的SerialPort.ReadExisting();
函数中的函数DataReceived
给出了一个完全不同的字符串。
使用SerialPort
从COM端口读取的正确方法是什么?
此外,我从SerialPort.ReadExisting();
获得的字符串是我发送给设备的字符串的片段。
以下是初始化SerialPort
。
SerialPort port;
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string data = port.ReadExisting();
}
void init_serialport(object sender, EventArgs e)
{
if (port != null)
{
port.Close();
}
port = new SerialPort( /* ... */ );
port.BaudRate = 9600;
port.Parity = Parity.None;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.Handshake = Handshake.RequestToSend;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
try
{
port.Open();
}
catch (Exception ex)
{
// ...
}
}
答案 0 :(得分:1)
我从SerialPort.ReadExisting()获得的字符串;是我发送到设备的字符串的片段。
我看一下SerialPort.ReceivedBytesThreshold。
“获取或设置DataReceived事件发生之前内部输入缓冲区中的字节数。”
答案 1 :(得分:0)
我首先看看port对象的Read方法,查看原始字节并验证它们是否符合您的期望,然后将问题缩小到转换为字符串时的编码。
提供了有关此内容的更多信息here.
答案 2 :(得分:0)
您收到了片段,因为SerialPort.Existing()在较短的时间内执行并完成,然后您的发送设备需要发送整个字符串。
如果字符串有一个字符串,则需要连续重复调用或直到收到字符串结尾。