C# 传输接收到的串行端口数据
我正在使用LiveCharts和串行端口数据绘制一个折线图。我得到了来自另一个类的数据,同时图形函数在它自己的独立类中。我正试图从串行端口获取与X轴相等的数据。这是我的密码: 图形代码:C# 传输接收到的串行端口数据,c#,wpf,xaml,serial-port,C#,Wpf,Xaml,Serial Port,我正在使用LiveCharts和串行端口数据绘制一个折线图。我得到了来自另一个类的数据,同时图形函数在它自己的独立类中。我正试图从串行端口获取与X轴相等的数据。这是我的密码: 图形代码: public ChartValues<ChartDataPoints> Values { get; set; } public GraphControl() { InitializeComponent(); //Mapper
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
}
这是我的SerialPort类:(它位于一个名为Hardware的独立项目中)
那么,为了能够从串行端口获得与变量值相等的数据,我缺少了什么呢?因此,图形将绘制来自串行端口的数据?如果您有两个独立的项目,那么您需要在它们之间建立某种形式的连接,也可以在图形代码中的某个位置引用SerialPort类,或者您希望如何访问indata 否则,如果不需要活动打印,请将ForceCellData中的数据保存在txt文件中,然后从中读取数据,稍后使用图形代码进行打印
public class ChartDataPoints
{
public double Session { get; set; }
public double Value { get; set; }
}
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...
}
}
}
}