如何将串口传入的数据保存到文本文件
How to save incoming data from serial port to a text file
我的 window 上有两个按钮。
- 点击开始按钮我想打开端口和
查看文本框中的数据,同时我想将这些数据逐行保存在另一个空文本文件中。
点击停止按钮,程序将停止保存数据,但仍会在文本框中显示来自串行端口的传入数据。有人可以帮忙吗?我的开始和停止按钮代码如下:
private void buttonStart_Click(object sender, EventArgs e)
{
serialPort1.PortName = pp.get_text();
string Brate = pp.get_rate();
serialPort1.BaudRate = Convert.ToInt32(Brate);
serialPort1.Open();
if (serialPort1.IsOpen)
{
buttonStart.Enabled = false;
buttonStop.Enabled = true;
textBox1.ReadOnly = false;
}
}
private void buttonStop_Click(object sender, EventArgs e)
{
string Fname = pp.get_filename();
System.IO.File.WriteAllText(Fname, this.textBox1.Text);
}
1) 需要注册串口的DataRecieved事件,才能接收到SerialPort实例的响应。
sp = new SerialPort();
sp.DataReceived += sp_DataReceived;
然后,在sp_DataRecieved:
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// this the read buffer
byte[] buff = new byte[9600];
int readByteCount = sp.BaseStream.Read(buff, 0, sp.BytesToRead);
// you can specify other encodings, or use default
string response = System.Text.Encoding.UTF8.GetString(buff);
// you need to implement AppendToFile ;)
AppendToFile(String.Format("response :{0}",response));
// Or, just send sp.ReadExisting();
AppendToFile(sp.ReadExisting());
}
2) 如果SerialPort实例的读缓冲区中还有数据,您将收到数据。关闭端口后,需要注销DataReceived事件
sp -= sp_DataRecieved;
更新
您可以使用此方法追加到文件
private void AppendToFile(string toAppend)
{
string myFilePath = @"C:\Test.txt";
File.AppendAllText(myFilePath, toAppend + Environment.NewLine);
}
我的 window 上有两个按钮。
- 点击开始按钮我想打开端口和 查看文本框中的数据,同时我想将这些数据逐行保存在另一个空文本文件中。
点击停止按钮,程序将停止保存数据,但仍会在文本框中显示来自串行端口的传入数据。有人可以帮忙吗?我的开始和停止按钮代码如下:
private void buttonStart_Click(object sender, EventArgs e) { serialPort1.PortName = pp.get_text(); string Brate = pp.get_rate(); serialPort1.BaudRate = Convert.ToInt32(Brate); serialPort1.Open(); if (serialPort1.IsOpen) { buttonStart.Enabled = false; buttonStop.Enabled = true; textBox1.ReadOnly = false; } } private void buttonStop_Click(object sender, EventArgs e) { string Fname = pp.get_filename(); System.IO.File.WriteAllText(Fname, this.textBox1.Text); }
1) 需要注册串口的DataRecieved事件,才能接收到SerialPort实例的响应。
sp = new SerialPort();
sp.DataReceived += sp_DataReceived;
然后,在sp_DataRecieved:
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// this the read buffer
byte[] buff = new byte[9600];
int readByteCount = sp.BaseStream.Read(buff, 0, sp.BytesToRead);
// you can specify other encodings, or use default
string response = System.Text.Encoding.UTF8.GetString(buff);
// you need to implement AppendToFile ;)
AppendToFile(String.Format("response :{0}",response));
// Or, just send sp.ReadExisting();
AppendToFile(sp.ReadExisting());
}
2) 如果SerialPort实例的读缓冲区中还有数据,您将收到数据。关闭端口后,需要注销DataReceived事件
sp -= sp_DataRecieved;
更新
您可以使用此方法追加到文件
private void AppendToFile(string toAppend)
{
string myFilePath = @"C:\Test.txt";
File.AppendAllText(myFilePath, toAppend + Environment.NewLine);
}