Показано с 1 по 4 из 4

Тема: Опрос ТРМ138 из потока

  1. #1

    По умолчанию Опрос ТРМ138 из потока

    Опрашиваю показания ТРМ138 (пишу на MS Visual C++ 2010, express) c использованием owen_io.DLL:

    Код:
    /*Открываем порт OpenPort();*/
    
    for (int i=0; i<=6; ++i) {
    res:=ReadIEEE32(16+i,0,'rEAd',val,tm,-1);
    if(res>=0) {Ttek[i]:=val;}
    
    }
    Данные получаю корректные, но при опросе 8 каналов программа начинает подтормаживать.

    Сделал опрос в таймере (интервал 2 секунда) отдельным потоком (System::Timers::Timer), открываю порт в том же потоке.

    При опросе 8 каналов программа НЕподтормаживает. Данные также получаю корректные

    Код:
    OpenPort(); /*Открываем порт каждый такт*/
    for (int i=0; i<=6; ++i) {
    res:=ReadIEEE32(16+i,0,'rEAd',val,tm,-1);
    if(res>=0) {Ttek[i]:=val;}
    
    }
    ClosePort();
    Но если делаю интервал 1 секунда и открываю порт однократно...
    Код:
    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 то в 3 каналах, то в четырех


    Т.е. запустили таймер
    Однократно открыл порт
    -> получили корректные данные
    -> res=-2 (канал 4,5,6,7)
    -> получили корректные данные
    -> res=-2 (канал 1,2,3)

    И так далее

    Если интервал таймера установить 2 секунды, и каждый раз открывать закрывать порт, то данные корректно получаю.
    Но у меня 6 приборов ТРМ138 по 7 каналов у каждого
    Это получается что корректно считывание (без res=-2) будет только раз 12-15 секунд. Но это очень большой для меня интервал.
    Или я что-то не так делаю?
    Последний раз редактировалось stolzzz; 16.05.2013 в 11:43.

  2. #2

    По умолчанию

    Программа не успевает опросить все каналы за интервал таймера (1 секунду). В результате очередной обработчик таймера вызывается из другого потока, в котором порт, очевидно, никто не открывал.

    Отключите таймер при входе в обработчик, и будет вам счастье.
    Последний раз редактировалось Дмитрий Егоренков; 16.05.2013 в 15:28.

  3. #3

    По умолчанию

    Спасибо, Дмитрий за ответ. Но...

    Цитата Сообщение от Дмитрий Егоренков Посмотреть сообщение
    Программа не успевает опросить все каналы за интервал таймера (1 секунду). В результате очередной обработчик таймера вызывается из другого потока, в котором порт, очевидно, никто не открывал.
    Да Вы окзались правы,прочитал про System.Timers::Timer в http://msdn.microsoft.com/, так вот там написано "Если обработка события Elapsed длится дольше, чем Interval, событие может возникнуть снова в другом потоке ThreadPool"

    Цитата Сообщение от Дмитрий Егоренков Посмотреть сообщение
    Отключите таймер при входе в обработчик, и будет вам счастье.
    А как тогда без таймера ЦИКЛИЧЕСКИ опрашивать прибор? Ведь при в ходе в обработчик он отработается лишь ОДИН раз. А мне нужно постоянно осуществлять мониторинг параметров.
    Последний раз редактировалось stolzzz; 16.05.2013 в 20:19.

  4. #4

    По умолчанию

    ну, включите его обратно при выходе из обработчика.

    Код:
    _timer.Enabled = false;
    
    // опрашиваем приборы
    
    _timer.Enabled = true;

Похожие темы

  1. опрос трм138,201,202 при помощи Vb
    от Zwierze в разделе Сетевые технологии
    Ответов: 4
    Последнее сообщение: 22.04.2014, 12:17
  2. Опрос ТРМ138 по RS-485 ( протокол OWEN )
    от a_sergeevich в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 15.02.2013, 22:27
  3. чтение трм138 из потока
    от revo в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 27.11.2010, 02:04
  4. опрос ТРМ138 по modbus
    от stanley в разделе Эксплуатация
    Ответов: 6
    Последнее сообщение: 19.04.2010, 05:57
  5. Опрос ТРМ138 в Omron
    от MGA в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 12.03.2010, 11:57

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •