2017-05-08 6 views
0

私は、ライングラフを描画するためにLiveChartとシリアルポートのデータを使用しています。私は別のクラスからデータが入ってきたのに対し、グラフ関数は別のクラスに入っています。私はシリアルポートからデータが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クラスをどこかで参照することもできます。

アクティブなプロッティングを使用しない場合は、ForceCellDataからのデータをtxtファイルに保存してから読み込み、後でグラフコードを使用してプロットします。

関連する問題