powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема отображения времени в ZedGraph
6 сообщений из 6, страница 1 из 1
Проблема отображения времени в ZedGraph
    #38511655
Co_balt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
All, нужна твоя помощь, сразу хочу предупредить, что я не программист а физик, поэтому сильно не пинайте, но любая критика и дельные предложения приветствуются...
Короче для регистрации данных с датчиков потребовался лабораторный стенд, мною было написана программа для опроса датчиков по протоколу I2C с последующей передачей данных на PC. Устройство представляет собой HID девайс (PSoC3) к которому подключены гироскоп, магнитометр, акселерометр, датчик температуры http://f-page.ru/fp/0f56fa5835a74c1e86b6fc5a47ccb213

Данные в реальном режиме времени отображаются на графиках (компанет ZedGraph) и тут у меня баттхед головного мозга, никак не могу сделать так чтобы по оси Х отображалось время в формате mm:ss
Помогите с кодом!
вот собственно быдлокод...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
private void DrawGraph()
        {

                //RawData
                long FreqValue = ((freq_1 << 24) + (freq_2 << 16) + (freq_3 << 8) + freq_4);
                MagnetXRaw = (magnetX_1 << 8) + magnetX_2;
                MagnetYRaw = (magnetY_1 << 8) + magnetY_2;
                MagnetZRaw = (magnetZ_1 << 8) + magnetZ_2;
                AccelXRaw = (accelX_1 << 8) + accelX_2;
                AccelYRaw = (accelY_1 << 8) + accelY_2;
                AccelZRaw = (accelZ_1 << 8) + accelZ_2;
                GyroXRaw = (gyroX_1 << 8) + gyroX_2;
                GyroYRaw = (gyroY_1 << 8) + gyroY_2;
                GyroZRaw = (gyroZ_1 << 8) + gyroZ_2;
                TempRaw = (temp_1 << 8) + temp_2;
                tempScaled = UintToLsb(TempRaw) * 0.125d;
                //ScaledData
                magnetScaled.XAxis = UintToLsb(MagnetXRaw) * m_Scale;
                magnetScaled.YAxis = UintToLsb(MagnetYRaw) * m_Scale;
                magnetScaled.ZAxis = UintToLsb(MagnetZRaw) * m_Scale;
                accelScaled.XAxis = UintToLsb(AccelXRaw) * a_Scale;
                accelScaled.YAxis = UintToLsb(AccelYRaw) * a_Scale;
                accelScaled.ZAxis = UintToLsb(AccelZRaw) * a_Scale;
                gyroScaled.XDegreePerSec = UintToLsb(GyroXRaw) * g_Scale;
                gyroScaled.YDegreePerSec = UintToLsb(GyroYRaw) * g_Scale;
                gyroScaled.ZDegreePerSec = UintToLsb(GyroZRaw) * g_Scale;
                //Update GUI
                MagnetXScaledValueBox.Text = magnetScaled.XAxis.ToString();
                MagnetYScaledValueBox.Text = magnetScaled.YAxis.ToString();
                MagnetZScaledValueBox.Text = magnetScaled.ZAxis.ToString();
                AccelXScaledValueBox.Text = String.Format("{0:0.##}", accelScaled.XAxis);
                AccelYScaledValueBox.Text = String.Format("{0:0.##}", accelScaled.YAxis);
                AccelZScaledValueBox.Text = String.Format("{0:0.##}", accelScaled.ZAxis);
                GyroXScaledValueBox.Text = String.Format("{0:0.##}", gyroScaled.XDegreePerSec);
                GyroYScaledValueBox.Text = String.Format("{0:0.##}", gyroScaled.YDegreePerSec);
                GyroZScaledValueBox.Text = String.Format("{0:0.##}", gyroScaled.ZDegreePerSec);
                FreqValueBox.Text = FreqValue.ToString();
                TempValueBox.Text = String.Format("{0:0.####}", tempScaled);


                // Добавим его в конец списка
                _dataMagnetX.Add(magnetScaled.XAxis);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataMagnetX.Count > _capacity)
                {
                    _dataMagnetX.RemoveAt(0);
                }

                // Добавим его в конец списка
                _dataMagnetY.Add(magnetScaled.YAxis);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataMagnetY.Count > _capacity)
                {
                    _dataMagnetY.RemoveAt(0);
                }

                // Добавим его в конец списка
                _dataMagnetZ.Add(magnetScaled.ZAxis);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataMagnetZ.Count > _capacity)
                {
                    _dataMagnetZ.RemoveAt(0);
                }

                // Добавим его в конец списка
                _dataAccelX.Add(accelScaled.XAxis);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataAccelX.Count > _capacity)
                {
                    _dataAccelX.RemoveAt(0);
                }

                // Добавим его в конец списка
                _dataAccelY.Add(accelScaled.YAxis);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataAccelY.Count > _capacity)
                {
                    _dataAccelY.RemoveAt(0);
                }

                // Добавим его в конец списка
                _dataAccelZ.Add(accelScaled.ZAxis);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataAccelZ.Count > _capacity)
                {
                    _dataAccelZ.RemoveAt(0);
                }

                // Добавим его в конец списка
                _dataGyroX.Add(gyroScaled.XDegreePerSec);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataGyroX.Count > _capacity)
                {
                    _dataGyroX.RemoveAt(0);
                }

                // Добавим его в конец списка
                _dataGyroY.Add(gyroScaled.YDegreePerSec);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataGyroY.Count > _capacity)
                {
                    _dataGyroY.RemoveAt(0);
                }

                // Добавим его в конец списка
                _dataGyroZ.Add(gyroScaled.ZDegreePerSec);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataGyroZ.Count > _capacity)
                {
                    _dataGyroZ.RemoveAt(0);
                }

                // Вычислим новое значение
                long dha = FreqValue;

                // Добавим его в конец списка
                _dataDHA.Add(dha);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataDHA.Count > _capacity)
                {
                    _dataDHA.RemoveAt(0);
                }

                // Вычислим новое значение
                double dta = tempScaled;

                // Добавим его в конец списка
                _dataDTA.Add(dta);

                // Удалим первый элемент в списке данных,
                // если заполнили максимальную емкость
                if (_dataDTA.Count > _capacity)
                {
                    _dataDTA.RemoveAt(0);
                }


                // Получим панель для рисования
                GraphPane paneM = MGraph.GraphPane;
                GraphPane paneA = AGraph.GraphPane;
                GraphPane paneG = GGraph.GraphPane;
                GraphPane paneDHA = DHAGraph.GraphPane;
                GraphPane paneDTA = DTAGraph.GraphPane;

                // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
                paneM.CurveList.Clear();
                paneA.CurveList.Clear();
                paneG.CurveList.Clear();
                paneDHA.CurveList.Clear();
                paneDTA.CurveList.Clear();

                // Изменим текст заголовка графика
                paneM.Title.Text = "Magnetometer (LSM303DLM)";
                paneA.Title.Text = "Accelerometer (LSM303DLM)";
                paneG.Title.Text = "Gyroscope (L3G4200D)";
                paneDHA.Title.Text = "Chronal Sensor Anomalies";
                paneDTA.Title.Text = "Temperature Sensor Anomalies (LM75)";

                paneM.Legend.IsVisible = false;
                paneA.Legend.IsVisible = false;
                paneG.Legend.IsVisible = false;
                paneDHA.Legend.IsVisible = false;
                paneDTA.Legend.IsVisible = false;

                // Списки точек для трех графиков
                PointPairList m1 = new PointPairList();
                PointPairList m2 = new PointPairList();
                PointPairList m3 = new PointPairList();

                PointPairList a1 = new PointPairList();
                PointPairList a2 = new PointPairList();
                PointPairList a3 = new PointPairList();

                PointPairList g1 = new PointPairList();
                PointPairList g2 = new PointPairList();
                PointPairList g3 = new PointPairList();

                PointPairList dha1 = new PointPairList();
                PointPairList dta1 = new PointPairList();

                // Расстояние между соседними точками по горизонтали
                const double dx = 1.0;

                double curr_x = 0;
                double curr_y = 0;
                double curr_z = 0;

                // Заполняем список точек
                foreach (double val in _dataMagnetX)
                {
                    m1.Add(curr_x, val);
                    curr_x += dx;
                }
                foreach (double val in _dataMagnetY)
                {
                    m2.Add(curr_y, val);
                    curr_y += dx;
                }
                foreach (double val in _dataMagnetZ)
                {
                    m3.Add(curr_z, val);
                    curr_z += dx;
                }

                curr_x = 0;
                curr_y = 0;
                curr_z = 0;

                // Заполняем список точек
                foreach (double val in _dataAccelX)
                {
                    a1.Add(curr_x, val);
                    curr_x += dx;
                }
                foreach (double val in _dataAccelY)
                {
                    a2.Add(curr_y, val);
                    curr_y += dx;
                }
                foreach (double val in _dataAccelZ)
                {
                    a3.Add(curr_z, val);
                    curr_z += dx;
                }

                curr_x = 0;
                curr_y = 0;
                curr_z = 0;

                // Заполняем список точек
                foreach (double val in _dataGyroX)
                {
                    g1.Add(curr_x, val);
                    curr_x += dx;
                }
                foreach (double val in _dataGyroY)
                {
                    g2.Add(curr_y, val);
                    curr_y += dx;
                }
                foreach (double val in _dataGyroZ)
                {
                    g3.Add(curr_z, val);
                    curr_z += dx;
                }

                curr_x = 0;

                // Заполняем список точек
                foreach (long val in _dataDHA)
                {
                    dha1.Add(curr_x, val);
                    curr_x += dx;
                }

                curr_x = 0;
                foreach (long val in _dataDTA)
                {
                    dta1.Add(curr_x, val);
                    curr_x += dx;
                }

                // Удалим существующие оси Y
                paneM.YAxisList.Clear();
                paneA.YAxisList.Clear();
                paneG.YAxisList.Clear();
                paneDHA.YAxisList.Clear();
                paneDTA.YAxisList.Clear();

                // Создадим три новых оси Y
                // Метод AddYAxis() возвращает индекс новой оси в списке осей (YAxisList)
                int mX = paneM.AddYAxis("X axis, mgauss");
                int mY = paneM.AddYAxis("Y axis, mgauss");
                int mZ = paneM.AddYAxis("Z axis, mgauss");

                int aX = paneA.AddYAxis("X axis, g");
                int aY = paneA.AddYAxis("Y axis, g");
                int aZ = paneA.AddYAxis("Z axis, g");

                int gX = paneG.AddYAxis("X axis, dps");
                int gY = paneG.AddYAxis("Y axis, dps");
                int gZ = paneG.AddYAxis("Z axis, dps");

                int dhaAxis = paneDHA.AddYAxis("&#916; f, Hz");
                int dtaAxis = paneDTA.AddYAxis("&#916; t, °C");


                LineItem magnetX = paneM.AddCurve("X axis", m1, Color.LightBlue, SymbolType.None);
                LineItem magnetY = paneM.AddCurve("Y axis", m2, Color.YellowGreen, SymbolType.None);
                LineItem magnetZ = paneM.AddCurve("Z axis", m3, Color.LightCoral, SymbolType.None);

                LineItem accelX = paneA.AddCurve("X axis", a1, Color.LightBlue, SymbolType.None);
                LineItem accelY = paneA.AddCurve("Y axis", a2, Color.YellowGreen, SymbolType.None);
                LineItem accelZ = paneA.AddCurve("Z axis", a3, Color.LightCoral, SymbolType.None);

                LineItem gyroX = paneG.AddCurve("X axis", g1, Color.LightBlue, SymbolType.None);
                LineItem gyroY = paneG.AddCurve("Y axis", g2, Color.YellowGreen, SymbolType.None);
                LineItem gyroZ = paneG.AddCurve("Z axis", g3, Color.LightCoral, SymbolType.None);

                LineItem DHA = paneDHA.AddCurve("&#916; f", dha1, Color.LightBlue, SymbolType.None);
                LineItem DTA = paneDTA.AddCurve("&#916; t", dta1, Color.LightBlue, SymbolType.None);


                magnetX.Line.IsSmooth = true;
                //magnetX.Line.Width = 2.0f;
                magnetY.Line.IsSmooth = true;
                magnetZ.Line.IsSmooth = true;
                accelX.Line.IsSmooth = true;
                accelY.Line.IsSmooth = true;
                accelZ.Line.IsSmooth = true;
                gyroX.Line.IsSmooth = true;
                gyroY.Line.IsSmooth = true;
                gyroZ.Line.IsSmooth = true;
                DHA.Line.IsSmooth = true;
                DTA.Line.IsSmooth = true;


                // Для каждой кривой установим свои оси
                magnetX.YAxisIndex = mX;
                magnetY.YAxisIndex = mY;
                magnetZ.YAxisIndex = mZ;

                accelX.YAxisIndex = aX;
                accelY.YAxisIndex = aY;
                accelZ.YAxisIndex = aZ;

                gyroX.YAxisIndex = gX;
                gyroY.YAxisIndex = gY;
                gyroZ.YAxisIndex = gZ;

                DHA.YAxisIndex = dhaAxis;
                DTA.YAxisIndex = dtaAxis;


                // Для наглядности раскрасим надписи на оси Y в цвета графика, 
                // который рисуется с этой осью
                paneM.YAxisList[mX].Title.FontSpec.FontColor = Color.LightBlue;
                paneM.YAxisList[mY].Title.FontSpec.FontColor = Color.YellowGreen;
                paneM.YAxisList[mZ].Title.FontSpec.FontColor = Color.LightCoral;

                paneA.YAxisList[aX].Title.FontSpec.FontColor = Color.LightBlue;
                paneA.YAxisList[aY].Title.FontSpec.FontColor = Color.YellowGreen;
                paneA.YAxisList[aZ].Title.FontSpec.FontColor = Color.LightCoral;

                paneG.YAxisList[gX].Title.FontSpec.FontColor = Color.LightBlue;
                paneG.YAxisList[gY].Title.FontSpec.FontColor = Color.YellowGreen;
                paneG.YAxisList[gZ].Title.FontSpec.FontColor = Color.LightCoral;

                paneDHA.YAxisList[dhaAxis].Title.FontSpec.FontColor = Color.LightBlue;
                paneDTA.YAxisList[dtaAxis].Title.FontSpec.FontColor = Color.LightBlue;


                // Вызываем метод AxisChange (), чтобы обновить данные об осях. 
                // В противном случае на рисунке будет показана только часть графика, 
                // которая умещается в интервалы по осям, установленные по умолчанию
                MGraph.AxisChange();
                AGraph.AxisChange();
                GGraph.AxisChange();
                DHAGraph.AxisChange();
                DTAGraph.AxisChange();

                // Обновляем график
                MGraph.Invalidate();
                AGraph.Invalidate();
                GGraph.Invalidate();
                DHAGraph.Invalidate();
                DTAGraph.Invalidate();
        }
}
...
Рейтинг: 0 / 0
Проблема отображения времени в ZedGraph
    #38511713
