Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя
Показано с 21 по 30 из 61

Тема: Свободное чтение RS-485

  1. #21

    По умолчанию

    Есть вероятность чтения нескольких пакетов за раз и они могут быть не полными. А так ты по указателю записи пишешь в колцевой буфер функцией Read.

  2. #22

    По умолчанию

    bytes_read := SysComRead(com_settings.Port,ADR(buffer[1]),50,0);
    FOR i:=1 TO bytes_read DO
    bufferR[pWr] := buffer[i]; (*нужно еще сделать проверку на затирание данных(Полный буфер)*)
    pWr := pWr + 1;
    if pWr > XXX THEN p Wr := 0;
    end_IF;
    END_FOR

    IF pWr <> pRd THEN (*В буфере есть данные *))
    ...


    Но и нужно правильно подобрать время цикла и размер буфера чтения и кольцевого!
    Последний раз редактировалось Samel; 20.06.2022 в 13:38.

  3. #23
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от Samel Посмотреть сообщение
    Есть вероятность чтения нескольких пакетов за раз и они могут быть не полными. А так ты по указателю записи пишешь в колцевой буфер функцией Read.
    Берем обычный буфер, который вмещает 2 пакета. И 100% ловим 1 минимум.
    ЗЫ. Если хватает быстродействия контроллера.
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  4. #24

    По умолчанию

    Цитата Сообщение от keysansa Посмотреть сообщение
    Берем обычный буфер, который вмещает 2 пакета. И 100% ловим 1 минимум.
    А второй? Тут все зависит насколько нужна актуальность данных, и есть ли посторонний мусор на шине)
    Если запрос<>ответ - 100% обычный буфер.
    А вот если слушаем порт - я бы рекомендовал кольцевой.
    Последний раз редактировалось Samel; 20.06.2022 в 13:47.

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

    По умолчанию

    Samel а второй и третий порванный
    Суть простая, что предлагает keysansa чтение 2-ного количества байт, внутри которого на 100% будет полный ответ. Начали сессию, нашли цельный буфер, распихали данные, новая сессия....

  6. #26

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Samel а второй и третий порванный
    Суть простая, что предлагает keysansa чтение 2-ного количества байт, внутри которого на 100% будет полный ответ. Начали сессию, нашли цельный буфер, распихали данные, новая сессия....
    Я предлагаю универсальное решение. А то потом выясняется, что размер пакета не фиксированный, мусор на шине и тд.

  7. #27
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Samel а второй и третий порванный
    Суть простая, что предлагает keysansa чтение 2-ного количества байт, внутри которого на 100% будет полный ответ. Начали сессию, нашли цельный буфер, распихали данные, новая сессия....
    Спасибо. Но это вариант для ТС (возможны пропуски пакета, что бы не отставать по времени, я предлагал сбрасывать буфер порта), если возникает ситуация, что нельзя пропустить ни один пакет - тут только работа по прерыванию. По получению очередного байта, проверяем его на соответствие пакету и далее, принимаем решение. В ранних контроллерах был доступен режим DMA к буферу COM порта, там не надо было свой буфер, дополнительный, создавать. 1500 байт хватало для всех случаев. Но потом стали передавать данные в виде строки... И понеслось ))
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  8. #28
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

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

    ЗЫ. В случае с переменной длинной пакета - его все равно придется считать. Проще 10*х заложить, сегодня память дешевая.
    ЗЫЫ. Мусор на шине не влияет на длинну буфера, нет пакета в буфере - очищаем, пишем ошибку и работаем заново.
    Последний раз редактировалось keysansa; 20.06.2022 в 14:09.
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  9. #29

    По умолчанию

    Цитата Сообщение от keysansa Посмотреть сообщение
    Кольцевой буфер тоже должен помещать пакет полностью. Иначе он не будет работать.
    И не один!

  10. #30

    По умолчанию

    В задаче не хватает нескольких переменных:
    1. Частота пакетов.
    2. Требуемая актуальность данных.

Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя

Похожие темы

  1. Свободное ПО для опроса устройств (Modbus)
    от o_nik в разделе Трёп (Курилка)
    Ответов: 26
    Последнее сообщение: 09.11.2020, 14:15
  2. Ответов: 6
    Последнее сообщение: 05.03.2018, 10:46
  3. ПЛК110 М02 и свободное место на USB Flash?
    от Антон_Б в разделе ПЛК1хх [М02]
    Ответов: 0
    Последнее сообщение: 01.07.2017, 12:21
  4. чтение из плк
    от Wanted в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 03.12.2010, 13:18
  5. Свободное место на Flash диске
    от Логвиненко Андрей в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.11.2009, 15:04

Ваши права

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