Вверх ↑
Этот топик читают: Гость
Ответов: 36
Рейтинг: 0
#1: 2024-06-08 10:09:52 ЛС | профиль | цитата
Здравствуйте. В приложении пример программы, если при данной скорости отправки данных (чем быстрее тем раньше) на графике наберется более 3000 точек то загрузка одного ядра процессора доходит до 100% и дальше вплоть до вылета программы. Если отправлять одновременно на 3 графика, то соответственно примерно после 1000 точек на каждом графике загрузка ядра 100%. Если какой способ вывода на график большого количества точек? немного помогает уменьшение частоты отправки данных, но ждать несколько часов не лучший вариант.

Add(MainForm,14372191,357,119)
{
Left=21
Top=105
Width=1450
Height=871
Color=-16777194
Font=[Arial,8,0,0,1]
Ctl3D=0
Caption="тест SCD40"
BorderStyle=1
}
Add(Plotter,13668624,1295,77)
{
Left=140
Width=1000
Height=400
Name="1"
GridX=20
GridY=20
MaxH=1600
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doMinH)
Point(doMaxH)
Point(doEnabled)
Point(doMinW)
Point(doMaxW)
Point(MinX)
Point(MaxX)
}
Add(Button,3649645,1211,119)
{
Left=5
Top=740
Width=120
Height=35
Caption="Очистить график"
Data=Integer(0)
link(onClick,5720659:doEvent1,[])
}
Add(Hub,5720659,1260,119)
{
OutCount=3
link(onEvent1,13668624:doClear,[(1284,125)(1284,83)])
link(onEvent2,14196124:doClear,[(1284,132)(1284,139)])
link(onEvent3,16236745:doClear,[(1284,139)(1284,216)])
}
Add(Plotter,14196124,1295,133)
{
Left=140
Top=405
Width=1000
Height=210
Name="2"
GridX=5
MinH=1
MaxH=100
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doMinH)
Point(doMaxH)
Point(doEnabled)
Point(doMinW)
Point(doMaxW)
Point(MinX)
Point(MaxX)
}
Add(Plotter,16236745,1295,210)
{
Left=140
Top=625
Width=1000
Height=210
Name="3"
GridX=5
MinH=20
MaxH=40
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doMinH)
Point(doMaxH)
Point(doEnabled)
Point(doMinW)
Point(doMaxW)
Point(MinX)
Point(MaxX)
}
Add(CounterEx,6717573,567,364)
{
link(onNext,8481559:doEvent1,[(607,370)(607,286)])
}
Add(PlotPoints,16575108,973,350)
{
Grapher="2"
Color=0
Size=3
Step=1
Shape=2
Point(doColor)
link(ValueY,11133996:GetData,[])
}
Add(EventFromData,11133996,973,294)
{
}
Add(Hub,13794139,931,294)
{
link(onEvent1,11133996:doData,[])
link(onEvent2,16575108:doAdd,[(959,307)(959,356)])
}
Add(Timer,15344409,511,364)
{
Interval=5
link(onTimer,6717573:doNext,[])
}
Add(PlotPoints,15831482,1015,483)
{
Grapher="3"
Size=3
Step=1
Shape=2
Point(doColor)
link(ValueY,9797081:GetData,[])
}
Add(EventFromData,9797081,1015,427)
{
}
Add(Hub,2529222,973,427)
{
link(onEvent1,9797081:doData,[])
link(onEvent2,15831482:doAdd,[(1001,440)(1001,489)])
}
Add(PlotPoints,7507624,1015,210)
{
Grapher="1"
Color=0
Size=3
Step=1
Shape=2
Point(doColor)
link(ValueY,5746096:GetData,[])
}
Add(EventFromData,5746096,1015,154)
{
}
Add(Hub,3703532,973,154)
{
link(onEvent1,5746096:doData,[])
link(onEvent2,7507624:doAdd,[(1001,167)(1001,216)])
}
Add(Button,3350393,392,371)
{
Left=55
Top=325
Caption="выкл"
Data=Integer(1)
link(onClick,15344409:doStop,[])
}
Add(Memo,1824552,756,364)
{
Left=1145
Top=40
Width=310
Height=645
ScrollBars=2
link(onChange,10324091:doData,[(800,370)(800,412)(751,412)(751,454)])
}
Add(DoData,10324091,763,448)
{
Data=Integer(0)
link(onEventData,11676252:doText,[])
link(Data,1824552:Count,[])
}
Add(Edit,11676252,812,448)
{
Left=1195
Top=700
Width=110
}
Add(Button,9926212,396,340)
{
Left=50
Top=300
Caption="вкл"
Data=Integer(1)
link(onClick,15344409:doTimer,[(470,346)(470,370)])
}
Add(StrCat,13187429,658,322)
{
Str2=" тестовая с тестовая строкатрока"
link(onStrCat,1824552:doAdd,[(723,328)(723,370)])
link(Str1,5358733:GetData,[])
}
Add(EventFromData,5358733,658,280)
{
}
Add(Hub,8481559,616,280)
{
InCount=2
OutCount=3
link(onEvent1,5358733:doData,[])
link(onEvent2,13187429:doStrCat,[(644,293)(644,328)])
link(onEvent3,13794139:doEvent1,[])
}
Add(CounterEx,10884692,581,448)
{
link(onNext,8481559:doEvent2,[(615,454)(615,293)])
}
Add(Timer,1052605,525,448)
{
Interval=50
Enable=1
link(onTimer,10884692:doNext,[])
}
Add(Button,13428654,406,455)
{
Left=50
Top=390
Caption="выкл низ"
Data=Integer(1)
link(onClick,1052605:doStop,[])
}
Add(Button,4819930,410,424)
{
Left=50
Top=360
Caption="вкл низ"
Data=Integer(1)
link(onClick,1052605:doTimer,[(484,430)(484,454)])
}

