Jump to content

    
Sign in to follow this  
MiD

Нужно разобраться в протоколе RS485 беговой дорожки.

Recommended Posts

15 minutes ago, MiD said:

Какое ПО лучше использовать для отправки пакетов ?

ТУТ  выбирайте любой. Я пользую первый в списке. Вам понадобится работа с макросами, чтобы пакет уходил "слитно", без пауз.

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

Хотя для этого этапа уже лучше переходить на свою (C, pas . . .) утилиту + PC с двумя портами. Это на порядок упростит анализ протокола и начало работы с шиной вашего "девайса". (Можно периодически переключать свой софт из режима "моста" на полное или частичное управление, отключая COM-порт с родным "мастером" и передавая свои пакеты управления.)

Share this post


Link to post
Share on other sites

Имхо, выложенного Вами с ошибками объема данных для анализа недостаточно.
Если хотите раскрутить протокол, объем измерений должен быть на порядок больше.

Длительности 5 секунд, в которой всего 9 пакетов (80 30 9F ...) недостаточно, нужно хотя бы пол минуты для начала.

Естественно не путать дампы.

Как работают кнопки тоже не понятно. Позволяют ли кнопки длительное нажатие, при котором скорость (наклон) дорожки изменяется. Или одно нажатие приводит к одному шагу изменения скорости (наклона) дорожки, вне зависимости от длительности нажатия.

Допустим в протоколе передается код нажатой кнопки (а это может быть и не так), тогда Вам нужно нажать кнопку и держать в течение всего измерения, а не давить кнопку несколько раз.

Share this post


Link to post
Share on other sites
 
1 hour ago, MiD said:

А я могу отправлять пакеты подключившись парралельно

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

Как на коленке решить эту проблему, не знаю - нужно писать софтинку, отслеживать "тишину".

Да и вообще, как в данном конкретном случае организован доступ к шине, я не разобрался. Тайминги в снятом логе почему-то постоянно плавают...

 

 

44 minutes ago, k155la3 said:

ТУТ  выбирайте любой. Я пользую первый в списке.

Bray terminal, хоть и достаточно удобен в плане интерфейса, с ком-портом работает через ж., т.е. побайтово. Грузит процессор и теряет символы при приёме на больших объемах, вставляет произвольные паузы при отправке. Я com port toolkit использовал, когда надо было пачку байт без пауз отправить.

 

Ну или действительно сразу на каком-нибудь питоне ваять. 

 

50 minutes ago, k155la3 said:

утилиту + PC с двумя портами

Сомневаюсь, что эта конструкция уменьшит количество коллизий.

Share this post


Link to post
Share on other sites
9 minutes ago, esaulenka said:
Сомневаюсь, что эта конструкция уменьшит количество коллизий.

ну, тут "как пойдет". Если на шине один мастер - то коллизии исключаются (ответы периферии только по запросу).

 

Share this post


Link to post
Share on other sites
19 hours ago, vguard said:

Имхо, выложенного Вами с ошибками объема данных для анализа недостаточно.
Если хотите раскрутить протокол, объем измерений должен быть на порядок больше.

Длительности 5 секунд, в которой всего 9 пакетов (80 30 9F ...) недостаточно, нужно хотя бы пол минуты для начала.

Естественно не путать дампы.

Как работают кнопки тоже не понятно. Позволяют ли кнопки длительное нажатие, при котором скорость (наклон) дорожки изменяется. Или одно нажатие приводит к одному шагу изменения скорости (наклона) дорожки, вне зависимости от длительности нажатия.

Допустим в протоколе передается код нажатой кнопки (а это может быть и не так), тогда Вам нужно нажать кнопку и держать в течение всего измерения, а не давить кнопку несколько раз.

Я понял, сделаю разный набор больших дата сетов. и Результаты прогоню через макрос в Экселе.

Кнопки именно так и работают ( Есть еще кнопки фикс скорость 12 км\ч или наклон 5% их не трогаю пока) 

19 hours ago, esaulenka said:

Ну или действительно сразу на каком-нибудь питоне ваять.

Я накидал для арудуино чередование 2-х коротких пакетов, так как это делает дорожка, но тут несколько базовых вопросов появилось:

1. В ардуино я делаю через серийный порт и получается, что у меня только 1 канал, а не как RS485 два с инверсией. Тут вопрос, что лучше сделать, купить переходник для RS485 (не USB, а с контактами помонтаж\пайку) и отправлять через него. Или лучше использовать любые два пина и попробовать эмулировать RS485, отправля два инвертированных пакета на два разных пина? 

