как отлаживать сложные системы (состоящие из нескольких AVR)
- Войдите на сайт для отправки комментариев
Ср, 27/04/2016 - 14:55
подскажите идеи/программы с помощью которых можно пошагово отлаживать шину RS-485 на которой с десяток контроллеров.
Идеал это эмулятор на компе (что-то вроде виртуальной сети с общим тактом).
Идеала не существует
без железа можно частично отладить в протеусе
в железе отлаживайте парами, каждую ардуину в своц терминал и отладивать по выводу в Serial
Я такую отладку делаю в делезном отладчике
Еще помогает логический анализатор подключенный к тому uart на котором висит шина RS485
Еще помогает логический анализатор подключенный к тому uart на котором висит шина RS485
а есть такие в которые можно пихать сишный код из модулей? а то искать расхождение между кодом на разных языках - та еще развлекуха...
Десяток ведь не каждый с уникальным кодом? Достаточно будет отдалить пару мастер-слэйв, потом подключить второй слейв и проверить обработку коллизий. Идеальный вариант - это отладка на чипе, но для этого необходим программатор и работа в АтмелСтудио. :)
Можно одно из устройств сделать монитором всего, что летит по шине RS-485 и заруливать в СОМ порт компа, а в отлаживаемых платах навставлять опросы кнопки "Шаг". Т.е. одним устройством будет комп подсматривать, а выполнение будет кнопкой тактоваться.
Можно в любом компиляторе на РС отладить, используя два процесса и общую переменную для обмена. В общем, обычная же отладка сетевого взаимодействия.
У Вас на RS-485 какой протокол летает? Свой? Для Modbus, например, есть терминалка.
Что значит пихать сишный код?
не охото было писать свою терминалку, но видимо придется...
Modbus у меня не взлетел (точнее не очень подошел), пишу свой велосипед.... Пока было "вопрос/ответ" - все просто, а как только возникло "вопрос/ответ/посылка/подтверждение" тут все слишком сложно для отладки в реал тайме... нужен пошаговый режим, хотя-бы в рамках "один шаг" = "один пакет"
Логирование канала надо. Сохраняйте все с канала связи, потом ручками разбираете, ищете какое устройство лажанулось и при каких условиях. Воспроизводите условия ошибки и отлаживаете устройство или исключаете возникновение таких условий. Эмуляция не надежно. На 100% не воспроизведете и эмулятор будет работать, а железо нет, а сил и времени на эмулятор уйдет прилично.
Modbus у меня не взлетел (точнее не очень подошел), пишу свой велосипед.... Пока было "вопрос/ответ" - все просто, а как только возникло "вопрос/ответ/посылка/подтверждение" тут все слишком сложно для отладки в реал тайме... нужен пошаговый режим, хотя-бы в рамках "один шаг" = "один пакет"
Что здесь сложного? Пишите в лог с обеих сторон всё, что в порт улетает и прилетает. Про кнопку временную я уже написал ранее. И не забывайте, что RS-485 работает по одной линии в обе стороны, полудуплекс стало быть и необходимо отслеживать коллизии, давать кадр тишины для синхронизации. Собственно, и отлаживать особо нечего будет при правильном подходе.
1. Мастер сидит себе ждёт команду на передачу.
2. Поступила команда, мастер начинает обмен.
3. Проверяет эфир - шумит в нём какой-то гад от прошлого запроса ещё или чего сглючило у него - даёт кадр тишины, как только в линии всё успокоится. Если же сразу было тихо, то проверяет время от последней передачи и делает по необходимости паузу - кадр тишины.
4. Обнаружив кадр тишины, все слэйвы выполняют команду смирно и сидят ждут кого из них позовут.
5. Мастер, отпраляет запрос "дай что-то там", нужный слав обнаруживает, что запрос к нему, и отвечает "ща" или сразу начинает передачу. Если надо отдать с мастера, он посылает команду "нака забери", слейв отвечает "давай уже" и начинает приём. После окончания приёма, возвращает "вау, всё пришло".
6. Если во время обмена что-то не так, переходим к п.3.
Потоковый протокол, достаточно примитивный, сессионный с синхронизацией кадром тишины. В ModbusRTU 0.3c. Эта эта тишина как бы сброс, как бы стоять всем смирно. Теоритически можно давать кадр тишины до начала обмена и потом сразу подряд с несколькими слэйвами общаться, при любой ошибке обмена, сваливаться в кадр тишны и начинать заново недоделанное. Но ModbusRTU, например, с каждым слэйвом пакетом тишины как-бы сокет организует, запускает сессию, чем и раздражает. :)
Вообще, потоковые протоколы полудуплексные достаточно надёжные в нормальных условиях, RS-485 на малых скоростях как танк прёт, но могут уходить в нирвану. Тут лучше маленькими кусочками передавать, чтобы не получилось как, например, при скачивании файла: тянул, тянул, а оно бабах и отвалилось - начинай сначала. Надо докачку предусматривать на верхнем от сетевого транспорта уровне. Для этого надо отделить как в TCP/IP транспорт одного пакета и обеспечение транспорта блока данных.
Как два мастера работают в одной сети я точно не знаю, не разбирался за ненадобностью.