карма: 0

0
Ответов: 721
Рейтинг: 154
#2: 2024-06-08 14:39:37 ЛС | профиль | цитата
andrewproffi, Никогда не применяй EventFromData как Memory. Он предназначен не для этого.
Твоя схема тормозит от того, что ты пытаешься выводить всё в Memo и из-за использования таймеров с визуальными компонентами.
10 тысяч точек, 3 графика – задержка около секунды

Add(MainForm,14372191,203,182)
{
Left=21
Top=105
Width=1450
Height=871
Color=-16777194
Font=[Arial,8,0,0,1]
Ctl3D=0
Caption="тест SCD40"
BorderStyle=1
link(onCreate,15799540:doFor,[])
}
Add(Plotter,13668624,945,161)
{
Left=140
Width=1000
Height=400
Name="1"
GridX=20
GridY=20
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doEnabled)
Point(MinX)
Point(MaxX)
}
Add(Button,3649645,861,203)
{
Left=5
Top=740
Width=120
Height=35
Caption="Очистить график"
Data=Integer(0)
link(onClick,5720659:doEvent1,[])
}
Add(Hub,5720659,910,203)
{
OutCount=3
link(onEvent1,13668624:doClear,[(934,209)(934,167)])
link(onEvent2,14196124:doClear,[(934,216)(934,223)])
link(onEvent3,16236745:doClear,[(934,223)(934,300)])
}
Add(Plotter,14196124,945,217)
{
Left=140
Top=405
Width=1000
Height=210
Name="2"
GridX=5
MinH=1
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doEnabled)
Point(doMinW)
Point(doMaxW)
Point(MinX)
Point(MaxX)
}
Add(Plotter,16236745,945,294)
{
Left=140
Top=625
Width=1000
Height=210
Name="3"
GridX=5
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doMinH)
Point(doMaxH)
Point(doEnabled)
Point(doMinW)
Point(doMaxW)
Point(MinX)
Point(MaxX)
}
Add(PlotPoints,16575108,455,161)
{
Grapher="2"
Color=0
Size=3
Step=1
Shape=2
Point(doColor)
}
Add(PlotPoints,15831482,455,252)
{
Grapher="3"
Size=3
Step=1
Shape=2
Point(doColor)
}
Add(PlotPoints,7507624,455,203)
{
Grapher="1"
Color=0
Size=3
Step=1
Shape=2
Point(doColor)
}
Add(Button,3350393,77,196)
{
Left=55
Top=325
Caption="выкл"
Data=Integer(1)
}
Add(Memo,1824552,595,385)
{
Left=1145
Top=40
Width=310
Height=645
ScrollBars=2
link(onChange,10324091:doData,[(639,391)(639,433)(590,433)(590,475)])
}
Add(DoData,10324091,602,469)
{
Data=Integer(0)
link(onEventData,11676252:doText,[])
link(Data,1824552:Count,[])
}
Add(Edit,11676252,651,469)
{
Left=1195
Top=700
Width=110
}
Add(Button,9926212,81,165)
{
Left=50
Top=300
Caption="вкл"
Data=Integer(1)
}
Add(StrCat,13187429,532,385)
{
Str2=" тестовая с тестовая строкатрока"
link(onStrCat,1824552:doAdd,[])
}
Add(Button,13428654,91,280)
{
Left=50
Top=390
Caption="выкл низ"
Data=Integer(1)
}
Add(Button,4819930,95,249)
{
Left=50
Top=360
Caption="вкл низ"
Data=Integer(1)
}
Add(For,15799540,266,196)
{
End=10000
link(onEvent,5835041:doRandom,[])
}
Add(Random,5835041,322,196)
{
Min=-30
Max=30
link(onRandom,9885685:doCalc,[])
}
Add(MathParse,9885685,371,196)
{
MathStr="%1 + %0"
link(onResult,11840090:doEvent1,[])
}
Add(EventFromData,13514818,385,476)
{
}
Add(Hub,11840090,420,196)
{
OutCount=3
link(onEvent1,16575108:doAdd,[(445,202)(445,167)])
link(onEvent2,7507624:doAdd,[])
link(onEvent3,15831482:doAdd,[(445,216)(445,258)])
}

