Помощь зала. Вот такое modsbus реле: Управляю. Управляется. Все норм. Команда "узнать состояние" - ответ 6 байт. Команда "установить состояние" - ответ 8 байт. Команда "установить адрес железки" - ответ 11 байт. Я организовал обработку ответа от железки так. отправляю команду на железку. запускаю таймер побайтно принимаю ответ и добавляю его в переменную (var = var + newbyte) через 125 мс таймер запускает функцию обработки переменной var. За это время успевает "прилететь" и 6 и 8 и 11 байт. Вопрос вот в чем. Какова логика приема данных у вас, коллеги? Можно, ведь, пытаться считать принятые байты. Установка адреса - вещь разовая, а вот установка и опрос - операции с разными длинами ответов. Ситуация несколько усложняется и тем, что на эту же шину хочу повесить PZEM-16 и там своя длина ответа модуля. У кого какой опыт? Кто как делает? ПС. Без таймера, вроде, все равно не обойтись. Если ответа по какой-то причине не будет, устройство станет ждать его бесконечно, если его чем-то не "остановить". ППС. Решено. Оставил таймер, но стал считать байты. Набрал нужное количество - остановил таймер и обработал ответ. Что-то не так с ответом - таймер сработает и все порешает.
Добрый день ИгорьК По модбасу работал через удобную програму(тест) modlook.zip (бесплатная,там есть реквизиты автора) оборудование такое Мое резюме - модбас приборы каждый делает под себя. Получалось иногда у этого поставщика по его оборудованию проще самому быстрый опрос написать, чем брать их скаду и устанавливать по адресам опс-сервер. Ну и далее делать проект под заказчика.
Так же делал. Только таймер взводил после получения каждого байта. А обработку полученного пакета начинал либо по достижению нужного кол-ва байт либо по флагу ошибки приема, взведенного по таймеру.
Оставил таймеру 125 мс, посчитал байты - остановил. Команды не отправляю напрямую, а складываю в таблицу. Изымаю из таблицы по одной и отправляю в модуль. Пока в таблице есть строки - идет взаимодействие с модулем. Выглядит прикольно... 48 команд подряд из таблицы. Доставляет звук