Вверх ↑
Ответов: 8930
Рейтинг: 823
#1: 2014-02-06 21:27:34 ЛС | профиль | цитата
mcmega писал(а):
может придти половина строки в одной строке, другая во второй строке
Значит надо делать буфер и сцеплять поступающие строки, удаляя символы начала/окончания строк (если они есть) искать по маске (а не Case-ом) в начале строки Ваши команды, когда найдутся, выполнять их и удалять соответствующее количество символов из строки.

Add(COMEX,7412496,70,84)
{
BaudRate=15
DataBits=1
Point(doRXClear)
link(onRead,6647786:doEvent1,[])
}
Add(StrCat,1754495,147,91)
{
link(onStrCat,16652777:doWork2,[])
link(Str1,8219328:Var3,[(153,82)(195,82)])
}
Add(StrMask,15306248,259,126)
{
Mask="pf+*"
link(onFalse,5367627:doCompare,[])
link(onTrue,15367224:doEvent1,[])
}
Add(InfoTip,691049,705,88)
{
Info=#12:Разр. TX #11|
Frame=1
Width=36
Height=25
}
Add(InfoTip,6794195,656,88)
{
Info=#13:Запрет TX #13|
Frame=1
Width=36
Height=25
}
Add(InfoTip,6963579,259,90)
{
Info=#11:Ожид. "pf+"|
Frame=1
Width=36
}
Add(InfoTip,10764195,329,90)
{
Info=#11:Ожид. "pe+"|
Frame=1
Width=29
}
Add(InfoTip,73699,399,90)
{
Info=#10:Ожид. "g+"|
Frame=1
Width=29
}
Add(InfoTip,16244838,469,90)
{
Info=#12:Ожид. "c45b"|
Frame=1
Width=29
}
Add(InfoTip,13143878,539,90)
{
Info=#11:Ожид. ".*+"|
Frame=1
Width=29
}
Add(StrMask,5367627,329,126)
{
Mask="pe+*"
link(onFalse,16176026:doCompare,[])
link(onTrue,7689700:doEvent1,[])
}
Add(StrMask,16176026,399,126)
{
Mask="g+*"
link(onFalse,10627925:doCompare,[])
link(onTrue,946659:doEvent1,[])
}
Add(StrMask,1883148,539,126)
{
Mask=".?+*"
link(onFalse,14271014:doConvert,[])
link(onTrue,387583:doEvent1,[])
}
Add(StrMask,10627925,469,126)
{
Mask="c45b*"
link(onFalse,1883148:doCompare,[])
link(onTrue,14342162:doEvent1,[])
}
Add(Case,7128972,658,126)
{
Value=Integer(19)
link(onNextCase,11348130:doCase,[])
}
Add(Case,11348130,707,126)
{
Value=Integer(17)
}
Add(Convertor,14271014,609,126)
{
Mode=3
link(onResult,7128972:doCase,[])
}
Add(Delete,13145630,133,203)
{
link(onDelete,16652777:doWork3,[(186,209)])
link(Str,8219328:Var1,[(139,138)])
link(Position,1560028:Value,[])
}
Add(Hub,6647786,119,91)
{
link(onEvent1,1754495:doStrCat,[])
link(onEvent2,15306248:doCompare,[(141,104)(141,132)])
}
Add(Memory,10817190,203,91)
{
}
Add(Memory,1560028,140,161)
{
Default=Integer(1)
}
Add(ChanelToIndex,7997964,70,203)
{
Count=5
link(onIndex,13145630:doDelete,[])
}
Add(HubEx,16540292,322,252)
{
Angle=2
link(onEvent,7997964:doWork4,[(55,258)(55,230)])
}
Add(HubEx,788079,462,263)
{
Angle=2
link(onEvent,7997964:doWork3,[(109,269)(109,223)])
}
Add(HubEx,16652777,182,91)
{
link(onEvent,10817190:doValue,[])
}
Add(GetDataEx,8219328,189,133)
{
Angle=1
link(Data,10817190:Value,[(209,138)])
}
Add(Hub,15367224,301,133)
{
link(onEvent1,16540292:doWork1,[(326,139)])
}
Add(Hub,7689700,371,133)
{
link(onEvent1,16540292:doWork2,[(396,139)(396,258)])
}
Add(Hub,946659,441,133)
{
link(onEvent1,788079:doWork1,[(466,139)])
}
Add(Hub,14342162,511,133)
{
link(onEvent1,7997964:doWork5,[(535,139)(535,252)(130,252)(130,237)])
}
Add(Hub,387583,581,133)
{
link(onEvent1,788079:doWork2,[(606,139)(606,269)])
}
карма: 19

0