Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

Тема: Как уменьшить таймаут ожидания ответа

  1. #1

    По умолчанию Как уменьшить таймаут ожидания ответа

    Используем библиотеку ОВЕН для своих систем и все бы ничего, но "убивает" большой таймаут ожидания ответа на запросы мастера. Если все устройства работают нормально, цикл опроса преемлемый (300-500 мс), но стоит какому-либо устройству "отвалиться" - все вешалка, цикл затягивается до 5 сек и более. Можно-ли в вашей библиотеке принудительно ограничить таймаут ожидания ответа до единиц-десятков милисекунд?
    И еще, не нашел на вашем сайте саму библиотеку, у меня она от 05.10.2011, обновления были?

  2. #2

    По умолчанию

    И что, овен-овские спецы на форум вообще не заглядывают? Хоть как-то отреагируйте, типа "нет, нельзя, мучайтесь как есть".

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    сами напишите

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    http://www.owen.ru/catalog/67395347
    на этой странице выложены библиотеки, назовем их, официально поддерживаемые, там нет ни одной за 2011 год, ежели вопрос задаете укажите хотябы, что имеете ввиду, без названия бибки трудно отвечать в ней дело или в Вашей проге.
    Если уж совсем так плохо, поставте поверх свой таймаут, если по истечении не пришел ответ, переходите к опросу следующего прибора.

  5. #5

    По умолчанию

    Речь идет о "owen_io.dll" (http://www.owen.ru/catalog/69481466).
    Последний раз редактировалось Andrey_M; 23.09.2012 в 10:43.

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Цитата Сообщение от Andrey_M Посмотреть сообщение
    большой таймаут ожидания ответа на запросы мастера
    А как обстоят дела с выполнением этих рекомендаций:
    2.8. Каждое пришедшее сообщение должно квитироваться. Квитанция должна быть послана после задержки, большей или равной времени, указанной в параметре rS.dL прибора, но не более максимального тайм-аута в 50 мс. При этом типовая задержка между отправкой последнего байта посылки до приема первого байта квитанции должна быть не менее rS.dL и не более rS.dL + 5мс. При отсутствии квитанции от прибора в течение 50 мс транзакцию приема-передачи считать сбойной.
    2.9. При посылке сообщения или квитанции допускается прерывание потока посылаемых байт на время, не превышающее 50 мс.
    2.10. После посылки сообщения или квитанции посылающая сторона должна освободить линию передачи и перейти в режим приема не более чем через 1.1 мс после посылки последнего байта.

    Для автоматических преобразователей работа с линиями RTS или DTR не требуется. Однако существует время, в течение которого автоматический преобразователь удерживает линию в состоянии передачи и может потерять начало квитанции прибора. Для работы с автоматическими преобразователями в параметре rS.dL приборов необходимо установить задержку, большую, чем время переключения автоматического преобразователя
    rS.dL в приборах какое значение имеет? Судя по всему если прибор "отваливается" то максимум задержка может быть 50мс к Вашему времени опроса

  7. #7

    По умолчанию

    Во всех приборах "rS.dL" выставляю 1 мс.
    А вот дальше уже у ваших программеров надо спрашивать как они реализовали п.2.8. Потому-что при отсутствии ответа от слейва, мастер делает еще четыре повтора (если не ошибаюсь), причем паузы между ними приличные - порядка 300-500 мс. Отсюда и задержка в 1,5-2 сек на каждую точку.

  8. #8
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Хм, может все же это Ваша программа делает повторы, зачем тогда придуманы сообщения об ошибках, видимо Вы их не отслеживаете, тем более такие периоды пауз,

  9. #9

    По умолчанию

    Нам нет никакого смысла делать столько повторов, тем более что мы хотим от этого избавиться и если-бы это было в наших силах - давно бы убрали. Повторы делает сама функция owen_io.ReadUInt и ей подобные!

    Вот пример кода (RetryCount задается в конфиге программы и обычно равно 0 или 1):
    Код:
    function _ReadUInt(const Address: TAddress; out Value: DWORD): Boolean;
    var
      I: Integer;
    begin
      Result := False;
      IOSync.Enter;
      try
        LastError := owen_io.SelectPort(Address.Port);
        if LastError <> ERR_OK then
          Exit;
        LastError := owen_io.ReadUInt(Address.Addr, ADRTYPE_11BIT, @Address.Code, Value, -1);
        for I := 1 to RetryCount do
        begin
          if LastError = ERR_OK then
            Break;
          LastError := owen_io.ReadUInt(Address.Addr, ADRTYPE_11BIT, @Address.Code, Value, -1);
        end;
        if LastError <> ERR_OK then
          Exit;
      finally
        IOSync.Leave;
      end;
      Result := True;
    end;

  10. #10
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    я как бы далек от паскаля, поэтому хотел бы прояснить, вот пару раз проверка усовия на наличие ошибок ладно, Result будет фальш, а что происходит когда появляется исключение, Result то будет истина, может причина в этом, что правильное завершение функции ведет к тормозам где полученный мусор присваивается какой нибудь переменной

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Время ответа ТРМ202
    от незарегистрированный в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 20.07.2013, 19:52
  2. Ответов: 8
    Последнее сообщение: 29.03.2011, 14:07
  3. Ответов: 18
    Последнее сообщение: 10.07.2009, 01:33
  4. можно ли уменьшить время запуска плк
    от Sniper007 в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 12.05.2009, 17:57

Ваши права

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