Опрашиваю показания ТРМ138 (пишу на MS Visual C++ 2010, express) c использованием owen_io.DLL:
Данные получаю корректные, но при опросе 8 каналов программа начинает подтормаживать.Код:/*Открываем порт OpenPort();*/ for (int i=0; i<=6; ++i) { res:=ReadIEEE32(16+i,0,'rEAd',val,tm,-1); if(res>=0) {Ttek[i]:=val;} }
Сделал опрос в таймере (интервал 2 секунда) отдельным потоком (System::Timers::Timer), открываю порт в том же потоке.
При опросе 8 каналов программа НЕподтормаживает. Данные также получаю корректные
Но если делаю интервал 1 секунда и открываю порт однократно...Код:OpenPort(); /*Открываем порт каждый такт*/ for (int i=0; i<=6; ++i) { res:=ReadIEEE32(16+i,0,'rEAd',val,tm,-1); if(res>=0) {Ttek[i]:=val;} } ClosePort();
То через каждый такт таймера, появляется ошибка res=-2 то в 3 каналах, то в четырехКод:static j=0; if (j==0) { OpenPort(); /*Открываем порт однократно*/ j=1;} for (int i=0; i<=6; ++i) { res:=ReadIEEE32(16+i,0,'rEAd',val,tm,-1); ReadStoredDotS(i+16,0,"C.SP",ust,-1); ReadStoredDotS(i+16,0,"HYSt",gis,-1); if(res>=0) {Ttek[i]:=val;Tust=ust;Tgis=gis} }
Т.е. запустили таймер
Однократно открыл порт
-> получили корректные данные
-> res=-2 (канал 4,5,6,7)
-> получили корректные данные
-> res=-2 (канал 1,2,3)
И так далее
Если интервал таймера установить 2 секунды, и каждый раз открывать закрывать порт, то данные корректно получаю.
Но у меня 6 приборов ТРМ138 по 7 каналов у каждого
Это получается что корректно считывание (без res=-2) будет только раз 12-15 секунд. Но это очень большой для меня интервал.
Или я что-то не так делаю?




Ответить с цитированием
