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

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

  1. #71

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    смысл от этой строки, если до этого каждый цикл, переменной size будет присваиваться 0 либо 1. Друго дело если Вы накапливаете size, то и вычитать тогда нужно не 1 а size-прочитанных байт.

    Хотели услышать ответ, честно говорю не смотрел Ваш проект, вернусь домой попытаюсь открыть
    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), 1, 0)); (* запрос на чтение одного байта *)

    if ( size > 0 ) then (* если прочитали один байт, пробуем прочитать остальное *)
    (* здесь size равно 1 *)
    size := size + DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf[ 1 ]), SIZEOF(rBuf) - 1, 0));
    end_if

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

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    (* здесь size равно 1 *)
    size := size +
    эта связка зачем?

  3. #73

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    эта связка зачем?
    можно так

    size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf[ 1 ]), SIZEOF(rBuf) - 1, 0)) + 1;

    без разницы
    надо же учитывать что один байт УЖЕ ПРОЧИТАН здесь

    Size := DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf), 1, 0)); (* запрос на чтение одного байта *)

  4. #74

    По умолчанию

    size - кол-во байт прочитанных из буфера порта

  5. #75

    По умолчанию

    Это

    Код:
    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

  6. #76

    По умолчанию

    опять ошибся

  7. #77

    По умолчанию

    Цитата Сообщение от 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

  8. #78

    По умолчанию

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

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

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от 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, то у Вас не клеится второй этап или как?

Страница 8 из 21 ПерваяПервая ... 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

Ваши права

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