карма: 15

0
Ответов: 36
Рейтинг: 0
#3: 2024-06-08 17:15:16 ЛС | профиль | цитата
А как тогда добавлять точку с координатами на график? формировать строку Х,У ? Почему это так критично?
я показал пример с таймером чтобы наглядно было видно рост нагрузки на процессор, мне сейчас важен именно этот момент. как правильно выводить поток данных на график чтобы уменьшить нагрузку на процессор. текстовые поля можно убрать, смысл от этого не изменится.
карма: 0

0
Ответов: 721
Рейтинг: 154
#4: 2024-06-08 17:24:01 ЛС | профиль | цитата
andrewproffi писал(а):
А как тогда добавлять точку с координатами на график? формировать строку Х,У ? Почему это так критично?
я показал пример с таймером чтобы наглядно было видно рост нагрузки на процессор, мне сейчас важен именно этот момент. как правильно выводить поток данных на график чтобы уменьшить нагрузку на процессор. текстовые поля можно убрать, смысл от этого не изменится.


У меня нагрузка не более 4%

Add(Plotter,13668624,770,91)
{
Left=140
Width=1000
Height=400
Name="1"
GridX=20
GridY=20
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doEnabled)
Point(MinX)
Point(MaxX)
}
Add(Button,3649645,686,133)
{
Left=5
Top=740
Width=120
Height=35
Caption="Очистить график"
Data=Integer(0)
link(onClick,5720659:doEvent1,[])
}
Add(Hub,5720659,735,133)
{
OutCount=3
link(onEvent1,13668624:doClear,[(759,139)(759,97)])
link(onEvent2,14196124:doClear,[(759,146)(759,153)])
link(onEvent3,16236745:doClear,[(759,153)(759,230)])
}
Add(Plotter,14196124,770,147)
{
Left=140
Top=405
Width=1000
Height=210
Name="2"
GridX=5
MinH=1
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doEnabled)
Point(doMinW)
Point(doMaxW)
Point(MinX)
Point(MaxX)
}
Add(Plotter,16236745,770,224)
{
Left=140
Top=625
Width=1000
Height=210
Name="3"
GridX=5
LeftMargin=40
TopMargin=30
Point(MinY)
Point(MaxY)
Point(doMinH)
Point(doMaxH)
Point(doEnabled)
Point(doMinW)
Point(doMaxW)
Point(MinX)
Point(MaxX)
}
Add(MainForm,14372191,357,70)
{
Left=21
Top=105
Width=1450
Height=871
Color=-16777194
Font=[Arial,8,0,0,1]
Ctl3D=0
Caption="тест SCD40"
BorderStyle=1
}
Add(PlotPoints,16575108,567,112)
{
Grapher="2"
Color=0
Size=3
Step=1
Shape=2
Point(doColor)
}
Add(PlotPoints,15831482,567,203)
{
Grapher="3"
Size=3
Step=1
Shape=2
Point(doColor)
}
Add(PlotPoints,7507624,567,154)
{
Grapher="1"
Color=0
Size=3
Step=1
Shape=2
Point(doColor)
}
Add(Button,3350393,266,182)
{
Left=55
Top=325
Caption="выкл"
Data=Integer(1)
link(onClick,2632097:doStop,[(305,188)(305,160)])
}
Add(Memo,1824552,784,364)
{
Left=1145
Top=40
Width=310
Height=645
ScrollBars=2
link(onChange,10324091:doData,[(828,370)(828,412)(779,412)(779,454)])
}
Add(DoData,10324091,791,448)
{
Data=Integer(0)
link(onEventData,11676252:doText,[])
link(Data,1824552:Count,[])
}
Add(Edit,11676252,840,448)
{
Left=1195
Top=700
Width=110
}
Add(Button,9926212,266,147)
{
Left=50
Top=300
Caption="вкл"
Data=Integer(1)
link(onClick,2632097:doTimer,[])
}
Add(StrCat,13187429,721,364)
{
Str2=" тестовая с тестовая строкатрока"
link(onStrCat,1824552:doAdd,[])
}
Add(Button,13428654,280,259)
{
Left=50
Top=390
Caption="выкл низ"
Data=Integer(1)
}
Add(Button,4819930,280,224)
{
Left=50
Top=360
Caption="вкл низ"
Data=Integer(1)
}
Add(Random,5835041,434,147)
{
Min=-30
Max=30
link(onRandom,9885685:doCalc,[])
}
Add(MathParse,9885685,483,147)
{
MathStr="%1 + %0"
link(onResult,11840090:doEvent1,[])
}
Add(EventFromData,13514818,574,455)
{
}
Add(Hub,11840090,532,147)
{
OutCount=3
link(onEvent1,16575108:doAdd,[(557,153)(557,118)])
link(onEvent2,7507624:doAdd,[])
link(onEvent3,15831482:doAdd,[(557,167)(557,209)])
}
Add(Timer,2632097,357,147)
{
Interval=100
link(onTimer,5835041:doRandom,[])
}