2. Данные с дорожки, которые я анализировал были с учетом  "Most Significant Bit sent", a то что отправляет Арудино - "Least Significant Bit Sent". Тут, несмотря на то, что я почитал инет - плаваю. Если я правильно понял, то нужно сдвинуть регистр отправляемых данных, но результата пока не достинг. Там сложная для меня теория и просто >>1 не прокатывает. Может кто-то делал?

Share this post


Link to post
Share on other sites
40 minutes ago, MiD said:

Я понял, сделаю разный набор больших дата сетов. и Результаты прогоню через макрос в Экселе.

Подключитесь только нормально, на блоке кнопок между контроллером и драйвером. И помех не будет, и гадать, кто что передаёт, не надо.

43 minutes ago, MiD said:

купить переходник для RS485

Да, однозначно. Программно, в принципе, сделать можно, но а) нетривиально б) защит никаких нет.

 

46 minutes ago, MiD said:

отправляет Арудино - "Least Significant Bit Sent"

Вы что-то путаете. UART всегда и везде отправляет первым старший бит. Я не очень хорошо знаком с ардуино-библиотеками, но вряд-ли кто-то реализовывал переворот порядка бит "младшим вперёд".

Share this post


Link to post
Share on other sites
11 hours ago, esaulenka said:

Подключитесь только нормально, на блоке кнопок между контроллером и драйвером. И помех не будет, и гадать, кто что передаёт, не надо.

Если я правильно понял то речь идет об основном контроллере и драйвером это Max... Честно говоря я слабо представлю что смогу куда-то тут подпояться до MAX

