например в текущем проекте устройство на скорости 9600 передает 15 байт данных с паузой 20мс (время передачи данных не учитывается), и у меня возникает проблема: либо программа зависает так, что ее даже в диспетчере задач не убить, либо вообще синий экран (компьютер достаточно мощный).
какая теоретически возможная скорость приема в программе hiasm? (при скорости передачи данных 9600, то есть минимальная пауза между пакетами)
как часто нужно очищать буфер RX входа?
как часть опрашивать com порт методом do read? опасно ли это делать очень часто?
моя программа
--- Добавлено в 2017-11-05 11:17:08
Add(MainForm,68149,308,98)
{
Left=21
Top=105
Width=1307
Height=749
Color=-16777194
Font=[Arial,8,0,0,1]
Ctl3D=0
Caption="Весы тест"
BorderStyle=1
}
Add(Button,83996,511,119)
{
Left=15
Top=80
Width=110
Height=25
Hint="Закрыть порт"
Caption="Закрыть порт"
Data=Real(0)
link(onClick,8939706:doCLOSE,[])
}
Add(Hub,1978584,728,112)
{
OutCount=8
link(onEvent1,9948085:doSearch,[(788,118)(788,48)])
link(onEvent2,12991404:doSearch,[(802,125)(802,139)])
link(onEvent3,8917718:doSearch,[(793,132)(793,223)])
link(onEvent4,1035903:doEvent1,[(938,139)(938,349)])
link(onEvent5,6536698:doSearch,[(784,146)(784,286)])
link(onEvent6,14575583:doSearch,[(778,153)(778,342)])
link(onEvent7,13161640:doEvent1,[(766,160)(766,454)])
}
Add(Memo,14942338,910,609)
{
Left=1085
Top=5
Width=190
Height=370
Font=[MS Sans Serif,10,0,0,1]
Name="com"
AddType=1
ScrollBars=2
}
Add(Length,13894160,847,553)
{
link(Str,11523494:GetData,[(853,543)(923,543)])
}
Add(EventFromData,12005780,847,434)
{
}
Add(Hub,13161640,791,448)
{
OutCount=6
link(onEvent1,12005780:doData,[(828,454)(828,440)])
link(onEvent2,5828708:doTrim,[(828,461)(828,503)])
link(onEvent3,13894160:doLength,[(825,468)(825,559)])
link(onEvent4,106401:doCompare,[(821,475)(821,615)])
link(onEvent5,10627377:doCompare,[(857,482)(857,685)])
}
Add(If_else,106401,847,609)
{
Type=5
Op2=Integer(0)
link(onTrue,14942338:doAdd,[])
link(Op1,13894160:Result,[])
}
Add(Trim,5828708,847,497)
{
Char=" "
link(onTrim,11523494:doData,[])
link(Text,12005780:GetData,[])
}
Add(EventFromData,11523494,917,497)
{
}
Add(InfoTip,2996018,686,532)
{
Info=#45:блок вычисляет пустую строку и не пропускает |19:ее в текстовое поле|
Width=127
Height=46
}
Add(Memo,11002733,959,35)
{
Left=160
Top=470
Width=100
Height=30
Font=[MS Sans Serif,12,0,0,1]
Name="Статичная масса, кг"
AddType=1
}
Add(BlockFind,9948085,833,42)
{
IncludeBlock=1
StartBlock="m="
EndBlock="kg"
link(onSearch,16066545:doEvent1,[])
}
Add(Hub,16066545,882,42)
{
OutCount=5
link(onEvent1,11002733:doClear,[])
link(onEvent2,11002733:doAdd,[(920,55)(920,41)])
link(onEvent3,1034609:doData,[(1004,62)(1004,40)])
link(onEvent4,10137193:doAdd,[(1004,69)(1004,89)])
link(onEvent5,8939706:getANSWER,[(908,76)(908,108)(618,108)(618,139)])
}
Add(Plotter,8629865,1239,70)
{
Left=495
Top=445
Width=755
Height=255
Name="1"
LeftMargin=60
MouseControl=1
}
Add(EventFromData,10325151,959,279)
{
}
Add(Button,3998231,1183,70)
{
Left=380
Top=465
Width=105
Height=30
Caption="clear"
link(onClick,8629865:doClear,[])
}
Add(DoData,13316099,959,679)
{
Data=Integer(20)
link(onEventData,14942338:doDelete,[(1003,685)(1003,657)(898,657)(898,629)])
}
Add(If_else,10627377,910,679)
{
Type=2
Op1=Integer(0)
Op2=Integer(21)
link(onTrue,13316099:doData,[])
link(Op1,14942338:Count,[(916,667)(923,667)])
}
Add(Button,10105139,455,224)
{
Left=15
Top=205
Width=115
Height=50
Caption="Запуск"
Data=Integer(102)
link(onClick,5523910:doEvent1,[(527,230)(527,258)])
}
Add(Edit,9090604,455,308)
{
Left=20
Top=330
Width=120
Height=35
Font=[MS Sans Serif,14,0,0,1]
Text="эталон"
link(onEnter,5523910:doEvent4,[(517,321)(517,279)])
}
Add(Hub,5523910,546,252)
{
InCount=4
OutCount=1
link(onEvent1,8939706:doWrite,[(595,258)(595,132)])
}
Add(Button,3845243,455,266)
{
Left=20
Top=295
Width=120
Height=30
Caption="калибровка"
Data=Integer(101)
link(onClick,5523910:doEvent3,[])
}
Add(Label,6134918,1008,49)
{
Left=35
Top=475
Width=120
Caption="Статичная масса, кг"
}
Add(Memo,10535636,959,126)
{
Left=160
Top=540
Width=100
Height=30
Font=[MS Sans Serif,12,0,0,1]
Name="время до максимума, сек"
AddType=1
}
Add(BlockFind,12991404,833,133)
{
IncludeBlock=1
StartBlock="tm"
EndBlock=" "
link(onSearch,14517899:doEvent1,[])
}
Add(Hub,14517899,882,133)
{
link(onEvent1,10535636:doClear,[])
link(onEvent2,10535636:doAdd,[(920,146)(920,132)])
}
Add(Label,4863512,1008,140)
{
Left=20
Top=550
Width=134
Height=17
Caption="время до максимума, сек"
}
Add(Memo,6394335,959,210)
{
Left=160
Top=505
Width=100
Height=30
Font=[MS Sans Serif,12,0,0,1]
Name="макс вес"
AddType=1
}
Add(BlockFind,8917718,833,217)
{
IncludeBlock=1
StartBlock="Mm"
EndBlock=" "
link(onSearch,4421130:doEvent1,[])
}
Add(Hub,4421130,882,217)
{
link(onEvent1,6394335:doClear,[])
link(onEvent2,6394335:doAdd,[(920,230)(920,216)])
}
Add(Label,10374660,1007,224)
{
Left=15
Top=510
Width=136
Height=17
Caption="Максимальная масса, кг"
}
Add(BlockFind,6536698,826,280)
{
IncludeBlock=1
StartBlock="t"
EndBlock="ms"
link(onSearch,10325151:doData,[(945,286)(945,285)])
}
Add(Label,2077783,1057,301)
{
Left=65
Top=420
Width=140
Height=25
Caption="Результаты измерения"
}
Add(EventFromData,1034609,1078,34)
{
}
Add(PlotLines,10137193,1078,83)
{
Grapher="1"
Color=0
Size=3
Step=1
MaxValues=50
link(ValueY,1034609:GetData,[])
}
Add(PointHint,8156450,826,7)
{
Info=#5:масса|
}
Add(Plotter,15995436,1064,399)
{
Left=165
Top=15
Width=915
Height=365
Name="2"
LeftMargin=60
MouseControl=1
}
Add(Button,3621496,1008,399)
{
Left=470
Top=385
Width=105
Height=30
Caption="clear"
link(onClick,15995436:doClear,[])
}
Add(EventFromData,12016360,959,335)
{
}
Add(BlockFind,14575583,826,336)
{
IncludeBlock=1
StartBlock="n"
EndBlock=" "
link(onSearch,11507333:doEvent1,[])
}
Add(Hub,11507333,875,336)
{
link(onEvent1,12016360:doData,[(945,342)(945,341)])
link(onEvent2,15745017:doAdd,[(924,349)(924,404)])
}
Add(PlotPoints,15745017,959,398)
{
Grapher="2"
Color=0
Size=2
link(ValueY,12016360:GetData,[])
link(ValueX,10325151:GetData,[(972,354)(965,354)])
}
Add(Memo,9382399,1337,280)
{
Left=170
Top=605
Width=180
Height=110
Font=[MS Sans Serif,12,0,0,1]
Name="инфо"
AddType=1
ScrollBars=2
}
Add(BlockFind,2027671,1176,259)
{
StartBlock="no "
EndBlock="OK"
link(onSearch,14206065:doEvent1,[(1234,265)(1234,293)])
}
Add(Hub,14206065,1260,287)
{
InCount=5
link(onEvent2,9382399:doAdd,[(1298,300)(1298,286)])
}
Add(Label,7222823,1385,294)
{
Left=45
Top=620
Width=116
Height=17
Caption="информационное поле"
}
Add(BlockFind,15426661,1176,308)
{
IncludeBlock=1
StartBlock="k="
EndBlock="=k"
link(onSearch,14206065:doEvent2,[(1234,314)(1234,300)])
}
Add(BlockFind,4528169,1176,399)
{
StartBlock="tm"
EndBlock=" "
link(onSearch,14206065:doEvent4,[(1234,405)(1234,314)])
}
Add(BlockFind,6340660,1176,448)
{
StartBlock="Mm"
EndBlock=" "
link(onSearch,14206065:doEvent5,[(1234,454)(1234,321)])
}
Add(Hub,1035903,1134,343)
{
InCount=2
OutCount=5
link(onEvent1,2027671:doSearch,[(1162,349)(1162,265)])
link(onEvent2,15426661:doSearch,[(1162,356)(1162,314)])
link(onEvent4,4528169:doSearch,[(1162,370)(1162,405)])
link(onEvent5,6340660:doSearch,[(1162,377)(1162,454)])
}
Add(MultiElementEx,8939706,630,112)
{
link(onRead,1978584:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,4725630,21,21)
{
WorkCount=#19:doOPEN=открыть порт|20:doCLOSE=закрыть порт|28:doWrite=запись данных в порт|69:getANSWER=получение ответа от устройства для определния нужного порта|0:|
EventCount=#45:onRead=выдает строку полученную от устройства|
Width=601
Height=396
link(doOPEN,1786124:doEvent1,[(81,27)(81,160)])
link(doCLOSE,6746360:doEvent1,[(91,34)(91,265)])
link(doWrite,10791237:doWrite,[(193,41)(193,300)])
link(getANSWER,14751753:doEvent1,[(112,48)(112,244)])
}
Add(DoData,11464109,301,336)
{
Data=Integer(15)
link(onEventData,10791237:doRead,[(338,342)(338,307)])
}
Add(COM,10791237,364,273)
{
TimeOut=8
link(onRead,4725630:onRead,[(572,286)(572,27)])
link(Port,13835982:Item,[])
}
Add(Timer,1511251,245,336)
{
Interval=18
Enable=1
link(onTimer,11464109:doData,[])
}
Add(StrList,2755069,350,147)
{
Strings=#0:|0:|
}
Add(EnumCOM,16739650,294,147)
{
OutType=0
link(onEnumPorts,2755069:doAdd,[])
}
Add(Hub,828257,217,329)
{
link(onEvent1,10791237:doRXClear,[(297,335)(297,293)])
link(onEvent2,1511251:doTimer,[])
}
Add(ArrayRW,13835982,364,210)
{
Index=String()
link(onRead,10791237:doOpen,[(408,216)(408,248)(352,248)(352,279)])
link(Array,2755069:Array,[])
link(Index,456722:Count,[])
}
Add(Counter,456722,371,91)
{
Max=20
link(onNext,8011939:doEvent1,[])
}
Add(Timer,10352413,273,203)
{
Interval=600
Enable=1
link(onTimer,7374295:doEvent1,[])
}
Add(Hub,7374295,322,203)
{
link(onEvent1,456722:doNext,[(343,209)(343,97)])
link(onEvent2,13835982:doRead,[])
}
Add(Hub,1786124,189,154)
{
OutCount=4
link(onEvent1,2755069:doClear,[])
link(onEvent2,16739650:doEnumPorts,[(249,167)(249,153)])
link(onEvent3,10352413:doTimer,[(238,174)(238,209)])
link(onEvent4,828257:doEvent1,[(210,181)(210,335)])
}
Add(Hub,6746360,168,259)
{
InCount=3
OutCount=4
link(onEvent1,14751753:doEvent2,[(196,265)(196,251)])
link(onEvent2,10791237:doClose,[(273,272)(273,286)])
link(onEvent3,456722:doReset,[(276,279)(276,111)])
link(onEvent4,1511251:doStop,[(196,286)(196,349)])
}
Add(Hub,14751753,203,238)
{
InCount=2
OutCount=1
link(onEvent1,10352413:doStop,[(224,244)(224,216)])
}
Add(Hub,8011939,420,91)
{
link(onEvent1,13485130:doData,[])
link(onEvent2,14620153:doCompare,[(452,104)(452,139)])
}
Add(If_else,14620153,469,133)
{
Op1=Integer(0)
Op2=Integer(5)
link(onTrue,358913:doEvent1,[])
link(Op1,13485130:GetData,[])
}
Add(EventFromData,13485130,469,91)
{
}
Add(Message,4738578,553,133)
{
Message="USB ADC module не подключен, либо неисправен"
Caption="Устройство не обнаружено"
Point(onOK)
link(onOK,6746360:doEvent3,[(597,146)(597,212)(156,212)(156,279)])
}
Add(Hub,358913,518,133)
{
link(onEvent1,4738578:doMessage,[])
link(onEvent2,6746360:doEvent2,[(544,146)(544,213)(149,213)(149,272)])
}
END_SDK
Add(Button,210886,508,81)
{
Left=15
Top=110
Width=110
Height=25
Hint="Закрыть порт"
Caption="открыть порт"
Data=Real(0)
link(onClick,8939706:doOPEN,[(578,87)(578,118)])
}
Редактировалось 2 раз(а), последний 2017-11-05 11:17:55