Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/20: Рейтинг темы: голосов - 20, средняя оценка - 4.80
Димон856
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 1
1

Как сделать динамический график

17.05.2012, 11:24. Просмотров 3950. Ответов 32
Метки нет (Все метки)

Здравствуйте, помогите решить проблему ? плииз с COM порта идут данные строиться статичный график как сделать чтоб он отрисовывался в постоянном режиме (в динамике )???
вот прога


Delphi
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
var
  Form1: TForm1;
  conf:array[1..256] of string;
  ComPort:Thandle;
  t,j:integer;
  q,z:integer;
  buf:array[1..4200] of AnsiChar;
 implementation
 
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
 conf[1]:='1';
 ComPort:=ComOpen('com'+conf[1]);
 lbl1.Caption:='вкл';
 j:=0 ;
 q:=0;
 t:=1;
 
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ComWrite(ComPort,'E'+#10+#13);
sleep(200);
ComClose(ComPort);
end;
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
var i,h:longint;
    code,k,p:integer;
    j1:integer;
    x:char;
    str,s:string;
    newStr:array[1..2100] of string;
        //buf:array[1..42000] of Char;
begin
  j1:=1;
  str:=ComRead(comPort);
if(str<>'') then
begin
  for i:=1 to length(str) do
    begin
 
      if j>2110 then
       begin timer1.Enabled:=false;
 
                 if Timer1.Enabled=True then lbl1.Caption:='on'
                                        else lbl1.Caption:='off';
       break;
       end;
       buf[j]:=str[j];
        mmo1.Lines.add(IntToStr(j)+'      '+inttostr(Ord(str[j]))+'    '+IntToStr(j+1)+'    '+inttostr(Ord(str[j+1])));
       j:=j+2;
       
 
       if  ((j>8) and (j<2008)) then
      Series1.AddXY((j-8),256*Ord(str[j+1])+Ord(str[j]));
 
       
    end;   
    end;
   end;
 
 
 
procedure TForm1.Button1Click(Sender: TObject);
var temp:string;
     i,p:integer;
begin
 
  j:=1;i:=1;
  Timer1.Enabled:=true;
  if Timer1.Enabled=True then lbl1.Caption:='on'
                         else lbl1.Caption:='off';
  ComWrite(ComPort,'G'+#10+#13);
  temp:=ComRead(ComPort);
  {if Timer1.Enabled=false then
  while   j<2110 do
  begin
    p:=ord(buf[j]);     
     end;   
 
 
end;
 
procedure TForm1.N3Click(Sender: TObject);
begin
ComWrite(ComPort,'E'+#10+#13);
sleep(200);
ComClose(ComPort);
close();
end;
 
procedure TForm1.N2Click(Sender: TObject);
var path:string;
begin
SaveDialog1.Execute;
path:=SaveDialog1.FileName;
if path<>'' then memo1.Lines.SaveToFile(path);
end;
 
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
     ComWrite(ComPort,'T1'+#10+#13);t:=25
end;
 
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
      ComWrite(ComPort,'T2'+#10+#13);t:=50
end;
 
procedure TForm1.RadioButton3Click(Sender: TObject);
begin
      ComWrite(ComPort,'T3'+#10+#13);t:=100
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=false;
end;
 
procedure TForm1.Exit1Click(Sender: TObject);
begin
 
Close;
 
end;
 
procedure TForm1.N5Click(Sender: TObject);
begin
 
          Tmr1.Enabled:=True ;
end;
 
procedure TForm1.tmr1Timer(Sender: TObject);
begin
    
 if Timer1.Enabled=False then
 
 
  begin
 
    Button1.Click ;
     
  end;
     begin
       if tmr1.Enabled=True then lbl2.Caption:='on' else
                                   lbl2.Caption:='off'
     end;  
 
 
end;
 
 
 
procedure TForm1.N6Click(Sender: TObject);
begin
tmr1.Enabled:=False;
end;
 
end.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2012, 11:24
Ответы с готовыми решениями:

как сделать график ?
вот сама программа с графиком как присвоить значения к графику.... задание нужно построить...

Динамический график на канве
В весьма полезной теме https://www.cyberforum.ru/delphi-beginners/thread122904.html говорится о...

Как сделать график по функции?
Уважаемые программисты помогите решить простенькую задачку. Меня попросили создать форму на...

Динамический График своими руками
Всем добрый вечер. Нуждаюсь в подсказке (Помощи). Создаю График к сожалению не динамический, вот...

Как сделать вывод на график в компонент tchart
КАК СДЕЛАТЬ ВЫВОД НА ГРАФИК В КОМПОНЕНТ tchart вот исходник procedure...

32
zvygin1964
2 / 2 / 0
Регистрация: 29.06.2013
Сообщений: 67
29.06.2013, 11:51 2
Уже целый год прошел, а здесь никто не умеет строить графики... Круто!
Повторяю вопрос уважаемого Димон856: Delphi умеет рисовать динамические графики? Нигде этого не могу
найти. В любом виде. (Данные из COM-порта, USB 1.1, USB 2.0). Люди из easyelectronics.ru очень нуждаются в этом уже долгие годы. Если здесь никто не умеет, то посоветуйте язык где умеют...
0
Одиночка
29.06.2013, 12:01
  #3

Не по теме:

Посмотрю. Только позже.

1
Одиночка
3937 / 1862 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
01.07.2013, 19:25 4
@zvygin1964, Тебе действительно нужен этот график? А то не охота возиться впустую. Ты зашел раз и может больше вообще не появишься. Если действительно нужно, создай тему, напиши нормальное условие задачи. В инете есть программки "Осциллограф" с исходными текстами на Delphi. Правда для звуковых плат пока нашел. Можно переделать под Com-порт.
1
Mawrat
12881 / 5783 / 1704
Регистрация: 19.09.2009
Сообщений: 8,807
01.07.2013, 19:41 5
Цитата Сообщение от zvygin1964 Посмотреть сообщение
Delphi умеет рисовать динамические графики?
Это задача программиста, а не инструмента. Это всё равно что спросить - "умеет ли молоток забивать гвозди?". Сам по себе молоток гвозди забивать не умеет. А вот плотник с помощью молотка - умеет.
---
Когда пришли новые данные или когда новых данных накопилось достаточное количество, то график надо перерисовать. В этом и заключается идея динамического графика. Данные можно обрабатывать с помощью механизма типа "очередь". - Новые данные добавляются, устаревшие - исчезают. По текущему содержанию очереди строится график.
0
Одиночка
3937 / 1862 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
01.07.2013, 19:49 6
@Mawrat На этом их сайте сидят действительно электронщики. Может им действительно нужна программа, которая по типу осциллографа отображала бы данные, принятые с этих портов. Я исходные коды такого динамического рисования нашел. Объединить только с портом... Ну пускай постановку задачи хотя-бы сделает.
1
Mawrat
12881 / 5783 / 1704
Регистрация: 19.09.2009
Сообщений: 8,807
01.07.2013, 20:12 7
Цитата Сообщение от Одиночка Посмотреть сообщение
Может им действительно нужна программа, которая по типу осциллографа отображала бы данные, принятые с этих портов.
Такие программы конечно нужны. Но там может быть множество особенностей. Внешние устройства могут передавать свои данные по-разному - разные протоколы взаимодействия. Для взаимодействия с устройством могут быть уже готовые драйверы. А может и не быть драйверов... В общем, здесь в любом случае, начинать надо с постановки задачи:
Цитата Сообщение от Одиночка Посмотреть сообщение
Ну пускай постановку задачи хотя-бы сделает.
И задача может оказаться достаточно объёмной.
0
Одиночка
3937 / 1862 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
01.07.2013, 20:13 8
И задача может оказаться достаточно объёмной.
Зато получишь удовлетворение от результата.
К тому же другие же выложили свои наработки. И не требуют за них денег.
1
Mawrat
12881 / 5783 / 1704
Регистрация: 19.09.2009
Сообщений: 8,807
01.07.2013, 20:17 9
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
А если бы попросили во врилансе, желающих и умеющих было бы больше.
Это верно. Потому что если такую программу сделать в некоторой степени универсальной - то это уже коммерческий продукт получится.

Добавлено через 1 минуту
Цитата Сообщение от Одиночка Посмотреть сообщение
Зато получишь удовлетворение от результата.
К тому же другие же выложили свои наработки. И не требуют за них денег.
Я здесь не спорю. Задача, в самом деле, интересная. Часто энтузиасты пишут бесплатно очень полезные программы. Которые при желании можно было бы и продавать.
0
zvygin1964
2 / 2 / 0
Регистрация: 29.06.2013
Сообщений: 67
02.07.2013, 23:53 10
Цитата Сообщение от Одиночка Посмотреть сообщение
@zvygin1964, А то не охота возиться впустую. В инете есть программки "Осциллограф" с исходными текстами на Delphi. .
Ага. Впустую. Стандартные COM-порт, USB 1.1, USB 2.0 обрабатывает LabVIEW. И не торгуется. В рекламе не нуждается. Рубит капусту помаленьку. Киньте ссылку на "Осциллограф" с исходными текстами на Delphi рисующий три (или больше) разноцветных графика одновременно. По оси "У" 255 точек, по оси "Х" время дискретизации на ваше усмотрение. На любом известном вам языке прог, с пояснениями на Могучем и литературном... Специально писать не надо. Дайте, чего не жалко, просто попялиться. Если для вас построить стандартный динамический график трудно, не беспокойтесь... И с портами разберемся сами, но на это уйдет еще десяток лет.
После получения внятного результата, вероятно, на этом сайте больше не появлюсь. Не программист, да и старый уже. Я с другой стороны фронта, типа, со стороны паяльника и микроконтроллера. Предупреждаю: все что получу от вашего сообщества выложу в форуме у Великого DI HALT (да прибудет его терпение при обучении начинающих)!
Ну а чего умеют Delphi, С++ и прочие шарпы я не могу с Вами обсуждать. Поисковик на мои запросы выдает только Excel с презентациями. Ваше поведение похоже на изобретение нового оружие возмездия, а не на велосипед. Нужны просто спички. Не просите Нобелевскую.
0
Одиночка
3937 / 1862 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
02.07.2013, 23:58 11
Вот то что я нашел:
2
Вложения
Тип файла: zip oscilograph.zip (6.5 Кб, 55 просмотров)
Тип файла: zip tkp-scope.zip (7.1 Кб, 41 просмотров)
zvygin1964
2 / 2 / 0
Регистрация: 29.06.2013
Сообщений: 67
04.07.2013, 11:44 12
Цитата Сообщение от Mawrat Посмотреть сообщение
"умеет ли молоток забивать гвозди?".
Delphi не может строит график по данным из файла до его закрытия. То есть молотком нельзя настраивать микросхемы... ,каким бы успешным плотник не был.
Цитата Сообщение от Mawrat Посмотреть сообщение
когда новых данных накопилось достаточное количество, то график надо перерисовать
Зачем перерисовывать? А перемещение битового образа на форме не подходит?
Цитата Сообщение от Mawrat Посмотреть сообщение
могут быть уже готовые драйверы
Драйверы не ваша забота. Научите на примерах обрабатывать данные в переменных, ну например строкового типа ASCII, или других.
Разделом форума не ошибся, это не для фрилансеров, это для начинающих. А то только Button и Label...
Повторяю вопрос: покажите на примерах, какие языки из вам известных (кроме LabVIEW) имеют компонент строящий динамические графики? С комментариями работы с переменными.
С уважением к присутствующим на форуме, и восхищением к Великому DI HALT.
0
FIL
Модератор
3458 / 2584 / 738
Регистрация: 19.09.2012
Сообщений: 7,950
04.07.2013, 12:38 13
Цитата Сообщение от zvygin1964 Посмотреть сообщение
Delphi не может строит график по данным из файла до его закрытия.
Только Delphi почему-то об этом не знает.
Цитата Сообщение от zvygin1964 Посмотреть сообщение
Повторяю вопрос: покажите на примерах, какие языки из вам известных (кроме LabVIEW) имеют компонент строящий динамические графики
Для построения дин. графиков особые компоненты не нужны. Их можно просто рисовать на форме.
0
zvygin1964
2 / 2 / 0
Регистрация: 29.06.2013
Сообщений: 67
04.07.2013, 21:27 14
Дайте примеры к обсуждению, например "из COM порта в динамический график.rar". Если сами не умеете, не отвлекайте начинающих. Покиньте класс, или помалкивайте на задней парте!
0
Вложения
Тип файла: rar из COM порта в динамический график.rar (256.4 Кб, 46 просмотров)
zvygin1964
2 / 2 / 0
Регистрация: 29.06.2013
Сообщений: 67
04.07.2013, 21:39 15
Да, и большое спасибо Одиночке. Осцилограф рабочий. Рисует две разноцветные кривые. Это уже здорово!!! Вот реальные люди! Уважаю.
0
mss
2641 / 2265 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
04.07.2013, 21:58 16
Цитата Сообщение от zvygin1964 Посмотреть сообщение
Предупреждаю: .. выложу .. у Великого DI HALT
Уж больно ты грозен как я погляжу)

А, пардон, что это за "Великий DI HALT" ? Чем уж так велико это оно, настолько велико что всякий смердный прыщ, по-твоему, обязан падать ниц, рыдать и давиться слезами-соплями от упоминания его величия ?
0
FIL
Модератор
3458 / 2584 / 738
Регистрация: 19.09.2012
Сообщений: 7,950
04.07.2013, 22:22 17
Цитата Сообщение от zvygin1964 Посмотреть сообщение
Если сами не умеете, не отвлекайте начинающих.
Просто твоя распальцованая манера общения не слишком располагает к тому, чтобы заморачиваться и тратить время на решение твоих проблем.
И не путай - за партой здесь ты.
0
murderer
3653 / 1596 / 166
Регистрация: 06.10.2010
Сообщений: 3,517
05.07.2013, 07:44 18
Зачем перерисовывать? А перемещение битового образа на форме не подходит?
Можно и так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
  bmp:   TBitmap;
 
procedure Timer(wnd,uMsg,idEvent,dwTime: LongInt);stdcall;
begin
  bmp.Canvas.Draw(-1,0,bmp);                //Сдвигаем график влево на 1 пиксель
  bmp.Canvas.FillRect(Rect(511,0,512,256)); //Стираем столбик справа
  bmp.Canvas.LineTo(511,random(20)+128);    //Рисуем график
  Form1.Canvas.Draw(0,0,bmp);               //Вывод графика на форму
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  bmp:=TBitmap.Create;
  bmp.Height:=256;
  bmp.Width :=512;
  bmp.Canvas.MoveTo(511,128);                            //Начальная позиция графика
  bmp.Canvas.Pen.Color:=255;                             //Цвет графика
  bmp.Canvas.Brush.Color:=0;                             //Цвет фона
  BitBlt(bmp.Canvas.Handle,0,0,512,256,0,0,0,BLACKNESS); //Заливаем экран чёрным цветом
  SetTimer(0,0,100,@Timer);
end;
2
Одиночка
3937 / 1862 / 337
Регистрация: 16.03.2012
Сообщений: 3,869
06.07.2013, 18:29 19
Пробовал и я почти таким же образом. Медленно выдаёт. Даже если таймер ставишь период 1 мс. По идее должно проходить 2 раза в секунду ширину битмапа. А проходит один раз за 10 секунд. Т.е. 512 точек за 10 секунд, по 50 точек в секунду. Думал медленно отрабатывает сдвиг рисунка, прорисовку. В результате выяснил, что это прерывания таймера так редко наступают. Тупо поставил в событии таймера цикл из прорисовки 50 новых точек. Отрисовывает аж бегом. График только мелькает.
1
Mawrat
12881 / 5783 / 1704
Регистрация: 19.09.2009
Сообщений: 8,807
06.07.2013, 18:48 20
Цитата Сообщение от zvygin1964 Посмотреть сообщение
Зачем перерисовывать? А перемещение битового образа на форме не подходит?
Цитата Сообщение от Одиночка Посмотреть сообщение
Пробовал и я почти таким же образом. Медленно выдаёт.
Я сразу хотел написать, да не написал, что сдвиг битового образа - это медленная операция.
0
06.07.2013, 18:48
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2013, 18:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как сделать, чтобы график рисовался в реальном времени?
в данном случае использую компонент TChart как сделать чтоб график в реальном времени рисовался по...

Как сделать график по заданной формуле написанной в эдите
здравствуйте уважаемые форумчане мне написать программу рисующую графики по заданной формуле в...

Как сделать рандомный массив и вывести его значения через график
как сделать рандомный массив и вывести его значения через график(по точкам)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.