Перейти к содержанию
  • Привет. Кажется, ты используешь AdBlock. Наш форум развивается и существует за счет доходов от рекламы. Добавь нас в исключения =) КАК ДОБАВИТЬ?

Рекомендуемые сообщения

05.05.2016 в 17:26, PavelK сказал:

@KUZNETS  к сожалению нет, та панель практически совмещена с материнкой. 

Моя подходит только к RDL320 и RDL430 

Доброго времени суток.

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

Очень мне любопытно, каким образом Вы реализовали обмен инфой между материнкой и планшетом. Это же надо знать заранее, какие именно команды бегают в пакетах между материнкой и панелью. Допустим, если есть живой экземпляр, тогда вполне можно каким-нибудь логическим анализатором спарсить все возможные команды. А вот если есть только мать, как тогда? 

Ну еще, как вариант, можно попробовать разреверсить прошивку от материнки. Я пробовал запихивать последнее (и вроде единственное) обновление от RDLC320 в дизассемблер, и в IDA, и в Ghidra, но что-то там плоховато с анализом прошивок для ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин, закусила меня эта мысль. И так её размышлял и эдак и вроде сам допёр, как можно сделать. Хотя получается костыль, конечно, и весь функционал панели таким образом не выйдет восстановить. Однако...

Подключил плату к компу, открыл RDWorks, и также запустил сниффер COM-порта. Посмотрел, какие данные идут при проверке связи в программе, посмотрел пакеты, бегущие при нажатии Read на вкладке Doc, и еще что идёт при управлении головой из вкладки Test. Записал запросы и ответы, закрыл RDWorks, открыл терминал и послал запрос из него. Ответ совпадает, супер! Дальше, в принципе, ясно, рисуем в каком-нибудь конструкторе морду android-приложения, привязываем на кнопки запросы, подключаемся в USB-разъем на материнке, рулим головой с планшета, профит!

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

Еще вот прямо сейчас подумалось, что можно попробовать записать пакеты с панели RDLC6442. Кнопочный функционал у неё такой же, поэтому наверняка китайцы не стали заморачиваться и переписывать код. Было бы интересно, да)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Alterpalm сказал:

Записал запросы и ответы, закрыл RDWorks, открыл терминал и послал запрос из него. Ответ совпадает, супер!

В правильном направлении идёте.  Помогу чутка - первые 2 байта - контрольная сумма. Всё остальное зашифровано простейшим алгоритмом побайтно, тынц:

uint8_t descramble(uint8_t s) {
   uint8_t a = (s + 0xFF) & 0xFF;
   uint8_t b = a ^ 0x88;
   uint8_t p = b & 0x7E; 
   p |= b >> 7 & 0x01; 
   p |= b << 7 & 0x80;
   return p; 
}

 

6 часов назад, Alterpalm сказал:

Ресет, например, так реализовать не выйдет.

Выйдет ;)  за любую материнку не скажу, но начиная с 6442 всех можно и сбросить и импульс сделать (есть ещё один UDP порт чисто для управления).

6 часов назад, Alterpalm сказал:

ще вот прямо сейчас подумалось, что можно попробовать записать пакеты с панели RDLC6442.

Другие :D 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Награды пользователя

7 часов назад, PavelK сказал:

В правильном направлении идёте.  Помогу чутка - первые 2 байта - контрольная сумма. Всё остальное зашифровано простейшим алгоритмом побайтно, тынц:

uint8_t descramble(uint8_t s) {
   uint8_t a = (s + 0xFF) & 0xFF;
   uint8_t b = a ^ 0x88;
   uint8_t p = b & 0x7E; 
   p |= b >> 7 & 0x01; 
   p |= b << 7 & 0x80;
   return p; 
}

 

7 часов назад, PavelK сказал:

(есть ещё один UDP порт чисто для управления)

Ооо, как сладенько, сколько пищи для размышлений. Благодарю, буду думать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13.06.2020 в 02:47, PavelK сказал:

uint8_t descramble(uint8_t s) {
   uint8_t a = (s + 0xFF) & 0xFF;
   uint8_t b = a ^ 0x88;
   uint8_t p = b & 0x7E; 
   p |= b >> 7 & 0x01; 
   p |= b << 7 & 0x80;
   return p; 
}

Поработал с алгоритмом, действительно работает, есть некоторые результаты.

Но вопросов и непонятностей только прибавилось)

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

 

while True:

 s=int(input("enter s: "))

 a=(s+0xFF)&0xFF

 b=a^0x88

 p=b&0x7E

 p|=b>>7&0x01

 p|=b<<7&0x80

 print "HEX:", hex(p)[2:]

 print "CHAR:", chr(p)

 print "DEC:", p

 

Решил поиздеваться с ответами материнки по запросу Read. Для моей платы список файлов выглядит так:

RD8_read.jpg.99b4af056f21eabf3bbcbecea0226bfa.jpg

 

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

1911197932_.thumb.jpg.17a446093e55a1608643c1e1d4f462a6.jpg

 

Первые две строки одинаковые – похоже на проверку связи. А дальше хз, только вот в последнем байте до вывода инфы о файлах увидел количество файлов. Удалось обнаружить номер файла, его имя, количество запусков. Также хорошо видно что-то типа позывного (первые два байта), причем для строк с названиями первый байт другой(E2).

Из непоняток:

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

- не удалось распознать время выполнения файла

- третья строка в инфе о файле полностью мимо

- с третьей по седьмую строки от начала тоже мимо

Подскажите, плиз)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Какая версия RDWorks?  Если 6, то 0x88 нужно заменить на 0x86 в дешифраторе.

2. В "лоб" из байт числовые значения Вы не получите, нужно переводить:

