我正在使用一个程序从文件中读取数据并将其实时绘制到图形中。我的流来自微控制器输出,我正在构建一个界面来显示数据。我在日常工作中使用流阅读器,但我遇到了问题。
我决定直接使用串口数据。当我尝试使用刚刚从端口读取的变量行时出现错误。我不知道我做错了什么。
感谢。
int tickStart = 0;
System.IO.Ports.SerialPort port;
public string portname;
public Parity parity;
public int BaudRate;
public StopBits stopbits;
public int databits;
int count;
String line;
public string PortName
{
get { return portname; }
set { portname = value; }
}
private void Form1_Load( object sender, EventArgs e )
{
//graphing stuff
count = 0;
portname = "COM1";
parity = Parity.None;
BaudRate = 9600;
stopbits = StopBits.Two;
databits = 8;
port = new System.IO.Ports.SerialPort(portname);
port.Parity = parity;
port.BaudRate = BaudRate;
port.StopBits = stopbits;
port.DataBits = databits;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
count = 0;
}
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
line = port.ReadLine();
count++;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void timer1_Tick( object sender, EventArgs e )
{
//graphing stuff
if (list == null)
return;
// Time is measured in seconds
double time = (Environment.TickCount - tickStart) / 1000.0;
double value = double.Parse(line);
list.Add(time, value);
//graphing stuff
}
答案 0 :(得分:2)
假设您的数据不会超过计时器的点火率,并且收到的数据一次性到达。
答案 1 :(得分:1)
如果我理解正确,会发生的事情是计时器在第一次从端口读取值之前计时。这意味着line == null
仍然存在,因此您会收到错误。
最好的解决方案是在读取至少一行之前不启动计时器,但检查null
也可以解决问题。