Показано с 1 по 10 из 96

Тема: Прошу совета

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    21.12.2011
    Адрес
    Северодвинск
    Сообщений
    438

    По умолчанию

    А по таймауту длительностью в полтора байта при передаче ответа никак? И кстати, вы должны знать, сколько слов в ответе, начало ответа по перввым двум байтам элементарно определяется.

  2. #2

    По умолчанию

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

  3. #3
    Пользователь
    Регистрация
    20.02.2008
    Адрес
    Тверь
    Сообщений
    501

    По умолчанию

    Цитата Сообщение от Одесса Посмотреть сообщение
    Пробовал с временными фокусами. Все равно информация в строке сдвинута. Если предварительно посчитать количество
    байтов ответа,могу поймать последний байт,но не могу же я для каждой команды это просчитывать.
    По адресу устройства находите равный ему первый байт, по первому байту находите команду и длину посылки, по ней находите CRC, если CRC совпало - всё вычислено правильно, иначе ищете другой первый байт.

  4. #4

    По умолчанию

    Цитата Сообщение от rwg Посмотреть сообщение
    По адресу устройства находите равный ему первый байт, по первому байту находите команду и длину посылки, по ней находите CRC, если CRC совпало - всё вычислено правильно, иначе ищете другой первый байт.
    Поясняю боллее конкретно. Выдаю команду 10 03 01 00 00 01 86 АС В ответ должен получить 10 03 02 80 00 25 0Е
    Но получаю 80 00 25 0Е 10 03 02 или 03 02 80 00 25 0Е 10 и тд. Те. байты ответа приходят правильные , но начало
    пакета может начинаться с любого байта .Если бы ответ приходил по декону или овну,проблем бы никаких не было,т.к
    у них в конце пакета служебный символ 0D. Отслеживая входной поток по этому признаку конца я извлекаю данные из
    буфера,этим самым очищаю его. С модбасом такой фокус не проходит. Ваши рекомендации справедливы в том случае,если бы адрес ,который Вы советуете отлавливать и от него плясать,стоял последним в сообщении,а не первым.
    Если я последую Вашему совету и по приходу адреса,буду читать буфер, то кроме байта с этим адресом там ничего не
    будет.
    Решений типа обработать пришедшую строку,те ее упорядочить-не предлагать.Это я сам
    знаю.
    Последний раз редактировалось Одесса; 14.09.2018 в 08:21.

  5. #5
    Пользователь
    Регистрация
    21.12.2011
    Адрес
    Северодвинск
    Сообщений
    438

    По умолчанию

    Цитата Сообщение от Одесса Посмотреть сообщение
    Поясняю боллее конкретно. Выдаю команду 10 03 01 00 00 01 86 АС В ответ должен получить 10 03 02 80 00 25 0Е
    Но получаю 80 00 25 0Е 10 03 02 или 03 02 80 00 25 0Е 10 и тд. Те. байты ответа приходят правильные , но начало
    пакета может начинаться с любого байта.
    Разве такое возможно?

  6. #6

    По умолчанию

    Цитата Сообщение от VaBo Посмотреть сообщение
    Разве такое возможно?
    Байты с прибора Овен приходят в правильной последовательности. Но я сторонним прибором их отловить не могу,так не знаю от чего синхронизироваться.

  7. #7
    Пользователь
    Регистрация
    20.02.2008
    Адрес
    Тверь
    Сообщений
    501

    По умолчанию

    Цитата Сообщение от Одесса Посмотреть сообщение
    Выдаю команду 10 03 01 00 00 01 86 АС В ответ должен получить 10 03 02 80 00 25 0Е
    Но получаю 80 00 25 0Е 10 03 02 или 03 02 80 00 25 0Е 10 и тд. Те. байты ответа приходят правильные , но начало
    пакета может начинаться с любого байта .
    Вам надо понять, где что в буфере? Начало пакета в этом примере 10 03 (или при ошибке 10 83) Непонятно, чем знание конца полезнее знания начала.

  8. #8

    По умолчанию

    Цитата Сообщение от rwg Посмотреть сообщение
    Вам надо понять, где что в буфере? Начало пакета в этом примере 10 03 (или при ошибке 10 83) Непонятно, чем знание конца полезнее знания начала.
    Программными средствами я могу контролировать любой байт залетающий в буфер. Допустим могу отловить 1 адресный байт
    и по этому событию могу прочитать буфер. Но толку от этого не будет,потому что буфер будет пуст,так туда ещё ничего не успело
    залететь. Если бы этот адресный байт был последним,то я бы отловив этот байт ,и по этому событию прочитав буфер, увидил бы
    Все данные,где последним был бы адресный байт.

  9. #9

    По умолчанию

    Все проблему решил костылем. Обработал принятую строку следующим образом. Нашел в строке адресный байт и его индекс.
    путем перебора. Не очень сложными программными манипуляциями вырезал адресный байт с байтами следующими за ним до

    конца строки. И поставил этот байтовый блок в начало строки. Понимаю,что это не лучший метод решения,но лучшего не знаю.

    Спасибо тему закрываю.

  10. #10
    Пользователь
    Регистрация
    20.02.2008
    Адрес
    Тверь
    Сообщений
    501

    По умолчанию

    Цитата Сообщение от Одесса Посмотреть сообщение
    Программными средствами я могу контролировать любой байт залетающий в буфер. Допустим могу отловить 1 адресный байт
    и по этому событию могу прочитать буфер. Но толку от этого не будет,потому что буфер будет пуст,так туда ещё ничего не успело
    залететь. Если бы этот адресный байт был последним,то я бы отловив этот байт ,и по этому событию прочитав буфер, увидил бы
    Все данные,где последним был бы адресный байт.
    А что Вам мешает отловить сперва адресный байт, потом байт с командой, потом байты CRC, разобрать весь пакет на лету? Или проделать то же самое, набрав в буфер все принятые байты за время до следующего запроса?

Похожие темы

  1. Прошу совета...
    от Павел Братковский в разделе Трёп (Курилка)
    Ответов: 21
    Последнее сообщение: 28.02.2017, 10:07
  2. Прошу совета по ПЛК
    от curbat в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 16.07.2015, 08:24
  3. Прошу совета
    от RA9YSS в разделе Наши проекты
    Ответов: 4
    Последнее сообщение: 14.10.2014, 16:39
  4. Прошу помощи и совета. трм 138
    от Nikita13 в разделе Эксплуатация
    Ответов: 12
    Последнее сообщение: 24.03.2011, 12:13
  5. прошу помощи и совета. трм 138
    от Nikita13 в разделе Подбор Оборудования
    Ответов: 2
    Последнее сообщение: 24.03.2011, 09:41

Ваши права

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