public void DrawingPulseData(byte[] data)
{
// Make sure that the curvelist has at least one curve
if (PulseControl.GraphPane.CurveList.Count <= 0)
return;
// Get the first CurveItem in the graph
LineItem curve = PulseControl.GraphPane.CurveList[0] as LineItem;
if (curve == null)
return;
// Get the PointPairList
IPointListEdit list = curve.Points as IPointListEdit;
// If this is null, it means the reference at curve.Points does not
// support IPointListEdit, so we won't be able to modify it
if (list == null)
return;
double time = (Environment.TickCount - tickStart)/1000.0;
for (int i = 0; i < count; i++)
{
list.Add(time, (double)data[i]);
}
Scale xScale = PulseControl.GraphPane.XAxis.Scale;
if (time > xScale.Max - xScale.MajorStep)
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = xScale.Max - 30.0;
}
// Make sure the Y axis is rescaled to accommodate actual data
PulseControl.AxisChange();
// Force a redraw
PulseControl.Invalidate();
count = 0;
}
Hi. Я использую этот метод для рисования данных в реальном времени в zedgraph. count
- длина входящих данных последовательного порта. Этот код отлично работает в таймере (20 мс) и рисует данные при каждом тике. Однако, если я переведу этот метод в класс, он работает неправильно. Он рисует слишком быстрые и неправильные данные.ZedGraph RealTime Data Plotting C#
public static void DrawingPulseData(byte[] data,ZedGraphControl zgc,int count, int TickStart)
Я изменил параметры, как это, переместив его в класс. Я изменил PulseControl как zgc, отметьте как TickStart. Я не мог понять, почему он не работает так же, как первый код.
На первой картинке, используя код, предоставленный @discomurray, я написал этот код заявление из областей КРП в. Это дает мне такие данные.
Scale xScale = zgc.GraphPane.XAxis.Scale;
xScale.Max = now;
xScale.Min = now - 30.0;
Если я пишу один и тот же код заявление в ИФ прицелы данных выглядит как изображение выше. Это 10 секундная запись. У меня нет таких данных с моим методом.
Да, вы предполагали, что это время начала буфера данных. Я попробовал ваш код. Здесь что-то не так. Я скопировал Scale xScale = zgc.GraphPane.XAxis.Scale; и вклеил его из областей if. Однако он рисует что-то другое. Я загрузил некоторые фотографии, связанные с вашим кодом. – Blast
Я установил местоположение инициализации xScale. как заполняются данные? это новые данные для каждого вызова или того же буфера с большим количеством точек в нем? является ли tickStart новым вызовом значения? вы используете потоки? – discomurray
'int tickStart;' int Form_Load я использую 'tickStart = Environment.TickCount;' Затем я запускаю метод с тиком таймера (20 мс). Может быть, мы должны добавить ваш код в этот оператор if. 'if (time> xScale.Max - xScale.MajorStep) {xScale.Max = время + xScale.MajorStep; xScale.Min = xScale.Max - 30.0; } ' – Blast