Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 20 из 20

Тема: SysLibCom.lib (SysComRead) потеря байтов.

  1. #11

    По умолчанию

    http://www.owen.ru/forum/showthread....ight=SysLibCom
    К UNM претензий нет, но если я правильно понимаю то это ОВЕНовская библиотека, а программа которая сейчас в разработке должна работать и на ОВЕН и на WAGO
    P.S. На WAGO она уже работает, потери байт нет

  2. #12

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    И начнете жалавацца начальству - овен такой, овен сякой, выходите подлые трусы
    А Вы, блин, сдвигаете константное окно для приема за пределы буфера. Не факт что именно Ваша проблема - из-за этого. Но легенда - пойдет в мир.
    Я не жалуюсь начальству, я и принимаю решение о выборе контроллера, начальству пофиг с чем мы работаем. Мне не пофиг, почему моя программа не работает так как мне необходимо.

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

    По умолчанию

    А как себя ведет плк если работа с сокетами и портом разнесены по разным задачам?

  4. #14

    По умолчанию

    1. Время цикла давайте с запасом, если у вас на выполнение тратиться 1.5-3.5 мс -> минимальное время цикла 4 мс. Разные прошивки плк очень по разному распределяют время для системных задач и задач пользователя при недостатке оного, поэтому резервируйте его. В модуле статистика есть индикатор достаточности ресурса времени - он не должен быть активен для стабильной работы.
    2. Буфер для порта (резервируемый при открытии) можно и побольше, а не в притык.
    3. Считывайте буфер в каждом цикле и накапливайте где-нить, собственно обработку можно и пореже проводить.

  5. #15

    По умолчанию

    Пробовал в разные задачи, результат тот же. Только при исключении всего из проекта, ком читает нормально

  6. #16

    По умолчанию

    Цитата Сообщение от Дмитрий Артюховский Посмотреть сообщение
    1. Время цикла давайте с запасом, если у вас на выполнение тратиться 1.5-3.5 мс -> минимальное время цикла 4 мс. Разные прошивки плк очень по разному распределяют время для системных задач и задач пользователя при недостатке оного, поэтому резервируйте его. В модуле статистика есть индикатор достаточности ресурса времени - он не должен быть активен для стабильной работы.
    2. Буфер для порта (резервируемый при открытии) можно и побольше, а не в притык.
    3. Считывайте буфер в каждом цикле и накапливайте где-нить, собственно обработку можно и пореже проводить.
    1. Время цикла перебиралось в пределах от 1 до 50 мс
    2. Буфер порта 512, при чтении 255, запас 2х кратный
    3. Считывание в каждом цикле, обработки пока вообще нет в программе, то есть в программе пока тупо чтение и все никаких обработок запроса, тупо смотрю на размер

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

    По умолчанию

    Переходите на скорость 38400, где то писался примерный расчет затраченного времени на передачу стандартного запроса модбас на скорости 9600, вроде выходило на 10 байт 4мс, значит на 255 байт уйдет около 100мс, поэтому удивляет что пытаетесь принять за один цикл, но может я и не прав

  8. #18

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Переходите на скорость 38400, где то писался примерный расчет затраченного времени на передачу стандартного запроса модбас на скорости 9600, вроде выходило на 10 байт 4мс, значит на 255 байт уйдет около 100мс, поэтому удивляет что пытаетесь принять за один цикл, но может я и не прав
    Я не пытаюсь принять за один цикл, я читаю до появления в буфере 0, а потом еще жду 10мс и считаю прием закончен.

  9. #19

    По умолчанию

    Чтение может происходить в нескольких циклах ПЛК. Поэтому ReciveBuffer+totalBytesResive верно. Но во фразе IF ByteResive > 0 THEN - ошибка (чтение кончаецо на первом цикле хотя вполне может и хотеть продолжицо. видимо отсюда потеря части пакета. ). Должно быть как то так:

    IF ByteResive = Длинна ожидаемого пакета (вы же мастер и длину можно рассчитать)
    OR ReadTimeout.Q THEN
    чтение закончили
    Ошибка таймаута = ReadTimeout.Q;
    END_IF

    А так же:

    ByteResive := ByteResive + SysComRead(Port, Адрес буфера + ByteResive , Длинна ожидаемого пакета - ByteResive, 0 );

    Соотв. перед началом чтения КАЖДОГО НОВОГО ПАКЕТА ByteResive должно быть рано нулю.
    Остальной код не смотрел. )
    Последний раз редактировалось lazy; 13.10.2014 в 14:35.

  10. #20

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    Чтение может происходить в нескольких циклах ПЛК. Поэтому ReciveBuffer+totalBytesResive верно. Но во фразе IF ByteResive > 0 THEN - ошибка (чтение кончаецо на первом цикле хотя вполне может и хотеть продолжицо. видимо отсюда потеря части пакета. ). Должно быть как то так:

    IF ByteResive = Длинна ожидаемого пакета (вы же мастер и длину можно рассчитать)
    OR ReadTimeout.Q THEN
    чтение закончили
    Ошибка таймаута = ReadTimeout.Q;
    END_IF

    А так же:

    ByteResive := ByteResive + SysComRead(Port, Адрес буфера + ByteResive , Длинна ожидаемого пакета - ByteResive, 0 );

    Соотв. перед началом чтения КАЖДОГО НОВОГО ПАКЕТА ByteResive должно быть рано нулю.
    Остальной код не смотрел. )
    Спасибо, попробую. Отпишусь

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Функция SysComRead из библиотеки SysLibCom.Com
    от Newcomer в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 01.06.2014, 11:25
  2. ПЛК63 + SysLibCom, потеря байтов
    от monteg в разделе ПЛК63/73
    Ответов: 202
    Последнее сообщение: 18.04.2013, 10:11
  3. SysLibCom.lib помощ
    от lpp в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 25.06.2012, 15:24
  4. потеря байтов в ответной посылке с периодом 4-5 с.
    от Смирнов Роман в разделе ПЛК1хх
    Ответов: 44
    Последнее сообщение: 23.04.2009, 08:16
  5. SysLibCom.lib
    от Nekit в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 05.05.2007, 11:14

Ваши права

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