Halfling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Co_balt, примерно так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
XAxis x = this.graph.GraphPane.XAxis;

x.Type = AxisType.Date;
x.Scale.Min = new XDate(DateTime.Now.AddMinutes(-5));
x.Scale.Max = new XDate(DateTime.Now);
x.Scale.MajorUnit = DateUnit.Minute;
x.Scale.MinorUnit = DateUnit.Second;
x.Scale.MajorStep = 1;
x.Scale.MinorStep = 10;
x.Scale.Format = "mm:ss";
...
Рейтинг: 0 / 0
Проблема отображения времени в ZedGraph
    #38512603
Co_balt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Halfling,

добавил

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
                GraphPane paneM = MGraph.GraphPane;
                GraphPane paneA = AGraph.GraphPane;
                GraphPane paneG = GGraph.GraphPane;
                GraphPane paneDHA = DHAGraph.GraphPane;
                GraphPane paneDTA = DTAGraph.GraphPane;

                XAxis x = MGraph.GraphPane.XAxis;

                x.Type = AxisType.Date;
                x.Scale.Min = new XDate(DateTime.Now.AddMinutes(-1));
                x.Scale.Max = new XDate(DateTime.Now);
                x.Scale.MajorUnit = DateUnit.Minute;
                x.Scale.MinorUnit = DateUnit.Second;
                x.Scale.MajorStep = 1;
                x.Scale.MinorStep = 10;
                x.Scale.Format = "mm:ss";