long Parser::parse5b(const QByteArray &bytes, int o)
{
    long as = bytes[o+0] << 28 | bytes[o+1]<< 21 | bytes[o+2] << 14 | bytes[o+3] << 7 | bytes[o+4];
    return as;
}

На вход 5 байтов, на выход числовое представление (если число кодируется 5 байтами, для 2х байтых по принципу так же)

3. Время в миллисекундах (timestamp), 5 байт.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Награды пользователя

5 часов назад, PavelK сказал:

1. Какая версия RDWorks?  Если 6, то 0x88 нужно заменить на 0x86 в дешифраторе.

Пользую RDWorksV8. Есть еще LaserWorkV5, он же RDCAM5.0.27, но он, по ходу, с Win10 не в ладах: пока не отключишь панель с цветами, не видно большей части кнопок управления + нет отображения количества выполненных циклов

 

5 часов назад, PavelK сказал:

long Parser::parse5b(const QByteArray &bytes, int o)
{
    long as = bytes[o+0] << 28 | bytes[o+1]<< 21 | bytes[o+2] << 14 | bytes[o+3] << 7 | bytes[o+4];
    return as;
}

В коде я по-прежнему лох. Не понимаю, откуда взять int o, вроде явно значение здесь нигде не присвоено.

 

5 часов назад, PavelK сказал:

3. Время в timestamp, 5 байт.

Я так понимаю, речь идет о третьей строке в выводе инфы о каждом файле.

 

Теперь вроде дошло, почему не сошлось количество запусков в первом файле. Теперь вижу единичку во втором с конца байте, типа как следующий разряд получается.

За пятибайтные числовые представления спасибо, картина стала однозначно яснее. Осталось разобраться с переводом)

Вообще смотрю на Ваш код и понимаю, что догадаться самостоятельно у меня не получилось бы, наверное, никогда. Перебором, в лоб получить алгоритм дешифровки просто нереально. Ведь когда его нет, хз, сколько в нем операций преобразования и использованных вспомогательных переменных, может, 4-5, а может и штук 20. Моё почтение, однозначно. А мне, по ходу, пора садиться и учить OllyDbg

Изменено пользователем Alterpalm
Опечатка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, Alterpalm сказал:

Не понимаю, откуда взять int o,

Это смещение (offset) начала из bytes, откуда проводить считывание.  Если на вход ровно 5 байт, то o=0;

7 часов назад, Alterpalm сказал:

что догадаться самостоятельно у меня не получилось бы, наверное, никогда. Перебором, в лоб получить алгоритм дешифровки просто нереально.

Как раз таки реально и в "лоб". Записываем несколько десятков пакетов, смотрим идентичные байты, добиваемся, что бы менялось за раз как можно меньше (отправкой команд из RDWorks), смотрим, как много байт поменялись при общении и вычисляем, что за зависимость. В данном случае зависимость оказалась лишь однобайтная (контрольная сумма невсчёт). Так что получается всего 255 вариантов перевода. Собираем таблицу и дешифровка готова.  Функцию, которую первую прислал, я уже потом где-то нашёл и решил, что в данном случае она уместнее, т.к. можно подстраивать под разные версии RDWorks. Перевод чисел - один из "стандартных" вариантов представления.

До кучи некоторые команды с описанием:

RUIDA_RDWORKS_V8.ini

Смотрите блоки [KR_N]  

title - соответственно что собой представляет запрос

regexp  - маска запроса. Точки обозначают, что на этом месте может быть любое значение (вначале - контрольная сумма, после -  изменяемое значение аргументов).

Вы вообще с какой целью этим занимаетесь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Награды пользователя

Благодарю за инфу, будем посмотреть)

21 минуту назад, PavelK сказал:

Вы вообще с какой целью этим занимаетесь?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • От markovki
      Уважаемые форумчане, всем доброго времени суток. Уверен, что вопрос не сложный, но ответ так и не нашел.
      Ruida. Отправляю из CorelDraw обрезанную картинку в двух битах в РДКАМ, сразу же появляется два цвета - один гравируется (BMP), второй как резка, т.е. второй цвет вырежет мне эту картинку, но мне не нужно её вырезать!!! Картинка с очень мелкими деталями, сделать качественную трассировку с такой детализацией не удается.
      Подскажите, как сделать, чтобы картинка не вырезалась?
      Удаление цвета или отключение вывода цвета на печать не устраивает, т.к. резка остального тоже отключается, да и каждый раз отключать, можно ошибиться.
    • От @lexey
      Может кто подскажет. проблема почти такая же. 
      Причем интересно, так происходит только на одном ПК. С двух других посылается задание хорошо. И не важно резка это или гравировка.
      Суть: отправляем задание, оно уходит, но не полностью. То-есть обрывается в процессе отправки (на видео видно), и станок выполняет только то что прилетело ему. (обрывок задания).
      А бывает станок пишет что не хватает памяти, но редко.
      И напомню, так только на одном пк. Станок по сети подцеплен. Обиднно, это рабочее место оператора обновил новым пк, (мимаки на нем еще висит с растрлинком). И оно теперь не работает, с пк иза приходится бегать резать, или менеджера (не есть гуд).
      Можно конечно и пк поменять, нока по мне, это не выход. Надо ж найти причину. Бред какой то происходит.
      VID_20210615_170228.avi
    • От PavelK
      Программа управления для контроллеров Ruida, в том числе для Ruida 6332G BS.
       
    • От Алексей BUD
      Помогите, пожалуйста! Станок не режет по меткам в RD Works8. Модель из bmp создал, макет резки dxf наложил, метки указал, камерой проверил. При cut test голова едет в дом и возвращается назад. При normal cut выдает ошибку " no data in work area" Всю голову сломал!
×
×
  • Создать...