Даже к его ножкам вряд ли.  ( на фото часть переферии поотключал чтобы провода не мешали. Шлейфы наверху и внизу - это к блокам кнопок. ДЛя экрана отдельная плата.

 

RS485 заказал, доставка только в среду.

TeadMill_board_lowres.jpg

TeadMill_Max_Board_lowres.jpg

Share this post


Link to post
Share on other sites
22 minutes ago, MiD said:

Честно говоря я слабо представлю что смогу куда-то тут подпояться до MAX

Вообще-то тут полная халява - интерфейс на отдельной плате с огромными контактными площадками. Надо только разобраться, как они подключены. По картинке плохо понятно, нужен мультиметр.

Ну или к MAX'у, к 1,3 и 4 ногам. Они достаточно большие и рядом есть пятачки (для ремонтников, видимо).

 

PS Horizon Adventure 4 Plus стоит сотню килорублей. Жесть какая...

Share this post


Link to post
Share on other sites

+1 к тому, что нужны "длинные" логи

чтобы уменьшить их размер стоит понизить частоту семплирования (для адекватной декодировки UART достаточно будет 4...8х к скорости интерфейса).

 

такое впечатление, что контрольная плата является централизованным модулем управления, а исполнительная часть на приводах просто выполняет "мгновенные команды", т.е. нет высокоуровневой команды "сделать наклон 15гр", но есть низкоуровневые команды "поднять/наклонить полотно на 1 единицу дискрета" и  контрольная плата сама высчитывает число и время за которые должна выдать всю пачку на исполнительный модуль - для проверки этой догадки и нужны длинные (по несколько минут) логи.

 

ЗЫЖ из логов надо будет вырезать некий heartbeat СMD - выше было указано, что при обрыве связи девайс переходит в нерабочий режим до восстановления связи и перезагрузки

Share this post


Link to post
Share on other sites
13 hours ago, esaulenka said:

Вообще-то тут полная халява - интерфейс на отдельной плате с огромными контактными площадками. Надо только разобраться, как они подключены. По картинке плохо понятно, нужен мультиметр.

Ну или к MAX'у, к 1,3 и 4 ногам. Они достаточно большие и рядом есть пятачки (для ремонтников, видимо).

 

PS Horizon Adventure 4 Plus стоит сотню килорублей. Жесть какая...

на MAX не решился припаиваться, у меня очень базовый навык пайки :(  Подключился к входным контактам платы передачи данных.

В атаче дамп, сюдя по всему без помех. Я думаю в такой конфигарации сделать все большие дампы с разнными сценариями.

From_Board_Nothing60s.logicdata

IMG_9978.jpg

12 hours ago, Doka said:

ЗЫЖ из логов надо будет вырезать некий heartbeat СMD - выше было указано, что при обрыве связи девайс переходит в нерабочий режим до восстановления связи и перезагрузки

Да, это повырежу на результирующих файлах в Excel.

Share this post


Link to post
Share on other sites
On 4/11/2020 at 11:37 AM, esaulenka said:

UART всегда и везде отправляет первым старший бит.

Я вот тут фигню сказал, а меня никто не поправил. Правильно - в UART первым уходит младший бит. Предлагаю анализатор настроить так же.

Подсчёт CRC, правда, будет по-другому. Как соберёте данные, попробую подобрать алгоритм.

 

1 hour ago, MiD said:

В атаче дамп, сюдя по всему без помех.

Да, стало гораздо лучше.

Channel3 - DE. Когда там единичка, пульт занимает линию, когда ноль - слушает.

Channel5 - приемник, данные с нижней платы

Channel7 - передатчик, данные с пульта.

 

Идея с передачей данных с третьего устройства, скорее всего, потерпит неудачу - пульт отпускает DE очень редко, вероятность коллизий очень высокая.

Можно попробовать пульт вовсе оторвать и "проиграть" в шину последовательность байт с 7-го канала (по возможности, выдерживая паузы).

Share this post


Link to post
Share on other sites

Я, сегодня сломал весь мозг себе.

Начал делать дампы, и один из каналов больше не отображается (тот, что был Channel5). Самое интересное, я не трогал ничего со вчерашнего дня там. Перепроверил все провода, спайки, контакты - все сто раз перевоткнул. Нет и всё. А еще понял, что при разных конфигурациях подключния проводов выдает разную картинку на анализаторе. Но "красивый вариант" только такой. В итоге остался DE как я вижу и данные с пульта. Может есть идеи что могло не так пойти или где я туплю.

А второй момент, если во вчерашнем дампе пакеты на Channel7  чередовались один за другим, то сегодня они идут пачками по 8 пакетов одного вида 8 пакетов другого.

Мне кажется что-то опять у меня с подключением не так.

DefaultStartSpeed_NoButtons.logicdata

Treadmill_DefaultSpeed_NoButtons.xlsx

Share this post


Link to post
Share on other sites

Дорожка то работает? Может передатчик механической (приводной) части сдох, и не пересылаются ответы по RS485. Этим объясняется и то, что пакеты пересылаются по 8 раз повторно. Центральный контроллер не получает ответ от приводов и повторяет запрос 8 раз. Приводная часть кстати может работать, потому что ее микроконтроллер не знает что передатчик сдох.

Подключитесь снова к шине RS485 и посмотрите там трафик.

Если даже такое произошло, то лечится заменой микросхемы драйвера RS485.

Edited by vguard

Share this post


Link to post
Share on other sites

Дорожка работала и работает сейчас. Я вернулся к нормальным измерениям. Как именно я сам до конца не понял. Там контактов больше, чем у меня ножек на анализаторе и, видимо, методом перебора, я достиг дзена. Точно высянил, что 12вольт тоже нужно подать на анализатор с платы иначе чушь получается.

В итоге, как мне кажется я нашел закономерность, но появилось предположение-вопрос.

Я измерял состояния дорожки на разных скоростях без нажатия кнопок. Всегда менялся один пакет из 3-х.

Затем я менял высоту наклона дорожки без нажатия кнопок. Всегда менялся другой пакет из 3-х.

Отсюда я сделал выводы какой пакет отвечает за скорость, а какой за наклон. Что делает "Короткий" пакет, пока не ясно. Возможно он как раз  и есть "пульс"

Я сделал замеры и изменил скорость единовременным нажатием. В логе небыло видно никаких аномалий. Просто начиная с этого места пакет скорости стал другим, соотвевующем пакету именно этой скорости.

Отсюда вопрос. Либо дорожка постоянно шлет на мотор скорость, с какой тот должен работать и нажатие кнопки просто меняет ее и продолжает слать. Либо всё-таки я анализировал не команды от пульта, а ответ о состоянии от силового блока внизу. Пару дампов на всякий случай приложу.

image.thumb.png.27ec6a080430497cd3714f3644e10534.png

Speed08-09OneButtonPress.logicdata

Speed09_NoButtons.logicdata

Share this post


Link to post
Share on other sites

Ваши рассуждения верны. Пульт шлет скорость и наклон, для чего еще шлет пакет F9/9F Вам до лампочки, просто шлите его также.
Соответственно для решения задачи Вам нужно примерно с теми же паузами между пакетами слать 3 пакета:
00 FF F1 02 00 (скорость) CRC
00 FF F6 02 00 (наклон) CRC
00 FF F9 00 90 - запрос непонятно чего, скорее всего защита от применения пульта с другими дорожками, потому что в ответе 6-й байт формируется явно по какому-то хитрому алгоритму.
Почему-то относительно ранее присылаемых логов у Вас байты в новых логах развернулись (старший бит стал младшим и наоборот). Но это не принципиально байты развернете как нужно без проблем.

Edited by vguard

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this