翻譯|使用教程|編輯:龔雪|2024-03-26 10:35:18.597|閱讀 123 次
概述:本教程主要介紹如何創建一個具有高速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@ke049m.cn
文章轉載自:慧都網