Страница 8 из 19 ПерваяПервая ... 67891018 ... ПоследняяПоследняя
Показано с 71 по 80 из 203

Тема: ПЛК63 + SysLibCom, потеря байтов

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Это

    Код:
    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), SIZEOF(rBuf), 0));
    заменить на это

    Код:
    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), SIZEOF(rBuf), 0));
    if ( size > 0 ) then
        size := size + DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf[ 1 ]),  SIZEOF(rBuf) - 1, 0));
    end_if
    Код:
    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), SIZEOF(rBuf), 0));
    заменить на это

    Код:
    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), 1, 0));
    if ( size > 0 ) then
        size := size + DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf[ 1 ]),  SIZEOF(rBuf) - 1, 0));
    end_if

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

    По умолчанию

    я понимаю, что Вы делите чтение на два этапа,сперва первый байт, затем пытаетесь записать оставшийся приемный буффер в массив rBuf начиная с индекс 1. У Вас после этого кода видимо Size еще где то используется для сравнения, сколько Вы всего приняли байт за два этапа? Для чего Вы накопление делаете. Судя по Вашим ответам разговор шел, что читать буффер Вы пытаетесь за несколько циклов, тогда суммирование уже смысла не имеет, так как с каждым новым циклом значение Size будет максимум равно 1

  3. #3

    По умолчанию

    опять ошибся

  4. #4

    По умолчанию

    По результатам выполнения оба куска кода равнозначны.
    Это не для того, чтобы "лучше работало", а как " эксперимент ", раз уж мои примеры не смотрят

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

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    По результатам выполнения оба куска кода равнозначны.
    Это не для того, чтобы "лучше работало", а как " эксперимент ", раз уж мои примеры не смотрят
    В чем суть эксперимента? Наверное когда
    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), 10, 0));
    if ( size > 0 ) then
    size := size + DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf[ 1 ]), SIZEOF(rBuf) - 1, 0));
    end_if
    на первом этапе пытаетесь прочитать 10 байт, а приходит 6, то у Вас не клеится второй этап или как?

  6. #6

    По умолчанию

    Это из вчерашней полуночной беседы.
    [Валенок] сказал посмотреть как сделано в modbus.lib. Этот кусок кода чтение ответа из буфера порта и modbus.lib
    Код:
    rBuf: ARRAY[0..511] OF BYTE;
    ....
    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), SIZEOF(rBuf), 0));
    Из чего видно, что посылается запрос на чтение 512 байт ( максимальная длина ответа по modbus ascii ). Я описывал симптомы другой проблемы...
    Почитайте первый пост. И важно читать ответ по частям в одном цикле или разных, результат тотже

  7. #7

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    И важно читать ответ по частям в одном цикле или разных, результат тот же
    И НЕ важно читать ответ по частям в одном цикле или разных, результат тот же

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

    По умолчанию

    по первому посту, если ПЛК меняются ролями, то отсутствуют потери байта, если чтением занимается плк100?

  9. #9

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Это из вчерашней полуночной беседы.
    [Валенок] сказал посмотреть как сделано в modbus.lib. Этот кусок кода чтение ответа из буфера порта и modbus.lib
    Код:
    rBuf: ARRAY[0..511] OF BYTE;
    ....
    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), SIZEOF(rBuf), 0));
    Из чего видно, что посылается запрос на чтение 512 байт ( максимальная длина ответа по modbus ascii ). Я описывал симптомы другой проблемы...
    Почитайте первый пост. И важно читать ответ по частям в одном цикле или разных, результат тотже
    Цитата Сообщение от capzap Посмотреть сообщение
    по первому посту, если ПЛК меняются ролями, то отсутствуют потери байта, если чтением занимается плк100?
    Так точно !

  10. #10

    По умолчанию

    иначе проблема была бы в программе, и я не стал бы на форуме тему сосздавать

Страница 8 из 19 ПерваяПервая ... 67891018 ... ПоследняяПоследняя

Похожие темы

  1. плк63-пм01 потеря байт
    от Elka в разделе ПЛК63/73
    Ответов: 35
    Последнее сообщение: 06.11.2012, 14:26
  2. потеря байтов в ответной посылке с периодом 4-5 с.
    от Смирнов Роман в разделе ПЛК1хх
    Ответов: 44
    Последнее сообщение: 23.04.2009, 07:16
  3. SysLibCom
    от demon в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 20.03.2009, 13:08
  4. ПЛК 150 и SysLibCom.lib.
    от Анатолий в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 13.12.2008, 13:48
  5. SysLibCom 16#FF
    от powerind в разделе ПЛК1хх
    Ответов: 28
    Последнее сообщение: 28.10.2008, 13:41

Ваши права

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