【问题标题】:Transferring received Serial Port Data传输接收到的串口数据
【发布时间】:2017-05-08 15:44:38
【问题描述】:

我正在使用 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 类:(它在一个名为 Hardware 的单独项目中。)

    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...
            }
        }
    }
}

那么我缺少什么才能让来自串行端口的数据等于变量值?以便图表将绘制来自串行端口的数据?

【问题讨论】:

    标签: c# wpf xaml serial-port


    【解决方案1】:

    如果您有 2 个单独的项目,那么您需要在它们之间建立某种形式的连接,还要在某个地方的图形代码中引用 SerialPort 类,否则您希望如何访问 indata。

    否则,如果您不想进行主动绘图,则将 ForceCellData 中的数据保存在 txt 文件中,然后从中读取并在以后使用图形代码进行绘图。

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多