翻譯|使用教程|編輯:龔雪|2024-03-26 10:35:18.597|閱讀 109 次
概述:本教程主要介紹如何創建一個具有高速DAQ圖表的DAQ系統應用程序,歡迎下載最新組件體驗哦~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
LightningChart.NET完全由GPU加速,并且性能經過優化,可用于實時顯示海量數據-超過10億個數據點。 LightningChart包括廣泛的2D,高級3D,Polar,Smith,3D餅/甜甜圈,地理地圖和GIS圖表以及適用于科學、工程、醫學、航空、貿易、能源和其他領域的體繪制功能。
在上文中(點擊這里回歸>>)介紹了什么是高速數據采集圖以及項目概述、系統設置等,本文將繼續介紹Visual Studio項目、具體的代碼審查等,持續關注獲取完整版教程哦~
現在讓我們使用Visual Studio,使用LightningChart可視化工具和使用Visual Studio的主要區別在于,我們將能夠分析和實驗源代碼中的許多特性。在LC可視化器中,選擇Hi Speed DAQ圖表并運行示例:
在窗口的右上方區域,您將看到以下選項:
對于試用SDK,我們可以使用WPF框架。在點擊要使用的框架后,需要指定一個文件夾來創建項目:
最后將創建Hi Speed DAQ圖表項目,打開Visual Studio并準備執行數字信號處理濾波器應用程序。
主代碼將被封裝在MainWindow.xaml.cs中,這里可以找到UI控件的代碼。
在代碼內部我們將檢查兩個方法,它們會創建正確繪制高速DAQ圖表所需的屬性。交互式的示例是建立各種用戶控件,來操縱和改變Hi Speed DAQ圖表的視覺屬性。生成這個圖不需要這些控件,因此重點關注負責生成對象的代碼。
該方法將創建Hi Speed DAQ圖表對象,該對象將顯示在XAML框架中。我們需要創建一個lightningchart類型對象,這個構造函數將允許創建圖表的實例、指定圖表的類型、并訪問不同的屬性。
//Create new chart _chart = new LightningChart(); //Disable rendering, strongly recommended before updating chart properties _chart.BeginUpdate(); //Chart name _chart.ChartName = "High-speed DAQ chart";
BeginUpdate函數將允許停止繪制圖表,這將允許設置想要自定義的屬性。只要更新沒有關閉,圖表就不會顯示所做的更改,這將有助于圖表構建的性能。
//Reduce memory usage and increase performance _chart.ViewXY.DropOldSeriesData = true; _chart.ViewXY.DropOldEventMarkers = true;
上述屬性將幫助我們減少內存使用,消除值小于x軸最小值的數據序列。建議將這些屬性設置為“true”,因為它們有助于實時監控圖表的性能。
_chart.ViewXY.XAxes[0].Maximum = 10; _chart.ViewXY.XAxes[0].SweepingGap = 2; _chart.ViewXY.XAxes[0].ScrollMode = XAxisScrollMode.Sweeping; _chart.ViewXY.XAxes[0].Title.Text = "Time";
我們正在構造的圖表是XY型的,這意味著有兩個軸和兩個維度。要配置軸,只需要使用XAxes/YAxes屬性并指定軸索引。我們可以有多個x軸和y軸,但在本例中將只有一個x軸(因此使用索引0)。
最大值表示x軸的最大值,掃描間隙是圖表寬度的百分比,用于掃描圖表。本示例的ScrollMode是sweeping,但可以使用scrolling, stepping, triggering, 或 none類型。
_chart.Title.Font = new WpfFont("Segoe UI", 20f, true, false); _chart.Title.Align = ChartTitleAlignment.TopRight; _chart.Title.Offset.SetValues(-10, 14);
title屬性是指數據采集系統應用圖表的主要文本或名稱,可以配置它的文本樣式、位置和對齊方式。
for (int channel = 0; channel < _chanelCount; channel++) { //New y-axis AxisY axisY = new AxisY(_chart.ViewXY) { Minimum = -50, Maximum = 50 }; axisY.MiniScale.Visible = false; axisY.MajorDivTickStyle.Alignment = Alignment.Far; axisY.MajorDivTickStyle.Color = Colors.Gray; axisY.MinorDivTickStyle.Alignment = Alignment.Far; axisY.MinorDivTickStyle.Color = Colors.Gray; axisY.MajorGrid.Visible = gridVisible; axisY.MinorGrid.Visible = gridVisible; axisY.Title.Visible = false; axisY.Units.Visible = true; axisY.Units.Color = Colors.OrangeRed; axisY.Units.Text = "μV"; axisY.Units.Font = new WpfFont("Lucida console", 12f, true, false); axisY.Units.VerticalAlign = YAxisTitleAlignmentVertical.Bottom; axisY.Units.HorizontalAlign = YAxisTitleAlignmentHorizontal.Right; axisY.AutoDivSeparationPercent = 10; axisY.Units.Angle = 30; axisY.Units.Shadow.Style = TextShadowStyle.Off; axisY.LabelsColor = Colors.White; axisY.Alignment = AlignmentHorizontal.Right; _chart.ViewXY.YAxes.Add(axisY);
在上面的代碼塊中,我們可以觀察到y軸配置。該配置在一個循環中執行,該循環將為_chanelCount變量中指定的通道數量創建一個y軸。對于每個y軸,我們將創建一條稱為series的線,這將表示信號數據。
SampleDataBlockSeries series = new SampleDataBlockSeries(_chart.ViewXY, _chart.ViewXY.XAxes[0], axisY); _chart.ViewXY.SampleDataBlockSeries.Add(series); series.Color = DefaultColors.SeriesForBlackBackgroundWpf[channel % DefaultColors.SeriesForBlackBackgroundWpf.Length]; series.AllowUserInteraction = false; series.ScrollModePointsKeepLevel = 1;
現在要創建一條常數線,常數線固定在y軸上,并表示為信號數據上方的水平線。
ConstantLine cls = new ConstantLine(_chart.ViewXY, _chart.ViewXY.XAxes[0], axisY); cls.Title.Text = "Constant line"; cls.Title.Visible = false; cls.LineStyle.Color = Color.FromArgb(150, 255, 192, 0); cls.Behind = true; cls.LineStyle.Width = 2; cls.AllowUserInteraction = false; cls.Value = 0; _chart.ViewXY.ConstantLines.Add(cls);
現在我們將為信號創建一個游標,行系列游標可以通過X坐標跟蹤值來對行系列數據進行可視化分析。
LineSeriesCursor cursor1 = new LineSeriesCursor(_chart.ViewXY, _chart.ViewXY.XAxes[0]) { ValueAtXAxis = 1 }; cursor1.LineStyle.Width = 5; Color color = Colors.OrangeRed; cursor1.LineStyle.Color = Color.FromArgb(180, color.R, color.G, color.B); cursor1.FullHeight = true; cursor1.SnapToPoints = true; cursor1.Style = CursorStyle.PointTracking; cursor1.TrackPoint.Color1 = Colors.Yellow; cursor1.TrackPoint.Color2 = Colors.Transparent; cursor1.TrackPoint.Shape = Shape.Circle; _chart.ViewXY.LineSeriesCursors.Add(cursor1);
SignalGenerator組件可用于實時生成信號,信號是由不同波形的和產生的。多個SignalGenerator組件可以使用父子關系鏈接起來,以產生同步的多通道輸出。
private void CreateSignalGenerators() { int channelCount = int.Parse(textBoxChannelCount.Text); int samplingFrequency = int.Parse(textBoxFreq.Text); //Generator per channel _generators = new SignalGenerator[channelCount]; for (int i = 0; i < channelCount; i++) { string name = "Ch " + (i + 1).ToString(); //Create and initialize generator SignalGenerator generator = new SignalGenerator { GeneratorName = name }; generator.WaveformSines.Clear(); generator.WaveformRandomNoises.Clear(); generator.SamplingFrequency = samplingFrequency; generator.OutputInterval = 2; generator.ThreadType = ThreadType.Timer;
現在我們將為標志創建形狀,將創建正弦、正方形和三角形,它們會被添加到信號(SignalGenerator)中。
foreach (SineComponent sc in RandomizeSineWaveformComponents()) { generator.WaveformSines.Add(sc); } foreach (SquareComponent sqc in RandomizeSquareWaveformComponents()) { generator.WaveformSquares.Add(sqc); } foreach (TriangleComponent tc in RandomizeTriangleWaveformComponents()) { generator.WaveformTriangles.Add(tc); }
為了創建多個表單,我們將使用WaveFormComponents函數,它將返回一個包含隨機數量元素的列表。
// Sine Component private List<SineComponent> RandomizeSineWaveformComponents() { List<SineComponent> listSines = new List<SineComponent>(); int counter = (int)(4.0 * rand.NextDouble()); for (int i = 0; i < counter; i++) { SineComponent sineComp = new SineComponent { Amplitude = rand.NextDouble() * 20.0, DelayMs = rand.NextDouble() * 1000.0, Frequency = rand.NextDouble() * 10.0, Offset = 0, Enabled = true }; listSines.Add(sineComp); } return listSines; // Square Component private List<SquareComponent> RandomizeSquareWaveformComponents() { List<SquareComponent> listSquares = new List<SquareComponent>(); int counter = (int)(4.0 * rand.NextDouble()); for (int i = 0; i < counter; i++) { SquareComponent squareComp = new SquareComponent { Amplitude = rand.NextDouble() * 20.0, DelayMs = rand.NextDouble() * 1000.0, Frequency = rand.NextDouble() * 10.0, Offset = 0, //set in range 0.1...0.9 Symmetry = 0.1 + rand.NextDouble() * 0.8, Enabled = true }; listSquares.Add(squareComp); // Trangle Component private List<TriangleComponent> RandomizeTriangleWaveformComponents() { List<TriangleComponent> listTriangles = new List<TriangleComponent>(); int counter = (int)(4.0 * rand.NextDouble()); for (int i = 0; i < counter; i++) { TriangleComponent triangleComp = new TriangleComponent { Amplitude = rand.NextDouble() * 20.0, DelayMs = rand.NextDouble() * 1000.0, Frequency = rand.NextDouble() * 10.0, Offset = 0, Symmetry = 0.1 + rand.NextDouble() * 0.8, //set in range 0.1...0.9 Enabled = true }; listTriangles.Add(triangleComp); } return listTriangles;
最后,在前一步沒有產生波形的情況下,我們產生噪聲信號。
if (generator.WaveformSines.Count + generator.WaveformSquares.Count + generator.WaveformTriangles.Count == 0) { SineComponent sineComp = new SineComponent { Amplitude = 20.0, DelayMs = 0, Frequency = 5, Offset = 0, Enabled = true }; generator.WaveformSines.Add(sineComp); RandomNoiseComponent noiseComp = new RandomNoiseComponent { Amplitude = 2.0, Offset = 0, Enabled = true }; generator.WaveformRandomNoises.Add(noiseComp); } _generators[i] = generator;
數據采集系統的應用是當今一個非常有趣和重要的話題,數據采集系統應用程序遠程傳輸數據。傳輸到高速DAQ圖表的數據是由傳感器產生的,這些傳感器集中在我們希望分析的源的類型上。DAQ(數據采集)是一種工具,它允許我們操作通過這些傳感器獲得的數據。
使用LightningChart.NET,您將有可能生成自己的數據采集系統應用程序圖表,無論是出于好奇還是專業工作,都不必擔心從頭開始構建。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網