Вверх ↑
Ответов: 8888
Рейтинг: 823
#1: 2018-03-07 13:24:20 ЛС | профиль | цитата
RT9U, при работе через СОМ порт надо учитывать возможность разрыва принимаемого ответа при считывании, поэтому необходимо "склеивание" строк при приёме и дальнейший парсинг принятого:
СОМ


Add(MainForm,3219610,259,77)
{
Point(onClose)
link(onCreate,12236021:doOpen,[])
link(onClose,12236021:doClose,[])
}
Add(Image,7126235,371,28)
{
Left=51
Top=141
Width=280
Height=115
Color=-16777216
Ctl3D=0
WinStyle=4
}
Add(LED,11345280,602,203)
{
Left=240
Top=45
}
Add(LED,3736595,595,154)
{
Left=70
Top=45
ColorOn=65280
ColorOff=32768
}
Add(Label,16031668,259,28)
{
Left=48
Top=23
Width=66
Height=20
Font=[MS Sans Serif,10,1,0,1]
Caption="НАЧАЛО"
CaptionOnClick=0
}
Add(Label,9191340,308,28)
{
Left=204
Top=24
Width=100
Font=[MS Sans Serif,10,1,0,1]
Caption="ОКОНЧАНИЕ"
}
Add(Button,9039285,91,112)
{
Left=50
Top=80
Width=230
Font=[MS Sans Serif,10,1,0,1]
Caption="СТАРТ"
Data=String(1)
link(onClick,16127872:doEvent1,[])
}
Add(BlockFind,16367655,455,224)
{
IncludeBlock=1
StartBlock="END"
EndBlock="RAY"
link(onSearch,14157366:doEvent1,[])
}
Add(StrList,16400863,210,56)
{
Strings=#8:Команда0|8:Команда1|8:Команда2|8:Команда3|
}
Add(ArrayRW,5616863,224,112)
{
link(onRead,12236021:doWrite,[])
link(Array,16400863:Array,[])
}
Add(Counter,7256672,182,112)
{
Max=3
Default=-1
link(onNext,5616863:doRead,[])
}
Add(Hub,16172668,497,91)
{
OutCount=4
link(onEvent1,4645252:doString,[(522,97)(522,83)])
link(onEvent2,3736595:doOn,[(529,104)(529,174)])
link(onEvent3,11345280:doOff,[(522,111)(522,216)])
}
Add(Label,8521194,609,77)
{
Left=85
Top=5
}
Add(FormatStr,4645252,553,77)
{
DataCount=1
Mask="Выдана %1"
link(onFString,902978:doWork2,[])
link(Str1,5616863:Item,[(559,70)(419,70)(419,151)(230,151)])
}
Add(Hub,14157366,497,224)
{
OutCount=3
link(onEvent1,6691445:doString,[(536,230)(536,118)])
link(onEvent2,3736595:doOff,[(543,237)(543,167)])
link(onEvent3,11345280:doOn,[(550,244)(550,223)])
}
Add(FormatStr,6691445,553,112)
{
DataCount=1
Mask="%1 выполнена!"
link(onFString,902978:doWork3,[(599,118)])
}
Add(HubEx,902978,595,77)
{
link(onEvent,8521194:doText,[])
}
Add(COM,12236021,308,91)
{
link(onWrite,9286098:doCompare,[])
link(onRead,16529548:doStrCat,[(347,104)(347,138)(270,138)(270,174)])
}
Add(If_else,9286098,357,91)
{
Type=5
Op2=Integer(0)
link(onTrue,16172668:doEvent1,[])
link(onFalse,367295:doData,[(410,104)(410,34)])
}
Add(DoData,367295,553,28)
{
Data=String(Ошибка передачи команды)
link(onEventData,902978:doWork1,[(599,34)])
}
Add(StrCat,16529548,280,168)
{
link(onStrCat,12144632:doEvent1,[])
link(Str1,7007842:Var3,[(286,159)(370,159)])
}
Add(Memory,1667408,378,168)
{
}
Add(Hub,12144632,322,168)
{
link(onEvent1,6792426:doWork2,[])
link(onEvent2,3327846:doCompare,[(347,181)(347,223)])
}
Add(StrMask,3327846,378,217)
{
Mask="END*RAY"
link(onTrue,14966646:doEvent1,[])
link(Str,16728896:Var2,[])
}
Add(GetDataEx,16728896,378,203)
{
link(Data,1667408:Value,[])
}
Add(Timer,11812872,182,168)
{
Interval=32
Enable=1
link(onTimer,14951102:doData,[])
}
Add(Hub,16127872,133,112)
{
link(onEvent1,11511096:doWork2,[])
link(onEvent2,11812872:doTimer,[(172,125)(172,174)])
}
Add(DoData,14951102,224,168)
{
Data=Integer(64)
link(onEventData,12236021:doRead,[(263,174)(263,125)])
}
Add(Position,9934359,259,224)
{
Target="END"
link(onSearch,13463562:doDelete,[])
link(Str,1251374:Var1,[(265,208)])
}
Add(GetDataEx,7007842,364,203)
{
Angle=1
link(Data,16728896:Var1,[])
}
Add(Delete,13463562,308,224)
{
Position=0
Count=128
link(onDelete,6792426:doWork3,[(361,230)])
link(Str,1251374:Var2,[])
}
Add(HubEx,6792426,357,168)
{
link(onEvent,1667408:doValue,[])
}
Add(GetDataEx,1251374,308,203)
{
Angle=1
link(Data,7007842:Var1,[])
}
Add(Hub,14966646,420,224)
{
OutCount=3
link(onEvent1,16367655:doSearch,[])
link(onEvent2,9934359:doSearch,[(450,237)(450,265)(249,265)(249,230)])
link(onEvent3,5969470:doTimer,[(443,244)(443,272)(81,272)(81,181)])
}
Add(InfoTip,8959653,273,147)
{
Info=#28:Соединение принятых символов|
Width=155
Height=46
}
Add(InfoTip,13711459,224,203)
{
Info=#80:Поиск "END*RAY", выделение ответа и удаление из принятой строки найденного блока|
Width=274
Height=88
}
Add(Timer,5969470,91,175)
{
Enable=1
AutoStop=1
link(onTimer,11511096:doWork3,[(158,181)])
}
Add(HubEx,11511096,154,112)
{
link(onEvent,7256672:doNext,[])
}

И конечно должно быть соответствие установленной скорости СОМ порта и количества принимаемых символов/сек.
карма: 19

0