как отлаживать сложные системы (состоящие из нескольких AVR)

vde69
Offline
Зарегистрирован: 10.01.2016

подскажите идеи/программы с помощью которых можно пошагово отлаживать шину RS-485 на которой с десяток контроллеров.

Идеал это эмулятор на компе (что-то вроде виртуальной сети с общим тактом).

axill
Offline
Зарегистрирован: 05.09.2011

Идеала не существует

без железа можно частично отладить в протеусе

в железе отлаживайте парами, каждую ардуину в своц терминал и отладивать по выводу в Serial

Я такую отладку делаю в делезном отладчике

Еще помогает логический анализатор подключенный к тому uart на котором висит шина RS485

 

vde69
Offline
Зарегистрирован: 10.01.2016

axill пишет:

Еще помогает логический анализатор подключенный к тому uart на котором висит шина RS485

а есть такие в которые можно пихать сишный код из модулей? а то искать расхождение между кодом на разных языках - та еще развлекуха...

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

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

Можно одно из устройств сделать монитором всего, что летит по шине RS-485 и заруливать в СОМ порт компа, а в отлаживаемых платах навставлять опросы кнопки "Шаг". Т.е. одним устройством будет комп подсматривать, а выполнение будет кнопкой тактоваться.

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

У Вас на RS-485 какой протокол летает? Свой? Для Modbus, например, есть терминалка.

axill
Offline
Зарегистрирован: 05.09.2011

Что значит пихать сишный код?

vde69
Offline
Зарегистрирован: 10.01.2016

не охото было писать свою терминалку, но видимо придется...

Modbus у меня не взлетел (точнее не очень подошел), пишу свой велосипед.... Пока было "вопрос/ответ" - все просто, а как только возникло "вопрос/ответ/посылка/подтверждение" тут все слишком сложно для отладки в реал тайме... нужен пошаговый режим, хотя-бы в рамках "один шаг" = "один пакет"

Logik
Offline
Зарегистрирован: 05.08.2014

Логирование канала надо. Сохраняйте все с канала связи, потом ручками разбираете, ищете какое устройство лажанулось и при каких условиях. Воспроизводите условия ошибки и отлаживаете устройство или исключаете возникновение таких условий. Эмуляция не надежно. На 100% не воспроизведете и эмулятор будет работать, а железо нет, а сил и времени на эмулятор уйдет прилично.

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

vde69 пишет:

Modbus у меня не взлетел (точнее не очень подошел), пишу свой велосипед.... Пока было "вопрос/ответ" - все просто, а как только возникло "вопрос/ответ/посылка/подтверждение" тут все слишком сложно для отладки в реал тайме... нужен пошаговый режим, хотя-бы в рамках "один шаг" = "один пакет"

Что здесь сложного? Пишите в лог с обеих сторон всё, что в порт улетает и прилетает. Про кнопку временную я уже написал ранее. И не забывайте, что RS-485 работает по одной линии в обе стороны, полудуплекс стало быть и необходимо отслеживать коллизии, давать кадр тишины для синхронизации. Собственно, и отлаживать особо нечего будет при правильном подходе. 

1. Мастер сидит себе ждёт команду на передачу.
2. Поступила команда, мастер начинает обмен.
3. Проверяет эфир - шумит в нём какой-то гад от прошлого запроса ещё или чего сглючило у него - даёт кадр тишины, как только в линии всё успокоится. Если же сразу было тихо, то проверяет время от последней передачи и делает по необходимости паузу - кадр тишины.
4. Обнаружив кадр тишины, все слэйвы выполняют команду смирно и сидят ждут кого из них позовут.
5. Мастер, отпраляет запрос "дай что-то там", нужный слав обнаруживает, что запрос к нему, и отвечает "ща" или сразу начинает передачу. Если надо отдать с мастера, он посылает команду "нака забери", слейв отвечает "давай уже" и начинает приём. После окончания приёма, возвращает "вау, всё пришло".
6. Если во время обмена что-то не так, переходим к п.3.

Потоковый протокол, достаточно примитивный, сессионный с синхронизацией кадром тишины. В ModbusRTU 0.3c. Эта эта тишина как бы сброс, как бы стоять всем смирно. Теоритически можно давать кадр тишины до начала обмена и потом сразу подряд с несколькими слэйвами общаться, при любой ошибке обмена, сваливаться в кадр тишны и начинать заново недоделанное. Но ModbusRTU, например, с каждым слэйвом пакетом тишины как-бы сокет организует, запускает сессию, чем и раздражает. :)

Вообще, потоковые протоколы полудуплексные достаточно надёжные в нормальных условиях, RS-485 на малых скоростях как танк прёт, но могут уходить в нирвану. Тут лучше маленькими кусочками передавать, чтобы не получилось как, например, при скачивании файла: тянул, тянул, а оно бабах и отвалилось - начинай сначала. Надо докачку предусматривать на верхнем от сетевого транспорта уровне. Для этого надо отделить как в TCP/IP транспорт одного пакета и обеспечение транспорта блока данных.

Как два мастера работают в одной сети я точно не знаю, не разбирался за ненадобностью.