wss60, ещё тормозит чтение по одному байту, вот схемка:
code_30241.txt
Читает, собака, 50--60 раз/сек  Обратите внимание на схемку накопления и вывода 512 тчк.
------------ Дoбавленo в 15.30:
wss60, не удержался, на IC сделал обработку строки по 256 из СОМ
Add(MainForm,10623790,196,140) { Width=619 Height=324 BorderStyle=1 link(onCreate,474771:doEvent1,[]) } Add(COM,6353273,273,175) { BaudRate=19 TimeOut=1 link(onRead,2111790:doRecData,[]) } Add(DoData,5233936,224,238) { Data=Integer(256) link(onEventData,6353273:doRead,[(264,244)(264,209)]) } Add(Thread,10878508,133,238) { Delay=0 link(onExec,5233936:doData,[]) } Add(Button,14315189,35,217) { Left=20 Top=20 Caption=">>" link(onClick,5035321:doEvent1,[]) } Add(Button,16120133,35,252) { Left=20 Top=70 Caption="II" link(onClick,6175985:doEvent1,[]) } Add(PlotLines,2037800,392,182) { Grapher="MyDevice" Point(ValuesX) link(ValueX,5265381:Value,[]) } Add(Plotter,6283154,392,98) { Left=135 Top=10 Width=465 Height=270 Color=12639424 Name="MyDevice" GridX=16 GridY=16 MinH=-128 MaxH=128 } Add(MultiElement,15592299,133,189) { @Hint=#34:Формирование строки (Sin) 256 байт| link(onEvent1,4811701:doEvent1,[]) } BEGIN_SDK Add(EditMulti,3044716,21,21) { EventCount=1 WorkCount=2 Width=426 Height=144 link(doWork1,5126659:doTimer,[(72,27)(72,62)]) link(doWork2,5126659:doStop,[(59,34)(59,69)]) } Add(Convertor,14746393,287,56) { Mode=4 link(onResult,15692242:doStrCat,[]) } Add(Timer,5126659,98,56) { Interval=40 Enable=1 link(onTimer,3743529:doFor,[]) } Add(For,3743529,147,56) { End=255 link(onEvent,15730124:doNext,[]) link(onStop,15224708:doEvent1,[(188,69)(188,118)]) } Add(Counter,15730124,196,56) { Max=999999999 link(onNext,6961004:doCalc,[]) } Add(MathParse,6961004,245,56) { DataCount=1 MathStr="sin(%1)*127 + 128" AngleMode=1 link(onResult,14746393:doConvert,[]) } Add(StrCat,15692242,329,56) { link(onStrCat,8384805:doValue,[]) link(Str1,1145836:Var1,[(335,44)(367,44)(367,98)]) } Add(Memory,8384805,378,56) { Default=String() } Add(DoData,14255720,378,112) { link(onEventData,3044716:onEvent1,[(428,118)(428,27)]) link(Data,1145836:Var2,[]) } Add(GetDataEx,1145836,378,93) { link(Data,8384805:Value,[]) } Add(Hub,15224708,343,112) { link(onEvent1,14255720:doData,[]) link(onEvent2,8384805:doClear,[(371,125)(371,69)]) } END_SDK Add(InlineCode,2111790,322,175) { WorkPoints=#34:doStart=Расчёт начальных установок|26:doRecData=Потоковые данные| EventPoints=#14:onIndex=Индекс|22:onSignal=Выход сигнала|36:onBegin=Щас будем рисовать график :)| VarPoints=# DataPoints=# Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|36: Signal:Array[0..511] of integer;|16: Num:integer;|9: public|25: _data_Data:THI_Event;|44: onSignal:THI_Event; //Выход сигнала|37: onIndex:THI_Event; //Индекс|47: onBegin:THI_Event; //Начало отрисовки|0:|51: procedure doStart(var _Data:TData; Index:word);|53: procedure doRecData(var _Data:TData; Index:word);|4:end;|0:|14:implementation|0:|30:procedure THiAsmClass.doStart;|15: var i:integer;|7: begin |34: for i:=0 to 2 do Signal[i]:=0;|9: Num:=0|5: end;|1: |32:procedure THiAsmClass.doRecData;|16: var St:string; |22: i,j,_Len:integer;|6: begin|25: St:=ToString(_Data);|22: _Len:=Length(St);|25: for i:=1 to _Len do|12: begin|36: Signal[Num]:=ord(St[i])-127;|19: Num:=Num+1;|24: if Num>511 then|15: begin|34: _hi_OnEvent(onBegin,0);|30: for j:=0 to 511 do|18: begin|37: _hi_OnEvent(onIndex,j);|46: _hi_OnEvent(onSignal,Signal[j]);|21: Num:=0;|17: end;|14: end;|11: end;|5: end;|1: |4:end.| link(onIndex,5265381:doValue,[(366,181)(366,146)]) link(onSignal,2037800:doAdd,[]) link(onBegin,10151809:doEvent1,[]) } Add(Hub,474771,238,154) { link(onEvent1,2111790:doStart,[(313,160)(313,181)]) link(onEvent2,6353273:doOpen,[(262,167)(262,181)]) } Add(Memory,5265381,399,140) { } Add(Hub,10151809,364,189) { link(onEvent1,2037800:doClear,[]) link(onEvent2,4093072:doNext,[(390,202)(390,223)]) } Add(Hub,4811701,175,189) { link(onEvent1,6353273:doWrite,[(250,195)(250,202)]) link(onEvent2,2351202:doNext,[(207,202)(207,272)]) } Add(Math,14997438,476,217) { OpType=2 Op2=512 link(onResult,10514087:doStrCat,[]) } Add(Math,164902,476,266) { OpType=2 Op2=256 link(onResult,10155871:doStrCat,[]) } Add(Counter,2351202,434,266) { Max=9999999 link(onNext,164902:doOperation,[]) } Add(Counter,4093072,434,217) { Max=9999999 link(onNext,14997438:doOperation,[]) } Add(Label,12864651,560,266) { Left=5 Top=120 } Add(Label,6067157,560,217) { Left=5 Top=155 } Add(Hub,5035321,77,217) { OutCount=4 link(onEvent1,4093072:doReset,[(374,223)(374,237)]) link(onEvent2,2351202:doReset,[(199,230)(199,286)]) link(onEvent3,15592299:doWork1,[(102,237)(102,195)]) link(onEvent4,10878508:doStart,[]) } Add(Hub,6175985,77,252) { link(onEvent1,15592299:doWork2,[(110,258)(110,202)]) link(onEvent2,10878508:doStop,[(115,265)(115,251)]) } Add(StrCat,10155871,518,266) { Str1="Получено " link(onStrCat,12864651:doText,[]) } Add(StrCat,10514087,518,217) { Str1="Обработано " link(onStrCat,6067157:doText,[]) }
------------ Дoбавленo в 15.52:
Забыл добавить, что в этих схемах на разъёме порта ставил перемычку между 2-ым и 3-им контактами и "тихо сам с собою я веду беседу"  (при этом, наверное надо иметь ввиду, что максимальная скорость приёма/передачи не менее чем в два раза меньше установленной)
|