и еще...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
                DateTime now = new DateTime();  
                now = DateTime.Now;
                double timestamp = (double)new XDate(now); 

                foreach (double val in _dataMagnetX)
                {
                    m1.Add(timestamp, val);
                }
                foreach (double val in _dataMagnetY)
                {
                    m2.Add(timestamp, val);
                }
                foreach (double val in _dataMagnetZ)
                {
                    m3.Add(timestamp, val);
                }



по оси Х время бежит все как надо а графики пропали...
...
Рейтинг: 0 / 0
Проблема отображения времени в ZedGraph
    #38512752
Halfling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Co_balt, timestamp не изменяете, у всех точек одно и то же время.

Вот ваш же старый код:
Код: c#
1.
2.
3.
4.
5.
                foreach (double val in _dataMagnetX)
                {
                    m1.Add(curr_x, val);
                    curr_x += dx;
                }
...
Рейтинг: 0 / 0
Проблема отображения времени в ZedGraph
    #38513558
Co_balt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HalflingВот ваш же старый код:


по-любому не работает...
вот ссылка на весь проект http://www.cypress.com/?docID=47288
...
Рейтинг: 0 / 0
Проблема отображения времени в ZedGraph
    #38513809
Halfling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Co_balt, обновление должно происходить по таймеру, а он не запущен. Это раз.

Код: c#
1.
2.
3.
4.
5.
6.
7.
        public GenericHidForm()
        {
            //Initialize the main GUI
            InitializeComponent();
            this.InputTimer.Start();
            ...
        }



Второе - у меня прибора нет, обновление происходит только при подключенном приборе. Для теста вынес обновление за проверку.
Код: c#
1.
2.
3.
if (myHidDevice != null)
{}
DrawGraph();



Точки получал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
                Random r = new Random();

                // Заполняем список точек
                foreach (double val in _dataMagnetX)
                {
                    m1.Add(curr_x, val + r.NextDouble());
                    curr_x += dx;
                }



Пользуйтесь дебаггером чтобы подобные мелочи находить, полезная штука.
Дальше уж как-нибудь сами...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема отображения времени в ZedGraph
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]