Цитата Сообщение от rwg Посмотреть сообщение
В моём понимании, получив запрос на содержимое ячеек, Модбас-слейв должен тут же несмотря ни на что с минимальной задержкой передать мастеру их значения. Но авторы протокола поступили мудрее и предусмотрели ситуацию, когда данные в этих ячейках ещё не готовы. В этом случае слейв вместо содержимого ячеек шлёт сообщение об ошибке 05 ACKNOWLEDGE. "Слейв принял запрос и обрабатывает его, но ему требуется много времени. Этот ответ возвращается для предупреждения ошибки тайм-аута мастера" . Или 06 SLAVE DEVICE BUSY "Слейв обрабатывает долго выполняемую команду. Мастер должен повторно передать запрос позже, когда слейв освободится"
А в моем понимании этот механизм должен работать так. Сам являюсь автором многих микропроцессорных систем и в своих
разработках применяю следующий алгоритм решения подобных проблем.Крутиться к примру у меня какая то задача в системе. При
этом пришел любой байт из вне . Немедленно по этому прерыванию приостанавливаю выполнение основной программы и обрабатываю запрос. Выплюнув абоненту данные,продолжаю программу. При этом учитываю приоритет абонентов. И если во время ответа абонента приходит запрос боллее приоритетного абонента- прерываю сеанс с первым абонентом, обслуживаю второго абонента,потом перехожу к продолжению сеанса с первым абонентом и только после этого перехожу в основной цыкл
программы. По результатам эксперимента Юрия делаю вывод,что у Овна похожий алгоритм ответа абонента. А вот у Внешнего устройства ,который применяет автор вопроса алгоритм этот " Как хочу так и дро....делаю"