карма: 15

0
Ответов: 8897
Рейтинг: 823
#5: 2024-06-08 18:36:49 ЛС | профиль | цитата
andrewproffi, следить за графиком в реальном времени, да ещё при отображении более 2^14 точек это извращение
Проще собрать информацию и затем рассматривать в каком угодно разрешении.


Add(MainForm,14372191,301,49)
{
Left=21
Top=105
Width=513
Height=501
Color=-16777194
Font=[Arial,8,0,0,1]
Ctl3D=0
Caption="График"
BorderStyle=1
link(onCreate,16203543:doClear,[(346,69)(346,111)])
}
Add(Plotter,16236745,483,154)
{
Top=40
Width=505
Height=211
Name="3"
GridX=5
LeftMargin=40
TopMargin=30
MouseControl=1
Point(MinY)
Point(MaxY)
Point(doEnabled)
Point(MinX)
Point(MaxX)
}
Add(PlotPoints,15831482,441,168)
{
Grapher="3"
Size=3
Step=1
MaxValues=5001
Shape=2
Point(doColor)
}
Add(ChildPanel,2035153,301,98)
{
link(onEvent1,14190969:doEvent1,[(340,104)(340,97)])
link(onEvent2,1618730:doEvent1,[(340,111)(340,139)(245,139)(245,167)])
}
BEGIN_SDK
Add(EditMulti,718962,7,7)
{
EventCount=3
WorkCount=1
VarCount=2
Width=524
Height=151
link(doWork1,2869297:doText,[(298,13)(298,20)(312,20)(312,34)])
link(Var1,15511391:Var1,[(13,110)(307,110)(307,75)])
link(Var2,4055439:Var1,[(20,131)])
}
Add(Panel,6731582,28,28)
{
Width=507
Height=40
Align=2
}
Add(CounterEx,12131730,175,63)
{
Max=99999999
link(onNext,1184753:doEvent1,[])
}
Add(Button,16013611,77,63)
{
Left=140
Top=5
Caption="выкл"
Data=Integer(1)
link(onClick,9648798:doStop,[])
}
Add(Button,11233891,77,28)
{
Left=20
Top=5
Caption="вкл"
Data=Integer(1)
link(onClick,9648798:doStart,[(116,34)(116,62)])
}
Add(Edit,2337565,266,70)
{
Left=85
Top=5
ReadOnly=0
ClearAfterEnter=1
}
Add(Hub,1184753,224,63)
{
link(onEvent1,12744155:doCalc,[(249,69)(249,34)])
link(onEvent2,2337565:doText,[])
}
Add(Button,3824384,336,91)
{
Left=215
Top=10
Width=85
Caption="Показать ещё"
link(onClick,4909536:doCalc,[])
}
Add(MathParse,4909536,399,91)
{
link(onResult,718962:onEvent2,[(480,97)(480,20)])
link(X1,15511391:Var2,[])
link(X2,9136399:Text,[(412,68)(447,68)])
}
Add(Edit,2869297,399,28)
{
Left=420
Top=10
Text="0"
DataType=2
link(Str,4055439:Var3,[(405,19)(384,19)])
}
Add(Edit,9136399,441,28)
{
Left=305
Top=10
Text="1000"
DataType=2
}
Add(Label,4965695,14,63)
{
Left=360
Top=15
Width=59
Height=17
Caption="начиная с"
}
Add(GetDataEx,15511391,399,70)
{
link(Data,2869297:Text,[])
}
Add(MathParse,12744155,266,28)
{
MathStr="sin(%1*0.033333)"
link(onResult,718962:onEvent1,[(305,34)(305,13)])
}
Add(Thread,9648798,126,56)
{
Delay=0
link(onSyncExec,12131730:doNext,[])
}
Add(GetDataEx,4055439,378,126)
{
Angle=1
link(Data,4909536:Result,[(405,131)])
}
END_SDK
Add(StrList,16203543,385,98)
{
}
Add(For,13127439,301,168)
{
link(onEvent,14299200:doRead,[])
link(onStop,2035153:doWork1,[(340,181)(340,146)(284,146)(284,104)])
link(Start,2035153:Var1,[])
link(End,2035153:Var2,[])
}
Add(ArrayRW,14299200,385,168)
{
link(onRead,15831482:doAdd,[])
link(Array,16203543:Array,[(391,138)(405,138)])
}
Add(PlotLines,8085965,441,84)
{
Grapher="2"
Color=16711680
Step=1
MaxValues=1001
}
Add(Plotter,1867453,483,84)
{
Top=260
Width=505
Height=211
Name="2"
MouseControl=1
}
Add(Hub,14190969,357,91)
{
link(onEvent1,8085965:doAdd,[(424,97)(424,90)])
link(onEvent2,16203543:doAdd,[])
}
Add(Hub,1618730,266,161)
{
link(onEvent1,16236745:doClear,[(291,167)(291,160)])
link(onEvent2,13127439:doFor,[])
}

(Если поставить в компоненте "Tread" интервал "0", накопление данных очень быстрое и график срабатывает во время отвлечения Windos на свои внутренние проблемы )
карма: 19

0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)