2017-05-08 57 views
0

我正在使用LiveCharts和串行端口數據繪製折線圖。我已經從另一個類中獲得了數據,同時圖函數也在它自己的類中。我正在嘗試從串行端口獲取數據以等於我的X軸。這裏是我的代碼:傳輸接收的串行端口數據

圖形代碼:

public ChartValues<ChartDataPoints> Values { get; set; } 

    public GraphControl() 
    { 
     InitializeComponent(); 


     //Mapper 
     var mapper = Mappers.Xy<ChartDataPoints>() 
      .X(model => model.Session) 
      .Y(model => model.Value); 

     Charting.For<ChartDataPoints>(mapper); 
     Values = new ChartValues<ChartDataPoints>(); 
     var _session = new Stopwatch(); 
     _session.Start(); 

     //Task 
     Task.Run(() => 
     { 
      while (true) 
      { 
       Thread.Sleep(30); 

       //we add the lecture based on our StopWatch instance 
       Values.Add(new ChartDataPoints 
       { 
        Session = _session.ElapsedMilliseconds, 
        Value = 1 //This needs to be replaced with data from the Serial port!! 
       }); 
      } 
     }); 

     DataContext = this; 
    } 

    #region INotifyPropertyChanged implementation 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName = null) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    #endregion 

} 

ChartDataPoints類:

public class ChartDataPoints 
{ 
    public double Session { get; set; } 
    public double Value { get; set; } 
} 

這是我的SerialPort類:(這是所謂的硬件一個單獨的項目。)

public ForceCellData() 
    { 
     try 
     { 
      string _port3 = "COM3"; 
      SerialPort defaultSerial = new SerialPort(_port3); 
      defaultSerial.BaudRate = 9600; 
      defaultSerial.Parity = Parity.None; 
      defaultSerial.StopBits = StopBits.One; 
      defaultSerial.DataBits = 8; 
      defaultSerial.Handshake = Handshake.None; 
      defaultSerial.RtsEnable = true; 
      defaultSerial.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
      defaultSerial.Open(); 
     } 
     catch 
     { 
      Console.WriteLine("Could not connect to COM3!"); 
     } 
    } 

    private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
    { 
     Thread.Sleep(200); 
     SerialPort sp = (SerialPort)sender; 
     string indata = sp.ReadExisting(); 

     indata = indata.Trim().Replace("\r", string.Empty); 
     indata = indata.Trim().Replace("\n", string.Empty); 
     indata = indata.Trim().Replace("-", string.Empty); 
     var split = indata.Split('.'); 


     foreach (var stringData in split) 
     { 

      if (!string.IsNullOrWhiteSpace(stringData) && double.TryParse(stringData, out double convertdata)) 
      { 
       double Xdata; 
       Xdata = convertdata; //Don't know what to do here... 
      } 
     } 
    } 
} 

那麼我錯過了什麼能夠從串行端口獲取數據以等於變量值?爲了讓圖表繪製來自串口的數據?

回答

0

如果你有2個獨立的項目,那麼你需要它們之間的某種形式的連接,也可以在圖表代碼中引用SerialPort類,或者你希望如何訪問indata。

否則,如果您不希望激活繪圖,請將ForceCellData中的數據保存到txt文件中,然後從中讀取並在稍後使用圖形代碼對其進行繪製。

相關問題